This commit is contained in:
Laurent Huberdeau 2026-02-13 18:29:43 -05:00 committed by GitHub
commit 04bf6c155a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
23 changed files with 453 additions and 291 deletions

View file

@ -1 +1 @@
87bd49d43cbd73a12ba50d26d6aa370bdc4b86bbbd7761b4138e3d39d8b307fd configurator
600dd7dbf560534fb26219cd1a9062b5f23f7033603e469ce64f195fe556af63 configurator

View file

@ -1 +1 @@
fbec25d987c89e66fd7dd89d780be0629bab84f78ebf1878fd2528fca9e46c45 script-generator
5218232def7b612c3ad067157d095f2f69afa551457b9c29cc545daa92e72cd1 script-generator

View file

@ -61,6 +61,7 @@ M2LIBC_PATH=/M2libc
# mes envars
NYACC_PKG=nyacc-1.00.2
MES_PKG=mes-0.27.1
PNUT_PKG=pnut-1.0
MES_PREFIX=${SRCDIR}/${MES_PKG}/build/${MES_PKG}
GUILE_LOAD_PATH=${MES_PREFIX}/mes/module:${MES_PREFIX}/module:${SRCDIR}/${MES_PKG}/build/${NYACC_PKG}/module

@ -1 +1 @@
Subproject commit 45d90f5955b6907dc6cdea9ebafce558359edcd3
Subproject commit ff56e43b90cce195650a1f26a5227e31203eb770

View file

@ -1 +1 @@
3b43fcfe665d48c7041292bc78b3de0c5e7fe17fab425837bc5c596856d20bf8 /usr/bin/checksum-transcriber
c101f553150558b1bb6986da34f3850245c867dc9be32958fa5dd2731ff961c5 /usr/bin/checksum-transcriber

View file

@ -34,6 +34,7 @@
build: checksum-transcriber-1.0
build: simple-patch-1.0
build: mes-0.27.1
build: pnut-exe-1.0
build: tcc-0.9.26
build: tcc-0.9.27
define: BUILD_FIWIX = ( KERNEL_BOOTSTRAP == True || BUILD_KERNELS == True )

View file

