diff options
author | Nadia Holmquist Pedersen <nadia@nhp.sh> | 2021-07-23 06:31:20 +0200 |
---|---|---|
committer | Nadia Holmquist Pedersen <nadia@nhp.sh> | 2021-09-15 22:13:04 +0200 |
commit | f21ae77a0174c9ced5e61dc2b1df6499e71fe930 (patch) | |
tree | 172d9a38b86283e6a4d1915489880c7614bbdb2a | |
parent | 66a58f74784037c3736f1fc0945e608248842d22 (diff) |
Allow for using LLVM from Homebrew and include its libc++
-rw-r--r-- | CMakeLists.txt | 6 | ||||
-rw-r--r-- | cmake/Toolchain-Homebrew-LLVM.cmake | 12 | ||||
-rwxr-xr-x | tools/mac-libs.rb | 7 |
3 files changed, 22 insertions, 3 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 242193e..81fb0ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -123,8 +123,10 @@ if (ENABLE_LTO) if (NOT LLD STREQUAL "LLD-NOTFOUND") add_link_options(-fuse-ld=lld) endif() - set(CMAKE_AR "llvm-ar") - set(CMAKE_RANLIB "llvm-ranlib") + if (NOT APPLE) + set(CMAKE_AR "llvm-ar") + set(CMAKE_RANLIB "llvm-ranlib") + endif() endif() endif() diff --git a/cmake/Toolchain-Homebrew-LLVM.cmake b/cmake/Toolchain-Homebrew-LLVM.cmake new file mode 100644 index 0000000..15b6d24 --- /dev/null +++ b/cmake/Toolchain-Homebrew-LLVM.cmake @@ -0,0 +1,12 @@ +# Toolchain file for building with Homebrew's LLVM on macOS +# This is useful on 10.14 where std::filesystem is not supported. + +set(CMAKE_C_COMPILER /usr/local/opt/llvm/bin/clang) +set(CMAKE_CXX_COMPILER /usr/local/opt/llvm/bin/clang++) + +add_link_options(-L/usr/local/opt/llvm/lib) + +# LLVM in Homebrew is built with latest Xcode which has a newer linker than +# what is bundled in the default install of Xcode Command Line Tools, so we +# override it to prevent it passing flags not supported by the system's ld. +add_link_options(-mlinker-version=450) diff --git a/tools/mac-libs.rb b/tools/mac-libs.rb index 534b003..94e33f4 100755 --- a/tools/mac-libs.rb +++ b/tools/mac-libs.rb @@ -56,6 +56,10 @@ def expand_load_path(lib, path) file = $fallback_rpaths .map { |it| File.join(it, file_name) } .find { |it| File.exist? it } + if file == nil + path = File.join(File.dirname(lib), file_name) + file = path if File.exist? path + end return file, :rpath if file when "executable_path" file = File.join(File.dirname(executable), file_name) @@ -85,7 +89,6 @@ def install_name_tool(exec, action, path1, path2 = nil) args = ["-#{action.to_s}", path1] args << path2 if path2 != nil - FileUtils.chmod("u+w", exec) out, status = Open3.capture2e("install_name_tool", *args, exec) if status != 0 puts out @@ -129,6 +132,7 @@ def fixup_libs(prog, orig_path) next if File.exist? File.join(frameworks_dir, fwname) expath, _ = expand_load_path(orig_path, framework) FileUtils.cp_r(expath, frameworks_dir, preserve: true) + FileUtils.chmod_R("u+w", File.join(frameworks_dir, fwname)) fixup_libs File.join(frameworks_dir, fwname, fwlib), libpath else libname = File.basename(libpath) @@ -141,6 +145,7 @@ def fixup_libs(prog, orig_path) next if File.exist? dest expath, _ = expand_load_path(orig_path, libpath) FileUtils.copy expath, frameworks_dir + FileUtils.chmod("u+w", dest) fixup_libs dest, libpath end end |