diff options
Diffstat (limited to 'Library/Homebrew/os/mac/hardware.rb')
| -rw-r--r-- | Library/Homebrew/os/mac/hardware.rb | 102 |
1 files changed, 71 insertions, 31 deletions
diff --git a/Library/Homebrew/os/mac/hardware.rb b/Library/Homebrew/os/mac/hardware.rb index ffdc6246c..e70ce7b8a 100644 --- a/Library/Homebrew/os/mac/hardware.rb +++ b/Library/Homebrew/os/mac/hardware.rb @@ -1,10 +1,20 @@ -module MacOSHardware +module MacCPUs + OPTIMIZATION_FLAGS = { + :penryn => '-march=core2 -msse4.1', + :core2 => '-march=core2', + :core => '-march=prescott', + :g3 => '-mcpu=750', + :g4 => '-mcpu=7400', + :g4e => '-mcpu=7450', + :g5 => '-mcpu=970' + } + def optimization_flags; OPTIMIZATION_FLAGS.dup; end + # These methods use info spewed out by sysctl. # Look in <mach/machine.h> for decoding info. - def cpu_type - @@cpu_type ||= `/usr/sbin/sysctl -n hw.cputype`.to_i - - case @@cpu_type + def type + @type ||= `/usr/sbin/sysctl -n hw.cputype`.to_i + case @type when 7 :intel when 18 @@ -14,39 +24,69 @@ module MacOSHardware end end - def intel_family - @@intel_family ||= `/usr/sbin/sysctl -n hw.cpufamily`.to_i - - case @@intel_family - when 0x73d67300 # Yonah: Core Solo/Duo - :core - when 0x426f69ef # Merom: Core 2 Duo - :core2 - when 0x78ea4fbc # Penryn - :penryn - when 0x6b5a4cd2 # Nehalem - :nehalem - when 0x573B5EEC # Arrandale - :arrandale - when 0x5490B78C # Sandy Bridge - :sandybridge - when 0x1F65E835 # Ivy Bridge - :ivybridge - else - :dunno + def family + if type == :intel + @intel_family ||= `/usr/sbin/sysctl -n hw.cpufamily`.to_i + case @intel_family + when 0x73d67300 # Yonah: Core Solo/Duo + :core + when 0x426f69ef # Merom: Core 2 Duo + :core2 + when 0x78ea4fbc # Penryn + :penryn + when 0x6b5a4cd2 # Nehalem + :nehalem + when 0x573B5EEC # Arrandale + :arrandale + when 0x5490B78C # Sandy Bridge + :sandybridge + when 0x1F65E835 # Ivy Bridge + :ivybridge + else + :dunno + end + elsif type == :ppc + @ppc_family ||= `/usr/sbin/sysctl -n hw.cpusubtype`.to_i + case @ppc_family + when 9 + :g3 # PowerPC 750 + when 10 + :g4 # PowerPC 7400 + when 11 + :g4e # PowerPC 7450 + when 100 + :g5 # PowerPC 970 + else + :dunno + end end end - def processor_count - @@processor_count ||= `/usr/sbin/sysctl -n hw.ncpu`.to_i + def cores + @cores ||= `/usr/sbin/sysctl -n hw.ncpu`.to_i + end + + def bits + return @bits if defined? @bits + + is_64_bit = sysctl_bool("hw.cpu64bit_capable") + @bits ||= is_64_bit ? 64 : 32 + end + + def altivec? + type == :ppc && family != :g3 end - def is_64_bit? - return @@is_64_bit if defined? @@is_64_bit - @@is_64_bit = sysctl_bool("hw.cpu64bit_capable") + def sse3? + type == :intel end -protected + def sse4? + type == :intel && (family != :core && family != :core2) + end + + protected + def sysctl_bool(property) result = nil IO.popen("/usr/sbin/sysctl -n #{property} 2>/dev/null") do |f| |
