kit

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

interop.sh (2467B)


      1 #!/usr/bin/env bash
      2 set -u
      3 
      4 ROOT="$(cd "$(dirname "$0")/../../.." && pwd)"
      5 KIT="${KIT:-$ROOT/build/kit}"
      6 KITCHEN="$ROOT/test/tier1/kitchen/objlink/interop"
      7 WORK="$ROOT/build/test/tier1/objlink/interop"
      8 
      9 mkdir -p "$WORK"
     10 
     11 . "$ROOT/test/lib/kit_sh_report.sh"
     12 kit_report_init
     13 KIT_SKIP_IS_FAILURE=1
     14 
     15 if [ ! -x "$KIT" ]; then
     16   kit_fail "interop/setup" "kit not built at $KIT"
     17   kit_summary test-t1-objlink-interop
     18   kit_exit
     19 fi
     20 if ! command -v clang >/dev/null 2>&1; then
     21   kit_skip "clang-link" "clang not found"
     22   kit_skip "clang-object-kit-link" "clang not found"
     23   kit_summary test-t1-objlink-interop
     24   kit_exit
     25 fi
     26 
     27 run_expect_rc() {
     28   local label="$1" want="$2" exe="$3"
     29   "$exe" >/dev/null 2>&1
     30   local got=$?
     31   if [ "$got" -eq "$want" ]; then
     32     kit_pass "$label"
     33   else
     34     kit_fail "$label" "expected rc $want, got $got"
     35   fi
     36 }
     37 
     38 run_cmd() {
     39   local label="$1" log="$2"
     40   shift 2
     41   if "$@" >"$log" 2>&1; then
     42     return 0
     43   fi
     44   kit_fail "$label" "see $log"
     45   return 1
     46 }
     47 
     48 kit_obj="$WORK/kit_main.o"
     49 clang_obj="$WORK/clang_value.o"
     50 clang_exe="$WORK/clang_link.exe"
     51 kit_exe="$WORK/kit_link.exe"
     52 clang_probe_c="$WORK/clang_probe.c"
     53 clang_probe_exe="$WORK/clang_probe.exe"
     54 clang_args=()
     55 
     56 case "$(uname -s 2>/dev/null)" in
     57   Darwin)
     58     sdk="$(xcrun --sdk macosx --show-sdk-path 2>/dev/null || true)"
     59     if [ -n "$sdk" ] && [ -d "$sdk" ]; then
     60       clang_args=(-isysroot "$sdk")
     61     fi ;;
     62   Linux)
     63     if command -v ld.lld >/dev/null 2>&1; then
     64       clang_args=(-fuse-ld=lld)
     65     fi ;;
     66 esac
     67 
     68 printf '%s\n' 'int main(void) { return 0; }' > "$clang_probe_c"
     69 
     70 run_cmd "kit-object" "$WORK/kit-object.log" \
     71   "$KIT" cc -O0 -c "$KITCHEN/kit_main.c" -o "$kit_obj"
     72 run_cmd "clang-object" "$WORK/clang-object.log" \
     73   clang -O0 -c "$KITCHEN/clang_value.c" -o "$clang_obj"
     74 
     75 if [ -f "$kit_obj" ] && [ -f "$clang_obj" ]; then
     76   if clang "${clang_args[@]}" "$clang_probe_c" -o "$clang_probe_exe" >"$WORK/clang-link-probe.log" 2>&1; then
     77     if run_cmd "clang-link" "$WORK/clang-link.log" \
     78          clang "${clang_args[@]}" "$kit_obj" "$clang_obj" -o "$clang_exe"; then
     79       run_expect_rc "clang-link-exec" 42 "$clang_exe"
     80     fi
     81   else
     82     kit_skip "clang-link" "host clang cannot link an executable; see $WORK/clang-link-probe.log"
     83   fi
     84   if run_cmd "clang-object-kit-link" "$WORK/kit-link.log" \
     85        "$KIT" cc "$kit_obj" "$clang_obj" -o "$kit_exe"; then
     86     run_expect_rc "clang-object-kit-link-exec" 42 "$kit_exe"
     87   fi
     88 fi
     89 
     90 kit_summary test-t1-objlink-interop
     91 kit_exit