Last active
September 5, 2025 16:11
-
-
Save hoyhoy/895bb851efa3b1cffbb424a54cce22e2 to your computer and use it in GitHub Desktop.
llvm-bootstrap-x86_64-apple-darwin24.6.0.sh
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/opt/bin/bash | |
| set -e | |
| BUILD_DIR=build-$(date +%Y-%m-%d-%I-%M-%S) | |
| # BUILD_DIR=build-2025-04-02-06-18-06 | |
| echo BUILD_DIR=${BUILD_DIR} | |
| # BUILD_DIR=build-2024-04-19-01-09-40 | |
| # mkdir ${BUILD_DIR} | |
| llvm_cmake="${PWD}/cmake/Modules/LLVMVersion.cmake" | |
| # Check if input file exists | |
| if [ ! -f ${llvm_cmake} ]; then | |
| echo "Error: ${llvm_cmake} not found" >&2 | |
| exit 1 | |
| fi | |
| LLVM_VERSION_MAJOR=$(perl -ne 'print $1 if /LLVM_VERSION_MAJOR\s+(\d+)/' ${llvm_cmake}) | |
| LLVM_VERSION_MINOR=$(perl -ne 'print $1 if /LLVM_VERSION_MINOR\s+(\d+)/' ${llvm_cmake}) | |
| LLVM_VERSION_PATCH=$(perl -ne 'print $1 if /LLVM_VERSION_PATCH\s+(\d+)/' ${llvm_cmake}) | |
| echo "LLVM_VERSION_MAJOR=$LLVM_VERSION_MAJOR" | |
| echo "LLVM_VERSION_MINOR=$LLVM_VERSION_MINOR" | |
| echo "LLVM_VERSION_PATCH=$LLVM_VERSION_PATCH" | |
| LLVM_VERSION_TO_COMPILE=${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH} | |
| LLVM_BIN="${LLVM_ROOT}/bin" | |
| LLVM_LIB="${LLVM_ROOT}/lib" | |
| INSTALL_PATH="/opt/llvm${LLVM_VERSION_TO_COMPILE}" | |
| MACOS_SDK_ROOT=$(xcrun --show-sdk-path) | |
| MACOS_VERSION=$(sw_vers -productVersion 2>&1 | perl -p -e 's/([^.]+)\.([^.]+)\..*/$1.$2/') | |
| DARWIN_VERSION=$(uname -r) | |
| LLVM_CLANG_C_CONFIG_FILE_NAME="x86_64-apple-darwin${DARWIN_VERSION}-clang.cfg" | |
| LLVM_CLANG_CPP_CONFIG_FILE_NAME="x86_64-apple-darwin${DARWIN_VERSION}-clang++.cfg" | |
| # export LDFLAGS="-lc++abi -fuse-ld=lld -Wl,-rpath,${LLVM_LIB} -Wl,-rpath,${LLVM_LIB}/darwin" | |
| if [ -d ${INSTALL_PATH}/etc ]; then | |
| rm -f ${INSTALL_PATH}/etc/*.cfg | |
| fi | |
| LLVM_TRIPLE=x86_64-apple-darwin | |
| export PATH="${LLVM_ROOT}/bin:${HOME}/Library/Python/3.9/bin:/opt/bin:/usr/bin:/bin" | |
| cmake_args=( | |
| -DCMAKE_BUILD_TYPE:STRING=Release | |
| -DLLVM_ENABLE_RUNTIMES:STRING="libcxx;libcxxabi;compiler-rt;libunwind" | |
| -DLLVM_ENABLE_PROJECTS:STRING="clang;clang-tools-extra;lldb;lld" | |
| -DLIBCXX_ENABLE_VENDOR_AVAILABILITY_ANNOTATIONS=ON | |
| -DCMAKE_MACOSX_RPATH:BOOL=ON | |
| -DCMAKE_INSTALL_RPATH:FILEPATH="${INSTALL_PATH}/lib;${INSTALL_PATH}/lib/darwin" | |
| -DCMAKE_SKIP_RPATH:BOOL=OFF | |
| # -DLLVM_LOCAL_RPATH="${LLVM_ROOT}/lib;${LLVM_ROOT}/lib/darwin" | |
| -DCMAKE_INSTALL_NAME_DIR:STRING="${INSTALL_PATH}/lib" | |
| -DDEFAULT_SYSROOT:PATH=${MACOS_SDK_ROOT} | |
| -DCMAKE_OSX_SYSROOT:PATH=${MACOS_SDK_ROOT} | |
| -DLLVM_RUNTIME_TARGETS:STRING="${LLVM_TRIPLE}" | |
| -DCMAKE_C_COMPILER_TARGET:STRING="${LLVM_TRIPLE}" | |
| -DCMAKE_CXX_COMPILER_TARGET:STRING="${LLVM_TRIPLE}" | |
| -DCMAKE_C_COMPILER_LAUNCHER=/opt/bin/ccache | |
| -DCMAKE_CXX_COMPILER_LAUNCHER=/opt/bin/ccache | |
| -DLLVM_TARGETS_TO_BUILD:STRING=X86 | |
| -DLLVM_RUNTIME_TARGETS:STRING="${LLVM_TRIPLE}" | |
| -DCMAKE_C_COMPILER_TARGET:STRING="${LLVM_TRIPLE}" | |
| -DCMAKE_CXX_COMPILER_TARGET:STRING="${LLVM_TRIPLE}" | |
| -DRUNTIMES_BUILD_ALLOW_DARWIN:BOOL=ON | |
| # Added on 8/30/2025.... | |
| -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY:BOOL=ON | |
| -DLIBCXXABI_ENABLE_SHARED:BOOL=OFF | |
| -DLIBCXX_ENABLE_SHARED:BOOL=ON | |
| -DCMAKE_C_COMPILER:FILEPATH="${LLVM_BIN}/clang" | |
| -DCMAKE_CXX_COMPILER:FILEPATH="${LLVM_BIN}/clang++" | |
| -DCMAKE_RANLIB:FILEPATH="${LLVM_BIN}/ranlib" | |
| -DCMAKE_AR:FILEPATH="${LLVM_BIN}/ar" | |
| -DCMAKE_ASM_COMPILER:FILEPATH="${LLVM_BIN}/clang" | |
| -DCMAKE_LINKER:FILEPATH="${LLVM_BIN}/lld" | |
| -DCMAKE_NM:FILEPATH="${LLVM_BIN}/nm" | |
| -DCMAKE_RANLIB:FILEPATH="${LLVM_BIN}/llvm-ranlib" | |
| # -DCMAKE_EXE_LINKER_FLAGS="-lc++abi -fuse-ld=lld" | |
| # -DLLDB_BUILD_FRAMEWORK:BOOL=OFF | |
| -DLLDB_USE_SYSTEM_DEBUGSERVER:BOOL=OFF | |
| -DLLDB_ENABLE_LIBEDIT:BOOL=ON | |
| -DLLDB_ENABLE_CURSES:BOOL=ON | |
| -DDLLVM_ENABLE_TERMINFO:BOOL=ON | |
| -DRUNTIMES_CMAKE_ARGS:STRING="-DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOS_VERSION};-DCMAKE_OSX_ARCHITECTURES=x86_64;-DCMAKE_INSTALL_NAME_DIR:STRING="${INSTALL_PATH}/lib"" | |
| # fails with cmake-lipo on X86_64! | |
| -DCOMPILER_RT_DEFAULT_TARGET_ONLY:BOOL=ON | |
| -DCLANG_DEFAULT_CXX_STDLIB:STRING=libc++ | |
| -DCLANG_DEFAULT_RTLIB:STRING=compiler-rt | |
| -DCLANG_DEFAULT_LINKER:STRING=lld | |
| -DCLANG_DEFAULT_UNWINDLIB=libunwind | |
| -DLIBUNWIND_USE_COMPILER_RT:BOOL=ON | |
| -DLIBUNWIND_ENABLE_SHARED:BOOL=ON | |
| -DLLVM_USE_STATIC_ZSTD:BOOL=ON | |
| -DCMAKE_INSTALL_PREFIX:PATH="${INSTALL_PATH}" | |
| -DCLANG_CONFIG_FILE_SYSTEM_DIR:PATH="${INSTALL_PATH}/etc" | |
| -DLLVM_INSTALL_BINUTILS_SYMLINKS:BOOL=ON | |
| -DLLVM_INSTALL_CCTOOLS_SYMLINKS:BOOL=ON | |
| -DCLANG_INCLUDE_TESTS:BOOL=OFF | |
| -DLLVM_INCLUDE_TESTS:BOOL=OFF | |
| -DLLVM_ENABLE_TERMINFO:BOOL=ON | |
| -DLLVM_BUILD_TOOLS:BOOL=ON | |
| -DHAVE_CXX_ATOMICS64_WITHOUT_LIB:BOOL=ON | |
| -DHAVE_CXX_ATOMICS_WITHOUT_LIB:BOOL=ON | |
| -DLLVM_PARALLEL_COMPILE_JOBS:STRING=17 | |
| -DLLVM_PARALLEL_LINK_JOBS:STRING=2 | |
| -DLLVM_ENABLE_LLD:BOOL=ON | |
| -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING="${MACOS_VERSION}" | |
| -DCOMPILER_RT_BUILD_BUILTINS:BOOL=ON | |
| -DCOMPILER_RT_ENABLE_IOS:BOOL=OFF | |
| -DCOMPILER_RT_ENABLE_WATCHOS:BOOL=OFF | |
| -DCOMPILER_RT_ENABLE_TVOS:BOOL=OFF | |
| -DCOMPILER_RT_ENABLE_MACCATALYST:BOOL=OFF | |
| -DCOMPILER_RT_BUILD_LIBFUZZER:BOOL=ON | |
| -DCOMPILER_RT_BUILD_MEMPROF:BOOL=ON | |
| -DCOMPILER_RT_BUILD_PROFILE:BOOL=ON | |
| -DCOMPILER_RT_BUILD_SANITIZERS:BOOL=ON | |
| -DCOMPILER_RT_BUILD_XRAY:BOOL=ON | |
| -DLIBCXX_CXX_ABI:STRING=libcxxabi | |
| -DLIBCXX_USE_COMPILER_RT:BOOL=ON | |
| -DLIBCXX_HAS_GCC_S_LIB:BOOL=OFF | |
| -DLIBCXXABI_USE_LLVM_UNWINDER:BOOL=ON | |
| -DLIBCXXABI_USE_COMPILER_RT:BOOL=ON | |
| -DLIBUNWIND_USE_COMPILER_RT:BOOL=ON | |
| -DLLVM_ENABLE_LIBCXX:BOOL=ON | |
| -DLIBCXXABI_USE_COMPILER_RT:BOOL=ON | |
| -DLIBCXX_ENABLE_ABI_LINKER_SCRIPT:BOOL=ON | |
| -DLLVM_ENABLE_RTTI:BOOL=ON | |
| -DLLVM_ENABLE_FFI:BOOL=ON | |
| -DLLVM_ENABLE_EH:BOOL=ON | |
| ) | |
| echo ${cmake_args[@]} | |
| cmake "${cmake_args[@]}" -S llvm -G Ninja -B "${BUILD_DIR}" | |
| # export DYLD_LIBRARY_PATH=${LLVM_ROOT}/lib:${LLVM_ROOT}/lib/darwin | |
| ninja -C "${BUILD_DIR}" && ninja -C "${BUILD_DIR}" install | |
| mkdir -p ${INSTALL_PATH}/etc | |
| if [ ! -f${INSTALL_PATH}/lib/clang/${LLVM_VERSION_MAJOR}/lib/darwin ]; then | |
| ln -fs ${INSTALL_PATH}/lib/clang/${LLVM_VERSION_MAJOR}/lib/darwin ${INSTALL_PATH}/lib/darwin | |
| fi | |
| cat >${INSTALL_PATH}/etc/${LLVM_CLANG_C_CONFIG_FILE_NAME} <<EOF | |
| -fuse-ld=lld -Wl,-rpath,${INSTALL_PATH}/lib -Wl,-rpath,${INSTALL_PATH}/lib/darwin | |
| EOF | |
| cat >${INSTALL_PATH}/etc/${LLVM_CLANG_CPP_CONFIG_FILE_NAME} <<EOF | |
| -fuse-ld=lld -Wl,-rpath,${INSTALL_PATH}/lib -Wl,-rpath,${INSTALL_PATH}/lib/darwin -lc++abi | |
| EOF | |
| custom_dsymutil="${INSTALL_PATH}/bin/dsymutil_no_warnings" | |
| cat >${custom_dsymutil} <<EOF | |
| #!/bin/sh | |
| ${INSTALL_PATH}/bin/dsymutil \$@ 2>/dev/null | |
| EOF | |
| chmod a+x ${custom_dsymutil} | |
| codesign -s lldb_codesign --entitlements lldb/tools/debugserver/resources/debugserver-macosx-entitlements.plist -f ${INSTALL_PATH}/bin/debugserver |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment