bsd.cpu.mk revision 204554
152400Sbillf# $FreeBSD: head/share/mk/bsd.cpu.mk 204554 2010-03-02 07:24:47Z imp $ 252400Sbillf 352400Sbillf# Set default CPU compile flags and baseline CPUTYPE for each arch. The 452400Sbillf# compile flags must support the minimum CPU type for each architecture but 552400Sbillf# may tune support for more advanced processors. 652400Sbillf 752400Sbillf.if !defined(CPUTYPE) || empty(CPUTYPE) 8186678Sdougb_CPUCFLAGS = 973651Sdougb. if ${MACHINE_ARCH} == "i386" 1052400SbillfMACHINE_CPU = i486 1152495Sbillf. elif ${MACHINE_ARCH} == "amd64" 1252400SbillfMACHINE_CPU = amd64 sse2 sse 1368507Sdougb. elif ${MACHINE_ARCH} == "ia64" 1452400SbillfMACHINE_CPU = itanium 1552400Sbillf. elif ${MACHINE_ARCH} == "powerpc" 1652533SbillfMACHINE_CPU = aim 1752400Sbillf. elif ${MACHINE_ARCH} == "sparc64" 18114501Sdougb. elif ${MACHINE_ARCH} == "arm" 1967949SdougbMACHINE_CPU = arm 2052400Sbillf. elif ${MACHINE_ARCH} == "mips" 2152400SbillfMACHINE_CPU = mips 2252400Sbillf. endif 2352400Sbillf.else 2452400Sbillf 2552400Sbillf# Handle aliases (not documented in make.conf to avoid user confusion 2652400Sbillf# between e.g. i586 and pentium) 2767949Sdougb 2891193Sdougb. if ${MACHINE_ARCH} == "i386" 2991193Sdougb. if ${CPUTYPE} == "nocona" 30114501SdougbCPUTYPE = prescott 3152400Sbillf. elif ${CPUTYPE} == "core" || ${CPUTYPE} == "core2" 3252400SbillfCPUTYPE = prescott 3352400Sbillf. elif ${CPUTYPE} == "p4" 3452400SbillfCPUTYPE = pentium4 3552400Sbillf. elif ${CPUTYPE} == "p4m" 36155309SrwatsonCPUTYPE = pentium4m 3767949Sdougb. elif ${CPUTYPE} == "p3" 38158149SgordonCPUTYPE = pentium3 3952400Sbillf. elif ${CPUTYPE} == "p3m" 4052400SbillfCPUTYPE = pentium3m 4152400Sbillf. elif ${CPUTYPE} == "p-m" 4252400SbillfCPUTYPE = pentium-m 4352400Sbillf. elif ${CPUTYPE} == "p2" 4452400SbillfCPUTYPE = pentium2 4552400Sbillf. elif ${CPUTYPE} == "i686" 4667859SdougbCPUTYPE = pentiumpro 4767949Sdougb. elif ${CPUTYPE} == "i586/mmx" 4852400SbillfCPUTYPE = pentium-mmx 4952400Sbillf. elif ${CPUTYPE} == "i586" 5058910SalfredCPUTYPE = pentium 5158910Salfred. elif ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" || \ 5258910Salfred ${CPUTYPE} == "k8" 5367850SdougbCPUTYPE = athlon-mp 5467850Sdougb. elif ${CPUTYPE} == "k7" 5567850SdougbCPUTYPE = athlon 5667850Sdougb. endif 5767850Sdougb. elif ${MACHINE_ARCH} == "amd64" 5867850Sdougb. if ${CPUTYPE} == "prescott" || ${CPUTYPE} == "core2" 5967850SdougbCPUTYPE = nocona 6067850Sdougb. endif 6167850Sdougb. endif 6267850Sdougb 6367850Sdougb############################################################################### 6467850Sdougb# Logic to set up correct gcc optimization flag. This must be included 6567949Sdougb# after /etc/make.conf so it can react to the local value of CPUTYPE 6667850Sdougb# defined therein. Consult: 6767850Sdougb# http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html 6867850Sdougb# http://gcc.gnu.org/onlinedocs/gcc/IA_002d64-Options.html 6967850Sdougb# http://gcc.gnu.org/onlinedocs/gcc/RS_002f6000-and-PowerPC-Options.html 7067850Sdougb# http://gcc.gnu.org/onlinedocs/gcc/MIPS-Options.html 7167850Sdougb# http://gcc.gnu.org/onlinedocs/gcc/SPARC-Options.html 7267850Sdougb# http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html 7367850Sdougb 7467859Sdougb. if ${MACHINE_ARCH} == "i386" 7567859Sdougb. if ${CPUTYPE} == "crusoe" 7658910Salfred_CPUCFLAGS = -march=i686 -falign-functions=0 -falign-jumps=0 -falign-loops=0 7767850Sdougb. elif ${CPUTYPE} == "k5" 7867850Sdougb_CPUCFLAGS = -march=pentium 7967850Sdougb. else 8067850Sdougb_CPUCFLAGS = -march=${CPUTYPE} 8167850Sdougb. endif # GCC on 'i386' 8267850Sdougb. if ${CPUTYPE} == "crusoe" 8367859Sdougb_ICC_CPUCFLAGS = -tpp6 -xiM 8467850Sdougb. elif ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \ 8567859Sdougb ${CPUTYPE} == "athlon-4" 8667850Sdougb_ICC_CPUCFLAGS = -tpp6 -xiMK 8767850Sdougb. elif ${CPUTYPE} == "athlon-tbird" || ${CPUTYPE} == "athlon" 8867850Sdougb_ICC_CPUCFLAGS = -tpp6 -xiM 8967850Sdougb. elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" || ${CPUTYPE} == "k6" 9067859Sdougb_ICC_CPUCFLAGS = -tpp6 -xi 9167850Sdougb. elif ${CPUTYPE} == "k5" 9267850Sdougb_ICC_CPUCFLAGS = -tpp5 9367850Sdougb. elif ${CPUTYPE} == "pentium4" || ${CPUTYPE} == "pentium4m" 9467850Sdougb_ICC_CPUCFLAGS = -tpp7 -xiMKW 9567850Sdougb. elif ${CPUTYPE} == "pentium3" || ${CPUTYPE} == "pentium3m" || \ 9667850Sdougb ${CPUTYPE} == "pentium-m" 9767850Sdougb_ICC_CPUCFLAGS = -tpp6 -xiMK 9867850Sdougb. elif ${CPUTYPE} == "pentium2" || ${CPUTYPE} == "pentiumpro" 9967850Sdougb_ICC_CPUCFLAGS = -tpp6 -xiM 10067850Sdougb. elif ${CPUTYPE} == "pentium-mmx" 10167850Sdougb_ICC_CPUCFLAGS = -tpp5 -xM 10267850Sdougb. elif ${CPUTYPE} == "pentium" 10367850Sdougb_ICC_CPUCFLAGS = -tpp5 10467850Sdougb. else 10558910Salfred_ICC_CPUCFLAGS = 10658910Salfred. endif # ICC on 'i386' 10758910Salfred. elif ${MACHINE_ARCH} == "amd64" 10858910Salfred_CPUCFLAGS = -march=${CPUTYPE} 10958910Salfred. elif ${MACHINE_ARCH} == "arm" 11058910Salfred. if ${CPUTYPE} == "xscale" 11167850Sdougb#XXX: gcc doesn't seem to like -mcpu=xscale, and dies while rebuilding itself 11258910Salfred#_CPUCFLAGS = -mcpu=xscale 11377323Sdougb_CPUCFLAGS = -march=armv5te -D__XSCALE__ 11477323Sdougb. else 11567949Sdougb_CPUCFLAGS = -mcpu=${CPUTYPE} 116158149Sgordon. endif 117158149Sgordon. elif ${MACHINE_ARCH} == "powerpc" 118158149Sgordon. if ${CPUTYPE} == "e500" 119158149SgordonMACHINE_CPU = booke 120158149Sgordon_CPUCFLAGS = -Wa,-me500 -msoft-float 121158149Sgordon. else 122158149Sgordon_CPUCFLAGS = -mcpu=${CPUTYPE} -mno-powerpc64 123158149Sgordon. endif 124158149Sgordon. elif ${MACHINE_ARCH} == "mips" 125158149Sgordon. if ${CPUTYPE} == "mips32" 126158149Sgordon_CPUCFLAGS = -march=mips32 127158149Sgordon. elif ${CPUTYPE} == "mips32r2" 128158149Sgordon_CPUCFLAGS = -march=mips32r2 129158149Sgordon. elif ${CPUTYPE} == "mips64" 130158149Sgordon_CPUCFLAGS = -march=mips64 131158149Sgordon. elif ${CPUTYPE} == "mips64r2" 132158149Sgordon_CPUCFLAGS = -march=mips64r2 133158149Sgordon. elif ${CPUTYPE} == "mips4kc" 13467850Sdougb_CPUCFLAGS = -march=4kc 13590564Sdougb. elif ${CPUTYPE} == "mips24kc" 136109993Sdillon_CPUCFLAGS = -march=24kc 137109993Sdillon. endif 138109993Sdillon. endif 139109993Sdillon 140109993Sdillon# Set up the list of CPU features based on the CPU type. This is an 141110377Sdougb# unordered list to make it easy for client makefiles to test for the 142109993Sdillon# presence of a CPU feature. 143109993Sdillon 14467850Sdougb. if ${MACHINE_ARCH} == "i386" 14567850Sdougb. if ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" 146109993SdillonMACHINE_CPU = athlon-xp athlon k7 3dnow sse2 sse mmx k6 k5 i586 i486 i386 14767850Sdougb. elif ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \ 14891193Sdougb ${CPUTYPE} == "athlon-4" 14967949SdougbMACHINE_CPU = athlon-xp athlon k7 3dnow sse mmx k6 k5 i586 i486 i386 15067949Sdougb. elif ${CPUTYPE} == "athlon" || ${CPUTYPE} == "athlon-tbird" 15167949SdougbMACHINE_CPU = athlon k7 3dnow mmx k6 k5 i586 i486 i386 15267949Sdougb. elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" 15367949SdougbMACHINE_CPU = 3dnow mmx k6 k5 i586 i486 i386 15468507Sdougb. elif ${CPUTYPE} == "k6" 15567949SdougbMACHINE_CPU = mmx k6 k5 i586 i486 i386 15667949Sdougb. elif ${CPUTYPE} == "k5" 15767949SdougbMACHINE_CPU = k5 i586 i486 i386 15867949Sdougb. elif ${CPUTYPE} == "c3" 15967949SdougbMACHINE_CPU = 3dnow mmx i586 i486 i386 16067949Sdougb. elif ${CPUTYPE} == "c3-2" 16167949SdougbMACHINE_CPU = sse mmx i586 i486 i386 16267949Sdougb. elif ${CPUTYPE} == "c7" 16367949SdougbMACHINE_CPU = sse3 sse2 sse i686 mmx i586 i486 i386 16467949Sdougb. elif ${CPUTYPE} == "prescott" 16567949SdougbMACHINE_CPU = sse3 sse2 sse i686 mmx i586 i486 i386 16667949Sdougb. elif ${CPUTYPE} == "pentium4" || ${CPUTYPE} == "pentium4m" || ${CPUTYPE} == "pentium-m" 16767850SdougbMACHINE_CPU = sse2 sse i686 mmx i586 i486 i386 16867859Sdougb. elif ${CPUTYPE} == "pentium3" || ${CPUTYPE} == "pentium3m" 16967850SdougbMACHINE_CPU = sse i686 mmx i586 i486 i386 17067850Sdougb. elif ${CPUTYPE} == "pentium2" 17167850SdougbMACHINE_CPU = i686 mmx i586 i486 i386 17267850Sdougb. elif ${CPUTYPE} == "pentiumpro" 17377326SdougbMACHINE_CPU = i686 i586 i486 i386 174109993Sdillon. elif ${CPUTYPE} == "pentium-mmx" 17567850SdougbMACHINE_CPU = mmx i586 i486 i386 17667850Sdougb. elif ${CPUTYPE} == "pentium" 17767850SdougbMACHINE_CPU = i586 i486 i386 17867850Sdougb. elif ${CPUTYPE} == "i486" 17967850SdougbMACHINE_CPU = i486 i386 18067859Sdougb. elif ${CPUTYPE} == "i386" 18167859SdougbMACHINE_CPU = i386 18267859Sdougb. endif 18367850Sdougb. elif ${MACHINE_ARCH} == "amd64" 18467850Sdougb. if ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" || ${CPUTYPE} == "k8" 18567850SdougbMACHINE_CPU = k8 3dnow 18667850Sdougb. elif ${CPUTYPE} == "nocona" 18767850SdougbMACHINE_CPU = sse3 18867850Sdougb. endif 18967850SdougbMACHINE_CPU += amd64 sse2 sse mmx 19067850Sdougb. elif ${MACHINE_ARCH} == "ia64" 19167850Sdougb. if ${CPUTYPE} == "itanium" 19267850SdougbMACHINE_CPU = itanium 19367850Sdougb. endif 19467850Sdougb. endif 19567850Sdougb.endif 19667850Sdougb 19767850Sdougb.if ${MACHINE_ARCH} == "arm" && defined(TARGET_BIG_ENDIAN) 19867850SdougbCFLAGS += -mbig-endian 19967850SdougbLDFLAGS += -mbig-endian 20067850SdougbLD += -EB 20167850Sdougb.endif 20267850Sdougb 20367850Sdougb.if ${MACHINE_ARCH} == "mips" 20467850Sdougb. if defined(TARGET_BIG_ENDIAN) 20567850SdougbCFLAGS += -EB 20667850SdougbLD += -EB 20767850Sdougb. else 20867850SdougbCFLAGS += -EL 20967850SdougbLD += -EL 21067850Sdougb. endif 21167850SdougbCFLAGS += -msoft-float -G0 -mabicalls 21267850Sdougb.endif 21367850Sdougb 21467850Sdougb# NB: COPTFLAGS is handled in /usr/src/sys/conf/kern.pre.mk 21567850Sdougb 21667850Sdougb.if !defined(NO_CPU_CFLAGS) 21767850Sdougb. if ${CC} == "icc" 21867850SdougbCFLAGS += ${_ICC_CPUCFLAGS} 21967850Sdougb. else 22067850SdougbCFLAGS += ${_CPUCFLAGS} 22167850Sdougb. endif 22267850Sdougb.endif 22367850Sdougb