aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNadia Holmquist Pedersen <nadia@nhp.sh>2021-07-23 06:31:20 +0200
committerNadia Holmquist Pedersen <nadia@nhp.sh>2021-09-15 22:13:04 +0200
commitf21ae77a0174c9ced5e61dc2b1df6499e71fe930 (patch)
tree172d9a38b86283e6a4d1915489880c7614bbdb2a
parent66a58f74784037c3736f1fc0945e608248842d22 (diff)
Allow for using LLVM from Homebrew and include its libc++
-rw-r--r--CMakeLists.txt6
-rw-r--r--cmake/Toolchain-Homebrew-LLVM.cmake12
-rwxr-xr-xtools/mac-libs.rb7
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