-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path030-create-llvmbox.sh
75 lines (64 loc) · 2.25 KB
/
030-create-llvmbox.sh
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/bin/bash
set -euo pipefail
source "$(dirname "$0")/config.sh"
DESTDIR="${DESTDIR:-$LLVMBOX_DESTDIR}"
rm -rf "$DESTDIR"
mkdir -p "$DESTDIR/lib"
DESTDIR="`cd "$DESTDIR"; pwd`"
# only include toolchain, no llvm libs or headers
_copyinto "$LLVM_STAGE2/bin/" "$DESTDIR/bin/"
_copyinto "$LLVM_STAGE2/share/" "$DESTDIR/share/"
_copyinto "$LLVM_STAGE2/lib/clang/" "$DESTDIR/lib/clang/"
# remove llvm-config (instead, it is included in llvmbox-dev)
rm -f "$DESTDIR/bin/llvm-config"
_merge_libs() { # <targetlib> <srclib> ...
# see https://llvm.org/docs/CommandGuide/llvm-ar.html
echo "merge $# libs into $(_relpath "$1")"
pushd "$(dirname "$1")" >/dev/null
local tmpfile="$BUILD_DIR/$(basename "$1").merge.a"
local script="$BUILD_DIR/$(basename "$1").merge.mri"
rm -f "$tmpfile"
echo "CREATE $tmpfile" > "$script"
# echo "CREATETHIN $tmpfile" > "$script"
for f in "$@"; do
echo "ADDLIB $(basename "$f")" >> "$script"
done
echo "SAVE" >> "$script"
echo "END" >> "$script"
"$STAGE2_AR" -M < "$script"
"$STAGE2_RANLIB" "$tmpfile"
rm "$@" "$script"
mv "$tmpfile" "$1"
popd >/dev/null
}
# copy sysroot (which includes libc) and copy libc++
DEST_SYSROOT="$DESTDIR/sysroot"
mkdir -p "$DEST_SYSROOT"
for src in \
"$LLVMBOX_SYSROOT" \
"$LIBCXX_STAGE2" \
;do
_copyinto "$src/" "$DEST_SYSROOT/"
done
# merge libc++abi.a -> libc++.a
_merge_libs "$DEST_SYSROOT/lib/libc++.a" "$DEST_SYSROOT/lib/libc++abi.a"
# merge lib-lto/libc++abi.a + lib-lto/libc++.a -> lib/libc++lto.a
if $LLVMBOX_ENABLE_LTO; then
_merge_libs "$DEST_SYSROOT/lib-lto/libc++.a" "$DEST_SYSROOT/lib-lto/libc++abi.a"
elif [ -d "$DEST_SYSROOT/lib-lto" ]; then
# sanity check
_err "installed lib-lto at \$DESTDIR/sysroot/\$TARGET/lib-lto even though LLVMBOX_ENABLE_LTO=false"
fi
# remove unwanted dirs from deps
rm -rf "$DEST_SYSROOT/lib/cmake" "$DEST_SYSROOT/lib/pkgconfig"
# clang's darwin driver seems to not respect our C_INCLUDE_DIRS but looks for
# <sysroot>/usr/{include,lib}
if [ "$TARGET_SYS" = macos ]; then
mkdir -pv "$DEST_SYSROOT/usr"
_symlink "$DEST_SYSROOT/usr/include" ../include
_symlink "$DEST_SYSROOT/usr/lib" ../lib
fi
# create symlink for development
if [ "$(dirname "$DESTDIR")" = "$OUT_DIR" ]; then
_symlink "$OUT_DIR/llvmbox" "$(basename "$DESTDIR")"
fi