@ -63,243 +63,243 @@ cp mes/module/srfi/srfi-9-struct.mes mes/module/srfi/srfi-9.mes
cp mes/module/srfi/srfi-9/gnu-struct.mes mes/module/srfi/srfi-9/gnu.mes
# Build mes-m2
kaem --verbose --strict --file kaem.${MES_ARCH}
cp bin/mes-m2 ${BINDIR}/mes-m2
chmod 755 ${BINDIR}/mes-m2
# kaem --verbose --strict --file kaem.${MES_ARCH}
# cp bin/mes-m2 ${BINDIR}/mes-m2
# chmod 755 ${BINDIR}/mes-m2
# Rebuild pregenerated files in nyacc
cd ../${NYACC_PKG}
rm module/nyacc/lang/c99/mach.d/c99-act.scm module/nyacc/lang/c99/mach.d/c99-tab.scm \
module/nyacc/lang/c99/mach.d/c99cx-act.scm module/nyacc/lang/c99/mach.d/c99cx-tab.scm \
module/nyacc/lang/c99/mach.d/c99x-act.scm module/nyacc/lang/c99/mach.d/c99x-tab.scm \
module/nyacc/lang/c99/mach.d/cpp-act.scm module/nyacc/lang/c99/mach.d/cpp-tab.scm
${MES} -L module gen-cpp-files.scm
# More RAM for this one!
MES_ARENA=32000000
${MES} -L module gen-c99-files.scm
MES_ARENA=20000000
${MES} -L module gen-c99cx-files.scm
cd ../${MES_PKG}
# cd ../${NYACC_PKG}
# rm module/nyacc/lang/c99/mach.d/c99-act.scm module/nyacc/lang/c99/mach.d/c99-tab.scm \
# module/nyacc/lang/c99/mach.d/c99cx-act.scm module/nyacc/lang/c99/mach.d/c99cx-tab.scm \
# module/nyacc/lang/c99/mach.d/c99x-act.scm module/nyacc/lang/c99/mach.d/c99x-tab.scm \
# module/nyacc/lang/c99/mach.d/cpp-act.scm module/nyacc/lang/c99/mach.d/cpp-tab.scm
# ${MES} -L module gen-cpp-files.scm
# # More RAM for this one!
# MES_ARENA=32000000
# ${MES} -L module gen-c99-files.scm
# MES_ARENA=20000000
# ${MES} -L module gen-c99cx-files.scm
# cd ../${MES_PKG}
# Create mescc.scm
mescc_in=scripts/mescc.scm.in
replace --file ${mescc_in} --output ${mescc_in} --match-on @prefix@ --replace-with ${PREFIX}
replace --file ${mescc_in} --output ${mescc_in} --match-on @VERSION@ --replace-with ${MES_VERSION}
replace --file ${mescc_in} --output ${mescc_in} --match-on @mes_cpu@ --replace-with ${MES_ARCH}
replace --file ${mescc_in} --output ${mescc_in} --match-on @mes_kernel@ --replace-with linux
# # Create mescc.scm
# mescc_in=scripts/mescc.scm.in
# replace --file ${mescc_in} --output ${mescc_in} --match-on @prefix@ --replace-with ${PREFIX}
# replace --file ${mescc_in} --output ${mescc_in} --match-on @VERSION@ --replace-with ${MES_VERSION}
# replace --file ${mescc_in} --output ${mescc_in} --match-on @mes_cpu@ --replace-with ${MES_ARCH}
# replace --file ${mescc_in} --output ${mescc_in} --match-on @mes_kernel@ --replace-with linux
mescc_scm=${BINDIR}/mescc.scm
cp ${mescc_in} ${mescc_scm}
chmod 755 ${mescc_scm}
# mescc_scm=${BINDIR}/mescc.scm
# cp ${mescc_in} ${mescc_scm}
# chmod 755 ${mescc_scm}
# Recompile Mes and Mes C library using mes-m2 bootstrapped Mes
alias mescc="${MES} -e main ${BINDIR}/mescc.scm -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -c"
# alias mescc="${MES} -e main ${BINDIR}/mescc.scm -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -c"
# Start with crt1.o
mescc lib/linux/${MES_ARCH}-mes-mescc/crt1.c -o lib/${MES_ARCH}-mes/crt1.o
# mescc lib/linux/${MES_ARCH}-mes-mescc/crt1.c -o lib/${MES_ARCH}-mes/crt1.o
# Now for libc-mini.a
catm libc-mini.c \
lib/mes/__init_io.c \
lib/mes/eputs.c \
lib/mes/oputs.c \
lib/mes/globals.c \
lib/stdlib/exit.c \
lib/linux/${MES_ARCH}-mes-mescc/_exit.c \
lib/linux/${MES_ARCH}-mes-mescc/_write.c \
lib/stdlib/puts.c \
lib/string/strlen.c
mescc libc-mini.c
cp libc-mini.o ${LIBDIR}/${MES_ARCH}-mes/libc-mini.a
cp libc-mini.s ${LIBDIR}/${MES_ARCH}-mes/libc-mini.s
# # Now for libc-mini.a
# catm libc-mini.c \
# lib/mes/__init_io.c \
# lib/mes/eputs.c \
# lib/mes/oputs.c \
# lib/mes/globals.c \
# lib/stdlib/exit.c \
# lib/linux/${MES_ARCH}-mes-mescc/_exit.c \
# lib/linux/${MES_ARCH}-mes-mescc/_write.c \
# lib/stdlib/puts.c \
# lib/string/strlen.c
# mescc libc-mini.c
# cp libc-mini.o ${LIBDIR}/${MES_ARCH}-mes/libc-mini.a
# cp libc-mini.s ${LIBDIR}/${MES_ARCH}-mes/libc-mini.s
# libmescc.a
catm libmescc.c \
lib/mes/globals.c \
lib/linux/${MES_ARCH}-mes-mescc/syscall-internal.c
mescc libmescc.c
cp libmescc.o ${LIBDIR}/${MES_ARCH}-mes/libmescc.a
cp libmescc.s ${LIBDIR}/${MES_ARCH}-mes/libmescc.s
# # libmescc.a
# catm libmescc.c \
# lib/mes/globals.c \
# lib/linux/${MES_ARCH}-mes-mescc/syscall-internal.c
# mescc libmescc.c
# cp libmescc.o ${LIBDIR}/${MES_ARCH}-mes/libmescc.a
# cp libmescc.s ${LIBDIR}/${MES_ARCH}-mes/libmescc.s
# libc.a
catm libc.c \
lib/ctype/isnumber.c \
lib/mes/abtol.c \
lib/mes/cast.c \
lib/mes/eputc.c \
lib/mes/fdgetc.c \
lib/mes/fdputc.c \
lib/mes/fdputs.c \
lib/mes/fdungetc.c \
lib/mes/itoa.c \
lib/mes/ltoa.c \
lib/mes/ltoab.c \
lib/mes/mes_open.c \
lib/mes/ntoab.c \
lib/mes/oputc.c \
lib/mes/ultoa.c \
lib/mes/utoa.c \
lib/ctype/isdigit.c \
lib/ctype/isspace.c \
lib/ctype/isxdigit.c \
lib/mes/assert_msg.c \
lib/posix/write.c \
lib/stdlib/atoi.c \
lib/linux/lseek.c \
lib/mes/__assert_fail.c \
lib/mes/__buffered_read.c \
lib/mes/__mes_debug.c \
lib/posix/execv.c \
lib/posix/getcwd.c \
lib/posix/getenv.c \
lib/posix/isatty.c \
lib/posix/open.c \
lib/posix/buffered-read.c \
lib/posix/setenv.c \
lib/posix/wait.c \
lib/dirent/closedir.c \
lib/dirent/opendir.c \
lib/stdio/fgetc.c \
lib/stdio/fputc.c \
lib/stdio/fputs.c \
lib/stdio/getc.c \
lib/stdio/getchar.c \
lib/stdio/putc.c \
lib/stdio/putchar.c \
lib/stdio/ungetc.c \
lib/stdlib/calloc.c \
lib/stdlib/free.c \
lib/stdlib/realloc.c \
lib/string/memchr.c \
lib/string/memcmp.c \
lib/string/memcpy.c \
lib/string/memmove.c \
lib/string/memset.c \
lib/string/strcmp.c \
lib/string/strcpy.c \
lib/string/strncmp.c \
lib/posix/raise.c \
lib/linux/access.c \
lib/linux/brk.c \
lib/linux/chdir.c \
lib/linux/chmod.c \
lib/linux/clock_gettime.c \
lib/linux/dup.c \
lib/linux/dup2.c \
lib/linux/execve.c \
lib/linux/fork.c \
lib/linux/fsync.c \
lib/linux/_getcwd.c \
lib/linux/gettimeofday.c \
lib/linux/ioctl3.c \
lib/linux/malloc.c \
lib/linux/_open3.c \
lib/linux/_read.c \
lib/linux/readdir.c \
lib/linux/rename.c \
lib/linux/time.c \
lib/linux/umask.c \
lib/linux/uname.c \
lib/linux/unlink.c \
lib/linux/utimensat.c \
lib/linux/wait4.c \
lib/linux/waitpid.c \
lib/linux/${MES_ARCH}-mes-mescc/syscall.c \
lib/linux/getpid.c \
lib/linux/kill.c \
lib/linux/pipe.c \
lib/linux/stat.c \
lib/linux/lstat.c \
lib/linux/mkdir.c \
lib/linux/rmdir.c \
lib/linux/link.c \
lib/linux/symlink.c \
lib/linux/close.c \
lib/linux/nanosleep.c \
lib/linux/fcntl.c \
lib/linux/fstat.c \
lib/linux/getdents.c
mescc libc.c
catm ${LIBDIR}/${MES_ARCH}-mes/libc.a ${LIBDIR}/${MES_ARCH}-mes/libc-mini.a libc.o
catm ${LIBDIR}/${MES_ARCH}-mes/libc.s ${LIBDIR}/${MES_ARCH}-mes/libc-mini.s libc.s
# catm libc.c \
# lib/ctype/isnumber.c \
# lib/mes/abtol.c \
# lib/mes/cast.c \
# lib/mes/eputc.c \
# lib/mes/fdgetc.c \
# lib/mes/fdputc.c \
# lib/mes/fdputs.c \
# lib/mes/fdungetc.c \
# lib/mes/itoa.c \
# lib/mes/ltoa.c \
# lib/mes/ltoab.c \
# lib/mes/mes_open.c \
# lib/mes/ntoab.c \
# lib/mes/oputc.c \
# lib/mes/ultoa.c \
# lib/mes/utoa.c \
# lib/ctype/isdigit.c \
# lib/ctype/isspace.c \
# lib/ctype/isxdigit.c \
# lib/mes/assert_msg.c \
# lib/posix/write.c \
# lib/stdlib/atoi.c \
# lib/linux/lseek.c \
# lib/mes/__assert_fail.c \
# lib/mes/__buffered_read.c \
# lib/mes/__mes_debug.c \
# lib/posix/execv.c \
# lib/posix/getcwd.c \
# lib/posix/getenv.c \
# lib/posix/isatty.c \
# lib/posix/open.c \
# lib/posix/buffered-read.c \
# lib/posix/setenv.c \
# lib/posix/wait.c \
# lib/dirent/closedir.c \
# lib/dirent/opendir.c \
# lib/stdio/fgetc.c \
# lib/stdio/fputc.c \
# lib/stdio/fputs.c \
# lib/stdio/getc.c \
# lib/stdio/getchar.c \
# lib/stdio/putc.c \
# lib/stdio/putchar.c \
# lib/stdio/ungetc.c \
# lib/stdlib/calloc.c \
# lib/stdlib/free.c \
# lib/stdlib/realloc.c \
# lib/string/memchr.c \
# lib/string/memcmp.c \
# lib/string/memcpy.c \
# lib/string/memmove.c \
# lib/string/memset.c \
# lib/string/strcmp.c \
# lib/string/strcpy.c \
# lib/string/strncmp.c \
# lib/posix/raise.c \
# lib/linux/access.c \
# lib/linux/brk.c \
# lib/linux/chdir.c \
# lib/linux/chmod.c \
# lib/linux/clock_gettime.c \
# lib/linux/dup.c \
# lib/linux/dup2.c \
# lib/linux/execve.c \
# lib/linux/fork.c \
# lib/linux/fsync.c \
# lib/linux/_getcwd.c \
# lib/linux/gettimeofday.c \
# lib/linux/ioctl3.c \
# lib/linux/malloc.c \
# lib/linux/_open3.c \
# lib/linux/_read.c \
# lib/linux/readdir.c \
# lib/linux/rename.c \
# lib/linux/time.c \
# lib/linux/umask.c \
# lib/linux/uname.c \
# lib/linux/unlink.c \
# lib/linux/utimensat.c \
# lib/linux/wait4.c \
# lib/linux/waitpid.c \
# lib/linux/${MES_ARCH}-mes-mescc/syscall.c \
# lib/linux/getpid.c \
# lib/linux/kill.c \
# lib/linux/pipe.c \
# lib/linux/stat.c \
# lib/linux/lstat.c \
# lib/linux/mkdir.c \
# lib/linux/rmdir.c \
# lib/linux/link.c \
# lib/linux/symlink.c \
# lib/linux/close.c \
# lib/linux/nanosleep.c \
# lib/linux/fcntl.c \
# lib/linux/fstat.c \
# lib/linux/getdents.c
# mescc libc.c
# catm ${LIBDIR}/${MES_ARCH}-mes/libc.a ${LIBDIR}/${MES_ARCH}-mes/libc-mini.a libc.o
# catm ${LIBDIR}/${MES_ARCH}-mes/libc.s ${LIBDIR}/${MES_ARCH}-mes/libc-mini.s libc.s
# libc+tcc.a
catm libc+tcc.c \
lib/ctype/islower.c \
lib/ctype/isupper.c \
lib/ctype/tolower.c \
lib/ctype/toupper.c \
lib/mes/abtod.c \
lib/mes/dtoab.c \
lib/mes/search-path.c \
lib/posix/execvp.c \
lib/stdio/fclose.c \
lib/stdio/fdopen.c \
lib/stdio/ferror.c \
lib/stdio/fflush.c \
lib/stdio/fopen.c \
lib/stdio/fprintf.c \
lib/stdio/fread.c \
lib/stdio/fseek.c \
lib/stdio/ftell.c \
lib/stdio/fwrite.c \
lib/stdio/printf.c \
lib/stdio/remove.c \
lib/stdio/snprintf.c \
lib/stdio/sprintf.c \
lib/stdio/sscanf.c \
lib/stdio/vfprintf.c \
lib/stdio/vprintf.c \
lib/stdio/vsnprintf.c \
lib/stdio/vsprintf.c \
lib/stdio/vsscanf.c \
lib/stdlib/abort.c \
lib/stdlib/qsort.c \
lib/stdlib/strtod.c \
lib/stdlib/strtof.c \
lib/stdlib/strtol.c \
lib/stdlib/strtold.c \
lib/stdlib/strtoll.c \
lib/stdlib/strtoul.c \
lib/stdlib/strtoull.c \
lib/string/memmem.c \
lib/string/strcat.c \
lib/string/strchr.c \
lib/string/strlwr.c \
lib/string/strncpy.c \
lib/string/strrchr.c \
lib/string/strstr.c \
lib/string/strupr.c \
lib/stub/sigaction.c \
lib/stub/ldexp.c \
lib/stub/mprotect.c \
lib/stub/localtime.c \
lib/stub/sigemptyset.c \
lib/${MES_ARCH}-mes-mescc/setjmp.c \
lib/linux/close.c \
lib/linux/rmdir.c \
lib/linux/stat.c
mescc libc+tcc.c
catm ${LIBDIR}/${MES_ARCH}-mes/libc+tcc.a ${LIBDIR}/${MES_ARCH}-mes/libc.a libc+tcc.o
catm ${LIBDIR}/${MES_ARCH}-mes/libc+tcc.s ${LIBDIR}/${MES_ARCH}-mes/libc.s libc+tcc.s
# catm libc+tcc.c \
# lib/ctype/islower.c \
# lib/ctype/isupper.c \
# lib/ctype/tolower.c \
# lib/ctype/toupper.c \
# lib/mes/abtod.c \
# lib/mes/dtoab.c \
# lib/mes/search-path.c \
# lib/posix/execvp.c \
# lib/stdio/fclose.c \
# lib/stdio/fdopen.c \
# lib/stdio/ferror.c \
# lib/stdio/fflush.c \
# lib/stdio/fopen.c \
# lib/stdio/fprintf.c \
# lib/stdio/fread.c \
# lib/stdio/fseek.c \
# lib/stdio/ftell.c \
# lib/stdio/fwrite.c \
# lib/stdio/printf.c \
# lib/stdio/remove.c \
# lib/stdio/snprintf.c \
# lib/stdio/sprintf.c \
# lib/stdio/sscanf.c \
# lib/stdio/vfprintf.c \
# lib/stdio/vprintf.c \
# lib/stdio/vsnprintf.c \
# lib/stdio/vsprintf.c \
# lib/stdio/vsscanf.c \
# lib/stdlib/abort.c \
# lib/stdlib/qsort.c \
# lib/stdlib/strtod.c \
# lib/stdlib/strtof.c \
# lib/stdlib/strtol.c \
# lib/stdlib/strtold.c \
# lib/stdlib/strtoll.c \
# lib/stdlib/strtoul.c \
# lib/stdlib/strtoull.c \
# lib/string/memmem.c \
# lib/string/strcat.c \
# lib/string/strchr.c \
# lib/string/strlwr.c \
# lib/string/strncpy.c \
# lib/string/strrchr.c \
# lib/string/strstr.c \
# lib/string/strupr.c \
# lib/stub/sigaction.c \
# lib/stub/ldexp.c \
# lib/stub/mprotect.c \
# lib/stub/localtime.c \
# lib/stub/sigemptyset.c \
# lib/${MES_ARCH}-mes-mescc/setjmp.c \
# lib/linux/close.c \
# lib/linux/rmdir.c \
# lib/linux/stat.c
# mescc libc+tcc.c
# catm ${LIBDIR}/${MES_ARCH}-mes/libc+tcc.a ${LIBDIR}/${MES_ARCH}-mes/libc.a libc+tcc.o
# catm ${LIBDIR}/${MES_ARCH}-mes/libc+tcc.s ${LIBDIR}/${MES_ARCH}-mes/libc.s libc+tcc.s
# Make directories
mkdir ${PREFIX}/lib/linux ${INCDIR}/mes ${INCDIR}/sys ${INCDIR}/linux ${INCDIR}/arch
mkdir ${PREFIX}/lib/${MES_ARCH}-mes ${PREFIX}/lib/linux/${MES_ARCH}-mes ${INCDIR}/linux/${MES_ARCH}
# Install libraries
cp ${LIBDIR}/${MES_ARCH}-mes/libc.a ${PREFIX}/lib/${MES_ARCH}-mes/
cp ${LIBDIR}/${MES_ARCH}-mes/libc+tcc.a ${PREFIX}/lib/${MES_ARCH}-mes/
cp ${LIBDIR}/${MES_ARCH}-mes/libmescc.a ${PREFIX}/lib/${MES_ARCH}-mes/
cp ${LIBDIR}/${MES_ARCH}-mes/libc.s ${PREFIX}/lib/${MES_ARCH}-mes/
cp ${LIBDIR}/${MES_ARCH}-mes/libc+tcc.s ${PREFIX}/lib/${MES_ARCH}-mes/
cp ${LIBDIR}/${MES_ARCH}-mes/libmescc.s ${PREFIX}/lib/${MES_ARCH}-mes/
cp ${LIBDIR}/${MES_ARCH}-mes/${MES_ARCH}.M1 ${PREFIX}/lib/${MES_ARCH}-mes/
cp ${LIBDIR}/${MES_ARCH}-mes/crt1.o ${PREFIX}/lib/${MES_ARCH}-mes/
cp ${LIBDIR}/${MES_ARCH}-mes/crt1.s ${PREFIX}/lib/${MES_ARCH}-mes/
cp ${LIBDIR}/linux/${MES_ARCH}-mes/elf${ARCH_BITS}-footer-single-main.hex2 ${PREFIX}/lib/linux/${MES_ARCH}-mes/
cp ${LIBDIR}/linux/${MES_ARCH}-mes/elf${ARCH_BITS}-header.hex2 ${PREFIX}/lib/linux/${MES_ARCH}-mes/
# cp ${LIBDIR}/${MES_ARCH}-mes/libc.a ${PREFIX}/lib/${MES_ARCH}-mes/
# cp ${LIBDIR}/${MES_ARCH}-mes/libc+tcc.a ${PREFIX}/lib/${MES_ARCH}-mes/
# cp ${LIBDIR}/${MES_ARCH}-mes/libmescc.a ${PREFIX}/lib/${MES_ARCH}-mes/
# cp ${LIBDIR}/${MES_ARCH}-mes/libc.s ${PREFIX}/lib/${MES_ARCH}-mes/
# cp ${LIBDIR}/${MES_ARCH}-mes/libc+tcc.s ${PREFIX}/lib/${MES_ARCH}-mes/
# cp ${LIBDIR}/${MES_ARCH}-mes/libmescc.s ${PREFIX}/lib/${MES_ARCH}-mes/
# cp ${LIBDIR}/${MES_ARCH}-mes/${MES_ARCH}.M1 ${PREFIX}/lib/${MES_ARCH}-mes/
# cp ${LIBDIR}/${MES_ARCH}-mes/crt1.o ${PREFIX}/lib/${MES_ARCH}-mes/
# cp ${LIBDIR}/${MES_ARCH}-mes/crt1.s ${PREFIX}/lib/${MES_ARCH}-mes/
# cp ${LIBDIR}/linux/${MES_ARCH}-mes/elf${ARCH_BITS}-footer-single-main.hex2 ${PREFIX}/lib/linux/${MES_ARCH}-mes/
# cp ${LIBDIR}/linux/${MES_ARCH}-mes/elf${ARCH_BITS}-header.hex2 ${PREFIX}/lib/linux/${MES_ARCH}-mes/
# Install header files
cp include/alloca.h ${INCDIR}/alloca.h
@ -375,24 +375,24 @@ cp include/sys/wait.h ${INCDIR}/sys/wait.h
cd ../..
# Checksums
if match x${UPDATE_CHECKSUMS} xTrue; then
sha256sum -o ${pkg}.${ARCH}.checksums \
/usr/bin/mes-m2 \
/usr/bin/mescc.scm \
/usr/lib/${MES_ARCH}-mes/crt1.s \
/usr/lib/${MES_ARCH}-mes/crt1.o \
/usr/lib/${MES_ARCH}-mes/${MES_ARCH}.M1 \
/usr/lib/${MES_ARCH}-mes/libmescc.s \
/usr/lib/${MES_ARCH}-mes/libc+tcc.s \
/usr/lib/${MES_ARCH}-mes/libc.s \
/usr/lib/${MES_ARCH}-mes/libmescc.a \
/usr/lib/${MES_ARCH}-mes/libc+tcc.a \
/usr/lib/${MES_ARCH}-mes/libc.a \
/usr/lib/linux/${MES_ARCH}-mes/elf${ARCH_BITS}-header.hex2 \
/usr/lib/linux/${MES_ARCH}-mes/elf${ARCH_BITS}-footer-single-main.hex2
# # Checksums
# if match x${UPDATE_CHECKSUMS} xTrue; then
# sha256sum -o ${pkg}.${ARCH}.checksums \
# /usr/bin/mes-m2 \
# /usr/bin/mescc.scm \
# /usr/lib/${MES_ARCH}-mes/crt1.s \
# /usr/lib/${MES_ARCH}-mes/crt1.o \
# /usr/lib/${MES_ARCH}-mes/${MES_ARCH}.M1 \
# /usr/lib/${MES_ARCH}-mes/libmescc.s \
# /usr/lib/${MES_ARCH}-mes/libc+tcc.s \
# /usr/lib/${MES_ARCH}-mes/libc.s \
# /usr/lib/${MES_ARCH}-mes/libmescc.a \
# /usr/lib/${MES_ARCH}-mes/libc+tcc.a \
# /usr/lib/${MES_ARCH}-mes/libc.a \
# /usr/lib/linux/${MES_ARCH}-mes/elf${ARCH_BITS}-header.hex2 \
# /usr/lib/linux/${MES_ARCH}-mes/elf${ARCH_BITS}-footer-single-main.hex2
cp ${pkg}.${ARCH}.checksums ${SRCDIR}
else
sha256sum -c ${pkg}.${ARCH}.checksums
fi
# cp ${pkg}.${ARCH}.checksums ${SRCDIR}
# else
# sha256sum -c ${pkg}.${ARCH}.checksums
# fi

