aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Howell2009-09-03 22:39:49 +0100
committerMax Howell2009-09-03 22:39:49 +0100
commita12569699e299d470ec9746d0dc0ae1e9ce940f7 (patch)
tree8bcea6f278f9da4fea79117fd8796f182f6ee885
parent18d9fbee9804f0862ed42ddd89b00e3999470c9e (diff)
downloadbrew-a12569699e299d470ec9746d0dc0ae1e9ce940f7.tar.bz2
Fix some "GCC cannot create executables"
This regards Issue Homebrew/homebrew#30. Turns out -march=native isn't supported by Apple's GCC, but while investigating it I found they'd back ported the -march=core2 option, so we win anyway. Logic reverted to how it was yesterday. I moved the gcc options stuff back to brewkit.rb as we manipulate the cflags more later and it seemed bad form to split the logic for this area over two files. Additionally the brew command exits immediately on powerpc now. Brewkit doesn't throw as theoretically it is a useful library file for other projects.
-rw-r--r--Library/Homebrew/brewkit.rb81
-rw-r--r--Library/Homebrew/hardware.rb35
-rwxr-xr-xbin/brew16
3 files changed, 48 insertions, 84 deletions
diff --git a/Library/Homebrew/brewkit.rb b/Library/Homebrew/brewkit.rb
index 18d30a4d1..2ce317ad6 100644
--- a/Library/Homebrew/brewkit.rb
+++ b/Library/Homebrew/brewkit.rb
@@ -29,50 +29,56 @@ require 'hardware'
# TODO
# 1. Indeed, there should be an option to build 32 or 64 bit binaries
# 2. Homebrew will not support building 32 and 64 bit lipo'd binaries, I
-# want to mind, but the simple fact is it is difficult to force most of the
+# want to, but the simple fact is it is difficult to force most of the
# build systems we support to do it.
`/usr/bin/sw_vers -productVersion` =~ /(10\.\d+)(\.\d+)?/
MACOS_VERSION=$1.to_f
+ENV['MACOSX_DEPLOYMENT_TARGET']=$1
-ENV['MACOSX_DEPLOYMENT_TARGET']=MACOS_VERSION.to_s
-ENV['LDFLAGS']='' # to be consistent, we ignore the existing environment
-
-# this is first, so when you see it in output, you notice it
-cflags='-O3'
+cflags=%w[-O3]
+# optimise all the way to eleven, references:
+# http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel
+# http://forums.mozillazine.org/viewtopic.php?f=12&t=577299
+# http://gcc.gnu.org/onlinedocs/gcc-4.2.1/gcc/i386-and-x86_002d64-Options.html
if MACOS_VERSION >= 10.6
- if Hardware.is_64bit?
- # 64 bits baby!
- cflags<<" -m64"
- ENV['LDFLAGS']="-arch x86_64"
+ case Hardware.intel_family
+ when :penryn
+ cflags<<'-march=core2'<<'-msse4.1'
+ when :core2
+ cflags<<"-march=core2"<<'-msse4'
+ when :core1
+ cflags<<"-march=prescott"<<'-msse3'
end
+ ENV['LDFLAGS']="-arch x86_64"
+ cflags<<'-m64'<<'-mmmx'
else
- # GCC 4.2.1 is smart and will figure out the right compile flags
- # http://gcc.gnu.org/onlinedocs/gcc-4.2.1/gcc/i386-and-x86_002d64-Options.html
- cflags<<"-march=native"
-end
-
-case Hardware.cpu_type
-when :ppc then abort "Sorry, Homebrew does not support PowerPC architectures"
-when :dunno then abort "Sorry, Homebrew cannot determine what kind of Mac this is!"
+ case Hardware.intel_family
+ when :penryn
+ cflags<<"-march=nocona"<<'-msse4.1'
+ when :core2
+ cflags<<"-march=nocona"<<'-msse4'
+ when :core1
+ cflags<<"-march=prescott"<<'-msse3'
+ end
+ # to be consistent with cflags, we ignore the existing environment
+ ENV['LDFLAGS']=""
+ cflags<<'-mmmx'<<"-mfpmath=sse"
+
+ # gcc 4.0 is the default on Leopard
+ ENV['CC']='gcc-4.2'
+ ENV['CXX']='g++-4.2'
end
# -w: keep signal to noise high
# -fomit-frame-pointer: we are not debugging this software, we are using it
-ENV['CFLAGS']="#{cflags} -w -pipe -fomit-frame-pointer -mmacosx-version-min=#{MACOS_VERSION}"
-ENV['CXXFLAGS']=ENV['CFLAGS']
+ENV['CFLAGS']=ENV['CXXFLAGS']="#{cflags*' '} -w -pipe -fomit-frame-pointer -mmacosx-version-min=#{MACOS_VERSION}"
-# lets use gcc 4.2, Xcode does after all
-if MACOS_VERSION==10.5
- ENV['CC']='gcc-4.2'
- ENV['CXX']='g++-4.2'
-end
# compile faster
ENV['MAKEFLAGS']="-j#{Hardware.processor_count}"
-
# /usr/local is always in the build system path
unless HOMEBREW_PREFIX.to_s == '/usr/local'
ENV['CPPFLAGS']="-I#{HOMEBREW_PREFIX}/include"
@@ -88,23 +94,14 @@ module HomebrewEnvExtension
alias_method :j1, :deparallelize
def gcc_4_0_1
case MACOS_VERSION
- when 10.5
- self['CC']=nil
- self['CXX']=nil
- when 10.6..11.0
- self['CC']='gcc-4.0'
- self['CXX']='g++-4.0'
+ when 10.5
+ self['CC']=nil
+ self['CXX']=nil
+ when 10.6..11.0
+ self['CC']='gcc-4.0'
+ self['CXX']='g++-4.0'
+ remove_from_cflags '-march=core2' # we *should* add back in stuff but meh for now
end
-
- # argh, we have to figure out the compile options ourselves and get
- # rid of -march=native, so we optimise all the way to eleven, references:
- # http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel
- # http://forums.mozillazine.org/viewtopic.php?f=12&t=577299
- # http://gcc.gnu.org/onlinedocs/gcc-4.2.1/gcc/i386-and-x86_002d64-Options.html
- remove_from_cflags '-march=native'
- append_to_cflags Hardware.gcc_march
- append_to_cflags Hardware.gcc_msse
- append_to_cflags Hardware.gcc_mmx
end
def osx_10_4
self['MACOSX_DEPLOYMENT_TARGET']=nil
diff --git a/Library/Homebrew/hardware.rb b/Library/Homebrew/hardware.rb
index 55de6fd0b..3059f0875 100644
--- a/Library/Homebrew/hardware.rb
+++ b/Library/Homebrew/hardware.rb
@@ -60,41 +60,6 @@ class Hardware
@@processor_count ||= `/usr/sbin/sysctl -n hw.ncpu`.to_i
end
- def self.gcc_march # what to pass to gcc
- @@gcc_march ||= if self.cpu_type == :intel
- case self.intel_family
- when :core
- " -march=prescott"
- when :core2, :penryn, :nehalem
- # GCC 4.3 has a -march=core2, but this isn't 4.3 and nocona is correct
- " -march=nocona"
- end
- else
- ""
- end
- end
-
- def self.gcc_msse # what to pass to gcc
- # avoid sse4 for now in case it blows up
- @@gcc_msse ||= if sysctl_bool("hw.optional.sse3")
- " -msse3 -mfpmath=sse"
- else
- ""
- end
- end
-
- def self.gcc_mmmx # what to pass to gcc
- @@gcc_mmmx ||= if sysctl_bool("hw.optional.mmx")
- " -mmmx"
- else
- ""
- end
- end
-
- def self.is_64bit?
- @@is_64bit ||= sysctl_bool("hw.cpu64bit_capable")
- end
-
protected
def self.sysctl_bool(property)
result = nil
diff --git a/bin/brew b/bin/brew
index da6217a3b..e58fa38db 100755
--- a/bin/brew
+++ b/bin/brew
@@ -1,9 +1,9 @@
#!/usr/bin/ruby
$:.unshift ENV['RUBYLIB']=File.expand_path(__FILE__+'/../../Library/Homebrew')
-
require 'pathname+yeast'
require 'ARGV+yeast'
require 'utils'
+require 'hardware'
require 'brew.h'
if Process.uid == 0
@@ -20,17 +20,19 @@ HOMEBREW_VERSION='0.4'
HOMEBREW_WWW='http://bit.ly/Homebrew'
HOMEBREW_USER_AGENT="Homebrew #{HOMEBREW_VERSION} (Ruby #{VERSION}; Mac OS X 10.5 Leopard)"
-if %w[/ /usr].include? HOMEBREW_PREFIX.to_s then abort <<-troba
-You have placed Homebrew at the prefix: #{HOMEBREW_PREFIX}
-This is not currently supported. Voice your support for this feature at:
-#{HOMEBREW_WWW}
-troba
+if %w[/ /usr].include? HOMEBREW_PREFIX.to_s then abort <<-EOS
+ You have placed Homebrew at the prefix: #{HOMEBREW_PREFIX}
+ This is not currently supported. Voice your support for this feature at:
+ #{HOMEBREW_WWW}
+ EOS
end
-
if `sw_vers -productVersion` =~ /10\.(\d)\.(\d+)/ and $1.to_i < 5
onoe "Homebrew requires Leopard or higher"
abort "But thanks for your interest anyway!"
end
+if Hardware.cpu_type == :ppc or Hardware.cpu_type == :dunno
+ abort "Sorry, Homebrew does not support your computer's CPU architecture."
+end
begin