bsd.cpu.mk revision 112768
1130803Smarcel# $FreeBSD: head/share/mk/bsd.cpu.mk 112768 2003-03-29 03:13:19Z obrien $
2130803Smarcel
3130803Smarcel# Set default CPU compile flags and baseline CPUTYPE for each arch.  The
4130803Smarcel# compile flags must support the minimum CPU type for each architecture but
5130803Smarcel# may tune support for more advanced processors.
6130803Smarcel
7130803Smarcel.if !defined(CPUTYPE) || empty(CPUTYPE)
8130803Smarcel. if ${MACHINE_ARCH} == "i386"
9130803Smarcel_CPUCFLAGS = -mcpu=pentiumpro
10130803SmarcelMACHINE_CPU = i386
11130803Smarcel. elif ${MACHINE_ARCH} == "alpha"
12130803Smarcel_CPUCFLAGS = -mcpu=ev4 -mtune=ev5
13130803SmarcelMACHINE_CPU = ev4
14130803Smarcel.elif ${MACHINE_ARCH} == "x86-64" || ${MACHINE_ARCH} == "x86_64"
15130803SmarcelMACHINE_CPU = x86-64 sse2 sse
16130803Smarcel. elif ${MACHINE_ARCH} == "ia64"
17130803Smarcel_CPUCFLAGS =
18130803SmarcelMACHINE_CPU = itanium
19130803Smarcel. elif ${MACHINE_ARCH} == "sparc64"
20130803Smarcel_CPUCFLAGS =
21130803Smarcel. endif
22130803Smarcel.else
23130803Smarcel
24130803Smarcel# Handle aliases (not documented in make.conf to avoid user confusion
25130803Smarcel# between e.g. i586 and pentium)
26130803Smarcel
27130803Smarcel. if ${MACHINE_ARCH} == "i386"
28130803Smarcel.  if ${CPUTYPE} == "pentiumpro"
29130803SmarcelCPUTYPE = i686
30130803Smarcel.  elif ${CPUTYPE} == "pentium"
31130803SmarcelCPUTYPE = i586
32130803Smarcel.  elif ${CPUTYPE} == "k7"
33130803SmarcelCPUTYPE = athlon
34130803Smarcel.  endif
35130803Smarcel. endif
36130803Smarcel
37130803Smarcel# Logic to set up correct gcc optimization flag.  This must be included
38130803Smarcel# after /etc/make.conf so it can react to the local value of CPUTYPE
39130803Smarcel# defined therein.  Consult:
40130803Smarcel#	http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86-64-Options.html
41130803Smarcel#	http://gcc.gnu.org/onlinedocs/gcc/DEC-Alpha-Options.html
42130803Smarcel#	http://gcc.gnu.org/onlinedocs/gcc/SPARC-Options.html
43130803Smarcel#	http://gcc.gnu.org/onlinedocs/gcc/RS-6000-and-PowerPC-Options.html
44130803Smarcel
45130803Smarcel. if ${MACHINE_ARCH} == "i386"
46130803Smarcel.  if ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || ${CPUTYPE} == "athlon-4" || ${CPUTYPE} == "athlon"
47130803Smarcel_CPUCFLAGS = -march=${CPUTYPE}
48130803Smarcel.  elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" || ${CPUTYPE} == "k6"
49130803Smarcel_CPUCFLAGS = -march=${CPUTYPE}
50130803Smarcel.  elif ${CPUTYPE} == "k5"
51130803Smarcel_CPUCFLAGS = -march=pentium
52130803Smarcel.  elif ${CPUTYPE} == "p4"
53130803Smarcel_CPUCFLAGS = -march=pentium4
54130803Smarcel.  elif ${CPUTYPE} == "p3"
55130803Smarcel_CPUCFLAGS = -march=pentium3
56130803Smarcel.  elif ${CPUTYPE} == "p2"
57130803Smarcel_CPUCFLAGS = -march=pentium2
58130803Smarcel.  elif ${CPUTYPE} == "i686"
59130803Smarcel_CPUCFLAGS = -march=pentiumpro
60130803Smarcel.  elif ${CPUTYPE} == "i586/mmx"
61130803Smarcel_CPUCFLAGS = -march=pentium-mmx
62130803Smarcel.  elif ${CPUTYPE} == "i586"
63130803Smarcel_CPUCFLAGS = -march=pentium
64130803Smarcel.  elif ${CPUTYPE} == "i486"
65130803Smarcel_CPUCFLAGS = -march=i486
66130803Smarcel.  endif
67130803Smarcel. elif ${MACHINE_ARCH} == "alpha"
68130803Smarcel.  if ${CPUTYPE} == "ev67"
69130803Smarcel_CPUCFLAGS = -mcpu=ev67
70130803Smarcel.  elif ${CPUTYPE} == "ev6"
71130803Smarcel_CPUCFLAGS = -mcpu=ev6
72130803Smarcel.  elif ${CPUTYPE} == "pca56"
73130803Smarcel_CPUCFLAGS = -mcpu=pca56
74130803Smarcel.  elif ${CPUTYPE} == "ev56"
75130803Smarcel_CPUCFLAGS = -mcpu=ev56
76130803Smarcel.  elif ${CPUTYPE} == "ev5"
77130803Smarcel_CPUCFLAGS = -mcpu=ev5
78130803Smarcel.  elif ${CPUTYPE} == "ev45"
79130803Smarcel_CPUCFLAGS = -mcpu=ev45
80130803Smarcel.  elif ${CPUTYPE} == "ev4"
81130803Smarcel_CPUCFLAGS = -mcpu=ev4
82130803Smarcel.  endif
83130803Smarcel. endif
84130803Smarcel
85130803Smarcel# Set up the list of CPU features based on the CPU type.  This is an
86130803Smarcel# unordered list to make it easy for client makefiles to test for the
87130803Smarcel# presence of a CPU feature.
88130803Smarcel
89130803Smarcel.if ${MACHINE_ARCH} == "i386"
90130803Smarcel. if ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || ${CPUTYPE} == "athlon-4"
91130803SmarcelMACHINE_CPU = athlon-xp k7 3dnow sse mmx k6 k5 i586 i486 i386
92130803Smarcel. elif ${CPUTYPE} == "athlon" || ${CPUTYPE} == "athlon-tbird"
93130803SmarcelMACHINE_CPU = athlon k7 3dnow mmx k6 k5 i586 i486 i386
94130803Smarcel. elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2"
95130803SmarcelMACHINE_CPU = 3dnow mmx k6 k5 i586 i486 i386
96130803Smarcel.  elif ${CPUTYPE} == "k6"
97130803SmarcelMACHINE_CPU = mmx k6 k5 i586 i486 i386
98130803Smarcel.  elif ${CPUTYPE} == "k5"
99130803SmarcelMACHINE_CPU = k5 i586 i486 i386
100130803Smarcel.  elif ${CPUTYPE} == "p4"
101130803SmarcelMACHINE_CPU = sse2 sse i686 mmx i586 i486 i386
102130803Smarcel.  elif ${CPUTYPE} == "p3"
103130803SmarcelMACHINE_CPU = sse i686 mmx i586 i486 i386
104130803Smarcel.  elif ${CPUTYPE} == "p2"
105130803SmarcelMACHINE_CPU = i686 mmx i586 i486 i386
106130803Smarcel.  elif ${CPUTYPE} == "i686"
107130803SmarcelMACHINE_CPU = i686 i586 i486 i386
108130803Smarcel.  elif ${CPUTYPE} == "i586/mmx"
109130803SmarcelMACHINE_CPU = mmx i586 i486 i386
110130803Smarcel.  elif ${CPUTYPE} == "i586"
111130803SmarcelMACHINE_CPU = i586 i486 i386
112130803Smarcel.  elif ${CPUTYPE} == "i486"
113130803SmarcelMACHINE_CPU = i486 i386
114130803Smarcel.  elif ${CPUTYPE} == "i386"
115130803SmarcelMACHINE_CPU = i386
116130803Smarcel.  endif
117130803Smarcel. elif ${MACHINE_ARCH} == "alpha"
118130803Smarcel.  if ${CPUTYPE} == "ev6"
119130803SmarcelMACHINE_CPU = ev6 ev56 pca56 ev5 ev45 ev4
120130803Smarcel.  elif ${CPUTYPE} == "pca56"
121130803SmarcelMACHINE_CPU = pca56 ev56 ev5 ev45 ev4
122130803Smarcel.  elif ${CPUTYPE} == "ev56"
123130803SmarcelMACHINE_CPU = ev56 ev5 ev45 ev4
124130803Smarcel.  elif ${CPUTYPE} == "ev5"
125130803SmarcelMACHINE_CPU = ev5 ev45 ev4
126130803Smarcel.  elif ${CPUTYPE} == "ev45"
127130803SmarcelMACHINE_CPU = ev45 ev4
128130803Smarcel.  elif ${CPUTYPE} == "ev4"
129130803SmarcelMACHINE_CPU = ev4
130130803Smarcel.  endif
131130803Smarcel. elif ${MACHINE_ARCH} == "x86-64" || ${MACHINE_ARCH} == "x86_64"
132130803SmarcelMACHINE_CPU = x86-64 sse2 sse
133130803Smarcel. elif ${MACHINE_ARCH} == "ia64"
134130803Smarcel.  if ${CPUTYPE} == "itanium"
135130803SmarcelMACHINE_CPU = itanium
136130803Smarcel.  endif
137130803Smarcel. endif
138130803Smarcel.endif
139130803Smarcel
140130803Smarcel# NB: COPTFLAGS is handled in /usr/src/sys/conf/Makefile.<arch>
141130803Smarcel
142130803Smarcel.if !defined(NO_CPU_CFLAGS)
143130803SmarcelCFLAGS += ${_CPUCFLAGS}
144130803Smarcel.endif
145130803Smarcel