build.sh raw
1 #!/bin/sh
2 set -e
3
4 LLVM_PREFIX=""
5 LLVM_VER="22"
6
7 # Arch Linux style
8 if [ -f "/usr/lib/libLLVM-22.so" ]; then
9 LLVM_PREFIX="/usr"
10 fi
11
12 # Debian/Ubuntu style
13 if [ -z "$LLVM_PREFIX" ]; then
14 for p in /usr/lib/llvm-22 /usr/lib/llvm22 /usr/lib/llvm/22; do
15 if [ -d "$p" ]; then
16 LLVM_PREFIX="$p"
17 break
18 fi
19 done
20 fi
21
22 if [ -z "$LLVM_PREFIX" ]; then
23 echo "error: LLVM 22 not found" >&2
24 exit 1
25 fi
26
27 echo "using LLVM $LLVM_VER at $LLVM_PREFIX"
28
29 SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
30 VENDOR="$(cd "$SCRIPT_DIR/../vendor/tinygo.org/x/go-llvm" && pwd)"
31 OUT="$SCRIPT_DIR/libmoxie-llvm-glue.so"
32
33 CXX="${CXX:-clang++}"
34 if command -v "clang++-$LLVM_VER" >/dev/null 2>&1; then
35 CXX="clang++-$LLVM_VER"
36 fi
37
38 $CXX -shared -fPIC \
39 -o "$OUT" \
40 "$VENDOR/IRBindings.cpp" \
41 "$VENDOR/backports.cpp" \
42 "$SCRIPT_DIR/shims.c" \
43 -I"$LLVM_PREFIX/include" \
44 -L"$LLVM_PREFIX/lib" -lLLVM-$LLVM_VER \
45 -std=c++17
46
47 echo "built: $OUT"
48 nm -D "$OUT" | grep " T " | head -20
49