logo

live-bootstrap

Mirror of <https://github.com/fosslinux/live-bootstrap>

pass1.kaem (14332B)


  1. #!/bin/sh
  2. # SPDX-FileCopyrightText: 2021-22 fosslinux <fosslinux@aussies.space>
  3. #
  4. # SPDX-License-Identifier: GPL-3.0-or-later
  5. set -ex
  6. # Vars
  7. MES_STACK=15000000
  8. MES_ARENA=30000000
  9. MES_MAX_ARENA=30000000
  10. MES_LIB=${MES_PREFIX}/lib
  11. MES_SOURCE=${MES_PREFIX}
  12. MES=${BINDIR}/mes
  13. TCC_TAR=tcc-0.9.26
  14. TCC_PKG=tcc-0.9.26-1147-gee75a10c
  15. # Check tarball checksums
  16. checksum-transcriber sources
  17. sha256sum -c sources.SHA256SUM
  18. # Unpack
  19. mkdir build
  20. cd build
  21. ungz --file ${DISTFILES}/${TCC_TAR}.tar.gz --output ${TCC_TAR}.tar
  22. ungz --file ${DISTFILES}/${MES_PKG}.tar.gz --output ${MES_PKG}.tar
  23. untar --non-strict --file ${TCC_TAR}.tar
  24. simple-patch ${TCC_PKG}/tcctools.c \
  25. ../simple-patches/remove-fileopen.before ../simple-patches/remove-fileopen.after
  26. simple-patch ${TCC_PKG}/tcctools.c \
  27. ../simple-patches/addback-fileopen.before ../simple-patches/addback-fileopen.after
  28. untar --non-strict --file ${MES_PKG}.tar
  29. # Create config.h
  30. catm ${MES_PKG}/include/mes/config.h
  31. catm ${TCC_PKG}/config.h
  32. cd ${TCC_PKG}
  33. if match ${ARCH} x86; then
  34. MES_ARCH=x86
  35. TCC_TARGET_ARCH=I386
  36. HAVE_LONG_LONG=0
  37. fi
  38. if match ${ARCH} amd64; then
  39. MES_ARCH=x86_64
  40. TCC_TARGET_ARCH=X86_64
  41. HAVE_LONG_LONG=1
  42. fi
  43. if match ${ARCH} riscv64; then
  44. MES_ARCH=riscv64
  45. TCC_TARGET_ARCH=RISCV64
  46. HAVE_LONG_LONG=1
  47. fi
  48. ${MES} --no-auto-compile -e main ${BINDIR}/mescc.scm -- \
  49. -S \
  50. -o tcc.s \
  51. -I ${INCDIR} \
  52. -D BOOTSTRAP=1 \
  53. -D HAVE_LONG_LONG=${HAVE_LONG_LONG} \
  54. -I . \
  55. -D TCC_TARGET_${TCC_TARGET_ARCH}=1 \
  56. -D inline= \
  57. -D CONFIG_TCCDIR=\"${LIBDIR}/tcc\" \
  58. -D CONFIG_SYSROOT=\"/\" \
  59. -D CONFIG_TCC_CRTPREFIX=\"${LIBDIR}\" \
  60. -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \
  61. -D CONFIG_TCC_SYSINCLUDEPATHS=\"${PREFIX}/include/mes\" \
  62. -D TCC_LIBGCC=\"${LIBDIR}/libc.a\" \
  63. -D CONFIG_TCC_LIBTCC1_MES=0 \
  64. -D CONFIG_TCCBOOT=1 \
  65. -D CONFIG_TCC_STATIC=1 \
  66. -D CONFIG_USE_LIBGCC=1 \
  67. -D TCC_VERSION=\"0.9.26\" \
  68. -D ONE_SOURCE=1 \
  69. tcc.c
  70. ${MES} --no-auto-compile -e main ${BINDIR}/mescc.scm -- \
  71. --base-address 0x08048000 \
  72. -o tcc-mes \
  73. -L ${LIBDIR} \
  74. tcc.s \
  75. -l c+tcc
  76. cp tcc-mes ${BINDIR}/
  77. chmod 755 ${BINDIR}/tcc-mes
  78. # test tcc-mes
  79. tcc-mes -version
  80. # Recompile the mes C library
  81. cd ../${MES_PKG}
  82. # Create unified libc file
  83. cd lib
  84. catm ../unified-libc.c ctype/isalnum.c ctype/isalpha.c ctype/isascii.c ctype/iscntrl.c ctype/isdigit.c ctype/isgraph.c ctype/islower.c ctype/isnumber.c ctype/isprint.c ctype/ispunct.c ctype/isspace.c ctype/isupper.c ctype/isxdigit.c ctype/tolower.c ctype/toupper.c dirent/closedir.c dirent/__getdirentries.c dirent/opendir.c linux/readdir.c linux/access.c linux/brk.c linux/chdir.c linux/chmod.c linux/clock_gettime.c linux/close.c linux/dup2.c linux/dup.c linux/execve.c linux/fcntl.c linux/fork.c linux/fsync.c linux/fstat.c linux/_getcwd.c linux/getdents.c linux/getegid.c linux/geteuid.c linux/getgid.c linux/getpid.c linux/getppid.c linux/getrusage.c linux/gettimeofday.c linux/getuid.c linux/ioctl.c linux/ioctl3.c linux/kill.c linux/link.c linux/lseek.c linux/lstat.c linux/malloc.c linux/mkdir.c linux/mknod.c linux/nanosleep.c linux/_open3.c linux/pipe.c linux/_read.c linux/readlink.c linux/rename.c linux/rmdir.c linux/setgid.c linux/settimer.c linux/setuid.c linux/signal.c linux/sigprogmask.c linux/symlink.c linux/stat.c linux/time.c linux/unlink.c linux/waitpid.c linux/wait4.c linux/${MES_ARCH}-mes-gcc/_exit.c linux/${MES_ARCH}-mes-gcc/syscall.c linux/${MES_ARCH}-mes-gcc/_write.c math/ceil.c math/fabs.c math/floor.c mes/abtod.c mes/abtol.c mes/__assert_fail.c mes/assert_msg.c mes/__buffered_read.c mes/__init_io.c mes/cast.c mes/dtoab.c mes/eputc.c mes/eputs.c mes/fdgetc.c mes/fdgets.c mes/fdputc.c mes/fdputs.c mes/fdungetc.c mes/globals.c mes/itoa.c mes/ltoab.c mes/ltoa.c mes/__mes_debug.c mes/mes_open.c mes/ntoab.c mes/oputc.c mes/oputs.c mes/search-path.c mes/ultoa.c mes/utoa.c posix/alarm.c posix/buffered-read.c posix/execl.c posix/execlp.c posix/execv.c posix/execvp.c posix/getcwd.c posix/getenv.c posix/isatty.c posix/mktemp.c posix/open.c posix/pathconf.c posix/raise.c posix/sbrk.c posix/setenv.c posix/sleep.c posix/unsetenv.c posix/wait.c posix/write.c stdio/clearerr.c stdio/fclose.c stdio/fdopen.c stdio/feof.c stdio/ferror.c stdio/fflush.c stdio/fgetc.c stdio/fgets.c stdio/fileno.c stdio/fopen.c stdio/fprintf.c stdio/fputc.c stdio/fputs.c stdio/fread.c stdio/freopen.c stdio/fscanf.c stdio/fseek.c stdio/ftell.c stdio/fwrite.c stdio/getc.c stdio/getchar.c stdio/perror.c stdio/printf.c stdio/putc.c stdio/putchar.c stdio/remove.c stdio/snprintf.c stdio/sprintf.c stdio/sscanf.c stdio/ungetc.c stdio/vfprintf.c stdio/vfscanf.c stdio/vprintf.c stdio/vsnprintf.c stdio/vsprintf.c stdio/vsscanf.c stdlib/abort.c stdlib/abs.c stdlib/alloca.c stdlib/atexit.c stdlib/atof.c stdlib/atoi.c stdlib/atol.c stdlib/calloc.c stdlib/__exit.c stdlib/exit.c stdlib/free.c stdlib/mbstowcs.c stdlib/puts.c stdlib/qsort.c stdlib/realloc.c stdlib/strtod.c stdlib/strtof.c stdlib/strtol.c stdlib/strtold.c stdlib/strtoll.c stdlib/strtoul.c stdlib/strtoull.c string/bcmp.c string/bcopy.c string/bzero.c string/index.c string/memchr.c string/memcmp.c string/memcpy.c string/memmem.c string/memmove.c string/memset.c string/rindex.c string/strcat.c string/strchr.c string/strcmp.c string/strcpy.c string/strcspn.c string/strdup.c string/strerror.c string/strlen.c string/strlwr.c string/strncat.c string/strncmp.c string/strncpy.c string/strpbrk.c string/strrchr.c string/strspn.c string/strstr.c string/strupr.c stub/atan2.c stub/bsearch.c stub/chown.c stub/__cleanup.c stub/cos.c stub/ctime.c stub/exp.c stub/fpurge.c stub/freadahead.c stub/frexp.c stub/getgrgid.c stub/getgrnam.c stub/getlogin.c stub/getpgid.c stub/getpgrp.c stub/getpwnam.c stub/getpwuid.c stub/gmtime.c stub/ldexp.c stub/localtime.c stub/log.c stub/mktime.c stub/modf.c stub/mprotect.c stub/pclose.c stub/popen.c stub/pow.c stub/putenv.c stub/rand.c stub/realpath.c stub/rewind.c stub/setbuf.c stub/setgrent.c stub/setlocale.c stub/setvbuf.c stub/sigaction.c stub/sigaddset.c stub/sigblock.c stub/sigdelset.c stub/sigemptyset.c stub/sigsetmask.c stub/sin.c stub/sys_siglist.c stub/system.c stub/sqrt.c stub/strftime.c stub/times.c stub/ttyname.c stub/umask.c stub/utime.c ${MES_ARCH}-mes-gcc/setjmp.c
  85. cd ..
  86. # crt1.o
  87. 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
  88. catm ${LIBDIR}/crtn.o
  89. catm ${LIBDIR}/crti.o
  90. if match ${ARCH} x86; then
  91. # crtn.o
  92. 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
  93. # crti.o
  94. 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
  95. fi
  96. # libc+gcc.a
  97. tcc-mes -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o unified-libc.o unified-libc.c
  98. tcc-mes -ar cr ${LIBDIR}/libc.a unified-libc.o
  99. # libtcc1.a
  100. mkdir ${LIBDIR}/tcc
  101. 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
  102. if match ${ARCH} riscv64; then
  103. 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
  104. tcc-mes -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o lib-arm64.o
  105. else
  106. tcc-mes -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o
  107. fi
  108. # libgetopt.a
  109. tcc-mes -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} lib/posix/getopt.c
  110. tcc-mes -ar cr ${LIBDIR}/libgetopt.a getopt.o
  111. cd ../${TCC_PKG}
  112. # boot0 (ref comments here for all boot*)
  113. # compile
  114. tcc-mes \
  115. -g \
  116. -v \
  117. -static \
  118. -o tcc-boot0 \
  119. -D BOOTSTRAP=1 \
  120. -D HAVE_FLOAT=1 \
  121. -D HAVE_BITFIELD=1 \
  122. -D HAVE_LONG_LONG=1 \
  123. -D HAVE_SETJMP=1 \
  124. -I . \
  125. -I ${PREFIX}/include/mes \
  126. -D TCC_TARGET_${TCC_TARGET_ARCH}=1 \
  127. -D CONFIG_TCCDIR=\"${LIBDIR}/tcc\" \
  128. -D CONFIG_TCC_CRTPREFIX=\"${LIBDIR}\" \
  129. -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \
  130. -D CONFIG_TCC_LIBPATHS=\"${LIBDIR}:${LIBDIR}/tcc\" \
  131. -D CONFIG_TCC_SYSINCLUDEPATHS=\"${PREFIX}/include/mes\" \
  132. -D TCC_LIBGCC=\"${LIBDIR}/libc.a\" \
  133. -D TCC_LIBTCC1=\"libtcc1.a\" \
  134. -D CONFIG_TCCBOOT=1 \
  135. -D CONFIG_TCC_STATIC=1 \
  136. -D CONFIG_USE_LIBGCC=1 \
  137. -D TCC_VERSION=\"0.9.26\" \
  138. -D ONE_SOURCE=1 \
  139. -L . \
  140. -L ${LIBDIR} \
  141. tcc.c
  142. # Install
  143. cp tcc-boot0 ${BINDIR}/
  144. chmod 755 ${BINDIR}/tcc-boot0
  145. cd ../${MES_PKG}
  146. # Recompile libc: crt{1,n,i}, libtcc.a, libc.a
  147. tcc-boot0 -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
  148. if match ${ARCH} x86; then
  149. tcc-boot0 -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
  150. tcc-boot0 -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
  151. fi
  152. tcc-boot0 -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
  153. if match ${ARCH} riscv64; then
  154. tcc-boot0 -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
  155. tcc-boot0 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o lib-arm64.o
  156. else
  157. tcc-boot0 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o
  158. fi
  159. tcc-boot0 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o unified-libc.o unified-libc.c
  160. tcc-boot0 -ar cr ${LIBDIR}/libc.a unified-libc.o
  161. cd ../${TCC_PKG}
  162. # Test boot0
  163. tcc-boot0 -version
  164. # boot1
  165. tcc-boot0 \
  166. -g \
  167. -v \
  168. -static \
  169. -o tcc-boot1 \
  170. -D BOOTSTRAP=1 \
  171. -D HAVE_FLOAT=1 \
  172. -D HAVE_BITFIELD=1 \
  173. -D HAVE_LONG_LONG=1 \
  174. -D HAVE_SETJMP=1 \
  175. -I . \
  176. -I ${PREFIX}/include/mes \
  177. -D TCC_TARGET_${TCC_TARGET_ARCH}=1 \
  178. -D CONFIG_TCCDIR=\"${LIBDIR}/tcc\" \
  179. -D CONFIG_TCC_CRTPREFIX=\"${LIBDIR}\" \
  180. -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \
  181. -D CONFIG_TCC_LIBPATHS=\"${LIBDIR}:${LIBDIR}/tcc\" \
  182. -D CONFIG_TCC_SYSINCLUDEPATHS=\"${PREFIX}/include/mes\" \
  183. -D TCC_LIBGCC=\"${LIBDIR}/libc.a\" \
  184. -D TCC_LIBTCC1=\"libtcc1.a\" \
  185. -D CONFIG_TCCBOOT=1 \
  186. -D CONFIG_TCC_STATIC=1 \
  187. -D CONFIG_USE_LIBGCC=1 \
  188. -D TCC_VERSION=\"0.9.26\" \
  189. -D ONE_SOURCE=1 \
  190. -L . \
  191. tcc.c
  192. cp tcc-boot1 ${BINDIR}
  193. chmod 755 ${BINDIR}/tcc-boot1
  194. cd ../${MES_PKG}
  195. tcc-boot1 -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
  196. if match ${ARCH} x86; then
  197. tcc-boot1 -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
  198. tcc-boot1 -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
  199. fi
  200. tcc-boot1 -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
  201. if match ${ARCH} riscv64; then
  202. tcc-boot1 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o lib-arm64.o ../${TCC_PKG}/lib/lib-arm64.c
  203. tcc-boot1 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o lib-arm64.o
  204. else
  205. tcc-boot1 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o
  206. fi
  207. tcc-boot1 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o unified-libc.o unified-libc.c
  208. tcc-boot1 -ar cr ${LIBDIR}/libc.a unified-libc.o
  209. cd ../${TCC_PKG}
  210. # Test boot1
  211. tcc-boot1 -version
  212. # boot2
  213. tcc-boot1 \
  214. -g \
  215. -v \
  216. -static \
  217. -o tcc-boot2 \
  218. -D BOOTSTRAP=1 \
  219. -D HAVE_BITFIELD=1 \
  220. -D HAVE_FLOAT=1 \
  221. -D HAVE_LONG_LONG=1 \
  222. -D HAVE_SETJMP=1 \
  223. -I . \
  224. -I ${PREFIX}/include/mes \
  225. -D TCC_TARGET_${TCC_TARGET_ARCH}=1 \
  226. -D CONFIG_TCCDIR=\"${LIBDIR}/tcc\" \
  227. -D CONFIG_TCC_CRTPREFIX=\"${LIBDIR}\" \
  228. -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \
  229. -D CONFIG_TCC_LIBPATHS=\"${LIBDIR}:${LIBDIR}/tcc\" \
  230. -D CONFIG_TCC_SYSINCLUDEPATHS=\"${PREFIX}/include/mes\" \
  231. -D TCC_LIBGCC=\"${LIBDIR}/libc.a\" \
  232. -D TCC_LIBTCC1=\"libtcc1.a\" \
  233. -D CONFIG_TCCBOOT=1 \
  234. -D CONFIG_TCC_STATIC=1 \
  235. -D CONFIG_USE_LIBGCC=1 \
  236. -D TCC_VERSION=\"0.9.26\" \
  237. -D ONE_SOURCE=1 \
  238. -L . \
  239. tcc.c
  240. cp tcc-boot2 ${BINDIR}
  241. chmod 755 ${BINDIR}/tcc-boot2
  242. cd ../${MES_PKG}
  243. tcc-boot2 -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
  244. if match ${ARCH} x86; then
  245. tcc-boot2 -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
  246. tcc-boot2 -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
  247. fi
  248. tcc-boot2 -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
  249. if match ${ARCH} riscv64; then
  250. tcc-boot2 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o lib-arm64.o ../${TCC_PKG}/lib/lib-arm64.c
  251. tcc-boot2 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o lib-arm64.o
  252. else
  253. tcc-boot2 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o
  254. fi
  255. tcc-boot2 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o unified-libc.o unified-libc.c
  256. tcc-boot2 -ar cr ${LIBDIR}/libc.a unified-libc.o
  257. cd ../${TCC_PKG}
  258. # Test boot2
  259. tcc-boot2 -version
  260. # We have our final tcc 0.9.26!
  261. cp ${BINDIR}/tcc-boot2 ${BINDIR}/tcc
  262. chmod 755 ${BINDIR}/tcc
  263. rm ${BINDIR}/tcc-boot2
  264. cp ${BINDIR}/tcc ${BINDIR}/tcc-0.9.26
  265. chmod 755 ${BINDIR}/tcc-0.9.26
  266. # Also recompile getopt, we don't need to do this during the boot* stages
  267. # because nothing is linked against it
  268. cd ../${MES_PKG}
  269. tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} lib/posix/getopt.c
  270. tcc -ar cr ${LIBDIR}/libgetopt.a getopt.o
  271. cd ../..
  272. # Checksums
  273. if match x${UPDATE_CHECKSUMS} xTrue; then
  274. sha256sum -o ${pkg}.${ARCH}.checksums \
  275. /usr/bin/tcc-mes \
  276. /usr/bin/tcc-boot0 \
  277. /usr/bin/tcc-boot1 \
  278. /usr/bin/tcc \
  279. /usr/lib/mes/libc.a \
  280. /usr/lib/mes/libgetopt.a \
  281. /usr/lib/mes/crt1.o \
  282. /usr/lib/mes/crti.o \
  283. /usr/lib/mes/crtn.o \
  284. /usr/lib/mes/tcc/libtcc1.a
  285. cp ${pkg}.${ARCH}.checksums ${SRCDIR}
  286. else
  287. sha256sum -c ${pkg}.${ARCH}.checksums
  288. fi