aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/os/mac/hardware.rb
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew/os/mac/hardware.rb')
-rw-r--r--Library/Homebrew/os/mac/hardware.rb102
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|