bsd.cpu.mk revision 218896
172878Skris# $FreeBSD: head/share/mk/bsd.cpu.mk 218896 2011-02-20 22:32:21Z mm $ 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) 8136606Sobrien_CPUCFLAGS = 9212540Simp. if ${MACHINE_CPUARCH} == "i386" 10113374SobrienMACHINE_CPU = i486 11212540Simp. elif ${MACHINE_CPUARCH} == "amd64" 12206973SdelphijMACHINE_CPU = amd64 sse2 sse mmx 13212540Simp. elif ${MACHINE_CPUARCH} == "ia64" 14103560SjhbMACHINE_CPU = itanium 15212540Simp. elif ${MACHINE_CPUARCH} == "powerpc" 16176776SrajMACHINE_CPU = aim 17212540Simp. elif ${MACHINE_CPUARCH} == "sparc64" 18216820SmariusMACHINE_CPU = ultrasparc 19212540Simp. elif ${MACHINE_CPUARCH} == "arm" 20129217ScognetMACHINE_CPU = arm 21212540Simp. elif ${MACHINE_CPUARCH} == "mips" 22177385SimpMACHINE_CPU = mips 23100773Sjhb. endif 24100772Sjhb.else 2572878Skris 2672878Skris# Handle aliases (not documented in make.conf to avoid user confusion 2772878Skris# between e.g. i586 and pentium) 2872878Skris 29212540Simp. if ${MACHINE_CPUARCH} == "i386" 30166071Sdes. if ${CPUTYPE} == "nocona" 31166071SdesCPUTYPE = prescott 32166071Sdes. elif ${CPUTYPE} == "core" || ${CPUTYPE} == "core2" 33166071SdesCPUTYPE = prescott 34136607Sobrien. elif ${CPUTYPE} == "p4" 35136606SobrienCPUTYPE = pentium4 36136606Sobrien. elif ${CPUTYPE} == "p4m" 37136606SobrienCPUTYPE = pentium4m 38136606Sobrien. elif ${CPUTYPE} == "p3" 39136606SobrienCPUTYPE = pentium3 40136606Sobrien. elif ${CPUTYPE} == "p3m" 41136606SobrienCPUTYPE = pentium3m 42136606Sobrien. elif ${CPUTYPE} == "p-m" 43136606SobrienCPUTYPE = pentium-m 44136606Sobrien. elif ${CPUTYPE} == "p2" 45136606SobrienCPUTYPE = pentium2 46136606Sobrien. elif ${CPUTYPE} == "i686" 47136606SobrienCPUTYPE = pentiumpro 48136606Sobrien. elif ${CPUTYPE} == "i586/mmx" 49136606SobrienCPUTYPE = pentium-mmx 50136606Sobrien. elif ${CPUTYPE} == "i586" 51136606SobrienCPUTYPE = pentium 52218896Smm. elif ${CPUTYPE} == "opteron-sse3" || ${CPUTYPE} == "athlon64-sse3" || \ 53218896Smm ${CPUTYPE} == "k8-sse3" 54218896SmmCPUTYPE = prescott 55136607Sobrien. elif ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" || \ 56136607Sobrien ${CPUTYPE} == "k8" 57133525SobrienCPUTYPE = athlon-mp 58103045Smux. elif ${CPUTYPE} == "k7" 59103045SmuxCPUTYPE = athlon 60100773Sjhb. endif 61212540Simp. elif ${MACHINE_CPUARCH} == "amd64" 62166072Sdes. if ${CPUTYPE} == "prescott" || ${CPUTYPE} == "core2" 63136607SobrienCPUTYPE = nocona 64136607Sobrien. endif 65216820Smarius. elif ${MACHINE_ARCH} == "sparc64" 66216820Smarius. if ${CPUTYPE} == "us" 67216820SmariusCPUTYPE = ultrasparc 68216820Smarius. elif ${CPUTYPE} == "us3" 69216820SmariusCPUTYPE = ultrasparc3 70216820Smarius. endif 7172878Skris. endif 7272878Skris 73136606Sobrien############################################################################### 7496421Sobrien# Logic to set up correct gcc optimization flag. This must be included 7572878Skris# after /etc/make.conf so it can react to the local value of CPUTYPE 7696421Sobrien# defined therein. Consult: 77160536Simp# http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html 78179989Sale# http://gcc.gnu.org/onlinedocs/gcc/IA_002d64-Options.html 79179989Sale# http://gcc.gnu.org/onlinedocs/gcc/RS_002f6000-and-PowerPC-Options.html 80177385Simp# http://gcc.gnu.org/onlinedocs/gcc/MIPS-Options.html 8196421Sobrien# http://gcc.gnu.org/onlinedocs/gcc/SPARC-Options.html 82179989Sale# http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html 8372878Skris 84212540Simp. if ${MACHINE_CPUARCH} == "i386" 85127888Sdfr. if ${CPUTYPE} == "crusoe" 86133000Sobrien_CPUCFLAGS = -march=i686 -falign-functions=0 -falign-jumps=0 -falign-loops=0 87136606Sobrien. elif ${CPUTYPE} == "k5" 88136606Sobrien_CPUCFLAGS = -march=pentium 89136606Sobrien. else 90136606Sobrien_CPUCFLAGS = -march=${CPUTYPE} 91136606Sobrien. endif # GCC on 'i386' 92136606Sobrien. if ${CPUTYPE} == "crusoe" 93127888Sdfr_ICC_CPUCFLAGS = -tpp6 -xiM 94127888Sdfr. elif ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \ 95126938Strhodes ${CPUTYPE} == "athlon-4" 96126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xiMK 97126890Strhodes. elif ${CPUTYPE} == "athlon-tbird" || ${CPUTYPE} == "athlon" 98126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xiM 99112768Sobrien. elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" || ${CPUTYPE} == "k6" 100126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xi 10172878Skris. elif ${CPUTYPE} == "k5" 102126890Strhodes_ICC_CPUCFLAGS = -tpp5 103136606Sobrien. elif ${CPUTYPE} == "pentium4" || ${CPUTYPE} == "pentium4m" 104126890Strhodes_ICC_CPUCFLAGS = -tpp7 -xiMKW 105136606Sobrien. elif ${CPUTYPE} == "pentium3" || ${CPUTYPE} == "pentium3m" || \ 106136606Sobrien ${CPUTYPE} == "pentium-m" 107126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xiMK 108136606Sobrien. elif ${CPUTYPE} == "pentium2" || ${CPUTYPE} == "pentiumpro" 109126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xiM 110136606Sobrien. elif ${CPUTYPE} == "pentium-mmx" 111126890Strhodes_ICC_CPUCFLAGS = -tpp5 -xM 112136606Sobrien. elif ${CPUTYPE} == "pentium" 113126890Strhodes_ICC_CPUCFLAGS = -tpp5 114136606Sobrien. else 115126890Strhodes_ICC_CPUCFLAGS = 116136606Sobrien. endif # ICC on 'i386' 117212540Simp. elif ${MACHINE_CPUARCH} == "amd64" 118136607Sobrien_CPUCFLAGS = -march=${CPUTYPE} 119212540Simp. elif ${MACHINE_CPUARCH} == "arm" 120136606Sobrien. if ${CPUTYPE} == "xscale" 121172706Scognet#XXX: gcc doesn't seem to like -mcpu=xscale, and dies while rebuilding itself 122172706Scognet#_CPUCFLAGS = -mcpu=xscale 123172706Scognet_CPUCFLAGS = -march=armv5te -D__XSCALE__ 124136606Sobrien. else 125136606Sobrien_CPUCFLAGS = -mcpu=${CPUTYPE} 126135678Scognet. endif 127215274Simp. elif ${MACHINE_ARCH} == "powerpc" 128176776Sraj. if ${CPUTYPE} == "e500" 129176776Sraj_CPUCFLAGS = -Wa,-me500 -msoft-float 130188923Snwhitehorn. else 131190681Snwhitehorn_CPUCFLAGS = -mcpu=${CPUTYPE} -mno-powerpc64 132176776Sraj. endif 133209868Snwhitehorn. elif ${MACHINE_ARCH} == "powerpc64" 134209868Snwhitehorn_CPUCFLAGS = -mcpu=${CPUTYPE} 135212540Simp. elif ${MACHINE_CPUARCH} == "mips" 136177385Simp. if ${CPUTYPE} == "mips32" 137177385Simp_CPUCFLAGS = -march=mips32 138177385Simp. elif ${CPUTYPE} == "mips32r2" 139177385Simp_CPUCFLAGS = -march=mips32r2 140177385Simp. elif ${CPUTYPE} == "mips64" 141177385Simp_CPUCFLAGS = -march=mips64 142177385Simp. elif ${CPUTYPE} == "mips64r2" 143177385Simp_CPUCFLAGS = -march=mips64r2 144177385Simp. elif ${CPUTYPE} == "mips4kc" 145177385Simp_CPUCFLAGS = -march=4kc 146177385Simp. elif ${CPUTYPE} == "mips24kc" 147177385Simp_CPUCFLAGS = -march=24kc 148177385Simp. endif 149216820Smarius. elif ${MACHINE_ARCH} == "sparc64" 150216820Smarius. if ${CPUTYPE} == "v9" 151216820Smarius_CPUCFLAGS = -mcpu=v9 152216820Smarius. elif ${CPUTYPE} == "ultrasparc" 153216820Smarius_CPUCFLAGS = -mcpu=ultrasparc 154216820Smarius. elif ${CPUTYPE} == "ultrasparc3" 155216820Smarius_CPUCFLAGS = -mcpu=ultrasparc3 156216820Smarius. endif 15772878Skris. endif 15872878Skris 15972878Skris# Set up the list of CPU features based on the CPU type. This is an 16072878Skris# unordered list to make it easy for client makefiles to test for the 16172878Skris# presence of a CPU feature. 16272878Skris 163212540Simp. if ${MACHINE_CPUARCH} == "i386" 164218896Smm. if ${CPUTYPE} == "opteron-sse3" || ${CPUTYPE} == "athlon64-sse3" 165218896SmmMACHINE_CPU = athlon-xp athlon k7 3dnow sse3 sse2 sse mmx k6 k5 i586 i486 i386 166218896Smm. elif ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" 167136607SobrienMACHINE_CPU = athlon-xp athlon k7 3dnow sse2 sse mmx k6 k5 i586 i486 i386 168136607Sobrien. elif ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \ 169125254Sbde ${CPUTYPE} == "athlon-4" 170136606SobrienMACHINE_CPU = athlon-xp athlon k7 3dnow sse mmx k6 k5 i586 i486 i386 171126657Sbde. elif ${CPUTYPE} == "athlon" || ${CPUTYPE} == "athlon-tbird" 172112768SobrienMACHINE_CPU = athlon k7 3dnow mmx k6 k5 i586 i486 i386 173126657Sbde. elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" 174103045SmuxMACHINE_CPU = 3dnow mmx k6 k5 i586 i486 i386 175103562Sjhb. elif ${CPUTYPE} == "k6" 17674069SsobomaxMACHINE_CPU = mmx k6 k5 i586 i486 i386 177103562Sjhb. elif ${CPUTYPE} == "k5" 17872878SkrisMACHINE_CPU = k5 i586 i486 i386 179160497Sdes. elif ${CPUTYPE} == "c3" 180161259SdesMACHINE_CPU = 3dnow mmx i586 i486 i386 181160497Sdes. elif ${CPUTYPE} == "c3-2" 182160497SdesMACHINE_CPU = sse mmx i586 i486 i386 183176665Sjhb. elif ${CPUTYPE} == "c7" 184176665SjhbMACHINE_CPU = sse3 sse2 sse i686 mmx i586 i486 i386 185166071Sdes. elif ${CPUTYPE} == "prescott" 186166069SdesMACHINE_CPU = sse3 sse2 sse i686 mmx i586 i486 i386 187136607Sobrien. elif ${CPUTYPE} == "pentium4" || ${CPUTYPE} == "pentium4m" || ${CPUTYPE} == "pentium-m" 188103045SmuxMACHINE_CPU = sse2 sse i686 mmx i586 i486 i386 189136606Sobrien. elif ${CPUTYPE} == "pentium3" || ${CPUTYPE} == "pentium3m" 19073145SkrisMACHINE_CPU = sse i686 mmx i586 i486 i386 191136606Sobrien. elif ${CPUTYPE} == "pentium2" 19274553SkrisMACHINE_CPU = i686 mmx i586 i486 i386 193136606Sobrien. elif ${CPUTYPE} == "pentiumpro" 19472878SkrisMACHINE_CPU = i686 i586 i486 i386 195136606Sobrien. elif ${CPUTYPE} == "pentium-mmx" 19673145SkrisMACHINE_CPU = mmx i586 i486 i386 197136606Sobrien. elif ${CPUTYPE} == "pentium" 19872878SkrisMACHINE_CPU = i586 i486 i386 199103562Sjhb. elif ${CPUTYPE} == "i486" 20072878SkrisMACHINE_CPU = i486 i386 201103562Sjhb. elif ${CPUTYPE} == "i386" 20272878SkrisMACHINE_CPU = i386 203103562Sjhb. endif 204212540Simp. elif ${MACHINE_CPUARCH} == "amd64" 205218896Smm. if ${CPUTYPE} == "opteron-sse3" || ${CPUTYPE} == "athlon64-sse3" || ${CPUTYPE} == "k8-sse3" 206218896SmmMACHINE_CPU = k8 3dnow sse3 207218896Smm. elif ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" || ${CPUTYPE} == "k8" 208138685SobrienMACHINE_CPU = k8 3dnow 209166071Sdes. elif ${CPUTYPE} == "nocona" 210138685SobrienMACHINE_CPU = sse3 211136607Sobrien. endif 212138685SobrienMACHINE_CPU += amd64 sse2 sse mmx 213212540Simp. elif ${MACHINE_CPUARCH} == "ia64" 214103562Sjhb. if ${CPUTYPE} == "itanium" 21572878SkrisMACHINE_CPU = itanium 216103562Sjhb. endif 217216820Smarius. elif ${MACHINE_ARCH} == "powerpc" 218216820Smarius. if ${CPUTYPE} == "e500" 219216820SmariusMACHINE_CPU = booke 220216820Smarius. endif 221216820Smarius. elif ${MACHINE_ARCH} == "sparc64" 222216820Smarius. if ${CPUTYPE} == "v9" 223216820SmariusMACHINE_CPU = v9 224216820Smarius. elif ${CPUTYPE} == "ultrasparc" 225216820SmariusMACHINE_CPU = v9 ultrasparc 226216820Smarius. elif ${CPUTYPE} == "ultrasparc3" 227216820SmariusMACHINE_CPU = v9 ultrasparc ultrasparc3 228216820Smarius. endif 22972878Skris. endif 23072878Skris.endif 231103561Sjhb 232216820Smarius.if ${MACHINE_CPUARCH} == "mips" 233204559SimpCFLAGS += -G0 234177385Simp.endif 235177385Simp 236124347Sru# NB: COPTFLAGS is handled in /usr/src/sys/conf/kern.pre.mk 237103561Sjhb 238103561Sjhb.if !defined(NO_CPU_CFLAGS) 239126890Strhodes. if ${CC} == "icc" 240126890StrhodesCFLAGS += ${_ICC_CPUCFLAGS} 241126890Strhodes. else 242103561SjhbCFLAGS += ${_CPUCFLAGS} 243126890Strhodes. endif 244103561Sjhb.endif 245