74
steps/pnut-exe-1.0/pass1.kaem Executable file
View file

@ -0,0 +1,74 @@
#!/bin/sh
# SPDX-FileCopyrightText: 2025 Laurent Huberdeau
#
# SPDX-License-Identifier: GPL-3.0-or-later
set -ex
# Variables
M2LIB="../../../M2-Planet/M2libc/"
PNUT_BRANCH="laurent-small-fixes-for-TCC"
PNUT_DIR="pnut-${PNUT_BRANCH}"
# Check tarball checksums
checksum-transcriber sources
sha256sum -c sources.SHA256SUM
# Unpack
mkdir build
cd build
# ungz --file ${DISTFILES}/${PNUT_PKG}.tar.gz --output ${PNUT_PKG}.tar
untar --file ${DISTFILES}/${PNUT_PKG}.tar
M2-Planet \
--architecture x86 \
--debug \
--expand-includes \
-I ${M2LIB} \
--file ${PNUT_DIR}/pnut.c \
-D target_i386_linux=1 \
-D NO_TERNARY_SUPPORT=1 \
-D ONE_PASS_GENERATOR=1 \
-D SMALL_HEAP=1 \
-o pnut-exe.M1
# Generate basic DWARF debug info (optional)
blood-elf \
--file pnut-exe.M1 \
--little-endian \
--entry _start \
--output pnut-exe-footer.M1
# Compile to hex2 (for debug: -f pnut-footer.M1)
M1 \
--file ${M2LIB}/x86/x86_defs.M1 \
--file ${M2LIB}/x86/libc-full.M1 \
--file pnut-exe.M1 \
--file pnut-exe-footer.M1 \
--architecture x86 \
--little-endian \
--output pnut-exe.hex2
# Assemble
mkdir -p bin
hex2 \
--architecture x86 \
--little-endian \
--file ${M2LIB}/x86/ELF-x86-debug.hex2 \
--file pnut-exe.hex2 \
--base-address 0x8048000 \
--output bin/pnut-exe
# Recompile pnut with itself, this time
./bin/pnut-exe \
-D target_i386_linux=1 \
-D ONE_PASS_GENERATOR=1 \
-D BOOTSTRAP_TCC=1 \
${PNUT_DIR}/pnut.c \
-o bin/pnut-exe-for-tcc
# Install pnut-exe
cp bin/pnut-exe-for-tcc ${BINDIR}/pnut
chmod 755 ${BINDIR}/pnut

