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