xref: /freebsd/share/mk/bsd.cpu.mk (revision c37420b0d5b3b6ef875fbf0b84a13f6f09be56d6)
1# $FreeBSD$
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. endif
113
114# Set up the list of CPU features based on the CPU type.  This is an
115# unordered list to make it easy for client makefiles to test for the
116# presence of a CPU feature.
117
118. if ${MACHINE_ARCH} == "i386"
119.  if ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \
120    ${CPUTYPE} == "athlon-4"
121MACHINE_CPU = athlon-xp k7 3dnow sse mmx k6 k5 i586 i486 i386
122.  elif ${CPUTYPE} == "athlon" || ${CPUTYPE} == "athlon-tbird"
123MACHINE_CPU = athlon k7 3dnow mmx k6 k5 i586 i486 i386
124.  elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2"
125MACHINE_CPU = 3dnow mmx k6 k5 i586 i486 i386
126.  elif ${CPUTYPE} == "k6"
127MACHINE_CPU = mmx k6 k5 i586 i486 i386
128.  elif ${CPUTYPE} == "k5"
129MACHINE_CPU = k5 i586 i486 i386
130.  elif ${CPUTYPE} == "p4"
131MACHINE_CPU = sse2 sse i686 mmx i586 i486 i386
132.  elif ${CPUTYPE} == "p3"
133MACHINE_CPU = sse i686 mmx i586 i486 i386
134.  elif ${CPUTYPE} == "p2"
135MACHINE_CPU = i686 mmx i586 i486 i386
136.  elif ${CPUTYPE} == "i686"
137MACHINE_CPU = i686 i586 i486 i386
138.  elif ${CPUTYPE} == "i586/mmx"
139MACHINE_CPU = mmx i586 i486 i386
140.  elif ${CPUTYPE} == "i586"
141MACHINE_CPU = i586 i486 i386
142.  elif ${CPUTYPE} == "i486"
143MACHINE_CPU = i486 i386
144.  elif ${CPUTYPE} == "i386"
145MACHINE_CPU = i386
146.  endif
147. elif ${MACHINE_ARCH} == "alpha"
148.  if ${CPUTYPE} == "ev6"
149MACHINE_CPU = ev6 ev56 pca56 ev5 ev45 ev4
150.  elif ${CPUTYPE} == "pca56"
151MACHINE_CPU = pca56 ev56 ev5 ev45 ev4
152.  elif ${CPUTYPE} == "ev56"
153MACHINE_CPU = ev56 ev5 ev45 ev4
154.  elif ${CPUTYPE} == "ev5"
155MACHINE_CPU = ev5 ev45 ev4
156.  elif ${CPUTYPE} == "ev45"
157MACHINE_CPU = ev45 ev4
158.  elif ${CPUTYPE} == "ev4"
159MACHINE_CPU = ev4
160.  endif
161. elif ${MACHINE_ARCH} == "amd64"
162MACHINE_CPU = amd64 sse2 sse
163. elif ${MACHINE_ARCH} == "ia64"
164.  if ${CPUTYPE} == "itanium"
165MACHINE_CPU = itanium
166.  endif
167. endif
168.endif
169
170.if ${MACHINE_ARCH} == "alpha"
171_CPUCFLAGS += -mieee
172.endif
173
174# NB: COPTFLAGS is handled in /usr/src/sys/conf/kern.pre.mk
175
176.if !defined(NO_CPU_CFLAGS)
177. if ${CC} == "icc"
178CFLAGS += ${_ICC_CPUCFLAGS}
179. else
180CFLAGS += ${_CPUCFLAGS}
181. endif
182.endif
183