Skip to content

Commit 32b14b4

Browse files
committed
fix llvm-11
1 parent 41afe76 commit 32b14b4

File tree

1 file changed

+85
-59
lines changed

1 file changed

+85
-59
lines changed

Formula/llvm-11.rb

Lines changed: 85 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,62 @@
11
class Llvm11 < Formula
22
desc "Next-gen compiler infrastructure"
33
homepage "http://llvm.org/"
4+
# The LLVM Project is under the Apache License v2.0 with LLVM Exceptions
5+
license "Apache-2.0" => { with: "LLVM-exception" }
6+
revision 1
47

58
version = "11.1.0"
9+
stable do
10+
url "https://github.com/llvm/llvm-project/releases/download/llvmorg-#{version}/llvm-project-#{version}.src.tar.xz"
11+
sha256 "74d2529159fd118c3eac6f90107b5611bccc6f647fdea104024183e8d5e25831"
612

7-
url "https://github.com/llvm/llvm-project/releases/download/llvmorg-#{version}/llvm-project-#{version}.src.tar.xz"
8-
sha256 "74d2529159fd118c3eac6f90107b5611bccc6f647fdea104024183e8d5e25831"
13+
patch do
14+
url "https://github.com/llvm/llvm-project/commit/c86f56e32e724c6018e579bb2bc11e667c96fc96.patch?full_index=1"
15+
sha256 "6e13e01b4f9037bb6f43f96cb752d23b367fe7db4b66d9bf2a4aeab9234b740a"
16+
end
17+
18+
patch do
19+
url "https://github.com/llvm/llvm-project/commit/31e5f7120bdd2f76337686d9d169b1c00e6ee69c.patch?full_index=1"
20+
sha256 "f025110aa6bf80bd46d64a0e2b1e2064d165353cd7893bef570b6afba7e90b4d"
21+
end
22+
23+
patch do
24+
url "https://github.com/llvm/llvm-project/commit/3c7bfbd6831b2144229734892182d403e46d7baf.patch?full_index=1"
25+
sha256 "62014ddad6d5c485ecedafe3277fe7978f3f61c940976e3e642536726abaeb68"
26+
end
927

10-
bottle do
11-
root_url "https://github.com/llvm-hs/homebrew-llvm/releases/download/v11.1.0"
12-
sha256 cellar :any, big_sur: ""
28+
patch do
29+
url "https://github.com/llvm/llvm-project/commit/c4d7536136b331bada079b2afbb2bd09ad8296bf.patch?full_index=1"
30+
sha256 "2b894cbaf990510969bf149697882c86a068a1d704e749afa5d7b71b6ee2eb9f"
31+
end
32+
33+
# Upstream ARM patch for OpenMP runtime, remove in next version
34+
# https://reviews.llvm.org/D91002
35+
# https://bugs.llvm.org/show_bug.cgi?id=47609
36+
patch do
37+
url "https://raw.githubusercontent.com/Homebrew/formula-patches/6166a68c/llvm/openmp_arm.patch"
38+
sha256 "70fe3836b423e593688cd1cc7a3d76ee6406e64b9909f1a2f780c6f018f89b1e"
39+
end
40+
end
41+
42+
# bottle do
43+
# root_url "https://github.com/llvm-hs/homebrew-llvm/releases/download/v11.1.0"
44+
# sha256 cellar :any, big_sur: ""
45+
# end
46+
47+
# Clang cannot find system headers if Xcode CLT is not installed
48+
pour_bottle? do
49+
on_macos do
50+
reason "The bottle needs the Xcode CLT to be installed."
51+
satisfy { MacOS::CLT.installed? }
52+
end
1353
end
1454

1555
# http://releases.llvm.org/11.0.0/docs/GettingStarted.html#requirements
1656
depends_on "cmake" => :build
1757

1858
uses_from_macos "libedit"
19-
uses_from_macos "libffi", since: catalina
59+
uses_from_macos "libffi", since: :catalina
2060
uses_from_macos "libxml2"
2161
uses_from_macos "ncurses"
2262
uses_from_macos "zlib"
@@ -28,43 +68,28 @@ def ver
2868

2969
# http://releases.llvm.org/11.0.0/docs/CMake.html
3070
def install
31-
# Apple's libstdc++ is too old to build LLVM
32-
ENV.libcxx if ENV.compiler == :clang
33-
34-
# compiler-rt has some iOS simulator features that require i386 symbols. I'm
35-
# assuming the rest of clang also needs support for 32-bit compilation to
36-
# work correctly, but if not, perhaps universal binaries could be limited to
37-
# compiler-rt. LLVM makes this somewhat easier because compiler-rt can
38-
# almost be treated as an entirely different build from LLVM.
39-
ENV.permit_arch_flags
40-
4171
projects = %w[
4272
clang
4373
clang-tools-extra
4474
lld
45-
lldb
4675
openmp
4776
polly
48-
mlir
4977
]
5078
runtimes = %w[
51-
compiler-rt
5279
libcxx
5380
libcxxabi
5481
libunwind
5582
]
5683

57-
clang_buildpath = buildpath/"tools/clang"
58-
libcxx_buildpath = buildpath/"projects/libcxx"
84+
# Apple's libstdc++ is too old to build LLVM
85+
ENV.libcxx if ENV.compiler == :clang
5986

60-
clang_buildpath.install resource("clang")
61-
libcxx_buildpath.install resource("libcxx")
62-
(buildpath/"tools/lld").install resource("lld")
63-
(buildpath/"tools/polly").install resource("polly")
64-
(buildpath/"tools/clang/tools/extra").install resource("clang-tools-extra")
65-
(buildpath/"projects/openmp").install resource("openmp")
66-
(buildpath/"projects/libunwind").install resource("libunwind")
67-
(buildpath/"projects/compiler-rt").install resource("compiler-rt")
87+
# compiler-rt has some iOS simulator features that require i386 symbols. I'm
88+
# assuming the rest of clang also needs support for 32-bit compilation to
89+
# work correctly, but if not, perhaps universal binaries could be limited to
90+
# compiler-rt. LLVM makes this somewhat easier because compiler-rt can
91+
# almost be treated as an entirely different build from LLVM.
92+
ENV.permit_arch_flags
6893

6994
install_prefix = lib/"llvm-#{ver}"
7095

@@ -73,6 +98,7 @@ def install
7398
-DCMAKE_INSTALL_PREFIX=#{install_prefix}
7499
-DLLVM_ENABLE_PROJECTS=#{projects.join(";")}
75100
-DLLVM_ENABLE_RUNTIMES=#{runtimes.join(";")}
101+
-DLLVM_TARGETS_TO_BUILD=all
76102
-DLLVM_ENABLE_ASSERTIONS=ON
77103
-DLLVM_OPTIMIZED_TABLEGEN=ON
78104
-DLLVM_INCLUDE_DOCS=OFF
@@ -81,18 +107,13 @@ def install
81107
-DLLVM_ENABLE_EH=ON
82108
-DLLVM_INSTALL_UTILS=ON
83109
-DLLVM_ENABLE_Z3_SOLVER=OFF
84-
-DWITH_POLLY=ON
85-
-DLINK_POLLY_INTO_TOOLS=ON
86-
-DLLVM_TARGETS_TO_BUILD=all
87-
-DLIBOMP_ARCH=x86_64
88110
-DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON
89111
-DLLVM_BUILD_LLVM_C_DYLIB=ON
90112
-DLLVM_LINK_LLVM_DYLIB=ON
91113
-DLLVM_ENABLE_LIBCXX=ON
92114
-DLLVM_ENABLE_FFI=ON
93115
-DLLVM_CREATE_XCODE_TOOLCHAIN=ON
94116
-DLLVM_CREATE_XCODE_TOOLCHAIN=#{MacOS::Xcode.installed? ? "ON" : "OFF"}
95-
-DRUNTIMES_CMAKE_ARGS="-DCMAKE_INSTALL_RPATH=@loader_path/../lib"
96117
]
97118

98119
if MacOS.version >= :catalina
@@ -103,22 +124,23 @@ def install
103124
args << "-DFFI_LIBRARY_DIR=#{Formula["libffi"].opt_lib}"
104125
end
105126

106-
mkdir "build" do
127+
sdk = MacOS.sdk_path_if_needed
128+
args << "-DDEFAULT_SYSROOT=#{sdk}" if sdk
129+
130+
if MacOS.version == :mojave && MacOS::CLT.installed?
131+
# Mojave CLT linker via software update is older than Xcode.
132+
# Use it to retain compatibility.
133+
args << "-DCMAKE_LINKER=/Library/Developer/CommandLineTools/usr/bin/ld"
134+
end
135+
136+
llvmpath = buildpath/"llvm"
137+
mkdir llvmpath/"build" do
107138
system "cmake", "-G", "Unix Makefiles", "..", *(std_cmake_args + args)
108139
system "cmake", "--build", "."
109140
system "cmake", "--build", ".", "--target", "install"
110141
system "cmake", "--build", ".", "--target", "install-xcode-toolchain" if MacOS::Xcode.installed?
111142
end
112143

113-
(share/"clang-#{ver}/tools").install Dir["tools/clang/tools/scan-{build,view}"]
114-
inreplace share/"clang-#{ver}/tools/scan-build/bin/scan-build", "$RealBin/bin/clang", install_prefix/"bin/clang"
115-
(install_prefix/"bin").install_symlink share/"clang-#{ver}/tools/scan-view/bin/scan-view"
116-
(install_prefix/"bin").install_symlink share/"clang-#{ver}/tools/scan-build/bin/scan-build"
117-
(install_prefix/"share/man/man1").install_symlink share/"clang-#{ver}/tools/scan-build/scan-build.1"
118-
119-
(lib/"python2.7/site-packages").install "bindings/python/llvm" => "llvm-#{ver}",
120-
clang_buildpath/"bindings/python/clang" => "clang-#{ver}"
121-
122144
# replace the existing "clang -> clang-11" symlink
123145
rm install_prefix/"bin/clang"
124146
mv install_prefix/"bin/clang-#{ver}", install_prefix/"bin/clang"
@@ -128,16 +150,19 @@ def install
128150
ln_s "libLLVM.dylib", install_prefix/"lib/libLLVM-#{ver}.dylib"
129151

130152
# Set LC_LOAD_DYLIB entries to absolute paths
131-
system "install_name_tool", "-change", "@rpath/libLLVM.dylib", install_prefix/"lib/libLLVM.dylib", install_prefix/"lib/libLTO.dylib"
132-
system "install_name_tool", "-change", "@rpath/libLLVM.dylib", install_prefix/"lib/libLLVM.dylib", install_prefix/"lib/libclang.dylib"
153+
# system "install_name_tool", "-change", "@rpath/libLLVM.dylib", install_prefix/"lib/libLLVM.dylib", install_prefix/"lib/libLTO.dylib"
154+
# system "install_name_tool", "-change", "@rpath/libLLVM.dylib", install_prefix/"lib/libLLVM.dylib", install_prefix/"lib/libclang.dylib"
133155

134156
# Set LC_ID_DYLIB entries to absolute paths
135-
system "install_name_tool", "-id", install_prefix/"lib/libLLVM.dylib", install_prefix/"lib/libLLVM.dylib"
136-
system "install_name_tool", "-id", install_prefix/"lib/libLTO.dylib", install_prefix/"lib/libLTO.dylib"
137-
system "install_name_tool", "-id", install_prefix/"lib/libc++.1.0.dylib", install_prefix/"lib/libc++.1.0.dylib"
138-
system "install_name_tool", "-id", install_prefix/"lib/libclang.dylib", install_prefix/"lib/libclang.dylib"
139-
system "install_name_tool", "-id", install_prefix/"lib/libomp.dylib", install_prefix/"lib/libomp.dylib"
140-
system "install_name_tool", "-id", install_prefix/"lib/libunwind.1.0.dylib", install_prefix/"lib/libunwind.1.0.dylib"
157+
# system "install_name_tool", "-id", install_prefix/"lib/libLLVM.dylib", install_prefix/"lib/libLLVM.dylib"
158+
# system "install_name_tool", "-id", install_prefix/"lib/libLLVM-C.dylib", install_prefix/"lib/libLLVM-C.dylib"
159+
# system "install_name_tool", "-id", install_prefix/"lib/libLTO.dylib", install_prefix/"lib/libLTO.dylib"
160+
# system "install_name_tool", "-id", install_prefix/"lib/libc++.1.0.dylib", install_prefix/"lib/libc++.1.0.dylib"
161+
# system "install_name_tool", "-id", install_prefix/"lib/libc++abi.1.0.dylib", install_prefix/"lib/libc++abi.1.0.dylib"
162+
# system "install_name_tool", "-id", install_prefix/"lib/libclang.dylib", install_prefix/"lib/libclang.dylib"
163+
# system "install_name_tool", "-id", install_prefix/"lib/libclang-cpp.dylib", install_prefix/"lib/libclang-cpp.dylib"
164+
# system "install_name_tool", "-id", install_prefix/"lib/libomp.dylib", install_prefix/"lib/libomp.dylib"
165+
# system "install_name_tool", "-id", install_prefix/"lib/libunwind.1.0.dylib", install_prefix/"lib/libunwind.1.0.dylib"
141166

142167
Dir.glob(install_prefix/"bin/*") do |exec_path|
143168
basename = File.basename(exec_path)
@@ -150,13 +175,14 @@ def install
150175
end
151176
end
152177

153-
def caveats; <<~EOS
154-
Extra tools are installed in #{opt_share}/clang-#{ver}
178+
def caveats
179+
<<~EOS
180+
Extra tools are installed in #{opt_share}/clang-#{ver}
155181
156-
To link to libc++, something like the following is required:
157-
CXX="clang++-#{ver} -stdlib=libc++"
158-
CXXFLAGS="$CXXFLAGS -nostdinc++ -I#{opt_lib}/llvm-#{ver}/include/c++/v1"
159-
LDFLAGS="$LDFLAGS -L#{opt_lib}/llvm-#{ver}/lib"
182+
To link to libc++, something like the following is required:
183+
CXX="clang++-#{ver} -stdlib=libc++"
184+
CXXFLAGS="$CXXFLAGS -nostdinc++ -I#{opt_lib}/llvm-#{ver}/include/c++/v1"
185+
LDFLAGS="$LDFLAGS -L#{opt_lib}/llvm-#{ver}/lib"
160186
EOS
161187
end
162188

@@ -165,7 +191,7 @@ def caveats; <<~EOS
165191

166192
# test for sed errors since some llvm makefiles assume that sed
167193
# understands '\n' which is true for gnu sed and not for bsd sed.
168-
assert_no_match /PATH\)n/, (lib/"llvm-#{ver}/share/llvm/cmake/LLVMConfig.cmake").read
194+
assert_no_match(/PATH\)n/, (lib/"llvm-#{ver}/share/llvm/cmake/LLVMConfig.cmake").read)
169195
system "#{bin}/llvm-config-#{ver}", "--version"
170196
end
171197
end

0 commit comments

Comments
 (0)