Adapt tcc-0.9.26's step to use pnut-exe instead of mes

This commit is contained in:
Laurent Huberdeau 2025-11-07 00:20:10 -05:00
parent b9a2858efb
commit 6aa4743497
12 changed files with 120 additions and 50 deletions

View file

@ -28,17 +28,31 @@ cd build
ungz --file ${DISTFILES}/${TCC_TAR}.tar.gz --output ${TCC_TAR}.tar
ungz --file ${DISTFILES}/${MES_PKG}.tar.gz --output ${MES_PKG}.tar
untar --non-strict --file ${TCC_TAR}.tar
simple-patch ${TCC_PKG}/tcctools.c \
../simple-patches/remove-fileopen.before ../simple-patches/remove-fileopen.after
simple-patch ${TCC_PKG}/tcctools.c \
../simple-patches/addback-fileopen.before ../simple-patches/addback-fileopen.after
# Patches to get tcc to compile with pnut, these are reverted after tcc-pnut is built
simple-patch ${TCC_PKG}/tccpp.c \
../simple-patches/array_sizeof.before ../simple-patches/array_sizeof.after
simple-patch ${TCC_PKG}/tccgen.c \
../simple-patches/fix_stack_64_bit_operands_on_32_bit.before ../simple-patches/fix_stack_64_bit_operands_on_32_bit.after
simple-patch ${TCC_PKG}/tccgen.c \
../simple-patches/float_negation.before ../simple-patches/float_negation.after
simple-patch ${TCC_PKG}/libtcc.c \
../simple-patches/sscanf_TCC_VERSION.before ../simple-patches/sscanf_TCC_VERSION.after
simple-patch ${TCC_PKG}/tcc.h \
../simple-patches/undefine_TCC_IS_NATIVE.before ../simple-patches/undefine_TCC_IS_NATIVE.after
untar --non-strict --file ${MES_PKG}.tar
# Prepare Mes header files
# Create config.h
catm ${MES_PKG}/include/mes/config.h
catm ${TCC_PKG}/config.h
cd ${TCC_PKG}
if match ${ARCH} x86; then
MES_ARCH=x86
@ -56,43 +70,63 @@ if match ${ARCH} riscv64; then
HAVE_LONG_LONG=1
fi
mkdir ${MES_PKG}/include/arch
cp ${MES_PKG}/include/linux/${MES_ARCH}/kernel-stat.h ${MES_PKG}/include/arch/kernel-stat.h
cp ${MES_PKG}/include/linux/${MES_ARCH}/signal.h ${MES_PKG}/include/arch/signal.h
cp ${MES_PKG}/include/linux/${MES_ARCH}/syscall.h ${MES_PKG}/include/arch/syscall.h
${MES} --no-auto-compile -e main ${BINDIR}/mescc.scm -- \
-S \
-o tcc.s \
-I ${INCDIR} \
-D BOOTSTRAP=1 \
-D HAVE_LONG_LONG=${HAVE_LONG_LONG} \
-I . \
-D TCC_TARGET_${TCC_TARGET_ARCH}=1 \
-D inline= \
-D CONFIG_TCCDIR=\"${LIBDIR}/tcc\" \
-D CONFIG_SYSROOT=\"/\" \
-D CONFIG_TCC_CRTPREFIX=\"${LIBDIR}\" \
-D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \
-D CONFIG_TCC_SYSINCLUDEPATHS=\"${PREFIX}/include/mes\" \
-D TCC_LIBGCC=\"${LIBDIR}/libc.a\" \
-D CONFIG_TCC_LIBTCC1_MES=0 \
-D CONFIG_TCCBOOT=1 \
-D CONFIG_TCC_STATIC=1 \
-D CONFIG_USE_LIBGCC=1 \
-D TCC_VERSION=\"0.9.26\" \
-D ONE_SOURCE=1 \
tcc.c
${MES} --no-auto-compile -e main ${BINDIR}/mescc.scm -- \
--base-address 0x08048000 \
-o tcc-mes \
-L ${LIBDIR} \
tcc.s \
-l c+tcc
cp tcc-mes ${BINDIR}/
chmod 755 ${BINDIR}/tcc-mes
# Unpack pnut's portable libc, only used to bootstrap tcc-pnut
# test tcc-mes
tcc-mes -version
untar --file ${DISTFILES}/${PNUT_PKG}.tar
# Here we go!
cd ${TCC_PKG}
pnut \
-I ../pnut-laurent-small-fixes-for-TCC/portable_libc/include/ \
-D BOOTSTRAP=1 \
-D HAVE_LONG_LONG=0 \
-D TCC_TARGET_${TCC_TARGET_ARCH}=1 \
-D CONFIG_SYSROOT=\"/\" \
-D CONFIG_TCC_CRTPREFIX=\"${LIBDIR}\" \
-D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \
-D CONFIG_TCC_SYSINCLUDEPATHS=\"${PREFIX}/include/mes\" \
-D TCC_LIBGCC=\"${LIBDIR}/libc.a\" \
-D CONFIG_TCC_LIBTCC1_MES=0 \
-D CONFIG_TCCBOOT=1 \
-D CONFIG_TCC_STATIC=1 \
-D CONFIG_USE_LIBGCC=1 \
-D TCC_VERSION=\"0.9.26\" \
-D ONE_SOURCE=1 \
-D CONFIG_TCCDIR=\"${LIBDIR}/tcc\" \
-D __intptr_t_defined=1 \
tcc.c \
../pnut-laurent-small-fixes-for-TCC/portable_libc/libc.c \
-o tcc-pnut
cp tcc-pnut ${BINDIR}/
chmod 755 ${BINDIR}/tcc-pnut
# test tcc-pnut
tcc-pnut -version
cd ..
# Revert patches
simple-patch ${TCC_PKG}/tccpp.c \
../simple-patches/array_sizeof.after ../simple-patches/array_sizeof.before
simple-patch ${TCC_PKG}/tccgen.c \
../simple-patches/fix_stack_64_bit_operands_on_32_bit.after ../simple-patches/fix_stack_64_bit_operands_on_32_bit.before
simple-patch ${TCC_PKG}/tccgen.c \
../simple-patches/float_negation.after ../simple-patches/float_negation.before
simple-patch ${TCC_PKG}/libtcc.c \
../simple-patches/sscanf_TCC_VERSION.after ../simple-patches/sscanf_TCC_VERSION.before
simple-patch ${TCC_PKG}/tcc.h \
../simple-patches/undefine_TCC_IS_NATIVE.after ../simple-patches/undefine_TCC_IS_NATIVE.before
# Recompile the mes C library
cd ../${MES_PKG}
cd ${MES_PKG}
# Create unified libc file
cd lib
@ -100,41 +134,41 @@ catm ../unified-libc.c ctype/isalnum.c ctype/isalpha.c ctype/isascii.c ctype/isc
cd ..
# crt1.o
tcc-mes -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crt1.o lib/linux/${MES_ARCH}-mes-gcc/crt1.c
tcc-pnut -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crt1.o lib/linux/${MES_ARCH}-mes-gcc/crt1.c
catm ${LIBDIR}/crtn.o
catm ${LIBDIR}/crti.o
if match ${ARCH} x86; then
# crtn.o
tcc-mes -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crtn.o lib/linux/${MES_ARCH}-mes-gcc/crtn.c
tcc-pnut -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crtn.o lib/linux/${MES_ARCH}-mes-gcc/crtn.c
# crti.o
tcc-mes -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crti.o lib/linux/${MES_ARCH}-mes-gcc/crti.c
tcc-pnut -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crti.o lib/linux/${MES_ARCH}-mes-gcc/crti.c
fi
# libc+gcc.a
tcc-mes -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o unified-libc.o unified-libc.c
tcc-mes -ar cr ${LIBDIR}/libc.a unified-libc.o
tcc-pnut -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -I include/arch -o unified-libc.o unified-libc.c
tcc-pnut -ar cr ${LIBDIR}/libc.a unified-libc.o
# libtcc1.a
mkdir ${LIBDIR}/tcc
tcc-mes -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG=1 -D HAVE_FLOAT=1 -I include -I include/linux/${MES_ARCH} -o libtcc1.o lib/libtcc1.c
tcc-pnut -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG=1 -D HAVE_FLOAT=1 -I include -I include/linux/${MES_ARCH} -o libtcc1.o lib/libtcc1.c
if match ${ARCH} riscv64; then
tcc-mes -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG=1 -D HAVE_FLOAT=1 -I include -I include/linux/${MES_ARCH} -o lib-arm64.o ../${TCC_PKG}/lib/lib-arm64.c
tcc-mes -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o lib-arm64.o
tcc-pnut -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG=1 -D HAVE_FLOAT=1 -I include -I include/linux/${MES_ARCH} -o lib-arm64.o ../${TCC_PKG}/lib/lib-arm64.c
tcc-pnut -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o lib-arm64.o
else
tcc-mes -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o
tcc-pnut -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o
fi
# libgetopt.a
tcc-mes -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} lib/posix/getopt.c
tcc-mes -ar cr ${LIBDIR}/libgetopt.a getopt.o
tcc-pnut -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} lib/posix/getopt.c
tcc-pnut -ar cr ${LIBDIR}/libgetopt.a getopt.o
cd ../${TCC_PKG}
# boot0 (ref comments here for all boot*)
# compile
tcc-mes \
tcc-pnut \
-g \
-v \
-static \
@ -307,10 +341,12 @@ tcc -ar cr ${LIBDIR}/libgetopt.a getopt.o
cd ../..
sha256sum /usr/bin/tcc-pnut
# Checksums
if match x${UPDATE_CHECKSUMS} xTrue; then
sha256sum -o ${pkg}.${ARCH}.checksums \
/usr/bin/tcc-mes \
/usr/bin/tcc-pnut \
/usr/bin/tcc-boot0 \
/usr/bin/tcc-boot1 \
/usr/bin/tcc \

