bsd.cpu.mk revision 166071
172878Skris# $FreeBSD: head/share/mk/bsd.cpu.mk 166071 2007-01-17 14:49:13Z des $ 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 = 9100773Sjhb. if ${MACHINE_ARCH} == "i386" 10113374SobrienMACHINE_CPU = i486 11126657Sbde. elif ${MACHINE_ARCH} == "amd64" 12115175SpeterMACHINE_CPU = amd64 sse2 sse 13100773Sjhb. elif ${MACHINE_ARCH} == "ia64" 14103560SjhbMACHINE_CPU = itanium 15100773Sjhb. elif ${MACHINE_ARCH} == "sparc64" 16129217Scognet. elif ${MACHINE_ARCH} == "arm" 17129217ScognetMACHINE_CPU = arm 18100773Sjhb. endif 19100772Sjhb.else 2072878Skris 2172878Skris# Handle aliases (not documented in make.conf to avoid user confusion 2272878Skris# between e.g. i586 and pentium) 2372878Skris 24100773Sjhb. if ${MACHINE_ARCH} == "i386" 25166071Sdes. if ${CPUTYPE} == "nocona" 26166071SdesCPUTYPE = prescott 27166071Sdes. elif ${CPUTYPE} == "core" || ${CPUTYPE} == "core2" 28166071SdesCPUTYPE = prescott 29136607Sobrien. elif ${CPUTYPE} == "p4" 30136606SobrienCPUTYPE = pentium4 31136606Sobrien. elif ${CPUTYPE} == "p4m" 32136606SobrienCPUTYPE = pentium4m 33136606Sobrien. elif ${CPUTYPE} == "p3" 34136606SobrienCPUTYPE = pentium3 35136606Sobrien. elif ${CPUTYPE} == "p3m" 36136606SobrienCPUTYPE = pentium3m 37136606Sobrien. elif ${CPUTYPE} == "p-m" 38136606SobrienCPUTYPE = pentium-m 39136606Sobrien. elif ${CPUTYPE} == "p2" 40136606SobrienCPUTYPE = pentium2 41136606Sobrien. elif ${CPUTYPE} == "i686" 42136606SobrienCPUTYPE = pentiumpro 43136606Sobrien. elif ${CPUTYPE} == "i586/mmx" 44136606SobrienCPUTYPE = pentium-mmx 45136606Sobrien. elif ${CPUTYPE} == "i586" 46136606SobrienCPUTYPE = pentium 47136607Sobrien. elif ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" || \ 48136607Sobrien ${CPUTYPE} == "k8" 49133525SobrienCPUTYPE = athlon-mp 50103045Smux. elif ${CPUTYPE} == "k7" 51103045SmuxCPUTYPE = athlon 52100773Sjhb. endif 53136607Sobrien. elif ${MACHINE_ARCH} == "amd64" 54136607Sobrien. if ${CPUTYPE} == "prescott" 55136607SobrienCPUTYPE = nocona 56136607Sobrien. endif 5772878Skris. endif 5872878Skris 59136606Sobrien############################################################################### 6096421Sobrien# Logic to set up correct gcc optimization flag. This must be included 6172878Skris# after /etc/make.conf so it can react to the local value of CPUTYPE 6296421Sobrien# defined therein. Consult: 63160536Simp# http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html 64127258Smarcel# http://gcc.gnu.org/onlinedocs/gcc/IA-64-Options.html 65127258Smarcel# http://gcc.gnu.org/onlinedocs/gcc/RS-6000-and-PowerPC-Options.html 6696421Sobrien# http://gcc.gnu.org/onlinedocs/gcc/SPARC-Options.html 67127258Smarcel# http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86-64-Options.html 6872878Skris 6972878Skris. if ${MACHINE_ARCH} == "i386" 70127888Sdfr. if ${CPUTYPE} == "crusoe" 71133000Sobrien_CPUCFLAGS = -march=i686 -falign-functions=0 -falign-jumps=0 -falign-loops=0 72136606Sobrien. elif ${CPUTYPE} == "k5" 73136606Sobrien_CPUCFLAGS = -march=pentium 74136606Sobrien. else 75136606Sobrien_CPUCFLAGS = -march=${CPUTYPE} 76136606Sobrien. endif # GCC on 'i386' 77136606Sobrien. if ${CPUTYPE} == "crusoe" 78127888Sdfr_ICC_CPUCFLAGS = -tpp6 -xiM 79127888Sdfr. elif ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \ 80126938Strhodes ${CPUTYPE} == "athlon-4" 81126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xiMK 82126890Strhodes. elif ${CPUTYPE} == "athlon-tbird" || ${CPUTYPE} == "athlon" 83126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xiM 84112768Sobrien. elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" || ${CPUTYPE} == "k6" 85126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xi 8672878Skris. elif ${CPUTYPE} == "k5" 87126890Strhodes_ICC_CPUCFLAGS = -tpp5 88136606Sobrien. elif ${CPUTYPE} == "pentium4" || ${CPUTYPE} == "pentium4m" 89126890Strhodes_ICC_CPUCFLAGS = -tpp7 -xiMKW 90136606Sobrien. elif ${CPUTYPE} == "pentium3" || ${CPUTYPE} == "pentium3m" || \ 91136606Sobrien ${CPUTYPE} == "pentium-m" 92126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xiMK 93136606Sobrien. elif ${CPUTYPE} == "pentium2" || ${CPUTYPE} == "pentiumpro" 94126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xiM 95136606Sobrien. elif ${CPUTYPE} == "pentium-mmx" 96126890Strhodes_ICC_CPUCFLAGS = -tpp5 -xM 97136606Sobrien. elif ${CPUTYPE} == "pentium" 98126890Strhodes_ICC_CPUCFLAGS = -tpp5 99136606Sobrien. else 100126890Strhodes_ICC_CPUCFLAGS = 101136606Sobrien. endif # ICC on 'i386' 102136607Sobrien. elif ${MACHINE_ARCH} == "amd64" 103136607Sobrien_CPUCFLAGS = -march=${CPUTYPE} 104135678Scognet. elif ${MACHINE_ARCH} == "arm" 105136606Sobrien. if ${CPUTYPE} == "xscale" 106135678Scognet#XXX: gcc doesn't seem to like -mcpu=xscale, and dies while rebuilding itself 107135678Scognet#_CPUCFLAGS = -mcpu=xscale 108146589Scognet_CPUCFLAGS = -march=armv5te -D__XSCALE__ 109136606Sobrien. else 110136606Sobrien_CPUCFLAGS = -mcpu=${CPUTYPE} 111135678Scognet. endif 11272878Skris. endif 11372878Skris 11472878Skris# Set up the list of CPU features based on the CPU type. This is an 11572878Skris# unordered list to make it easy for client makefiles to test for the 11672878Skris# presence of a CPU feature. 11772878Skris 118126657Sbde. if ${MACHINE_ARCH} == "i386" 119136607Sobrien. if ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" 120136607SobrienMACHINE_CPU = athlon-xp athlon k7 3dnow sse2 sse mmx k6 k5 i586 i486 i386 121136607Sobrien. elif ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \ 122125254Sbde ${CPUTYPE} == "athlon-4" 123136606SobrienMACHINE_CPU = athlon-xp athlon k7 3dnow sse mmx k6 k5 i586 i486 i386 124126657Sbde. elif ${CPUTYPE} == "athlon" || ${CPUTYPE} == "athlon-tbird" 125112768SobrienMACHINE_CPU = athlon k7 3dnow mmx k6 k5 i586 i486 i386 126126657Sbde. elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" 127103045SmuxMACHINE_CPU = 3dnow mmx k6 k5 i586 i486 i386 128103562Sjhb. elif ${CPUTYPE} == "k6" 12974069SsobomaxMACHINE_CPU = mmx k6 k5 i586 i486 i386 130103562Sjhb. elif ${CPUTYPE} == "k5" 13172878SkrisMACHINE_CPU = k5 i586 i486 i386 132160497Sdes. elif ${CPUTYPE} == "c3" 133161259SdesMACHINE_CPU = 3dnow mmx i586 i486 i386 134160497Sdes. elif ${CPUTYPE} == "c3-2" 135160497SdesMACHINE_CPU = sse mmx i586 i486 i386 136166071Sdes. elif ${CPUTYPE} == "prescott" 137166069SdesMACHINE_CPU = sse3 sse2 sse i686 mmx i586 i486 i386 138136607Sobrien. elif ${CPUTYPE} == "pentium4" || ${CPUTYPE} == "pentium4m" || ${CPUTYPE} == "pentium-m" 139103045SmuxMACHINE_CPU = sse2 sse i686 mmx i586 i486 i386 140136606Sobrien. elif ${CPUTYPE} == "pentium3" || ${CPUTYPE} == "pentium3m" 14173145SkrisMACHINE_CPU = sse i686 mmx i586 i486 i386 142136606Sobrien. elif ${CPUTYPE} == "pentium2" 14374553SkrisMACHINE_CPU = i686 mmx i586 i486 i386 144136606Sobrien. elif ${CPUTYPE} == "pentiumpro" 14572878SkrisMACHINE_CPU = i686 i586 i486 i386 146136606Sobrien. elif ${CPUTYPE} == "pentium-mmx" 14773145SkrisMACHINE_CPU = mmx i586 i486 i386 148136606Sobrien. elif ${CPUTYPE} == "pentium" 14972878SkrisMACHINE_CPU = i586 i486 i386 150103562Sjhb. elif ${CPUTYPE} == "i486" 15172878SkrisMACHINE_CPU = i486 i386 152103562Sjhb. elif ${CPUTYPE} == "i386" 15372878SkrisMACHINE_CPU = i386 154103562Sjhb. endif 155115175Speter. elif ${MACHINE_ARCH} == "amd64" 156136607Sobrien. if ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" || ${CPUTYPE} == "k8" 157138685SobrienMACHINE_CPU = k8 3dnow 158166071Sdes. elif ${CPUTYPE} == "nocona" 159138685SobrienMACHINE_CPU = sse3 160136607Sobrien. endif 161138685SobrienMACHINE_CPU += amd64 sse2 sse mmx 162103562Sjhb. elif ${MACHINE_ARCH} == "ia64" 163103562Sjhb. if ${CPUTYPE} == "itanium" 16472878SkrisMACHINE_CPU = itanium 165103562Sjhb. endif 16672878Skris. endif 16772878Skris.endif 168103561Sjhb 169163513Scognet.if ${MACHINE_ARCH} == "arm" && defined(TARGET_BIG_ENDIAN) 170160534ScognetCFLAGS += -mbig-endian 171160544ScognetLDFLAGS += -mbig-endian 172160535ScognetLD += -EB 173160534Scognet.endif 174160534Scognet 175124347Sru# NB: COPTFLAGS is handled in /usr/src/sys/conf/kern.pre.mk 176103561Sjhb 177103561Sjhb.if !defined(NO_CPU_CFLAGS) 178126890Strhodes. if ${CC} == "icc" 179126890StrhodesCFLAGS += ${_ICC_CPUCFLAGS} 180126890Strhodes. else 181103561SjhbCFLAGS += ${_CPUCFLAGS} 182126890Strhodes. endif 183103561Sjhb.endif 184