Initial commit
This commit is contained in:
@@ -0,0 +1,230 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
jobs() {
|
||||
if command -v nproc >/dev/null 2>&1; then
|
||||
nproc
|
||||
else
|
||||
getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1
|
||||
fi
|
||||
}
|
||||
|
||||
target_triple() {
|
||||
printf '%s\n' "${CHOST:-x86_64-sfg-linux-gnu}"
|
||||
}
|
||||
|
||||
assert_destdir() {
|
||||
[ "${DESTDIR:-}" != "" ] || {
|
||||
echo "build.sh: DESTDIR is not set" >&2
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
haul_from_primary() {
|
||||
pkg=$1
|
||||
shift
|
||||
old_destdir=$DESTDIR
|
||||
DESTDIR=$DEPOT_PRIMARY_DESTDIR
|
||||
export DESTDIR
|
||||
haul "$pkg" "$@"
|
||||
DESTDIR=$old_destdir
|
||||
export DESTDIR
|
||||
}
|
||||
|
||||
depot_build() {
|
||||
j=$(jobs)
|
||||
triple=$(target_triple)
|
||||
|
||||
cmake -G Ninja llvm \
|
||||
-B build-clang-llvm \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER="$CC" \
|
||||
-DCMAKE_CXX_COMPILER="$CXX" \
|
||||
-DCMAKE_C_FLAGS="$CFLAGS" \
|
||||
-DCMAKE_CXX_FLAGS="$CXXFLAGS" \
|
||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||
-DCMAKE_SKIP_INSTALL_RPATH=ON \
|
||||
-DLLVM_ENABLE_PROJECTS=clang\;lld\;flang \
|
||||
-DLLVM_ENABLE_RUNTIMES=compiler-rt \
|
||||
-DLLVM_USE_LINKER=lld \
|
||||
-DLLVM_DEFAULT_TARGET_TRIPLE="$triple" \
|
||||
-DLLVM_BUILD_LLVM_DYLIB=ON \
|
||||
-DLLVM_LINK_LLVM_DYLIB=ON \
|
||||
-DCLANG_LINK_CLANG_DYLIB=ON \
|
||||
-DLLVM_ENABLE_RTTI=ON \
|
||||
-DLLVM_ENABLE_FFI=ON \
|
||||
-DCLANG_DEFAULT_PIE_ON_LINUX=ON \
|
||||
-DLLVM_INCLUDE_BENCHMARKS=OFF \
|
||||
-DCLANG_DEFAULT_CXX_STDLIB=libc++ \
|
||||
-DCOMPILER_RT_BUILD_GWP_ASAN=OFF \
|
||||
-DLLVM_INCLUDE_UTILS=ON \
|
||||
-DLLVM_BUILD_UTILS=ON \
|
||||
-DSANITIZER_CXX_ABI=libcxxabi \
|
||||
-DLLVM_INSTALL_BINUTILS_SYMLINKS=ON \
|
||||
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=OFF \
|
||||
-DCOMPILER_RT_BUILD_BUILTINS=ON \
|
||||
-DLLVM_INSTALL_UTILS=ON \
|
||||
-DCLANG_DEFAULT_UNWINDLIB="none" \
|
||||
-DCOMPILER_RT_BUILD_SANITIZERS=ON \
|
||||
-DCOMPILER_RT_BUILD_XRAY=ON \
|
||||
-DCOMPILER_RT_BUILD_LIBFUZZER=ON \
|
||||
-DCOMPILER_RT_BUILD_PROFILE=ON \
|
||||
-DCOMPILER_RT_BUILD_MEMPROF=ON \
|
||||
-DCOMPILER_RT_BUILD_ORC=ON \
|
||||
-DCOMPILER_RT_BUILD_CRT=ON \
|
||||
-DLLVM_BUILD_DOCS=ON \
|
||||
-DCMAKE_INSTALL_DOCDIR=share/doc \
|
||||
-DSPHINX_WARNINGS_AS_ERRORS=OFF \
|
||||
-DLLVM_ENABLE_SPHINX=ON \
|
||||
-DCOMPILER_RT_DEFAULT_TARGET_ARCH="i686;x86_64" \
|
||||
-DCLANG_DEFAULT_RTLIB=compiler-rt \
|
||||
-DLLVM_INCLUDE_TESTS=ON
|
||||
|
||||
ninja -C build-clang-llvm -j"$j"
|
||||
|
||||
cmake -G Ninja runtimes/ \
|
||||
-B build-libcxx \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER="$CC" \
|
||||
-DCMAKE_CXX_COMPILER="$CXX" \
|
||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||
-DLLVM_ENABLE_RUNTIMES=libcxx\;libcxxabi\;libunwind \
|
||||
-DCMAKE_C_COMPILER_TARGET="$triple" \
|
||||
-DCMAKE_CXX_COMPILER_TARGET="$triple" \
|
||||
-DLLVM_DEFAULT_TARGET_TRIPLE="$triple" \
|
||||
-DLLVM_ENABLE_LTO=Thin \
|
||||
-DLLVM_ENABLE_SPHINX=ON \
|
||||
-DLIBCXX_INCLUDE_DOCS=ON \
|
||||
-DCMAKE_INSTALL_DOCDIR=share/doc \
|
||||
-DSPHINX_WARNINGS_AS_ERRORS=OFF \
|
||||
-DCMAKE_EXE_LINKER_FLAGS="$LDFLAGS -unwindlib=libunwind -rtlib=compiler-rt" \
|
||||
-DCMAKE_SHARED_LINKER_FLAGS="$LDFLAGS -unwindlib=libunwind -rtlib=compiler-rt"
|
||||
|
||||
ninja -C build-libcxx -j"$j"
|
||||
|
||||
cmake -G Ninja llvm-libgcc \
|
||||
-DCMAKE_C_COMPILER="$CC" \
|
||||
-DCMAKE_CXX_COMPILER="$CXX" \
|
||||
-B build-llvm-libgcc \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||
-DCMAKE_INSTALL_LIBDIR=lib \
|
||||
-DCOMPILER_RT_BUILD_BUILTINS=ON \
|
||||
-DCOMPILER_RT_BUILD_LIBUNWIND=ON \
|
||||
-DCOMPILER_RT_BUILD_XRAY=OFF \
|
||||
-DCOMPILER_RT_BUILD_PROFILE=OFF \
|
||||
-DLLVM_LIBGCC_EXPLICIT_OPT_IN=Yes \
|
||||
-DCMAKE_C_COMPILER_TARGET="$triple" \
|
||||
-DCMAKE_CXX_COMPILER_TARGET="$triple" \
|
||||
-DLLVM_DEFAULT_TARGET_TRIPLE="$triple" \
|
||||
-DCOMPILER_RT_BUILD_CRT=ON \
|
||||
-DCOMPILER_RT_BUILD_ORC=OFF \
|
||||
-DCOMPILER_RT_BAREMETAL_BUILD=OFF \
|
||||
-DCOMPILER_RT_USE_LLVM_UNWINDER=ON \
|
||||
-DCOMPILER_RT_ENABLE_STATIC_UNWINDER=ON \
|
||||
-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
|
||||
-DCOMPILER_RT_BUILD_MEMPROF=OFF \
|
||||
-DCOMPILER_RT_BUILD_CTX_PROFILE=OFF \
|
||||
-DCMAKE_EXE_LINKER_FLAGS="$LDFLAGS -unwindlib=libunwind -rtlib=compiler-rt" \
|
||||
-DCMAKE_SHARED_LINKER_FLAGS="$LDFLAGS -unwindlib=libunwind -rtlib=compiler-rt"
|
||||
ninja -C build-llvm-libgcc -j"$j"
|
||||
}
|
||||
|
||||
depot_install() {
|
||||
# Primary package: install the big LLVM/Clang/Flang tree once, then split from it.
|
||||
assert_destdir
|
||||
DESTDIR="$DESTDIR" cmake --install build-clang-llvm
|
||||
|
||||
ln -snf clang "$DESTDIR/usr/bin/cc"
|
||||
ln -snf clang++ "$DESTDIR/usr/bin/c++"
|
||||
ln -snf flang "$DESTDIR/usr/bin/f95"
|
||||
ln -snf ld.lld "$DESTDIR/usr/bin/ld"
|
||||
ln -snf linux/clang_rt.crtbegin-x86_64.o "$DESTDIR/usr/lib/crtbeginS.o"
|
||||
ln -snf linux/clang_rt.crtend-x86_64.o "$DESTDIR/usr/lib/crtendS.o"
|
||||
ln -snf linux/clang_rt.crtbegin-x86_64.o "$DESTDIR/usr/lib/crtbeginT.o"
|
||||
ln -snf linux/clang_rt.crtend-x86_64.o "$DESTDIR/usr/lib/crtendT.o"
|
||||
ln -snf linux/clang_rt.crtbegin-x86_64.o "$DESTDIR/usr/lib/crtbegin.o"
|
||||
ln -snf linux/clang_rt.crtend-x86_64.o "$DESTDIR/usr/lib/crtend.o"
|
||||
|
||||
|
||||
if [ -f "$DESTDIR/usr/share/clang/bash-autocomplete.sh" ]; then
|
||||
mkdir -p "$DESTDIR/usr/share/bash-completion/completions"
|
||||
mv "$DESTDIR/usr/share/clang/bash-autocomplete.sh" \
|
||||
"$DESTDIR/usr/share/bash-completion/completions/clang"
|
||||
fi
|
||||
}
|
||||
|
||||
depot_install_llvm_libs() {
|
||||
# Split shared LLVM libraries out of the primary LLVM install tree.
|
||||
haul_from_primary llvm-libs 'usr/lib/libLLVM*.so*'
|
||||
haul_from_primary llvm-libs 'usr/lib/libLTO.so*'
|
||||
haul_from_primary llvm-libs 'usr/lib/libRemarks.so*'
|
||||
}
|
||||
|
||||
depot_install_clang() {
|
||||
haul_from_primary clang 'usr/bin/analyze-build'
|
||||
haul_from_primary clang 'usr/bin/amdgpu-arch'
|
||||
haul_from_primary clang 'usr/bin/c-index-test'
|
||||
haul_from_primary clang 'usr/bin/clang*'
|
||||
haul_from_primary clang 'usr/bin/diagtool'
|
||||
haul_from_primary clang 'usr/bin/git-clang-format'
|
||||
haul_from_primary clang 'usr/bin/hmaptool'
|
||||
haul_from_primary clang 'usr/bin/intercept-build'
|
||||
haul_from_primary clang 'usr/bin/nvptx-arch'
|
||||
haul_from_primary clang 'usr/bin/scan-build*'
|
||||
haul_from_primary clang 'usr/bin/scan-view'
|
||||
haul_from_primary clang 'usr/bin/cc'
|
||||
haul_from_primary clang 'usr/bin/c++'
|
||||
haul_from_primary clang 'usr/include/clang*'
|
||||
haul_from_primary clang 'usr/lib/clang'
|
||||
haul_from_primary clang 'usr/lib/cmake/clang'
|
||||
haul_from_primary clang 'usr/lib/libclang*.so*'
|
||||
haul_from_primary clang 'usr/share/clang*'
|
||||
haul_from_primary clang 'usr/share/scan-build'
|
||||
haul_from_primary clang 'usr/share/scan-view'
|
||||
haul_from_primary clang 'usr/share/bash-completion/completions/clang'
|
||||
haul_from_primary clang 'usr/lib/crt*'
|
||||
haul_from_primary clang 'usr/share/doc/clang*'
|
||||
haul_from_primary clang 'usr/share/man/man1/clang*'
|
||||
}
|
||||
|
||||
depot_install_libcxx() {
|
||||
assert_destdir
|
||||
DESTDIR="$DESTDIR" cmake --install build-libcxx
|
||||
|
||||
# Keep libcxx package focused (libunwind belongs to llvm-libgcc in this split).
|
||||
rm -f "$DESTDIR/usr/include/__libunwind_config.h" \
|
||||
"$DESTDIR/usr/include/libunwind.h" \
|
||||
"$DESTDIR/usr/include/libunwind.modulemap" \
|
||||
"$DESTDIR/usr/include/unwind.h" \
|
||||
"$DESTDIR/usr/include/unwind_itanium.h" \
|
||||
"$DESTDIR/usr/include/unwind_arm_ehabi.h" \
|
||||
"$DESTDIR/usr/include/mach-o/compact_unwind_encoding.h"
|
||||
rm -f "$DESTDIR/usr/lib/libunwind.so" \
|
||||
"$DESTDIR/usr/lib/libunwind.so.1" \
|
||||
"$DESTDIR/usr/lib/libunwind.so.1.0" \
|
||||
"$DESTDIR/usr/lib/libunwind.a"
|
||||
rm -rf "$DESTDIR/usr/lib/cmake/libunwind"
|
||||
rmdir "$DESTDIR/usr/include/mach-o" 2>/dev/null || true
|
||||
}
|
||||
|
||||
depot_install_llvm_libgcc() {
|
||||
assert_destdir
|
||||
DESTDIR="$DESTDIR" cmake --install build-llvm-libgcc
|
||||
}
|
||||
|
||||
depot_install_flang() {
|
||||
haul_from_primary flang 'usr/bin/flang*'
|
||||
haul_from_primary flang 'usr/bin/tco'
|
||||
haul_from_primary flang 'usr/bin/fir-*'
|
||||
haul_from_primary flang 'usr/bin/f95'
|
||||
haul_from_primary flang 'usr/include/flang*'
|
||||
haul_from_primary flang 'usr/lib/cmake/flang*'
|
||||
haul_from_primary flang 'usr/lib/libFIR*'
|
||||
haul_from_primary flang 'usr/lib/libFortran*'
|
||||
haul_from_primary flang 'usr/lib/libFlang*'
|
||||
haul_from_primary flang 'usr/lib/libflang*'
|
||||
haul_from_primary flang 'usr/lib/libCUFAttrs.a'
|
||||
haul_from_primary flang 'usr/lib/libCUFDialect.a'
|
||||
haul_from_primary flang 'usr/share/man/man1/flang*'
|
||||
}
|
||||
Reference in New Issue
Block a user