bsd.cpu.mk revision 103562
1139749Simp# $FreeBSD: head/share/mk/bsd.cpu.mk 103562 2002-09-18 20:51:25Z jhb $
253790Sobrien
353790Sobrien# Set default CPU compile flags and baseline CPUTYPE for each arch.  The
453790Sobrien# compile flags must support the minimum CPU type for each architecture but
586266Sgroudier# may tune support for more advanced processors.
653790Sobrien
753790Sobrien.if !defined(CPUTYPE) || empty(CPUTYPE)
862422Sgroudier. if ${MACHINE_ARCH} == "i386"
962422Sgroudier_CPUCFLAGS = -mcpu=pentiumpro
1053790SobrienMACHINE_CPU = i386
1153790Sobrien. elif ${MACHINE_ARCH} == "alpha"
1253790Sobrien_CPUCFLAGS = -mcpu=ev4 -mtune=ev5
1353790SobrienMACHINE_CPU = ev4
1453790Sobrien.elif ${MACHINE_ARCH} == "x86-64" || ${MACHINE_ARCH} == "x86_64"
1553790SobrienMACHINE_CPU = x86-64 sse2 sse
1653790Sobrien. elif ${MACHINE_ARCH} == "ia64"
1753790Sobrien_CPUCFLAGS =
1853790SobrienMACHINE_CPU = itanium
1953790Sobrien. elif ${MACHINE_ARCH} == "sparc64"
2053790Sobrien_CPUCFLAGS =
2153790Sobrien. endif
2253790Sobrien.else
2353790Sobrien
2453790Sobrien# Handle aliases (not documented in make.conf to avoid user confusion
2553790Sobrien# between e.g. i586 and pentium)
2653790Sobrien
2753790Sobrien. if ${MACHINE_ARCH} == "i386"
2853790Sobrien.  if ${CPUTYPE} == "pentiumpro"
2953790SobrienCPUTYPE = i686
3053790Sobrien.  elif ${CPUTYPE} == "pentium"
3153790SobrienCPUTYPE = i586
3253790Sobrien.  elif ${CPUTYPE} == "k7"
3353790SobrienCPUTYPE = athlon
3453790Sobrien.  endif
3553790Sobrien. endif
3653790Sobrien
3753790Sobrien# Logic to set up correct gcc optimization flag.  This must be included
3853790Sobrien# after /etc/make.conf so it can react to the local value of CPUTYPE
3953790Sobrien# defined therein.  Consult:
4053790Sobrien#	http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86-64-Options.html
4153790Sobrien#	http://gcc.gnu.org/onlinedocs/gcc/DEC-Alpha-Options.html
4253790Sobrien#	http://gcc.gnu.org/onlinedocs/gcc/SPARC-Options.html
4353790Sobrien#	http://gcc.gnu.org/onlinedocs/gcc/RS-6000-and-PowerPC-Options.html
4453790Sobrien
4553790Sobrien. if ${MACHINE_ARCH} == "i386"
4653790Sobrien.  if ${CPUTYPE} == "athlon-mp"
4753790Sobrien_CPUCFLAGS = -march=athlon-mp
4853790Sobrien.  elif ${CPUTYPE} == "athlon-xp"
4953790Sobrien_CPUCFLAGS = -march=athlon-xp
5053790Sobrien.  elif ${CPUTYPE} == "athlon-4"
5153790Sobrien_CPUCFLAGS = -march=athlon-4
5253790Sobrien.  elif ${CPUTYPE} == "athlon-tbird"
5353790Sobrien_CPUCFLAGS = -march=athlon-tbird
5453790Sobrien.  elif ${CPUTYPE} == "athlon"
5553790Sobrien_CPUCFLAGS = -march=athlon
5659868Speter.  elif ${CPUTYPE} == "k6-3"
5759868Speter_CPUCFLAGS = -march=k6-3
5853790Sobrien.  elif ${CPUTYPE} == "k6-2"
5953790Sobrien_CPUCFLAGS = -march=k6-2
6062422Sgroudier.  elif ${CPUTYPE} == "k6"
6162422Sgroudier_CPUCFLAGS = -march=k6
6262422Sgroudier.  elif ${CPUTYPE} == "k5"
6362422Sgroudier_CPUCFLAGS = -march=pentium
6462422Sgroudier.  elif ${CPUTYPE} == "p4"
6562422Sgroudier_CPUCFLAGS = -march=pentium4
6662422Sgroudier.  elif ${CPUTYPE} == "p3"
6762422Sgroudier_CPUCFLAGS = -march=pentium3
6862422Sgroudier.  elif ${CPUTYPE} == "p2"
6953790Sobrien_CPUCFLAGS = -march=pentium2
7062422Sgroudier.  elif ${CPUTYPE} == "i686"
7162422Sgroudier_CPUCFLAGS = -march=pentiumpro
7262422Sgroudier.  elif ${CPUTYPE} == "i586/mmx"
73220944Smarius_CPUCFLAGS = -march=pentium-mmx
7453790Sobrien.  elif ${CPUTYPE} == "i586"
7562422Sgroudier_CPUCFLAGS = -march=pentium
7653790Sobrien.  elif ${CPUTYPE} == "i486"
7762422Sgroudier_CPUCFLAGS = -march=i486
7886266Sgroudier.  endif
79. elif ${MACHINE_ARCH} == "alpha"
80.  if ${CPUTYPE} == "ev67"
81_CPUCFLAGS = -mcpu=ev67
82.  elif ${CPUTYPE} == "ev6"
83_CPUCFLAGS = -mcpu=ev6
84.  elif ${CPUTYPE} == "pca56"
85_CPUCFLAGS = -mcpu=pca56
86.  elif ${CPUTYPE} == "ev56"
87_CPUCFLAGS = -mcpu=ev56
88.  elif ${CPUTYPE} == "ev5"
89_CPUCFLAGS = -mcpu=ev5
90.  elif ${CPUTYPE} == "ev45"
91_CPUCFLAGS = -mcpu=ev45
92.  elif ${CPUTYPE} == "ev4"
93_CPUCFLAGS = -mcpu=ev4
94.  endif
95. endif
96
97# Set up the list of CPU features based on the CPU type.  This is an
98# unordered list to make it easy for client makefiles to test for the
99# presence of a CPU feature.
100
101. if ${MACHINE_ARCH} == "i386"
102.  if ${CPUTYPE} == "athlon-mp"
103MACHINE_CPU = sse k7 3dnow mmx k6 k5 i586 i486 i386
104.  elif ${CPUTYPE} == "athlon-xp"
105MACHINE_CPU = sse k7 3dnow mmx k6 k5 i586 i486 i386
106.  elif ${CPUTYPE} == "athlon-4"
107MACHINE_CPU = sse k7 3dnow mmx k6 k5 i586 i486 i386
108.  elif ${CPUTYPE} == "athlon-tbird"
109MACHINE_CPU = k7 3dnow mmx k6 k5 i586 i486 i386
110.  elif ${CPUTYPE} == "athlon"
111MACHINE_CPU = k7 3dnow mmx k6 k5 i586 i486 i386
112.  elif ${CPUTYPE} == "k6-3"
113MACHINE_CPU = 3dnow mmx k6 k5 i586 i486 i386
114.  elif ${CPUTYPE} == "k6-2"
115MACHINE_CPU = 3dnow mmx k6 k5 i586 i486 i386
116.  elif ${CPUTYPE} == "k6"
117MACHINE_CPU = mmx k6 k5 i586 i486 i386
118.  elif ${CPUTYPE} == "k5"
119MACHINE_CPU = k5 i586 i486 i386
120.  elif ${CPUTYPE} == "p4"
121MACHINE_CPU = sse2 sse i686 mmx i586 i486 i386
122.  elif ${CPUTYPE} == "p3"
123MACHINE_CPU = sse i686 mmx i586 i486 i386
124.  elif ${CPUTYPE} == "p2"
125MACHINE_CPU = i686 mmx i586 i486 i386
126.  elif ${CPUTYPE} == "i686"
127MACHINE_CPU = i686 i586 i486 i386
128.  elif ${CPUTYPE} == "i586/mmx"
129MACHINE_CPU = mmx i586 i486 i386
130.  elif ${CPUTYPE} == "i586"
131MACHINE_CPU = i586 i486 i386
132.  elif ${CPUTYPE} == "i486"
133MACHINE_CPU = i486 i386
134.  elif ${CPUTYPE} == "i386"
135MACHINE_CPU = i386
136.  endif
137. elif ${MACHINE_ARCH} == "alpha"
138.  if ${CPUTYPE} == "ev6"
139MACHINE_CPU = ev6 ev56 pca56 ev5 ev45 ev4
140.  elif ${CPUTYPE} == "pca56"
141MACHINE_CPU = pca56 ev56 ev5 ev45 ev4
142.  elif ${CPUTYPE} == "ev56"
143MACHINE_CPU = ev56 ev5 ev45 ev4
144.  elif ${CPUTYPE} == "ev5"
145MACHINE_CPU = ev5 ev45 ev4
146.  elif ${CPUTYPE} == "ev45"
147MACHINE_CPU = ev45 ev4
148.  elif ${CPUTYPE} == "ev4"
149MACHINE_CPU = ev4
150.  endif
151. elif ${MACHINE_ARCH} == "x86-64" || ${MACHINE_ARCH} == "x86_64"
152MACHINE_CPU = x86-64 sse2 sse
153. elif ${MACHINE_ARCH} == "ia64"
154.  if ${CPUTYPE} == "itanium"
155MACHINE_CPU = itanium
156.  endif
157. endif
158.endif
159
160# NB: COPTFLAGS is handled in /usr/src/sys/conf/Makefile.<arch>
161
162.if !defined(NO_CPU_CFLAGS)
163CFLAGS += ${_CPUCFLAGS}
164.endif
165