boot2

Playing with the boostrap
git clone https://git.ryansepassi.com/git/boot2.git
Log | Files | Refs | README

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)"