aboutsummaryrefslogtreecommitdiff
path: root/tools/build-static-lld.sh
blob: 2c2f77ebac24b8e174af40a1e2b0943c11bab1e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

#!/bin/sh
# Build LLD against an installed LLVM SDK; install it in cpsc's build prefix.
set -eu

if [ "$#" -lt 2 ] || [ "$#" -gt 3 ]; then
    echo "Usage: sh tools/build-static-lld.sh LLVM_PREFIX BUILD_DIRECTORY [JOBS]" >&2
    exit 1
fi

llvm_prefix=$(cd "$1" && pwd)
mkdir -p "$2"
build_root=$(cd "$2" && pwd)
jobs=${3:-3}
llvm_version=$("$llvm_prefix/bin/llvm-config" --version)
case "$llvm_version" in
    23.*) ;;
    *) echo "Static LLD requires LLVM 23; found $llvm_version" >&2; exit 1 ;;
esac

work="$build_root/static-lld-$llvm_version"
archive="$work/llvm-project-$llvm_version.src.tar.xz"
mkdir -p "$work/src/llvm"
if [ ! -f "$archive" ]; then
    curl -fL --retry 3 \
        "https://github.com/llvm/llvm-project/releases/download/llvmorg-$llvm_version/llvm-project-$llvm_version.src.tar.xz" \
        -o "$archive.part"
    mv "$archive.part" "$archive"
fi
if [ ! -f "$work/src/.extracted" ]; then
    tar -xJf "$archive" -C "$work/src" --strip-components=1 \
        "llvm-project-$llvm_version.src/lld" "llvm-project-$llvm_version.src/cmake" \
        "llvm-project-$llvm_version.src/libunwind/include"
    touch "$work/src/.extracted"
fi

set --
if [ "$(uname -s)" = Darwin ]; then
    set -- "-DCMAKE_OSX_ARCHITECTURES=$(uname -m)" \
        "-DCMAKE_OSX_SYSROOT=$(xcrun --show-sdk-path)" \
        "-DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET:-15.0}"
fi
cmake -S "$work/src/lld" -B "$work/build" \
    -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF \
    -DLLVM_INCLUDE_TESTS=OFF -DLLVM_LINK_LLVM_DYLIB=ON \
    "-DLLVM_DIR=$llvm_prefix/lib/cmake/llvm" \
    "-DLLVM_MAIN_SRC_DIR=$work/src/llvm" \
    "-DCMAKE_C_COMPILER=$llvm_prefix/bin/clang" \
    "-DCMAKE_CXX_COMPILER=$llvm_prefix/bin/clang++" \
    "-DCMAKE_INSTALL_RPATH=$llvm_prefix/lib" \
    "-DCMAKE_INSTALL_PREFIX=$build_root" -DCMAKE_INSTALL_LIBDIR=lib "$@"
cmake --build "$work/build" --parallel "$jobs"
cmake --install "$work/build"