mirror of
https://github.com/leanprover/lean4.git
synced 2026-03-17 18:34:06 +00:00
This PR actually prevents Lake from accidentally picking up other toolchains installed on the machine. Fixes regression introduced in #6176
59 lines
2.4 KiB
Bash
Executable File
59 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -uxo pipefail
|
|
|
|
# run from root build directory as in
|
|
# ```
|
|
# eval cmake ../.. $(../../script/prepare-llvm-macos.sh)
|
|
# ```
|
|
|
|
# use full LLVM release for compiling C++ code, but subset for compiling C code and distribution
|
|
|
|
GMP=${GMP:-$(brew --prefix)}
|
|
LIBUV=${LIBUV:-$(brew --prefix)}
|
|
|
|
[[ -d llvm ]] || (mkdir llvm; gtar xf $1 --strip-components 1 --directory llvm)
|
|
[[ -d llvm-host ]] || if [[ "$#" -gt 1 ]]; then
|
|
(mkdir llvm-host; gtar xf $2 --strip-components 1 --directory llvm-host)
|
|
else
|
|
ln -s llvm llvm-host
|
|
fi
|
|
SDK=$(xcrun --show-sdk-path)
|
|
mkdir -p stage1/{bin,lib/libc,include/clang}
|
|
CP="gcp -d" # preserve symlinks
|
|
# a C compiler!
|
|
gcp -L llvm/bin/clang stage1/bin/
|
|
# a linker!
|
|
gcp -L llvm/bin/ld64.lld stage1/bin/
|
|
# a static archiver!
|
|
gcp -L llvm/bin/llvm-ar stage1/bin/
|
|
# dependencies of the above
|
|
$CP llvm/lib/lib{clang-cpp,LLVM}.dylib stage1/lib/
|
|
#find stage1 -type f -exec strip --strip-unneeded '{}' \; 2> /dev/null
|
|
# lean.h dependencies
|
|
$CP llvm/lib/clang/*/include/{std*,__std*,limits}.h stage1/include/clang
|
|
# runtime
|
|
(cd llvm; $CP --parents lib/clang/*/lib/*/libclang_rt.osx.a ../stage1)
|
|
# libSystem stub, includes libc
|
|
cp $SDK/usr/lib/libSystem.tbd stage1/lib/libc
|
|
# use for linking, use system lib for running
|
|
gcp llvm/lib/libc++.dylib stage1/lib/libc
|
|
# make sure we search for the library in /usr/lib instead of the rpath, which should not contain `/usr/lib`
|
|
# and apparently since Sonoma does not do so implicitly either
|
|
install_name_tool -id /usr/lib/libc++.dylib stage1/lib/libc/libc++.dylib
|
|
echo -n " -DLEAN_STANDALONE=ON"
|
|
# do not change C++ compiler; libc++ etc. being system libraries means there's no danger of conflicts,
|
|
# and the custom clang++ outputs a myriad of warnings when consuming the SDK
|
|
echo -n " -DLEAN_EXTRA_CXX_FLAGS='${EXTRA_FLAGS:-}'"
|
|
if [[ -L llvm-host ]]; then
|
|
echo -n " -DCMAKE_C_COMPILER=$PWD/stage1/bin/clang"
|
|
gcp $GMP/lib/libgmp.a stage1/lib/
|
|
gcp $LIBUV/lib/libuv.a stage1/lib/
|
|
echo -n " -DLEAN_EXTRA_LINKER_FLAGS='-lgmp -luv'"
|
|
else
|
|
echo -n " -DCMAKE_C_COMPILER=$PWD/llvm-host/bin/clang -DLEANC_OPTS='--sysroot $PWD/stage1 -resource-dir $PWD/stage1/lib/clang/15.0.1 ${EXTRA_FLAGS:-}'"
|
|
fi
|
|
echo -n " -DLEANC_INTERNAL_FLAGS='--sysroot ROOT -nostdinc -isystem ROOT/include/clang' -DLEANC_CC=ROOT/bin/clang"
|
|
echo -n " -DLEANC_INTERNAL_LINKER_FLAGS='--sysroot ROOT -L ROOT/lib -L ROOT/lib/libc -fuse-ld=lld'"
|
|
# do not set `LEAN_CC` for tests
|
|
echo -n " -DLEAN_TEST_VARS=''"
|