View file

@ -0,0 +1,5 @@
#ifdef PNUT_CC
char buf1[1024];
#else
char buf1[sizeof file->filename];
#endif

View file

@ -0,0 +1 @@
char buf1[sizeof file->filename];

View file

@ -0,0 +1,5 @@
#if HAVE_LONG_LONG_STUB || HAVE_LONG_LONG
vtop[0].c.i >>= 32;
#else
vtop[0].c.i = 0;
#endif

View file

@ -0,0 +1,3 @@
#if HAVE_LONG_LONG_STUB || HAVE_LONG_LONG
vtop[0].c.i >>= 32;
#endif

View file

@ -0,0 +1,8 @@
#if HAVE_FLOAT
if (t == VT_FLOAT)
vtop->c.f = (float) 0x80000000;
else if (t == VT_DOUBLE)
vtop->c.d = (double) 0x8000000000000000ULL;
else
vtop->c.ld = (long double) 0x8000000000000000ULL;
#endif

View file

@ -0,0 +1,8 @@
#if HAVE_FLOAT
if (t == VT_FLOAT)
vtop->c.f = -1.0 * 0.0;
else if (t == VT_DOUBLE)
vtop->c.d = -1.0 * 0.0;
else
vtop->c.ld = -1.0 * 0.0;
#endif

