bsd.cpu.mk revision 135678
172878Skris# $FreeBSD: head/share/mk/bsd.cpu.mk 135678 2004-09-23 22:59:31Z cognet $
272878Skris
3100772Sjhb# Set default CPU compile flags and baseline CPUTYPE for each arch.  The
4100772Sjhb# compile flags must support the minimum CPU type for each architecture but
5100772Sjhb# may tune support for more advanced processors.
672878Skris
7101232Sru.if !defined(CPUTYPE) || empty(CPUTYPE)
8100773Sjhb. if ${MACHINE_ARCH} == "i386"
9125252Sjhb_CPUCFLAGS =
10113374SobrienMACHINE_CPU = i486
11100773Sjhb. elif ${MACHINE_ARCH} == "alpha"
12100772Sjhb_CPUCFLAGS = -mcpu=ev4 -mtune=ev5
13103560SjhbMACHINE_CPU = ev4
14126657Sbde. elif ${MACHINE_ARCH} == "amd64"
15115175SpeterMACHINE_CPU = amd64 sse2 sse
16100773Sjhb. elif ${MACHINE_ARCH} == "ia64"
17100772Sjhb_CPUCFLAGS =
18103560SjhbMACHINE_CPU = itanium
19100773Sjhb. elif ${MACHINE_ARCH} == "sparc64"
20100772Sjhb_CPUCFLAGS =
21129217Scognet. elif ${MACHINE_ARCH} == "arm"
22129217Scognet_CPUCFLAGS =
23129217ScognetMACHINE_CPU = arm
24100773Sjhb. endif
25100772Sjhb.else
2672878Skris
2772878Skris# Handle aliases (not documented in make.conf to avoid user confusion
2872878Skris# between e.g. i586 and pentium)
2972878Skris
30100773Sjhb. if ${MACHINE_ARCH} == "i386"
31133525Sobrien.  if ${CPUTYPE} == "pentium4"
32133525SobrienCPUTYPE = p4
33133525Sobrien.  elif ${CPUTYPE} == "pentium3"
34133525SobrienCPUTYPE = p3
35133525Sobrien.  elif ${CPUTYPE} == "pentiumpro"
3672878SkrisCPUTYPE = i686
37100773Sjhb.  elif ${CPUTYPE} == "pentium"
3872878SkrisCPUTYPE = i586
39133525Sobrien.  elif ${CPUTYPE} == "opteron"
40133525SobrienCPUTYPE = athlon-mp
41133525Sobrien.  elif ${CPUTYPE} == "athlon64"
42133525SobrienCPUTYPE = athlon-xp
43103045Smux.  elif ${CPUTYPE} == "k7"
44103045SmuxCPUTYPE = athlon
45100773Sjhb.  endif
4672878Skris. endif
4772878Skris
4896421Sobrien# Logic to set up correct gcc optimization flag.  This must be included
4972878Skris# after /etc/make.conf so it can react to the local value of CPUTYPE
5096421Sobrien# defined therein.  Consult:
5196421Sobrien#	http://gcc.gnu.org/onlinedocs/gcc/DEC-Alpha-Options.html
52127258Smarcel#	http://gcc.gnu.org/onlinedocs/gcc/IA-64-Options.html
53127258Smarcel#	http://gcc.gnu.org/onlinedocs/gcc/RS-6000-and-PowerPC-Options.html
5496421Sobrien#	http://gcc.gnu.org/onlinedocs/gcc/SPARC-Options.html
55127258Smarcel#	http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86-64-Options.html
5672878Skris
5772878Skris. if ${MACHINE_ARCH} == "i386"
58127888Sdfr.  if ${CPUTYPE} == "crusoe"
59133000Sobrien_CPUCFLAGS = -march=i686 -falign-functions=0 -falign-jumps=0 -falign-loops=0
60127888Sdfr_ICC_CPUCFLAGS = -tpp6 -xiM
61127888Sdfr.  elif ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \
62126938Strhodes    ${CPUTYPE} == "athlon-4"
63133000Sobrien_CPUCFLAGS = -march=${CPUTYPE}
64126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xiMK
65126890Strhodes.  elif ${CPUTYPE} == "athlon-tbird" || ${CPUTYPE} == "athlon"
66126890Strhodes_CPUCFLAGS = -march=${CPUTYPE}
67126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xiM
68112768Sobrien.  elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" || ${CPUTYPE} == "k6"
69112768Sobrien_CPUCFLAGS = -march=${CPUTYPE}
70126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xi
7172878Skris.  elif ${CPUTYPE} == "k5"
72133000Sobrien_CPUCFLAGS = -march=pentium
73126890Strhodes_ICC_CPUCFLAGS = -tpp5
7473145Skris.  elif ${CPUTYPE} == "p4"
75133000Sobrien_CPUCFLAGS = -march=pentium4
76126890Strhodes_ICC_CPUCFLAGS = -tpp7 -xiMKW
7773145Skris.  elif ${CPUTYPE} == "p3"
78133000Sobrien_CPUCFLAGS = -march=pentium3
79126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xiMK
8073145Skris.  elif ${CPUTYPE} == "p2"
81133000Sobrien_CPUCFLAGS = -march=pentium2
82126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xiM
8372878Skris.  elif ${CPUTYPE} == "i686"
84133000Sobrien_CPUCFLAGS = -march=pentiumpro
85126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xiM
8673145Skris.  elif ${CPUTYPE} == "i586/mmx"
87133000Sobrien_CPUCFLAGS = -march=pentium-mmx
88126890Strhodes_ICC_CPUCFLAGS = -tpp5 -xM
8972878Skris.  elif ${CPUTYPE} == "i586"
90133000Sobrien_CPUCFLAGS = -march=pentium
91126890Strhodes_ICC_CPUCFLAGS = -tpp5
9272878Skris.  elif ${CPUTYPE} == "i486"
93133000Sobrien_CPUCFLAGS = -march=i486
94126890Strhodes_ICC_CPUCFLAGS =
9572878Skris.  endif
9672878Skris. elif ${MACHINE_ARCH} == "alpha"
97103048Skris.  if ${CPUTYPE} == "ev67"
98103048Skris_CPUCFLAGS = -mcpu=ev67
99103048Skris.  elif ${CPUTYPE} == "ev6"
10074146Skris_CPUCFLAGS = -mcpu=ev6
10172878Skris.  elif ${CPUTYPE} == "pca56"
10274146Skris_CPUCFLAGS = -mcpu=pca56
10372878Skris.  elif ${CPUTYPE} == "ev56"
10474146Skris_CPUCFLAGS = -mcpu=ev56
10572878Skris.  elif ${CPUTYPE} == "ev5"
10674146Skris_CPUCFLAGS = -mcpu=ev5
10772878Skris.  elif ${CPUTYPE} == "ev45"
108103048Skris_CPUCFLAGS = -mcpu=ev45
10972878Skris.  elif ${CPUTYPE} == "ev4"
11074146Skris_CPUCFLAGS = -mcpu=ev4
11172878Skris.  endif
112135678Scognet. elif ${MACHINE_ARCH} == "arm"
113135678Scognet.  if ${CPUTYPE} == "strongarm"
114135678Scognet_CPUCFLAGS = -mcpu=strongarm
115135678Scognet.  elif ${CPUTYPE} == "xscale"
116135678Scognet#XXX: gcc doesn't seem to like -mcpu=xscale, and dies while rebuilding itself
117135678Scognet#_CPUCFLAGS = -mcpu=xscale
118135678Scognet_CPUCFLAGS = -D__XSCALE__
119135678Scognet.  endif
12072878Skris. endif
12172878Skris
12272878Skris# Set up the list of CPU features based on the CPU type.  This is an
12372878Skris# unordered list to make it easy for client makefiles to test for the
12472878Skris# presence of a CPU feature.
12572878Skris
126126657Sbde. if ${MACHINE_ARCH} == "i386"
127126657Sbde.  if ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \
128125254Sbde    ${CPUTYPE} == "athlon-4"
129112768SobrienMACHINE_CPU = athlon-xp k7 3dnow sse mmx k6 k5 i586 i486 i386
130126657Sbde.  elif ${CPUTYPE} == "athlon" || ${CPUTYPE} == "athlon-tbird"
131112768SobrienMACHINE_CPU = athlon k7 3dnow mmx k6 k5 i586 i486 i386
132126657Sbde.  elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2"
133103045SmuxMACHINE_CPU = 3dnow mmx k6 k5 i586 i486 i386
134103562Sjhb.  elif ${CPUTYPE} == "k6"
13574069SsobomaxMACHINE_CPU = mmx k6 k5 i586 i486 i386
136103562Sjhb.  elif ${CPUTYPE} == "k5"
13772878SkrisMACHINE_CPU = k5 i586 i486 i386
138103562Sjhb.  elif ${CPUTYPE} == "p4"
139103045SmuxMACHINE_CPU = sse2 sse i686 mmx i586 i486 i386
140103562Sjhb.  elif ${CPUTYPE} == "p3"
14173145SkrisMACHINE_CPU = sse i686 mmx i586 i486 i386
142103562Sjhb.  elif ${CPUTYPE} == "p2"
14374553SkrisMACHINE_CPU = i686 mmx i586 i486 i386
144103562Sjhb.  elif ${CPUTYPE} == "i686"
14572878SkrisMACHINE_CPU = i686 i586 i486 i386
146103562Sjhb.  elif ${CPUTYPE} == "i586/mmx"
14773145SkrisMACHINE_CPU = mmx i586 i486 i386
148103562Sjhb.  elif ${CPUTYPE} == "i586"
14972878SkrisMACHINE_CPU = i586 i486 i386
150103562Sjhb.  elif ${CPUTYPE} == "i486"
15172878SkrisMACHINE_CPU = i486 i386
152103562Sjhb.  elif ${CPUTYPE} == "i386"
15372878SkrisMACHINE_CPU = i386
154103562Sjhb.  endif
155103562Sjhb. elif ${MACHINE_ARCH} == "alpha"
156103562Sjhb.  if ${CPUTYPE} == "ev6"
15772878SkrisMACHINE_CPU = ev6 ev56 pca56 ev5 ev45 ev4
158103562Sjhb.  elif ${CPUTYPE} == "pca56"
15972878SkrisMACHINE_CPU = pca56 ev56 ev5 ev45 ev4
160103562Sjhb.  elif ${CPUTYPE} == "ev56"
16172878SkrisMACHINE_CPU = ev56 ev5 ev45 ev4
162103562Sjhb.  elif ${CPUTYPE} == "ev5"
16372878SkrisMACHINE_CPU = ev5 ev45 ev4
164103562Sjhb.  elif ${CPUTYPE} == "ev45"
16572878SkrisMACHINE_CPU = ev45 ev4
166103562Sjhb.  elif ${CPUTYPE} == "ev4"
16772878SkrisMACHINE_CPU = ev4
168103562Sjhb.  endif
169115175Speter. elif ${MACHINE_ARCH} == "amd64"
170115175SpeterMACHINE_CPU = amd64 sse2 sse
171103562Sjhb. elif ${MACHINE_ARCH} == "ia64"
172103562Sjhb.  if ${CPUTYPE} == "itanium"
17372878SkrisMACHINE_CPU = itanium
174103562Sjhb.  endif
17572878Skris. endif
17672878Skris.endif
177103561Sjhb
178112769Sobrien.if ${MACHINE_ARCH} == "alpha"
179112769Sobrien_CPUCFLAGS += -mieee
180112769Sobrien.endif
181112769Sobrien
182124347Sru# NB: COPTFLAGS is handled in /usr/src/sys/conf/kern.pre.mk
183103561Sjhb
184103561Sjhb.if !defined(NO_CPU_CFLAGS)
185126890Strhodes. if ${CC} == "icc"
186126890StrhodesCFLAGS += ${_ICC_CPUCFLAGS}
187126890Strhodes. else
188103561SjhbCFLAGS += ${_CPUCFLAGS}
189126890Strhodes. endif
190103561Sjhb.endif
191