bsd.cpu.mk revision 135678
1# $FreeBSD: head/share/mk/bsd.cpu.mk 135678 2004-09-23 22:59:31Z cognet $
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. if ${MACHINE_ARCH} == "i386"
9_CPUCFLAGS =
10MACHINE_CPU = i486
11. elif ${MACHINE_ARCH} == "alpha"
12_CPUCFLAGS = -mcpu=ev4 -mtune=ev5
13MACHINE_CPU = ev4
14. elif ${MACHINE_ARCH} == "amd64"
15MACHINE_CPU = amd64 sse2 sse
16. elif ${MACHINE_ARCH} == "ia64"
17_CPUCFLAGS =
18MACHINE_CPU = itanium
19. elif ${MACHINE_ARCH} == "sparc64"
20_CPUCFLAGS =
21. elif ${MACHINE_ARCH} == "arm"
22_CPUCFLAGS =
23MACHINE_CPU = arm
24. endif
25.else
26
27# Handle aliases (not documented in make.conf to avoid user confusion
28# between e.g. i586 and pentium)
29
30. if ${MACHINE_ARCH} == "i386"
31.  if ${CPUTYPE} == "pentium4"
32CPUTYPE = p4
33.  elif ${CPUTYPE} == "pentium3"
34CPUTYPE = p3
35.  elif ${CPUTYPE} == "pentiumpro"
36CPUTYPE = i686
37.  elif ${CPUTYPE} == "pentium"
38CPUTYPE = i586
39.  elif ${CPUTYPE} == "opteron"
40CPUTYPE = athlon-mp
41.  elif ${CPUTYPE} == "athlon64"
42CPUTYPE = athlon-xp
43.  elif ${CPUTYPE} == "k7"
44CPUTYPE = athlon
45.  endif
46. endif
47
48# Logic to set up correct gcc optimization flag.  This must be included
49# after /etc/make.conf so it can react to the local value of CPUTYPE
50# defined therein.  Consult:
51#	http://gcc.gnu.org/onlinedocs/gcc/DEC-Alpha-Options.html
52#	http://gcc.gnu.org/onlinedocs/gcc/IA-64-Options.html
53#	http://gcc.gnu.org/onlinedocs/gcc/RS-6000-and-PowerPC-Options.html
54#	http://gcc.gnu.org/onlinedocs/gcc/SPARC-Options.html
55#	http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86-64-Options.html
56
57. if ${MACHINE_ARCH} == "i386"
58.  if ${CPUTYPE} == "crusoe"
59_CPUCFLAGS = -march=i686 -falign-functions=0 -falign-jumps=0 -falign-loops=0
60_ICC_CPUCFLAGS = -tpp6 -xiM
61.  elif ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \
62    ${CPUTYPE} == "athlon-4"
63_CPUCFLAGS = -march=${CPUTYPE}
64_ICC_CPUCFLAGS = -tpp6 -xiMK
65.  elif ${CPUTYPE} == "athlon-tbird" || ${CPUTYPE} == "athlon"
66_CPUCFLAGS = -march=${CPUTYPE}
67_ICC_CPUCFLAGS = -tpp6 -xiM
68.  elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" || ${CPUTYPE} == "k6"
69_CPUCFLAGS = -march=${CPUTYPE}
70_ICC_CPUCFLAGS = -tpp6 -xi
71.  elif ${CPUTYPE} == "k5"
72_CPUCFLAGS = -march=pentium
73_ICC_CPUCFLAGS = -tpp5
74.  elif ${CPUTYPE} == "p4"
75_CPUCFLAGS = -march=pentium4
76_ICC_CPUCFLAGS = -tpp7 -xiMKW
77.  elif ${CPUTYPE} == "p3"
78_CPUCFLAGS = -march=pentium3
79_ICC_CPUCFLAGS = -tpp6 -xiMK
80.  elif ${CPUTYPE} == "p2"
81_CPUCFLAGS = -march=pentium2
82_ICC_CPUCFLAGS = -tpp6 -xiM
83.  elif ${CPUTYPE} == "i686"
84_CPUCFLAGS = -march=pentiumpro
85_ICC_CPUCFLAGS = -tpp6 -xiM
86.  elif ${CPUTYPE} == "i586/mmx"
87_CPUCFLAGS = -march=pentium-mmx
88_ICC_CPUCFLAGS = -tpp5 -xM
89.  elif ${CPUTYPE} == "i586"
90_CPUCFLAGS = -march=pentium
91_ICC_CPUCFLAGS = -tpp5
92.  elif ${CPUTYPE} == "i486"
93_CPUCFLAGS = -march=i486
94_ICC_CPUCFLAGS =
95.  endif
96. elif ${MACHINE_ARCH} == "alpha"
97.  if ${CPUTYPE} == "ev67"
98_CPUCFLAGS = -mcpu=ev67
99.  elif ${CPUTYPE} == "ev6"
100_CPUCFLAGS = -mcpu=ev6
101.  elif ${CPUTYPE} == "pca56"
102_CPUCFLAGS = -mcpu=pca56
103.  elif ${CPUTYPE} == "ev56"
104_CPUCFLAGS = -mcpu=ev56
105.  elif ${CPUTYPE} == "ev5"
106_CPUCFLAGS = -mcpu=ev5
107.  elif ${CPUTYPE} == "ev45"
108_CPUCFLAGS = -mcpu=ev45
109.  elif ${CPUTYPE} == "ev4"
110_CPUCFLAGS = -mcpu=ev4
111.  endif
112. elif ${MACHINE_ARCH} == "arm"
113.  if ${CPUTYPE} == "strongarm"
114_CPUCFLAGS = -mcpu=strongarm
115.  elif ${CPUTYPE} == "xscale"
116#XXX: gcc doesn't seem to like -mcpu=xscale, and dies while rebuilding itself
117#_CPUCFLAGS = -mcpu=xscale
118_CPUCFLAGS = -D__XSCALE__
119.  endif
120. endif
121
122# Set up the list of CPU features based on the CPU type.  This is an
123# unordered list to make it easy for client makefiles to test for the
124# presence of a CPU feature.
125
126. if ${MACHINE_ARCH} == "i386"
127.  if ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \
128    ${CPUTYPE} == "athlon-4"
129MACHINE_CPU = athlon-xp k7 3dnow sse mmx k6 k5 i586 i486 i386
130.  elif ${CPUTYPE} == "athlon" || ${CPUTYPE} == "athlon-tbird"
131MACHINE_CPU = athlon k7 3dnow mmx k6 k5 i586 i486 i386
132.  elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2"
133MACHINE_CPU = 3dnow mmx k6 k5 i586 i486 i386
134.  elif ${CPUTYPE} == "k6"
135MACHINE_CPU = mmx k6 k5 i586 i486 i386
136.  elif ${CPUTYPE} == "k5"
137MACHINE_CPU = k5 i586 i486 i386
138.  elif ${CPUTYPE} == "p4"
139MACHINE_CPU = sse2 sse i686 mmx i586 i486 i386
140.  elif ${CPUTYPE} == "p3"
141MACHINE_CPU = sse i686 mmx i586 i486 i386
142.  elif ${CPUTYPE} == "p2"
143MACHINE_CPU = i686 mmx i586 i486 i386
144.  elif ${CPUTYPE} == "i686"
145MACHINE_CPU = i686 i586 i486 i386
146.  elif ${CPUTYPE} == "i586/mmx"
147MACHINE_CPU = mmx i586 i486 i386
148.  elif ${CPUTYPE} == "i586"
149MACHINE_CPU = i586 i486 i386
150.  elif ${CPUTYPE} == "i486"
151MACHINE_CPU = i486 i386
152.  elif ${CPUTYPE} == "i386"
153MACHINE_CPU = i386
154.  endif
155. elif ${MACHINE_ARCH} == "alpha"
156.  if ${CPUTYPE} == "ev6"
157MACHINE_CPU = ev6 ev56 pca56 ev5 ev45 ev4
158.  elif ${CPUTYPE} == "pca56"
159MACHINE_CPU = pca56 ev56 ev5 ev45 ev4
160.  elif ${CPUTYPE} == "ev56"
161MACHINE_CPU = ev56 ev5 ev45 ev4
162.  elif ${CPUTYPE} == "ev5"
163MACHINE_CPU = ev5 ev45 ev4
164.  elif ${CPUTYPE} == "ev45"
165MACHINE_CPU = ev45 ev4
166.  elif ${CPUTYPE} == "ev4"
167MACHINE_CPU = ev4
168.  endif
169. elif ${MACHINE_ARCH} == "amd64"
170MACHINE_CPU = amd64 sse2 sse
171. elif ${MACHINE_ARCH} == "ia64"
172.  if ${CPUTYPE} == "itanium"
173MACHINE_CPU = itanium
174.  endif
175. endif
176.endif
177
178.if ${MACHINE_ARCH} == "alpha"
179_CPUCFLAGS += -mieee
180.endif
181
182# NB: COPTFLAGS is handled in /usr/src/sys/conf/kern.pre.mk
183
184.if !defined(NO_CPU_CFLAGS)
185. if ${CC} == "icc"
186CFLAGS += ${_ICC_CPUCFLAGS}
187. else
188CFLAGS += ${_CPUCFLAGS}
189. endif
190.endif
191