logo

live-bootstrap

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

pass1.kaem (12209B)


  1. #!/bin/sh
  2. # SPDX-FileCopyrightText: 2020-2023 Andrius Štikonas <andrius@stikonas.eu>
  3. # SPDX-FileCopyrightText: 2020-2022 fosslinux <fosslinux@aussies.space>
  4. #
  5. # SPDX-License-Identifier: GPL-3.0-or-later
  6. set -ex
  7. # Variables
  8. MES_ARENA=20000000
  9. MES_MAX_ARENA=20000000
  10. MES_STACK=6000000
  11. MES=${BINDIR}/mes-m2
  12. LIBDIR=${MES_PREFIX}/lib
  13. if match ${ARCH} x86; then
  14. MES_ARCH=x86
  15. ARCH_BITS=32
  16. fi
  17. if match ${ARCH} amd64; then
  18. MES_ARCH=x86_64
  19. ARCH_BITS=64
  20. fi
  21. if match ${ARCH} riscv64; then
  22. MES_ARCH=riscv64
  23. ARCH_BITS=64
  24. fi
  25. # Check tarball checksums
  26. checksum-transcriber sources
  27. sha256sum -c sources.SHA256SUM
  28. # Unpack
  29. mkdir build
  30. cd build
  31. ungz --file ${DISTFILES}/${NYACC_PKG}-lb1.tar.gz --output ${NYACC_PKG}.tar
  32. ungz --file ${DISTFILES}/${MES_PKG}.tar.gz --output ${MES_PKG}.tar
  33. untar --file ${NYACC_PKG}.tar
  34. untar --non-strict --file ${MES_PKG}.tar # ignore symlinks
  35. mes_run=${MES_PREFIX}/kaem.run
  36. replace --file ${mes_run} --output ${mes_run} --match-on 0x1000000 --replace-with 0x8048000
  37. rm ${NYACC_PKG}.tar ${MES_PKG}.tar
  38. cp ../files/config.h ${MES_PREFIX}/include/mes
  39. cd ${MES_PREFIX}
  40. mkdir include/arch
  41. cp include/linux/${MES_ARCH}/kernel-stat.h include/arch/kernel-stat.h
  42. cp include/linux/${MES_ARCH}/signal.h include/arch/signal.h
  43. cp include/linux/${MES_ARCH}/syscall.h include/arch/syscall.h
  44. # Remove pregenerated files
  45. rm mes/module/mes/psyntax.pp mes/module/mes/psyntax.pp.header
  46. # These files are symlinked in the repo
  47. cp mes/module/srfi/srfi-9-struct.mes mes/module/srfi/srfi-9.mes
  48. cp mes/module/srfi/srfi-9/gnu-struct.mes mes/module/srfi/srfi-9/gnu.mes
  49. # Build mes-m2
  50. kaem --verbose --strict --file kaem.${MES_ARCH}
  51. cp bin/mes-m2 ${BINDIR}/mes-m2
  52. chmod 755 ${BINDIR}/mes-m2
  53. # Rebuild pregenerated files in nyacc
  54. cd ../${NYACC_PKG}
  55. rm module/nyacc/lang/c99/mach.d/c99-act.scm module/nyacc/lang/c99/mach.d/c99-tab.scm \
  56. module/nyacc/lang/c99/mach.d/c99cx-act.scm module/nyacc/lang/c99/mach.d/c99cx-tab.scm \
  57. module/nyacc/lang/c99/mach.d/c99x-act.scm module/nyacc/lang/c99/mach.d/c99x-tab.scm \
  58. module/nyacc/lang/c99/mach.d/cpp-act.scm module/nyacc/lang/c99/mach.d/cpp-tab.scm
  59. ${MES} -L module gen-cpp-files.scm
  60. # More RAM for this one!
  61. MES_ARENA=32000000
  62. ${MES} -L module gen-c99-files.scm
  63. MES_ARENA=20000000
  64. ${MES} -L module gen-c99cx-files.scm
  65. cd ../${MES_PKG}
  66. # Create mescc.scm
  67. mescc_in=scripts/mescc.scm.in
  68. replace --file ${mescc_in} --output ${mescc_in} --match-on @prefix@ --replace-with ${PREFIX}
  69. replace --file ${mescc_in} --output ${mescc_in} --match-on @VERSION@ --replace-with ${MES_VERSION}
  70. replace --file ${mescc_in} --output ${mescc_in} --match-on @mes_cpu@ --replace-with ${MES_ARCH}
  71. replace --file ${mescc_in} --output ${mescc_in} --match-on @mes_kernel@ --replace-with linux
  72. mescc_scm=${BINDIR}/mescc.scm
  73. cp ${mescc_in} ${mescc_scm}
  74. chmod 755 ${mescc_scm}
  75. # Recompile Mes and Mes C library using mes-m2 bootstrapped Mes
  76. alias mescc="${MES} -e main ${BINDIR}/mescc.scm -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -c"
  77. # Start with crt1.o
  78. mescc lib/linux/${MES_ARCH}-mes-mescc/crt1.c -o lib/${MES_ARCH}-mes/crt1.o
  79. # Now for libc-mini.a
  80. catm libc-mini.c \
  81. lib/mes/__init_io.c \
  82. lib/mes/eputs.c \
  83. lib/mes/oputs.c \
  84. lib/mes/globals.c \
  85. lib/stdlib/exit.c \
  86. lib/linux/${MES_ARCH}-mes-mescc/_exit.c \
  87. lib/linux/${MES_ARCH}-mes-mescc/_write.c \
  88. lib/stdlib/puts.c \
  89. lib/string/strlen.c
  90. mescc libc-mini.c
  91. cp libc-mini.o ${LIBDIR}/${MES_ARCH}-mes/libc-mini.a
  92. cp libc-mini.s ${LIBDIR}/${MES_ARCH}-mes/libc-mini.s
  93. # libmescc.a
  94. catm libmescc.c \
  95. lib/mes/globals.c \
  96. lib/linux/${MES_ARCH}-mes-mescc/syscall-internal.c
  97. mescc libmescc.c
  98. cp libmescc.o ${LIBDIR}/${MES_ARCH}-mes/libmescc.a
  99. cp libmescc.s ${LIBDIR}/${MES_ARCH}-mes/libmescc.s
  100. # libc.a
  101. catm libc.c \
  102. lib/ctype/isnumber.c \
  103. lib/mes/abtol.c \
  104. lib/mes/cast.c \
  105. lib/mes/eputc.c \
  106. lib/mes/fdgetc.c \
  107. lib/mes/fdputc.c \
  108. lib/mes/fdputs.c \
  109. lib/mes/fdungetc.c \
  110. lib/mes/itoa.c \
  111. lib/mes/ltoa.c \
  112. lib/mes/ltoab.c \
  113. lib/mes/mes_open.c \
  114. lib/mes/ntoab.c \
  115. lib/mes/oputc.c \
  116. lib/mes/ultoa.c \
  117. lib/mes/utoa.c \
  118. lib/ctype/isdigit.c \
  119. lib/ctype/isspace.c \
  120. lib/ctype/isxdigit.c \
  121. lib/mes/assert_msg.c \
  122. lib/posix/write.c \
  123. lib/stdlib/atoi.c \
  124. lib/linux/lseek.c \
  125. lib/mes/__assert_fail.c \
  126. lib/mes/__buffered_read.c \
  127. lib/mes/__mes_debug.c \
  128. lib/posix/execv.c \
  129. lib/posix/getcwd.c \
  130. lib/posix/getenv.c \
  131. lib/posix/isatty.c \
  132. lib/posix/open.c \
  133. lib/posix/buffered-read.c \
  134. lib/posix/setenv.c \
  135. lib/posix/wait.c \
  136. lib/dirent/closedir.c \
  137. lib/dirent/opendir.c \
  138. lib/stdio/fgetc.c \
  139. lib/stdio/fputc.c \
  140. lib/stdio/fputs.c \
  141. lib/stdio/getc.c \
  142. lib/stdio/getchar.c \
  143. lib/stdio/putc.c \
  144. lib/stdio/putchar.c \
  145. lib/stdio/ungetc.c \
  146. lib/stdlib/calloc.c \
  147. lib/stdlib/free.c \
  148. lib/stdlib/realloc.c \
  149. lib/string/memchr.c \
  150. lib/string/memcmp.c \
  151. lib/string/memcpy.c \
  152. lib/string/memmove.c \
  153. lib/string/memset.c \
  154. lib/string/strcmp.c \
  155. lib/string/strcpy.c \
  156. lib/string/strncmp.c \
  157. lib/posix/raise.c \
  158. lib/linux/access.c \
  159. lib/linux/brk.c \
  160. lib/linux/chdir.c \
  161. lib/linux/chmod.c \
  162. lib/linux/clock_gettime.c \
  163. lib/linux/dup.c \
  164. lib/linux/dup2.c \
  165. lib/linux/execve.c \
  166. lib/linux/fork.c \
  167. lib/linux/fsync.c \
  168. lib/linux/_getcwd.c \
  169. lib/linux/gettimeofday.c \
  170. lib/linux/ioctl3.c \
  171. lib/linux/malloc.c \
  172. lib/linux/_open3.c \
  173. lib/linux/_read.c \
  174. lib/linux/readdir.c \
  175. lib/linux/rename.c \
  176. lib/linux/time.c \
  177. lib/linux/umask.c \
  178. lib/linux/uname.c \
  179. lib/linux/unlink.c \
  180. lib/linux/utimensat.c \
  181. lib/linux/wait4.c \
  182. lib/linux/waitpid.c \
  183. lib/linux/${MES_ARCH}-mes-mescc/syscall.c \
  184. lib/linux/getpid.c \
  185. lib/linux/kill.c \
  186. lib/linux/pipe.c \
  187. lib/linux/stat.c \
  188. lib/linux/lstat.c \
  189. lib/linux/mkdir.c \
  190. lib/linux/rmdir.c \
  191. lib/linux/link.c \
  192. lib/linux/symlink.c \
  193. lib/linux/close.c \
  194. lib/linux/nanosleep.c \
  195. lib/linux/fcntl.c \
  196. lib/linux/fstat.c \
  197. lib/linux/getdents.c
  198. mescc libc.c
  199. catm ${LIBDIR}/${MES_ARCH}-mes/libc.a ${LIBDIR}/${MES_ARCH}-mes/libc-mini.a libc.o
  200. catm ${LIBDIR}/${MES_ARCH}-mes/libc.s ${LIBDIR}/${MES_ARCH}-mes/libc-mini.s libc.s
  201. # libc+tcc.a
  202. catm libc+tcc.c \
  203. lib/ctype/islower.c \
  204. lib/ctype/isupper.c \
  205. lib/ctype/tolower.c \
  206. lib/ctype/toupper.c \
  207. lib/mes/abtod.c \
  208. lib/mes/dtoab.c \
  209. lib/mes/search-path.c \
  210. lib/posix/execvp.c \
  211. lib/stdio/fclose.c \
  212. lib/stdio/fdopen.c \
  213. lib/stdio/ferror.c \
  214. lib/stdio/fflush.c \
  215. lib/stdio/fopen.c \
  216. lib/stdio/fprintf.c \
  217. lib/stdio/fread.c \
  218. lib/stdio/fseek.c \
  219. lib/stdio/ftell.c \
  220. lib/stdio/fwrite.c \
  221. lib/stdio/printf.c \
  222. lib/stdio/remove.c \
  223. lib/stdio/snprintf.c \
  224. lib/stdio/sprintf.c \
  225. lib/stdio/sscanf.c \
  226. lib/stdio/vfprintf.c \
  227. lib/stdio/vprintf.c \
  228. lib/stdio/vsnprintf.c \
  229. lib/stdio/vsprintf.c \
  230. lib/stdio/vsscanf.c \
  231. lib/stdlib/abort.c \
  232. lib/stdlib/qsort.c \
  233. lib/stdlib/strtod.c \
  234. lib/stdlib/strtof.c \
  235. lib/stdlib/strtol.c \
  236. lib/stdlib/strtold.c \
  237. lib/stdlib/strtoll.c \
  238. lib/stdlib/strtoul.c \
  239. lib/stdlib/strtoull.c \
  240. lib/string/memmem.c \
  241. lib/string/strcat.c \
  242. lib/string/strchr.c \
  243. lib/string/strlwr.c \
  244. lib/string/strncpy.c \
  245. lib/string/strrchr.c \
  246. lib/string/strstr.c \
  247. lib/string/strupr.c \
  248. lib/stub/sigaction.c \
  249. lib/stub/ldexp.c \
  250. lib/stub/mprotect.c \
  251. lib/stub/localtime.c \
  252. lib/stub/sigemptyset.c \
  253. lib/${MES_ARCH}-mes-mescc/setjmp.c \
  254. lib/linux/close.c \
  255. lib/linux/rmdir.c \
  256. lib/linux/stat.c
  257. mescc libc+tcc.c
  258. catm ${LIBDIR}/${MES_ARCH}-mes/libc+tcc.a ${LIBDIR}/${MES_ARCH}-mes/libc.a libc+tcc.o
  259. catm ${LIBDIR}/${MES_ARCH}-mes/libc+tcc.s ${LIBDIR}/${MES_ARCH}-mes/libc.s libc+tcc.s
  260. # Make directories
  261. mkdir ${PREFIX}/lib/linux ${INCDIR}/mes ${INCDIR}/sys ${INCDIR}/linux ${INCDIR}/arch
  262. mkdir ${PREFIX}/lib/${MES_ARCH}-mes ${PREFIX}/lib/linux/${MES_ARCH}-mes ${INCDIR}/linux/${MES_ARCH}
  263. # Install libraries
  264. cp ${LIBDIR}/${MES_ARCH}-mes/libc.a ${PREFIX}/lib/${MES_ARCH}-mes/
  265. cp ${LIBDIR}/${MES_ARCH}-mes/libc+tcc.a ${PREFIX}/lib/${MES_ARCH}-mes/
  266. cp ${LIBDIR}/${MES_ARCH}-mes/libmescc.a ${PREFIX}/lib/${MES_ARCH}-mes/
  267. cp ${LIBDIR}/${MES_ARCH}-mes/libc.s ${PREFIX}/lib/${MES_ARCH}-mes/
  268. cp ${LIBDIR}/${MES_ARCH}-mes/libc+tcc.s ${PREFIX}/lib/${MES_ARCH}-mes/
  269. cp ${LIBDIR}/${MES_ARCH}-mes/libmescc.s ${PREFIX}/lib/${MES_ARCH}-mes/
  270. cp ${LIBDIR}/${MES_ARCH}-mes/${MES_ARCH}.M1 ${PREFIX}/lib/${MES_ARCH}-mes/
  271. cp ${LIBDIR}/${MES_ARCH}-mes/crt1.o ${PREFIX}/lib/${MES_ARCH}-mes/
  272. cp ${LIBDIR}/${MES_ARCH}-mes/crt1.s ${PREFIX}/lib/${MES_ARCH}-mes/
  273. cp ${LIBDIR}/linux/${MES_ARCH}-mes/elf${ARCH_BITS}-footer-single-main.hex2 ${PREFIX}/lib/linux/${MES_ARCH}-mes/
  274. cp ${LIBDIR}/linux/${MES_ARCH}-mes/elf${ARCH_BITS}-header.hex2 ${PREFIX}/lib/linux/${MES_ARCH}-mes/
  275. # Install header files
  276. cp include/alloca.h ${INCDIR}/alloca.h
  277. cp include/argz.h ${INCDIR}/argz.h
  278. cp include/ar.h ${INCDIR}/ar.h
  279. cp include/assert.h ${INCDIR}/assert.h
  280. cp include/ctype.h ${INCDIR}/ctype.h
  281. cp include/dirent.h ${INCDIR}/dirent.h
  282. cp include/dirstream.h ${INCDIR}/dirstream.h
  283. cp include/dlfcn.h ${INCDIR}/dlfcn.h
  284. cp include/endian.h ${INCDIR}/endian.h
  285. cp include/errno.h ${INCDIR}/errno.h
  286. cp include/fcntl.h ${INCDIR}/fcntl.h
  287. cp include/features.h ${INCDIR}/features.h
  288. cp include/float.h ${INCDIR}/float.h
  289. cp include/getopt.h ${INCDIR}/getopt.h
  290. cp include/grp.h ${INCDIR}/grp.h
  291. cp include/inttypes.h ${INCDIR}/inttypes.h
  292. cp include/libgen.h ${INCDIR}/libgen.h
  293. cp include/limits.h ${INCDIR}/limits.h
  294. cp include/locale.h ${INCDIR}/locale.h
  295. cp include/math.h ${INCDIR}/math.h
  296. cp include/memory.h ${INCDIR}/memory.h
  297. cp include/pwd.h ${INCDIR}/pwd.h
  298. cp include/setjmp.h ${INCDIR}/setjmp.h
  299. cp include/signal.h ${INCDIR}/signal.h
  300. cp include/stdarg.h ${INCDIR}/stdarg.h
  301. cp include/linux/${MES_ARCH}/signal.h ${INCDIR}/arch/signal.h
  302. cp include/stdbool.h ${INCDIR}/stdbool.h
  303. cp include/stddef.h ${INCDIR}/stddef.h
  304. cp include/stdint.h ${INCDIR}/stdint.h
  305. cp include/stdio.h ${INCDIR}/stdio.h
  306. cp include/stdlib.h ${INCDIR}/stdlib.h
  307. cp include/stdnoreturn.h ${INCDIR}/stdnoreturn.h
  308. cp include/string.h ${INCDIR}/string.h
  309. cp include/strings.h ${INCDIR}/strings.h
  310. cp include/termio.h ${INCDIR}/termio.h
  311. cp include/time.h ${INCDIR}/time.h
  312. cp include/unistd.h ${INCDIR}/unistd.h
  313. cp include/arch/kernel-stat.h ${INCDIR}/arch/kernel-stat.h
  314. cp include/arch/syscall.h ${INCDIR}/arch/syscall.h
  315. cp include/linux/syscall.h ${INCDIR}/linux/syscall.h
  316. cp include/linux/${MES_ARCH}/syscall.h ${INCDIR}/linux/${MES_ARCH}/syscall.h
  317. cp include/mes/builtins.h ${INCDIR}/mes/builtins.h
  318. cp include/mes/cc.h ${INCDIR}/mes/cc.h
  319. catm ${INCDIR}/mes/config.h
  320. cp include/mes/constants.h ${INCDIR}/mes/constants.h
  321. cp include/mes/lib.h ${INCDIR}/mes/lib.h
  322. cp include/mes/lib-cc.h ${INCDIR}/mes/lib-cc.h
  323. cp include/mes/lib-mini.h ${INCDIR}/mes/lib-mini.h
  324. cp include/mes/mes.h ${INCDIR}/mes/mes.h
  325. cp include/mes/symbols.h ${INCDIR}/mes/symbols.h
  326. cp include/sys/cdefs.h ${INCDIR}/sys/cdefs.h
  327. cp include/sys/dir.h ${INCDIR}/sys/dir.h
  328. cp include/sys/file.h ${INCDIR}/sys/file.h
  329. cp include/sys/ioctl.h ${INCDIR}/sys/ioctl.h
  330. cp include/sys/mman.h ${INCDIR}/sys/mman.h
  331. cp include/sys/param.h ${INCDIR}/sys/param.h
  332. cp include/sys/resource.h ${INCDIR}/sys/resource.h
  333. cp include/sys/select.h ${INCDIR}/sys/select.h
  334. cp include/sys/stat.h ${INCDIR}/sys/stat.h
  335. cp include/sys/timeb.h ${INCDIR}/sys/timeb.h
  336. cp include/sys/time.h ${INCDIR}/sys/time.h
  337. cp include/sys/times.h ${INCDIR}/sys/times.h
  338. cp include/sys/types.h ${INCDIR}/sys/types.h
  339. cp include/sys/ucontext.h ${INCDIR}/sys/ucontext.h
  340. cp include/sys/user.h ${INCDIR}/sys/user.h
  341. cp include/sys/wait.h ${INCDIR}/sys/wait.h
  342. cd ../..
  343. # Checksums
  344. if match x${UPDATE_CHECKSUMS} xTrue; then
  345. sha256sum -o ${pkg}.${ARCH}.checksums \
  346. /usr/bin/mes-m2 \
  347. /usr/bin/mescc.scm \
  348. /usr/lib/${MES_ARCH}-mes/crt1.s \
  349. /usr/lib/${MES_ARCH}-mes/crt1.o \
  350. /usr/lib/${MES_ARCH}-mes/${MES_ARCH}.M1 \
  351. /usr/lib/${MES_ARCH}-mes/libmescc.s \
  352. /usr/lib/${MES_ARCH}-mes/libc+tcc.s \
  353. /usr/lib/${MES_ARCH}-mes/libc.s \
  354. /usr/lib/${MES_ARCH}-mes/libmescc.a \
  355. /usr/lib/${MES_ARCH}-mes/libc+tcc.a \
  356. /usr/lib/${MES_ARCH}-mes/libc.a \
  357. /usr/lib/linux/${MES_ARCH}-mes/elf${ARCH_BITS}-header.hex2 \
  358. /usr/lib/linux/${MES_ARCH}-mes/elf${ARCH_BITS}-footer-single-main.hex2
  359. cp ${pkg}.${ARCH}.checksums ${SRCDIR}
  360. else
  361. sha256sum -c ${pkg}.${ARCH}.checksums
  362. fi