Skip to content

C Program Language Support

SCONE supports native compilation combined with dynamic linking as well as cross-compilation with static as well as dynamic linking.

This page focuses on the SCONE cross compiler. This cross compiler is based on gcc and hence, the command line options are the same as gcc.

Image

Ensure that you have the newest SCONE cross compiler image:

docker pull sconecuratedimages/crosscompilers
docker run --device=/dev/isgx -it sconecuratedimages/crosscompilers

Please drop argument --device=/dev/isgx in case you do not have an SGX driver installed.

Help

If you need some help, just execute in the container:

$ scone gcc --help
Usage: x86_64-linux-musl-gcc [options] file...
Options:
...

Example

Let's try to compile a simple program:

cat > fib.c << EOF
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
   int n=0, first = 0, second = 1, next = 0, c;

   if (argc > 1)
        n=atoi(argv[1]);
   printf("fib(%d)= 1",n);
   for ( c = 1 ; c < n ; c++ ) {
        next = first + second;
        first = second;
        second = next;
        printf(", %d",next);
   }
   printf("\n");
}
EOF

We compile the program with scone gcc or scone-gcc or just gcc (all equivalent):

scone gcc fib.c -o fib

To compute fib(23), execute:

SCONE_VERSION=1 ./fib 23

The last line of the output should look as follows:

fib(23)= 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657

Debugging

You can use scone-gdb to debug your applications when running inside of an enclave. For some more details on how to use the debugger, please read how to debug GO programs.

Screencast

© scontain.com, July 2019. Questions or Suggestions?