diff options
| author | Alex Wang | 2016-09-24 23:56:54 -0400 |
|---|---|---|
| committer | Alex Wang | 2016-11-18 08:54:09 -0500 |
| commit | 3e4544025d664fe381be96bf2526f08b7464e3cb (patch) | |
| tree | 23fb992f838c19177378727f246d1004a3e80cd2 /Library | |
| parent | 5e073f1f404f2d2aaf16c30f224bdec91741fba8 (diff) | |
| download | brew-3e4544025d664fe381be96bf2526f08b7464e3cb.tar.bz2 | |
Prefer brewed Clang over gcc-6 for needs :openmp
Clang has fully implemented OpenMP support as of LLVM 3.7, so if OpenMP
is required by a formula gcc is no longer the only choice of compiler.
Clang should be preferred over gcc because using gcc meant linking
against libstdc++, which is ABI incompatible with libc++. This may be
unnoticeable for some users, but it causes other builds to fail, e.g.
pstoedit when imagemagick was built with OpenMP. pstoedit is required
for the octave formula, so for some users this could be a significant
problem.
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/compilers.rb | 9 | ||||
| -rw-r--r-- | Library/Homebrew/development_tools.rb | 7 | ||||
| -rwxr-xr-x | Library/Homebrew/shims/super/cc | 6 | ||||
| l--------- | Library/Homebrew/shims/super/llvm_clang | 1 | ||||
| l--------- | Library/Homebrew/shims/super/llvm_clang++ | 1 |
5 files changed, 19 insertions, 5 deletions
diff --git a/Library/Homebrew/compilers.rb b/Library/Homebrew/compilers.rb index fdfcab817..9ee847db0 100644 --- a/Library/Homebrew/compilers.rb +++ b/Library/Homebrew/compilers.rb @@ -3,9 +3,10 @@ module CompilerConstants GNU_GCC_VERSIONS = %w[4.3 4.4 4.5 4.6 4.7 4.8 4.9 5 6 7].freeze GNU_GCC_REGEXP = /^gcc-(4\.[3-9]|[5-7])$/ COMPILER_SYMBOL_MAP = { - "gcc-4.0" => :gcc_4_0, - "gcc-4.2" => :gcc, - "clang" => :clang, + "gcc-4.0" => :gcc_4_0, + "gcc-4.2" => :gcc, + "clang" => :clang, + "llvm_clang" => :llvm_clang, }.freeze COMPILERS = COMPILER_SYMBOL_MAP.values + @@ -86,7 +87,7 @@ class CompilerSelector Compiler = Struct.new(:name, :version) COMPILER_PRIORITY = { - clang: [:clang, :gcc, :gnu, :gcc_4_0], + clang: [:clang, :gcc, :gnu, :gcc_4_0, :llvm_clang], gcc: [:gcc, :gnu, :clang, :gcc_4_0], gcc_4_0: [:gcc_4_0, :gcc, :gnu, :clang], }.freeze diff --git a/Library/Homebrew/development_tools.rb b/Library/Homebrew/development_tools.rb index 62f9b3d71..d081067a8 100644 --- a/Library/Homebrew/development_tools.rb +++ b/Library/Homebrew/development_tools.rb @@ -86,6 +86,13 @@ class DevelopmentTools end end + def llvm_clang_build_version + @llvm_clang_build_version ||= if Tab.for_name "llvm" + path = Formulary.factory("llvm").opt_prefix/"bin/clang" + `#{path} --version`[/clang version (\d\.\d\.\d)/, 1] + end + end + def non_apple_gcc_version(cc) (@non_apple_gcc_version ||= {}).fetch(cc) do path = HOMEBREW_PREFIX.join("opt", "gcc", "bin", cc) diff --git a/Library/Homebrew/shims/super/cc b/Library/Homebrew/shims/super/cc index 1552f412d..167fe8c21 100755 --- a/Library/Homebrew/shims/super/cc +++ b/Library/Homebrew/shims/super/cc @@ -58,6 +58,8 @@ class Cmd @tool ||= case @arg0 when "ld" then "ld" when "cpp" then "cpp" + when /llvm_(clang(\+\+)?)/ + "#{ENV["HOMEBREW_PREFIX"]}/opt/llvm/bin/#{$1}" when /\w\+\+(-\d(\.\d)?)?$/ case ENV["HOMEBREW_CC"] when /clang/ @@ -154,7 +156,7 @@ class Cmd /^-O[0-9zs]?$/, "-fast", "-no-cpp-precomp", "-pedantic", "-pedantic-errors", "-Wno-long-double", "-Wno-unused-but-set-variable" - when "-fopenmp", "-lgomp", "-mno-fused-madd", "-fforce-addr", "-fno-defer-pop", + when "-mno-fused-madd", "-fforce-addr", "-fno-defer-pop", "-mno-dynamic-no-pic", "-fearly-inlining", /^-f(?:no-)?inline-functions-called-once/, /^-finline-limit/, /^-f(?:no-)?check-new/, "-fno-delete-null-pointer-checks", "-fcaller-saves", "-fthread-jumps", "-fno-reorder-blocks", "-fcse-skip-blocks", @@ -163,6 +165,8 @@ class Cmd "-fuse-linker-plugin", "-frounding-math" # clang doesn't support these flags args << arg unless tool =~ /^clang/ + when "-fopenmp", "-lgomp" + args << arg if tool =~ /^llvm_clang/ when "--fast-math" arg = "-ffast-math" if tool =~ /^clang/ args << arg diff --git a/Library/Homebrew/shims/super/llvm_clang b/Library/Homebrew/shims/super/llvm_clang new file mode 120000 index 000000000..2652f5f42 --- /dev/null +++ b/Library/Homebrew/shims/super/llvm_clang @@ -0,0 +1 @@ +cc
\ No newline at end of file diff --git a/Library/Homebrew/shims/super/llvm_clang++ b/Library/Homebrew/shims/super/llvm_clang++ new file mode 120000 index 000000000..2652f5f42 --- /dev/null +++ b/Library/Homebrew/shims/super/llvm_clang++ @@ -0,0 +1 @@ +cc
\ No newline at end of file |