View file

@ -0,0 +1 @@
a = 0; b = 9; c = 26;

View file

@ -0,0 +1 @@
sscanf(TCC_VERSION, "%d.%d.%d", &a, &b, &c);

View file

@ -0,0 +1 @@
#if defined _WIN32 == defined TCC_TARGET_PE && 0

View file

@ -0,0 +1 @@
#if defined _WIN32 == defined TCC_TARGET_PE

View file

@ -1,6 +1,6 @@
b879b9101c837c77d0d51e6f5040bdc5f20964fe1f9f3506f77d49445967cef7 /usr/bin/tcc-mes
25698c9689995cad9dcf3dd834526e7ef97fba27cef6367c0e618b9ad6c0657d /usr/bin/tcc-boot0
7121fee2d9b1b05a6dec06d193b8ddc61504c27a3eef251fc8a271b5001a7702 /usr/bin/tcc-boot1
9486f581af1e879bbd22292d9c14c3be7c830535b9bb9a47eeac7eff9214fee1 /usr/bin/tcc-pnut
4c8ee015fe7d9faea4a7dd325f92daebcb4908fe7cf46d2bead736ecf1b77b38 /usr/bin/tcc-boot0
35ae419041c0e5df707e23e2d1b6963227bbe2430cc616102ef5c60234d480bb /usr/bin/tcc-boot1
ae0293afce365667f6beacca537354e01925a5ae3f7c5428209bfc9894b864a1 /usr/bin/tcc
bd63add2eb451854baf1a39cfc4780e86ae46128cd3d5b44c54b8a18aedb3c6d /usr/lib/mes/libc.a
12c07ae103e7e3b390150a79e5c600d88de14e9bb73a066f6342582729ef5a3f /usr/lib/mes/libgetopt.a