bsd.cpu.mk revision 136606
172878Skris# $FreeBSD: head/share/mk/bsd.cpu.mk 136606 2004-10-17 05:08:29Z obrien $ 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 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" 17103560SjhbMACHINE_CPU = itanium 18100773Sjhb. elif ${MACHINE_ARCH} == "sparc64" 19129217Scognet. elif ${MACHINE_ARCH} == "arm" 20129217ScognetMACHINE_CPU = arm 21100773Sjhb. endif 22100772Sjhb.else 2372878Skris 2472878Skris# Handle aliases (not documented in make.conf to avoid user confusion 2572878Skris# between e.g. i586 and pentium) 2672878Skris 27100773Sjhb. if ${MACHINE_ARCH} == "i386" 28136606Sobrien. if ${CPUTYPE} == "p4" 29136606SobrienCPUTYPE = pentium4 30136606Sobrien. elif ${CPUTYPE} == "p4m" 31136606SobrienCPUTYPE = pentium4m 32136606Sobrien. elif ${CPUTYPE} == "p3" 33136606SobrienCPUTYPE = pentium3 34136606Sobrien. elif ${CPUTYPE} == "p3m" 35136606SobrienCPUTYPE = pentium3m 36136606Sobrien. elif ${CPUTYPE} == "p-m" 37136606SobrienCPUTYPE = pentium-m 38136606Sobrien. elif ${CPUTYPE} == "p2" 39136606SobrienCPUTYPE = pentium2 40136606Sobrien. elif ${CPUTYPE} == "i686" 41136606SobrienCPUTYPE = pentiumpro 42136606Sobrien. elif ${CPUTYPE} == "i586/mmx" 43136606SobrienCPUTYPE = pentium-mmx 44136606Sobrien. elif ${CPUTYPE} == "i586" 45136606SobrienCPUTYPE = pentium 46133525Sobrien. elif ${CPUTYPE} == "opteron" 47133525SobrienCPUTYPE = athlon-mp 48133525Sobrien. elif ${CPUTYPE} == "athlon64" 49133525SobrienCPUTYPE = athlon-xp 50103045Smux. elif ${CPUTYPE} == "k7" 51103045SmuxCPUTYPE = athlon 52100773Sjhb. endif 5372878Skris. endif 5472878Skris 55136606Sobrien############################################################################### 5696421Sobrien# Logic to set up correct gcc optimization flag. This must be included 5772878Skris# after /etc/make.conf so it can react to the local value of CPUTYPE 5896421Sobrien# defined therein. Consult: 5996421Sobrien# http://gcc.gnu.org/onlinedocs/gcc/DEC-Alpha-Options.html 60127258Smarcel# http://gcc.gnu.org/onlinedocs/gcc/IA-64-Options.html 61127258Smarcel# http://gcc.gnu.org/onlinedocs/gcc/RS-6000-and-PowerPC-Options.html 6296421Sobrien# http://gcc.gnu.org/onlinedocs/gcc/SPARC-Options.html 63127258Smarcel# http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86-64-Options.html 6472878Skris 6572878Skris. if ${MACHINE_ARCH} == "i386" 66127888Sdfr. if ${CPUTYPE} == "crusoe" 67133000Sobrien_CPUCFLAGS = -march=i686 -falign-functions=0 -falign-jumps=0 -falign-loops=0 68136606Sobrien. elif ${CPUTYPE} == "k5" 69136606Sobrien_CPUCFLAGS = -march=pentium 70136606Sobrien. else 71136606Sobrien_CPUCFLAGS = -march=${CPUTYPE} 72136606Sobrien. endif # GCC on 'i386' 73136606Sobrien. if ${CPUTYPE} == "crusoe" 74127888Sdfr_ICC_CPUCFLAGS = -tpp6 -xiM 75127888Sdfr. elif ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \ 76126938Strhodes ${CPUTYPE} == "athlon-4" 77126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xiMK 78126890Strhodes. elif ${CPUTYPE} == "athlon-tbird" || ${CPUTYPE} == "athlon" 79126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xiM 80112768Sobrien. elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" || ${CPUTYPE} == "k6" 81126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xi 8272878Skris. elif ${CPUTYPE} == "k5" 83126890Strhodes_ICC_CPUCFLAGS = -tpp5 84136606Sobrien. elif ${CPUTYPE} == "pentium4" || ${CPUTYPE} == "pentium4m" 85126890Strhodes_ICC_CPUCFLAGS = -tpp7 -xiMKW 86136606Sobrien. elif ${CPUTYPE} == "pentium3" || ${CPUTYPE} == "pentium3m" || \ 87136606Sobrien ${CPUTYPE} == "pentium-m" 88126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xiMK 89136606Sobrien. elif ${CPUTYPE} == "pentium2" || ${CPUTYPE} == "pentiumpro" 90126890Strhodes_ICC_CPUCFLAGS = -tpp6 -xiM 91136606Sobrien. elif ${CPUTYPE} == "pentium-mmx" 92126890Strhodes_ICC_CPUCFLAGS = -tpp5 -xM 93136606Sobrien. elif ${CPUTYPE} == "pentium" 94126890Strhodes_ICC_CPUCFLAGS = -tpp5 95136606Sobrien. else 96126890Strhodes_ICC_CPUCFLAGS = 97136606Sobrien. endif # ICC on 'i386' 9872878Skris. elif ${MACHINE_ARCH} == "alpha" 99136606Sobrien_CPUCFLAGS = -mcpu=${CPUTYPE} 100135678Scognet. elif ${MACHINE_ARCH} == "arm" 101136606Sobrien. if ${CPUTYPE} == "xscale" 102135678Scognet#XXX: gcc doesn't seem to like -mcpu=xscale, and dies while rebuilding itself 103135678Scognet#_CPUCFLAGS = -mcpu=xscale 104135678Scognet_CPUCFLAGS = -D__XSCALE__ 105136606Sobrien. else 106136606Sobrien_CPUCFLAGS = -mcpu=${CPUTYPE} 107135678Scognet. endif 10872878Skris. endif 10972878Skris 11072878Skris# Set up the list of CPU features based on the CPU type. This is an 11172878Skris# unordered list to make it easy for client makefiles to test for the 11272878Skris# presence of a CPU feature. 11372878Skris 114126657Sbde. if ${MACHINE_ARCH} == "i386" 115126657Sbde. if ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \ 116125254Sbde ${CPUTYPE} == "athlon-4" 117136606SobrienMACHINE_CPU = athlon-xp athlon k7 3dnow sse mmx k6 k5 i586 i486 i386 118126657Sbde. elif ${CPUTYPE} == "athlon" || ${CPUTYPE} == "athlon-tbird" 119112768SobrienMACHINE_CPU = athlon k7 3dnow mmx k6 k5 i586 i486 i386 120126657Sbde. elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" 121103045SmuxMACHINE_CPU = 3dnow mmx k6 k5 i586 i486 i386 122103562Sjhb. elif ${CPUTYPE} == "k6" 12374069SsobomaxMACHINE_CPU = mmx k6 k5 i586 i486 i386 124103562Sjhb. elif ${CPUTYPE} == "k5" 12572878SkrisMACHINE_CPU = k5 i586 i486 i386 126136606Sobrien. elif ${CPUTYPE} == "pentium4" || ${CPUTYPE} == "pentium4m" || \ 127136606Sobrien ${CPUTYPE} == "pentium-m" 128103045SmuxMACHINE_CPU = sse2 sse i686 mmx i586 i486 i386 129136606Sobrien. elif ${CPUTYPE} == "pentium3" || ${CPUTYPE} == "pentium3m" 13073145SkrisMACHINE_CPU = sse i686 mmx i586 i486 i386 131136606Sobrien. elif ${CPUTYPE} == "pentium2" 13274553SkrisMACHINE_CPU = i686 mmx i586 i486 i386 133136606Sobrien. elif ${CPUTYPE} == "pentiumpro" 13472878SkrisMACHINE_CPU = i686 i586 i486 i386 135136606Sobrien. elif ${CPUTYPE} == "pentium-mmx" 13673145SkrisMACHINE_CPU = mmx i586 i486 i386 137136606Sobrien. elif ${CPUTYPE} == "pentium" 13872878SkrisMACHINE_CPU = i586 i486 i386 139103562Sjhb. elif ${CPUTYPE} == "i486" 14072878SkrisMACHINE_CPU = i486 i386 141103562Sjhb. elif ${CPUTYPE} == "i386" 14272878SkrisMACHINE_CPU = i386 143103562Sjhb. endif 144103562Sjhb. elif ${MACHINE_ARCH} == "alpha" 145103562Sjhb. if ${CPUTYPE} == "ev6" 14672878SkrisMACHINE_CPU = ev6 ev56 pca56 ev5 ev45 ev4 147103562Sjhb. elif ${CPUTYPE} == "pca56" 14872878SkrisMACHINE_CPU = pca56 ev56 ev5 ev45 ev4 149103562Sjhb. elif ${CPUTYPE} == "ev56" 15072878SkrisMACHINE_CPU = ev56 ev5 ev45 ev4 151103562Sjhb. elif ${CPUTYPE} == "ev5" 15272878SkrisMACHINE_CPU = ev5 ev45 ev4 153103562Sjhb. elif ${CPUTYPE} == "ev45" 15472878SkrisMACHINE_CPU = ev45 ev4 155103562Sjhb. elif ${CPUTYPE} == "ev4" 15672878SkrisMACHINE_CPU = ev4 157103562Sjhb. endif 158115175Speter. elif ${MACHINE_ARCH} == "amd64" 159115175SpeterMACHINE_CPU = amd64 sse2 sse 160103562Sjhb. elif ${MACHINE_ARCH} == "ia64" 161103562Sjhb. if ${CPUTYPE} == "itanium" 16272878SkrisMACHINE_CPU = itanium 163103562Sjhb. endif 16472878Skris. endif 16572878Skris.endif 166103561Sjhb 167112769Sobrien.if ${MACHINE_ARCH} == "alpha" 168112769Sobrien_CPUCFLAGS += -mieee 169112769Sobrien.endif 170112769Sobrien 171124347Sru# NB: COPTFLAGS is handled in /usr/src/sys/conf/kern.pre.mk 172103561Sjhb 173103561Sjhb.if !defined(NO_CPU_CFLAGS) 174126890Strhodes. if ${CC} == "icc" 175126890StrhodesCFLAGS += ${_ICC_CPUCFLAGS} 176126890Strhodes. else 177103561SjhbCFLAGS += ${_CPUCFLAGS} 178126890Strhodes. endif 179103561Sjhb.endif 180