Skip to content

Instantly share code, notes, and snippets.

@hoyhoy
Last active September 5, 2025 16:11
Show Gist options
  • Select an option

  • Save hoyhoy/895bb851efa3b1cffbb424a54cce22e2 to your computer and use it in GitHub Desktop.

Select an option

Save hoyhoy/895bb851efa3b1cffbb424a54cce22e2 to your computer and use it in GitHub Desktop.
llvm-bootstrap-x86_64-apple-darwin24.6.0.sh
#!/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