-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
This project is fantastic, and I might incorporate it into my Github project. I have a few suggestions to help make it even better.
Clang defaults to libc++/libc++abi/libunwind
Advantages:
- No longer depends on libstdc++/libgcc, etc.
- One toolchain can support multiple architectures (similar to llvm-mingw).
Disadvantages: Requires adaptation.
Suggest
Additionally, LLVM_DISTRIBUTION_COMPONENTS can be used for trimming during the build process. Here is my script:
LLVM_TOOLCHAIN_TOOLS="llvm-ar;llvm-ranlib;llvm-objdump;llvm-rc;llvm-cvtres;llvm-nm;llvm-strings;llvm-readobj;llvm-dlltool;llvm-pdbutil;llvm-objcopy;llvm-strip;llvm-cov;llvm-profdata;llvm-addr2line;llvm-symbolizer;llvm-windres;llvm-ml;llvm-ml64;llvm-readelf;llvm-size;llvm-cxxfilt;llvm-lib;llvm-undname;llvm-dwarfdump"
LLVM_DISTRIBUTION_COMPONENTS="LLVM;clang;clang-resource-headers;lld;LTO;clang-format;$LLVM_TOOLCHAIN_TOOLS"
RUNTIME_TARGET="x86_64-unknown-linux-gnu"
cmake -GNinja -B build -S llvm \
-DCMAKE_PREFIX_PATH=/usr/local \
-DCMAKE_INSTALL_PREFIX="$INSTALL_PREFIX" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_RPATH="\$ORIGIN/../lib" \
-DCMAKE_EXE_LINKER_FLAGS="-no-pie" \
-DBUILD_SHARED_LIBS=OFF \
-DLLVM_APPEND_VC_REV=OFF \
-DLLVM_ENABLE_PROJECTS="clang;lld" \
-DLLVM_TARGETS_TO_BUILD="X86;AArch64;RISCV;LoongArch" \
-DLLVM_RUNTIME_TARGETS="$RUNTIME_TARGET" \
-DLLVM_ENABLE_PLUGINS=OFF \
-DLLVM_ENABLE_PIC=ON \
-DLLVM_ENABLE_ZSTD=ON \
-DZLIB_ROOT=/usr/local \
-DZLIB_LIBRARY=/usr/local/lib64/libz.a \
-DZLIB_INCLUDE_DIR=/usr/local/include \
-DLLVM_ENABLE_LIBXML2=OFF \
-DLLVM_ENABLE_LTO=Thin \
-DLLVM_USE_LINKER="lld" \
-DLLVM_BUILD_LLVM_DYLIB=ON \
-DLLVM_LINK_LLVM_DYLIB=ON \
-DLLVM_ENABLE_TELEMETRY=OFF \
-DLLVM_TOOLCHAIN_TOOLS="$LLVM_TOOLCHAIN_TOOLS" \
-DLLVM_DISTRIBUTION_COMPONENTS="$LLVM_DISTRIBUTION_COMPONENTS" \
-DLLVM_INCLUDE_TESTS=OFF \
-DCLANG_DEFAULT_PIE_ON_LINUX=ON \
-DCLANG_LINK_CLANG_DYLIB=OFF \
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
-DCLANG_DEFAULT_LINKER="lld" \
-DCLANG_DEFAULT_CXX_STDLIB="libc++" \
-DCLANG_DEFAULT_UNWINDLIB="libunwind" \
-DCLANG_DEFAULT_RTLIB="compiler-rt" \
-DCLANG_ENABLE_OBJC_REWRITER=OFF \
-DCLANG_ENABLE_CIR=OFF
ninja -C build distribution || exit
INSTALL_DEST="$SOURCE_DIR/rpm/_prefix"
DESTDIR="${INSTALL_DEST}" ninja -C build install-distribution-stripped || exit
# build runtimes
mkdir runtimes_build || exit
LLVM_MAJOR_VERSION=$(echo "$LLVM_VERSION" | cut -d. -f1)
echo "LLVM_MAJOR_VERSION: ${LLVM_MAJOR_VERSION}"
CFLAGS="$CFLAGS -DNDEBUG -DSANITIZER_CAN_USE_PREINIT_ARRAY=0"
CXXFLAGS="$CXXFLAGS -DNDEBUG -DSANITIZER_CAN_USE_PREINIT_ARRAY=0"
cmake -B runtimes_build -G Ninja -Wno-dev -S runtimes \
-DLLVM_ENABLE_RUNTIMES="compiler-rt;libunwind;libcxx;libcxxabi" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$INSTALL_PREFIX" \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON \
-DCOMPILER_RT_INCLUDE_TESTS=OFF \
-DCOMPILER_RT_EXCLUDE_ATOMIC_BUILTIN=OFF \
-DCOMPILER_RT_BUILD_SANITIZERS=ON \
-DCOMPILER_RT_BUILD_GWP_ASAN=OFF \
-DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON \
-DCOMPILER_RT_SCUDO_STANDALONE_BUILD_SHARED=OFF \
-DCOMPILER_RT_INSTALL_PATH="$INSTALL_PREFIX/lib/clang/$LLVM_MAJOR_VERSION" \
-DLIBUNWIND_ENABLE_SHARED=OFF \
-DLIBUNWIND_ENABLE_ASSERTIONS=OFF \
-DLIBUNWIND_USE_COMPILER_RT=OFF \
-DLIBCXXABI_USE_LLVM_UNWINDER=OFF \
-DLIBCXXABI_ENABLE_SHARED=OFF \
-DLIBCXX_ENABLE_SHARED=OFF \
-DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=OFF \
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \
-DLIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY=ON
# CMAKE_VERBOSE_MAKEFILE=ON
cmake --build runtimes_build || exit 1
DESTDIR="${INSTALL_DEST}" cmake --install runtimes_build || exit 1
rm -rf "${INSTALL_DEST}${INSTALL_PREFIX}/lib/cmake"
rm -rf "${INSTALL_DEST}${INSTALL_PREFIX}/include/llvm-c"
# show disk usage
du -sh "${INSTALL_DEST}"
cd "$SOURCE_DIR/rpm" || exit
nfpm package -f llvm-minimal.yml -p rpm -t . || exitPackaging options: You can use nfpm to create deb, rpm, or apk installation packages.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels