11class 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
171197end
0 commit comments