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 | |
| 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.
| -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 | 
