Skip to content

Instantly share code, notes, and snippets.

@hoyhoy
Last active December 15, 2024 04:35
Show Gist options
  • Select an option

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

Select an option

Save hoyhoy/acbc0c3f6bff8eb95fce5ec945e33408 to your computer and use it in GitHub Desktop.
Script to Build LLVM 19 on x86_64 macOS 15
#!/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
@carlocab
Copy link

I suspect you'll get around a lot of your difficulties by setting

-DCMAKE_MACOSX_RPATH=ON
-DCMAKE_INSTALL_RPATH='@loader_path/../lib'

@hoyhoy
Copy link
Author

hoyhoy commented May 31, 2024

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.

@hoyhoy
Copy link
Author

hoyhoy commented Dec 15, 2024

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