brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · c97febb Raw
72 lines · bash
1#!/usr/bin/env bash2# brintOS LLVM build — the wasm32-hwjs toolchain (see BRINTOS.md).3#4# Builds clang + lld + opt + llvm-config + libLLVM at the brintOS pin with the5# dylib + plugin flags the hwjs-cc coroutine pass requires, plus the LLVM6# binutils the kernel and distro builds invoke (llvm-ar/nm/link/objcopy/strip/7# objdump/readelf/ranlib — Kbuild's LLVM=1 and the wasmld merge need them).8# Output lands in ./build/bin, which hwjs-cc/toolchain/find-llvm.sh discovers9# automatically.10#11# Usage:12#   ./build-brintos.sh            # configure + build (uses all cores)13#   ./build-brintos.sh -j 8       # cap parallelism14#   BUILD_DIR=/tmp/llvm ./build-brintos.sh15set -euo pipefail16 17HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"18BUILD_DIR="${BUILD_DIR:-$HERE/build}"19JOBS=""20while [ $# -gt 0 ]; do21  case "$1" in22    -j) JOBS="$2"; shift ;;23    -j*) JOBS="${1#-j}" ;;24    -h|--help) sed -n '2,12p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//'; exit 0 ;;25    *) echo "build-brintos.sh: unknown argument '$1'" >&2; exit 2 ;;26  esac27  shift28done29 30for tool in cmake ninja; do31  command -v "$tool" >/dev/null 2>&1 || { echo "build-brintos.sh: FATAL: '$tool' not found on PATH." >&2; exit 1; }32done33 34echo "brintOS LLVM: configuring (build dir: $BUILD_DIR)"35cmake -G Ninja -S "$HERE/llvm" -B "$BUILD_DIR" \36  -DCMAKE_BUILD_TYPE=Release \37  -DLLVM_ENABLE_PROJECTS="clang;lld" \38  -DLLVM_TARGETS_TO_BUILD="X86;WebAssembly" \39  -DLLVM_ENABLE_ASSERTIONS=OFF \40  -DLLVM_BUILD_LLVM_DYLIB=ON \41  -DLLVM_LINK_LLVM_DYLIB=ON \42  -DLLVM_ENABLE_PLUGINS=ON \43  -DCLANG_PLUGIN_SUPPORT=ON \44  -DLLVM_INCLUDE_TESTS=OFF \45  -DLLVM_INCLUDE_BENCHMARKS=OFF \46  -DLLVM_INCLUDE_EXAMPLES=OFF \47  -DLLVM_OPTIMIZED_TABLEGEN=ON \48  -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++49 50# The binutils list is load-bearing: the wasm32 kernel build pins AR/NM/OBJCOPY51# to this build's bin (and Kbuild's LLVM=1 derives STRIP/OBJDUMP/READELF), and52# hwjs-cc's wasmld drives llvm-link. A default `ninja clang lld` build does NOT53# produce these, so a fresh clone's `make kernel` would die at the first54# OBJCOPY step (reported as ticket: "make kernel stops at modules.builtin.modinfo").55BINUTILS="llvm-ar llvm-nm llvm-ranlib llvm-link llvm-objcopy llvm-strip llvm-objdump llvm-readelf"56echo "brintOS LLVM: building clang lld opt llvm-config $BINUTILS (+ libLLVM dylib)"57# shellcheck disable=SC2086  # BINUTILS is a deliberate word-split target list58ninja -C "$BUILD_DIR" ${JOBS:+-j "$JOBS"} clang lld opt llvm-config $BINUTILS59 60# Loud verification: every tool downstream builds invoke must exist now, or61# the failure surfaces here instead of deep inside a kernel/distro build.62for t in clang wasm-ld opt llvm-config $BINUTILS; do63  [ -x "$BUILD_DIR/bin/$t" ] || { echo "build-brintos.sh: FATAL: '$t' missing from $BUILD_DIR/bin after build." >&2; exit 1; }64done65 66echo67echo "brintOS LLVM: done."68echo "  bin: $BUILD_DIR/bin"69"$BUILD_DIR/bin/clang" --version | head -1 || true70echo "hwjs-cc will discover this automatically; or point at it explicitly:"71echo "  export WASMLD_HWJS_LLVM_BIN=$BUILD_DIR/bin"72