kit0.sh (2244B)
1 #!/bin/sh 2 ## Compile a prepared Kit0 translation-unit graph through cc.scm, then use the 3 ## ordinary per-architecture P1/M1pp/hex2pp boot path to produce one executable. 4 set -eu 5 6 . boot/lib-arch.sh 7 bootlib_init kit0 "${1:-aarch64}" 8 9 case "$ARCH" in 10 aarch64) kit_arch_flag=KIT_ARCH_AA64_ENABLED ;; 11 amd64) kit_arch_flag=KIT_ARCH_X64_ENABLED ;; 12 riscv64) kit_arch_flag=KIT_ARCH_RV64_ENABLED ;; 13 *) 14 echo "kit0: supported architectures are aarch64, amd64, and riscv64" >&2 15 exit 2 16 ;; 17 esac 18 19 : "${KIT0_PREP:?set KIT0_PREP to the matching Kit bootstrap profile kit0-prep directory}" 20 test -f "$KIT0_PREP/manifest.tsv" 21 test -f "$KIT0_PREP/m1pp-partitions.tsv" 22 test -f "$KIT0_PREP/kit0-run.scm" 23 test -f "$KIT0_PREP/resolved-config.h" 24 test -d "$KIT0_PREP/tu" 25 grep -Eq "^#define[[:space:]]+${kit_arch_flag}[[:space:]]+1$" \ 26 "$KIT0_PREP/resolved-config.h" || { 27 echo "kit0: $KIT0_PREP does not enable $kit_arch_flag for ARCH=$ARCH" >&2 28 exit 2 29 } 30 31 driver_init empty 32 require_src 33 34 BOOT1=build/$ARCH/$DRIVER/boot1 35 BOOT2=build/$ARCH/$DRIVER/boot2 36 SRC=build/$ARCH/src 37 OUT=build/$ARCH/$DRIVER/kit0 38 STAGE=build/$ARCH/.stage/$DRIVER/kit0 39 40 require_prev "$BOOT1" M1pp hex2pp 41 require_prev "$BOOT2" catm scheme1 42 43 . boot/lib-runscm.sh 44 runscm_init "$STAGE" "$OUT" 45 runscm_scheme1 "$BOOT2/scheme1" 46 runscm_prelude "$SRC/src/scheme1/prelude.scm" 47 runscm_runscm "$KIT0_PREP/kit0-run.scm" 48 49 runscm_input catm "$BOOT2/catm" 50 runscm_input M1pp "$BOOT1/M1pp" 51 runscm_input hex2pp "$BOOT1/hex2pp" 52 runscm_input_from_src scheme1/prelude.scm 53 runscm_input_from_src cc/cc.scm 54 runscm_input_from_src cc/main.scm 55 runscm_input_from_src "P1/P1-$ARCH.M1pp" backend.M1pp 56 runscm_input_from_src P1/P1.M1pp frontend.M1pp 57 runscm_input_from_src P1/P1pp.P1pp libp1pp.P1pp 58 runscm_input_from_src P1/entry-libc.P1pp 59 runscm_input_from_src P1/elf-end.P1pp 60 runscm_input_from_src stage0-posix/ELF.hex2 61 runscm_input_from_src libc/libc.flat.c 62 runscm_input_tree kit0 "$KIT0_PREP/tu" 63 64 runscm_export kit0 libc.P1pp 65 # cc.scm processes the deliberately separate Kit translation units in one 66 # deterministic seed run. On an emulated target this can take several hours. 67 runscm_run "${KIT0_TIMEOUT:-28800}" 68 69 echo "[$BOOT_TAG] OK -> $OUT/kit0 ($(wc -c <"$OUT/kit0") bytes)"