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 }