Last active
December 15, 2024 04:35
-
-
Save hoyhoy/acbc0c3f6bff8eb95fce5ec945e33408 to your computer and use it in GitHub Desktop.
Script to Build LLVM 19 on x86_64 macOS 15
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
| #!/bin/sh | |
| set -e | |
| BUILD_DIR=build-$(date +%Y-%m-%d-%I-%M-%S) | |
| echo BUILD_DIR=${BUILD_DIR} | |
| # BUILD_DIR=build-2024-04-19-01-09-40 | |
| mkdir ${BUILD_DIR} | |
| LLVM_VERSION_MAJOR=19 | |
| LLVM_VERSION_MINOR=1 | |
| LLVM_VERSION_EXTRA=5 | |
| LLVM_VERSION_TO_COMPILE=${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_EXTRA} | |
| # LLVM_ROOT=$PWD/build-2024-04-19-01-09-40 | |
| 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}" | |
| if [ -d ${INSTALL_PATH}/etc ]; then | |
| rm -f ${INSTALL_PATH}/etc/*.cfg | |
| fi | |
| # it should be x86_64h-apple-darwin for haswell... | |
| # BUT, conan doesn't supported x86_64h. A number of | |
| # packages don't recognize x86_64 as an architecture... | |
| LLVM_TRIPLE=x86_64-apple-darwin | |
| # git reset --hard llvmorg-${LLVM_VERSION_TO_COMPILE} | |
| # git apply ~/backup/llvm.diff | |
| # | |
| # export PATH="${HOME}/Library/Python/3.9/bin:/opt/bin:/usr/bin:/bin" | |
| export PATH="${LLVM_ROOT}/bin:${HOME}/Library/Python/3.9/bin:/opt/bin:/usr/bin:/bin" | |
| # export PATH="${HOME}/Library/Python/3.9/bin:/opt/bin:/usr/bin:/bin" | |
| # lldb/scripts/macos-setup-codesign.sh | |
| 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" | |
| -DCMAKE_MACOSX_RPATH:BOOL=ON | |
| -DCMAKE_INSTALL_RPATH:FILEPATH="${INSTALL_PATH}/lib;${INSTALL_PATH}/lib/darwin" | |
| # -DCMAKE_SKIP_RPATH:BOOL=ON | |
| # -DLLVM_LOCAL_RPATH="${LLVM_ROOT}/lib;${LLVM_ROOT}/lib/darwin" | |
| # -DCMAKE_INSTALL_NAME_DIR="${INSTALL_PATH}/lib" | |
| -DDEFAULT_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 | |
| -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 | |
| # fails with cmake-lipo on X86_64! | |
| # -DCOMPILER_RT_DEFAULT_TARGET_ONLY:BOOL=ON | |
| -DRUNTIMES_BUILD_ALLOW_DARWIN: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 "${cmake_args[@]}" -S llvm -G Ninja -B "${BUILD_DIR}" && ninja -C "${BUILD_DIR}" && ninja -C "${BUILD_DIR}" install | |
| cmake "${cmake_args[@]}" -S llvm -G Ninja -B "${BUILD_DIR}" && 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/darwin ${INSTALL_PATH}/lib/clang/${LLVM_VERSION_MAJOR}/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 |
Author
Will try it. I have the hard-coded RPATHs in there already. Maybe -DCMAKE_MACOSX_RPATH=ON will help though. I forget why I turned that off. Possibly due to libcxx weirdness.
Author
It all works now with llvm 19 on x86_64 macOS. auto-signing the lldb debug server as well. Has worked since late llvm 18.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I suspect you'll get around a lot of your difficulties by setting