1.5 KiB
bootstrap stage 05
This stage consists of a C compiler capable of compiling TCC (after some modifications to TCC's source code). Run
make
to build our C compiler and TCC. This will take some time (approx. 25 seconds on my computer).
A test program, test.out
will be compiled using tcc
. If you run
it, you should get the output
Hello, world!
So now we just compile TCC with itself, and we're done, right? Well, not quite...
the nightmare begins
The issue here is that to compile TCC/GCC with TCC, we need libc, the C standard library functions.
Our C compiler just includes these functions in the standard header files, but normally
the code for them is located in a separate library file (called something like
/usr/lib/x86_64-linux-gnu/libc-2.31.so
).
This library file is itself compiled from C source files (typically glibc). So, can't we just compile glibc with TCC, then compile TCC with itself? Well, no. Compiling glibc with TCC is basically impossible; you need to compile it with GCC.
Other libc implementations aren't too happy about TCC either -- I tried to compile musl for several hours, and had to give up in the end.
It seems that the one option left is to make our own libc, and try to use it along with TCC to compile GCC. From there, we should be able to compile glibc with GCC. Then, we can compile GCC with GCC and glibc. If we do all this, we should get the same libc.so and gcc files as if we had started with any GCC and glibc builds. It's all very confusing.