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"
|