bsd.cpu.mk revision 219376
1# $FreeBSD: head/share/mk/bsd.cpu.mk 219376 2011-03-07 14:58:23Z mm $
2
3# Set default CPU compile flags and baseline CPUTYPE for each arch.  The
4# compile flags must support the minimum CPU type for each architecture but
5# may tune support for more advanced processors.
6
7.if !defined(CPUTYPE) || empty(CPUTYPE)
8_CPUCFLAGS =
9. if ${MACHINE_CPUARCH} == "i386"
10MACHINE_CPU = i486
11. elif ${MACHINE_CPUARCH} == "amd64"
12MACHINE_CPU = amd64 sse2 sse mmx
13. elif ${MACHINE_CPUARCH} == "ia64"
14MACHINE_CPU = itanium
15. elif ${MACHINE_CPUARCH} == "powerpc"
16MACHINE_CPU = aim
17. elif ${MACHINE_CPUARCH} == "sparc64"
18MACHINE_CPU = ultrasparc
19. elif ${MACHINE_CPUARCH} == "arm"
20MACHINE_CPU = arm
21. elif ${MACHINE_CPUARCH} == "mips"
22MACHINE_CPU = mips
23. endif
24.else
25
26# Handle aliases (not documented in make.conf to avoid user confusion
27# between e.g. i586 and pentium)
28
29. if ${MACHINE_CPUARCH} == "i386"
30.  if ${CPUTYPE} == "nocona"
31CPUTYPE = prescott
32.  elif ${CPUTYPE} == "core" || ${CPUTYPE} == "core2"
33CPUTYPE = prescott
34.  elif ${CPUTYPE} == "p4"
35CPUTYPE = pentium4
36.  elif ${CPUTYPE} == "p4m"
37CPUTYPE = pentium4m
38.  elif ${CPUTYPE} == "p3"
39CPUTYPE = pentium3
40.  elif ${CPUTYPE} == "p3m"
41CPUTYPE = pentium3m
42.  elif ${CPUTYPE} == "p-m"
43CPUTYPE = pentium-m
44.  elif ${CPUTYPE} == "p2"
45CPUTYPE = pentium2
46.  elif ${CPUTYPE} == "i686"
47CPUTYPE = pentiumpro
48.  elif ${CPUTYPE} == "i586/mmx"
49CPUTYPE = pentium-mmx
50.  elif ${CPUTYPE} == "i586"
51CPUTYPE = pentium
52.  elif ${CPUTYPE} == "opteron-sse3" || ${CPUTYPE} == "athlon64-sse3" || \
53     ${CPUTYPE} == "k8-sse3"
54CPUTYPE = prescott
55.  elif ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" || \
56     ${CPUTYPE} == "k8"
57CPUTYPE = athlon-mp
58.  elif ${CPUTYPE} == "k7"
59CPUTYPE = athlon
60.  endif
61. elif ${MACHINE_CPUARCH} == "amd64"
62.  if ${CPUTYPE} == "prescott"
63CPUTYPE = nocona
64.  endif
65. elif ${MACHINE_ARCH} == "sparc64"
66.  if ${CPUTYPE} == "us"
67CPUTYPE = ultrasparc
68.  elif ${CPUTYPE} == "us3"
69CPUTYPE = ultrasparc3
70.  endif
71. endif
72
73###############################################################################
74# Logic to set up correct gcc optimization flag.  This must be included
75# after /etc/make.conf so it can react to the local value of CPUTYPE
76# defined therein.  Consult:
77#	http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html
78#	http://gcc.gnu.org/onlinedocs/gcc/IA_002d64-Options.html
79#	http://gcc.gnu.org/onlinedocs/gcc/RS_002f6000-and-PowerPC-Options.html
80#	http://gcc.gnu.org/onlinedocs/gcc/MIPS-Options.html
81#	http://gcc.gnu.org/onlinedocs/gcc/SPARC-Options.html
82#	http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html
83
84. if ${MACHINE_CPUARCH} == "i386"
85.  if ${CPUTYPE} == "crusoe"
86_CPUCFLAGS = -march=i686 -falign-functions=0 -falign-jumps=0 -falign-loops=0
87.  elif ${CPUTYPE} == "k5"
88_CPUCFLAGS = -march=pentium
89.  else
90_CPUCFLAGS = -march=${CPUTYPE}
91.  endif # GCC on 'i386'
92.  if ${CPUTYPE} == "crusoe"
93_ICC_CPUCFLAGS = -tpp6 -xiM
94.  elif ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \
95    ${CPUTYPE} == "athlon-4"
96_ICC_CPUCFLAGS = -tpp6 -xiMK
97.  elif ${CPUTYPE} == "athlon-tbird" || ${CPUTYPE} == "athlon"
98_ICC_CPUCFLAGS = -tpp6 -xiM
99.  elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" || ${CPUTYPE} == "k6"
100_ICC_CPUCFLAGS = -tpp6 -xi
101.  elif ${CPUTYPE} == "k5"
102_ICC_CPUCFLAGS = -tpp5
103.  elif ${CPUTYPE} == "pentium4" || ${CPUTYPE} == "pentium4m"
104_ICC_CPUCFLAGS = -tpp7 -xiMKW
105.  elif ${CPUTYPE} == "pentium3" || ${CPUTYPE} == "pentium3m" || \
106     ${CPUTYPE} == "pentium-m"
107_ICC_CPUCFLAGS = -tpp6 -xiMK
108.  elif ${CPUTYPE} == "pentium2" || ${CPUTYPE} == "pentiumpro"
109_ICC_CPUCFLAGS = -tpp6 -xiM
110.  elif ${CPUTYPE} == "pentium-mmx"
111_ICC_CPUCFLAGS = -tpp5 -xM
112.  elif ${CPUTYPE} == "pentium"
113_ICC_CPUCFLAGS = -tpp5
114.  else
115_ICC_CPUCFLAGS =
116.  endif # ICC on 'i386'
117. elif ${MACHINE_CPUARCH} == "amd64"
118_CPUCFLAGS = -march=${CPUTYPE}
119. elif ${MACHINE_CPUARCH} == "arm"
120.  if ${CPUTYPE} == "xscale"
121#XXX: gcc doesn't seem to like -mcpu=xscale, and dies while rebuilding itself
122#_CPUCFLAGS = -mcpu=xscale
123_CPUCFLAGS = -march=armv5te -D__XSCALE__
124.  else
125_CPUCFLAGS = -mcpu=${CPUTYPE}
126.  endif
127. elif ${MACHINE_ARCH} == "powerpc"
128.  if ${CPUTYPE} == "e500"
129_CPUCFLAGS = -Wa,-me500 -msoft-float
130.  else
131_CPUCFLAGS = -mcpu=${CPUTYPE} -mno-powerpc64
132.  endif
133. elif ${MACHINE_ARCH} == "powerpc64"
134_CPUCFLAGS = -mcpu=${CPUTYPE}
135. elif ${MACHINE_CPUARCH} == "mips"
136.  if ${CPUTYPE} == "mips32"
137_CPUCFLAGS = -march=mips32
138.  elif ${CPUTYPE} == "mips32r2"
139_CPUCFLAGS = -march=mips32r2
140.  elif ${CPUTYPE} == "mips64"
141_CPUCFLAGS = -march=mips64
142.  elif ${CPUTYPE} == "mips64r2"
143_CPUCFLAGS = -march=mips64r2
144.  elif ${CPUTYPE} == "mips4kc"
145_CPUCFLAGS = -march=4kc
146.  elif ${CPUTYPE} == "mips24kc"
147_CPUCFLAGS = -march=24kc
148.  endif
149. elif ${MACHINE_ARCH} == "sparc64"
150.  if ${CPUTYPE} == "v9"
151_CPUCFLAGS = -mcpu=v9
152.  elif ${CPUTYPE} == "ultrasparc"
153_CPUCFLAGS = -mcpu=ultrasparc
154.  elif ${CPUTYPE} == "ultrasparc3"
155_CPUCFLAGS = -mcpu=ultrasparc3
156.  endif
157. endif
158
159# Set up the list of CPU features based on the CPU type.  This is an
160# unordered list to make it easy for client makefiles to test for the
161# presence of a CPU feature.
162
163. if ${MACHINE_CPUARCH} == "i386"
164.  if ${CPUTYPE} == "opteron-sse3" || ${CPUTYPE} == "athlon64-sse3"
165MACHINE_CPU = athlon-xp athlon k7 3dnow sse3 sse2 sse mmx k6 k5 i586 i486 i386
166.  elif ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64"
167MACHINE_CPU = athlon-xp athlon k7 3dnow sse2 sse mmx k6 k5 i586 i486 i386
168.  elif ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \
169    ${CPUTYPE} == "athlon-4"
170MACHINE_CPU = athlon-xp athlon k7 3dnow sse mmx k6 k5 i586 i486 i386
171.  elif ${CPUTYPE} == "athlon" || ${CPUTYPE} == "athlon-tbird"
172MACHINE_CPU = athlon k7 3dnow mmx k6 k5 i586 i486 i386
173.  elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" || ${CPUTYPE} == "geode"
174MACHINE_CPU = 3dnow mmx k6 k5 i586 i486 i386
175.  elif ${CPUTYPE} == "k6"
176MACHINE_CPU = mmx k6 k5 i586 i486 i386
177.  elif ${CPUTYPE} == "k5"
178MACHINE_CPU = k5 i586 i486 i386
179.  elif ${CPUTYPE} == "c3"
180MACHINE_CPU = 3dnow mmx i586 i486 i386
181.  elif ${CPUTYPE} == "c3-2"
182MACHINE_CPU = sse mmx i586 i486 i386
183.  elif ${CPUTYPE} == "c7"
184MACHINE_CPU = sse3 sse2 sse i686 mmx i586 i486 i386
185.  elif ${CPUTYPE} == "prescott"
186MACHINE_CPU = sse3 sse2 sse i686 mmx i586 i486 i386
187.  elif ${CPUTYPE} == "pentium4" || ${CPUTYPE} == "pentium4m" || ${CPUTYPE} == "pentium-m"
188MACHINE_CPU = sse2 sse i686 mmx i586 i486 i386
189.  elif ${CPUTYPE} == "pentium3" || ${CPUTYPE} == "pentium3m"
190MACHINE_CPU = sse i686 mmx i586 i486 i386
191.  elif ${CPUTYPE} == "pentium2"
192MACHINE_CPU = i686 mmx i586 i486 i386
193.  elif ${CPUTYPE} == "pentiumpro"
194MACHINE_CPU = i686 i586 i486 i386
195.  elif ${CPUTYPE} == "pentium-mmx"
196MACHINE_CPU = mmx i586 i486 i386
197.  elif ${CPUTYPE} == "pentium"
198MACHINE_CPU = i586 i486 i386
199.  elif ${CPUTYPE} == "i486"
200MACHINE_CPU = i486 i386
201.  elif ${CPUTYPE} == "i386"
202MACHINE_CPU = i386
203.  endif
204. elif ${MACHINE_CPUARCH} == "amd64"
205.  if ${CPUTYPE} == "opteron-sse3" || ${CPUTYPE} == "athlon64-sse3" || ${CPUTYPE} == "k8-sse3"
206MACHINE_CPU = k8 3dnow sse3
207.  elif ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" || ${CPUTYPE} == "k8"
208MACHINE_CPU = k8 3dnow
209.  elif ${CPUTYPE} == "nocona" || ${CPUTYPE} == "core2"
210MACHINE_CPU = sse3
211.  endif
212MACHINE_CPU += amd64 sse2 sse mmx
213. elif ${MACHINE_CPUARCH} == "ia64"
214.  if ${CPUTYPE} == "itanium"
215MACHINE_CPU = itanium
216.  endif
217. elif ${MACHINE_ARCH} == "powerpc"
218.  if ${CPUTYPE} == "e500"
219MACHINE_CPU = booke
220.  endif
221. elif ${MACHINE_ARCH} == "sparc64"
222.  if ${CPUTYPE} == "v9"
223MACHINE_CPU = v9
224.  elif ${CPUTYPE} == "ultrasparc"
225MACHINE_CPU = v9 ultrasparc
226.  elif ${CPUTYPE} == "ultrasparc3"
227MACHINE_CPU = v9 ultrasparc ultrasparc3
228.  endif
229. endif
230.endif
231
232.if ${MACHINE_CPUARCH} == "mips"
233CFLAGS += -G0
234.endif
235
236# NB: COPTFLAGS is handled in /usr/src/sys/conf/kern.pre.mk
237
238.if !defined(NO_CPU_CFLAGS)
239. if ${CC} == "icc"
240CFLAGS += ${_ICC_CPUCFLAGS}
241. else
242CFLAGS += ${_CPUCFLAGS}
243. endif
244.endif
245