blob: 4c79243727458413bd38d2e548a0125958c03db0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
class Hardware
# These methods use info spewed out by sysctl.
# Look in <mach/machine.h> for decoding info.
def self.cpu_type
@@cpu_type ||= `/usr/sbin/sysctl -n hw.cputype`.to_i
case @@cpu_type
when 7
:intel
when 18
:ppc
else
:dunno
end
end
def self.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
else
:dunno
end
end
def self.processor_count
@@processor_count ||= `/usr/sbin/sysctl -n hw.ncpu`.to_i
end
def self.cores_as_words
case Hardware.processor_count
when 1 then 'single'
when 2 then 'dual'
when 4 then 'quad'
else
Hardware.processor_count
end
end
def self.is_32_bit?
not self.is_64_bit?
end
def self.is_64_bit?
self.sysctl_bool("hw.cpu64bit_capable")
end
def self.bits
Hardware.is_64_bit? ? 64 : 32
end
protected
def self.sysctl_bool(property)
result = nil
IO.popen("/usr/sbin/sysctl -n #{property} 2>/dev/null") do |f|
result = f.gets.to_i # should be 0 or 1
end
$?.success? && result == 1 # sysctl call succeded and printed 1
end
end
def snow_leopard_64?
MACOS_VERSION >= 10.6 and Hardware.is_64_bit?
end
|