View file

@ -0,0 +1,13 @@
62895fcf68b21961e018c797b3144fc86f9dbd5a535776e9e68a01b3fd33de08 /usr/bin/mes-m2
761fe4fbbee5bfd45506ea8dbd0aeecfe8855159bd794e07fca1988109510170 /usr/bin/mescc.scm
234c264965116a24583dd569050adc766d7cc2da83b1db38085210f26031b70c /usr/lib/x86-mes/crt1.s
494f184a87175abc485a898c250c3831b2b5dcf5aead46591e00b39d1c5529fc /usr/lib/x86-mes/crt1.o
8afe05c3e1e8848b6f3e8de751524de5f69818eb8524659827918e3fddde3e1e /usr/lib/x86-mes/x86.M1
06c6e43ab7f09e7779df786c57ba5b8775468ae8a47a0426278e9adc52d675c8 /usr/lib/x86-mes/libmescc.s
ef79bc2c59768c172ff4806c6eff9c5e1373d5660c51b33ee4a513f9dda726bd /usr/lib/x86-mes/libc+tcc.s
69050424c9bd83cea8d9b878d5a7cbca01fd4a43b3722a34145843d80f4c8e40 /usr/lib/x86-mes/libc.s
bfb362848fc83a8a58421636a51b1514d1915b58a5a2354c703dfec64c899cad /usr/lib/x86-mes/libmescc.a
b00e8579329bf011bfccebaeb96c1fedb160a38cad63fd628d6b9110b6fb268a /usr/lib/x86-mes/libc+tcc.a
b31c6a0fe5feb53d2d8ba1989c936fd94f43967b8e655ae1c36392723dc8ae3d /usr/lib/x86-mes/libc.a
82cac4353375a52efecc6fda1f8b37373988fe41ed197b63d8e906321b105d77 /usr/lib/linux/x86-mes/elf32-header.hex2
f9873d9aab12e70f24d97f8319e17a1e698ca60779ae9a6ab3ede648cd60fc61 /usr/lib/linux/x86-mes/elf32-footer-single-main.hex2

View file

@ -0,0 +1,3 @@
f https://github.com/udem-dlteam/pnut/archive/refs/heads/laurent/small-fixes-for-TCC.tar.gz 6e662dbf450c8ec2b3be0bfd5db6e198c566f430e63c29edd7225dbdf09de17b pnut-1.0.tar.gz
f https://github.com/udem-dlteam/pnut/archive/refs/heads/laurent/small-fixes-for-TCC.tar.gz 66df0ebd8e2507cbab63c253b1911c5cbb9ba90635f88e9017a4adc83c90ecb0 pnut-1.0.tar
f https://mirrors.kernel.org/gnu/mes/mes-0.27.1.tar.gz 183a40ea47ea49f8a1e3bd1b9d12e676374d64d63bc79e7bc1ae7d673dfdf25d

View file

@ -1 +1 @@
887c9270655ceb8a07b7b244d893ba9d0377d66bacd85b4cf9ceb28e5884000f /usr/bin/simple-patch
15571d42c67da92092fda7b0aaaa99c40dd58b7a43393b659ee67762f5e71900 /usr/bin/simple-patch

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