kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

core.sh (6727B)


      1 #!/bin/sh
      2 
      3 audit_core_fixture_dir=$SCRIPT_DIR/fixtures
      4 
      5 audit_core_require_dist() {
      6     if [ -z "$HARNESS_DIST" ]; then
      7         audit_case_blocked "core compiler/linker workflows require --dist for shipped support and runtime files"
      8         return 1
      9     fi
     10     if [ ! -d "$HARNESS_DIST/support" ]; then
     11         audit_case_blocked "distribution has no support directory: $HARNESS_DIST/support"
     12         return 1
     13     fi
     14     return 0
     15 }
     16 
     17 audit_core_copy() {
     18     audit_core_source=$audit_core_fixture_dir/$1
     19     audit_core_destination=$CASE_DIR/work/${2:-$1}
     20     {
     21         printf 'cp %s %s\n' "$audit_core_source" "$audit_core_destination"
     22     } >> "$CASE_DIR/setup.command"
     23     if ! cp "$audit_core_source" "$audit_core_destination" \
     24         >> "$CASE_DIR/setup.stdout" 2>> "$CASE_DIR/setup.stderr"; then
     25         audit_case_blocked "could not stage fixture $1"
     26         return 1
     27     fi
     28     return 0
     29 }
     30 
     31 audit_core_discover_sysroot() {
     32     audit_case_step_exec_kit discover-sysroot cc \
     33         --support-dir "$HARNESS_DIST/support" -print-sysroot
     34     audit_expect_exit 0
     35     audit_expect_stderr_empty
     36     audit_expect_stdout_nonempty
     37     AUDIT_CORE_SYSROOT=
     38     IFS= read -r AUDIT_CORE_SYSROOT < "$CASE_ACTIVE_DIR/stdout" || :
     39     if [ -z "$AUDIT_CORE_SYSROOT" ] || [ ! -d "$AUDIT_CORE_SYSROOT" ]; then
     40         audit_check_fail "native SDK reported by -print-sysroot is unavailable: $AUDIT_CORE_SYSROOT"
     41         return 1
     42     fi
     43     audit_check_pass "native SDK exists: $AUDIT_CORE_SYSROOT"
     44     return 0
     45 }
     46 
     47 audit_core_default_native() {
     48     if ! audit_case_start core.native-default core cc compile-link-run native native native p0; then
     49         return
     50     fi
     51     audit_core_require_dist || return
     52     audit_core_copy poly_helper.c || return
     53     audit_core_copy poly_main.c || return
     54 
     55     audit_case_step_exec_kit compile cc poly_main.c poly_helper.c \
     56         -o "$CASE_DIR/artifacts/default-native"
     57     audit_expect_exit 0
     58     audit_expect_stderr_empty
     59     audit_expect_file_nonempty "$CASE_DIR/artifacts/default-native"
     60 
     61     if [ -f "$CASE_DIR/artifacts/default-native" ]; then
     62         audit_case_step_exec run "$CASE_DIR/artifacts/default-native"
     63         audit_expect_exit 0
     64         audit_expect_stderr_empty
     65     fi
     66     audit_case_finish
     67 }
     68 
     69 audit_core_archive_journey() {
     70     if ! audit_case_start core.archive-link-run core cc,ar,ranlib,nm archive-link-run native native native p0; then
     71         return
     72     fi
     73     audit_core_require_dist || return
     74     audit_core_copy archive_value.c || return
     75     audit_core_copy archive_main.c || return
     76     audit_core_discover_sysroot || {
     77         audit_case_finish
     78         return
     79     }
     80 
     81     audit_case_step_exec_kit compile-member cc \
     82         --support-dir "$HARNESS_DIST/support" --sysroot "$AUDIT_CORE_SYSROOT" \
     83         -O1 -g -c archive_value.c -o "$CASE_DIR/artifacts/archive_value.o"
     84     audit_expect_exit 0
     85     audit_expect_stderr_empty
     86     audit_expect_file_nonempty "$CASE_DIR/artifacts/archive_value.o"
     87 
     88     audit_case_step_exec_kit archive ar rc \
     89         "$CASE_DIR/artifacts/libaudit.a" "$CASE_DIR/artifacts/archive_value.o"
     90     audit_expect_exit 0
     91     audit_expect_stderr_empty
     92     audit_expect_file_nonempty "$CASE_DIR/artifacts/libaudit.a"
     93 
     94     audit_case_step_exec_kit index ranlib "$CASE_DIR/artifacts/libaudit.a"
     95     audit_expect_exit 0
     96     audit_expect_stderr_empty
     97 
     98     audit_case_step_exec_kit link cc \
     99         --support-dir "$HARNESS_DIST/support" --sysroot "$AUDIT_CORE_SYSROOT" \
    100         -O1 -g archive_main.c "$CASE_DIR/artifacts/libaudit.a" \
    101         -o "$CASE_DIR/artifacts/archive-flow"
    102     audit_expect_exit 0
    103     audit_expect_stderr_empty
    104     audit_expect_file_nonempty "$CASE_DIR/artifacts/archive-flow"
    105 
    106     if [ -f "$CASE_DIR/artifacts/archive-flow" ]; then
    107         audit_case_step_exec run "$CASE_DIR/artifacts/archive-flow"
    108         audit_expect_exit 0
    109         audit_expect_stderr_empty
    110     fi
    111 
    112     audit_case_step_exec_kit symbols nm "$CASE_DIR/artifacts/libaudit.a"
    113     audit_expect_exit 0
    114     audit_expect_stdout_contains archive_value
    115     audit_expect_stderr_empty
    116     audit_case_finish
    117 }
    118 
    119 audit_core_frontend_outputs() {
    120     if ! audit_case_start core.frontend-outputs core cc,cpp,check preprocess-deps-emit native native native p1; then
    121         return
    122     fi
    123     audit_core_require_dist || return
    124     audit_core_copy poly_helper.c || return
    125     audit_core_discover_sysroot || {
    126         audit_case_finish
    127         return
    128     }
    129 
    130     audit_case_step_exec_kit preprocess cpp \
    131         poly_helper.c -o "$CASE_DIR/artifacts/poly_helper.i"
    132     audit_expect_exit 0
    133     audit_expect_stderr_empty
    134     audit_expect_file_nonempty "$CASE_DIR/artifacts/poly_helper.i"
    135 
    136     audit_case_step_exec_kit dependencies cc \
    137         --support-dir "$HARNESS_DIST/support" --sysroot "$AUDIT_CORE_SYSROOT" \
    138         -MMD -MF "$CASE_DIR/artifacts/poly_helper.d" -c poly_helper.c \
    139         -o "$CASE_DIR/artifacts/deps.o"
    140     audit_expect_exit 0
    141     audit_expect_stderr_empty
    142     audit_expect_file_nonempty "$CASE_DIR/artifacts/poly_helper.d"
    143     audit_expect_file_nonempty "$CASE_DIR/artifacts/deps.o"
    144 
    145     audit_case_step_exec_kit syntax check \
    146         --support-dir "$HARNESS_DIST/support" --sysroot "$AUDIT_CORE_SYSROOT" \
    147         poly_helper.c
    148     audit_expect_exit 0
    149     audit_expect_stderr_empty
    150 
    151     audit_case_step_exec_kit assembly cc \
    152         --support-dir "$HARNESS_DIST/support" --sysroot "$AUDIT_CORE_SYSROOT" \
    153         -S poly_helper.c -o "$CASE_DIR/artifacts/poly_helper.s"
    154     audit_expect_exit 0
    155     audit_expect_stderr_empty
    156     audit_expect_file_nonempty "$CASE_DIR/artifacts/poly_helper.s"
    157 
    158     audit_case_step_exec_kit ir cc \
    159         --support-dir "$HARNESS_DIST/support" --sysroot "$AUDIT_CORE_SYSROOT" \
    160         --emit=ir -O1 poly_helper.c -o "$CASE_DIR/artifacts/poly_helper.ir"
    161     audit_expect_exit 0
    162     audit_expect_stderr_empty
    163     audit_expect_file_nonempty "$CASE_DIR/artifacts/poly_helper.ir"
    164     audit_case_finish
    165 }
    166 
    167 audit_core_portable_c_o1() {
    168     if ! audit_case_start core.portable-c-o1 core cc portable-c native native c p0; then
    169         return
    170     fi
    171     audit_core_require_dist || return
    172     audit_core_copy poly_helper.c || return
    173     audit_core_discover_sysroot || {
    174         audit_case_finish
    175         return
    176     }
    177 
    178     audit_case_step_exec_kit emit-c cc \
    179         --support-dir "$HARNESS_DIST/support" --sysroot "$AUDIT_CORE_SYSROOT" \
    180         --emit=c -O1 poly_helper.c \
    181         -o "$CASE_DIR/artifacts/poly_helper.generated.c"
    182     audit_expect_exit 0
    183     audit_expect_stderr_empty
    184     audit_expect_file_nonempty "$CASE_DIR/artifacts/poly_helper.generated.c"
    185     audit_case_finish
    186 }
    187 
    188 audit_module_core() {
    189     audit_core_default_native
    190     audit_core_archive_journey
    191     audit_core_frontend_outputs
    192     audit_core_portable_c_o1
    193 }