bsd.cpu.mk revision 245139
1130803Smarcel# $FreeBSD: head/share/mk/bsd.cpu.mk 245139 2013-01-07 23:41:14Z cognet $ 2130803Smarcel 3130803Smarcel# Set default CPU compile flags and baseline CPUTYPE for each arch. The 4130803Smarcel# compile flags must support the minimum CPU type for each architecture but 5130803Smarcel# may tune support for more advanced processors. 6130803Smarcel 7130803Smarcel.if !defined(CPUTYPE) || empty(CPUTYPE) 8130803Smarcel_CPUCFLAGS = 9130803Smarcel. if ${MACHINE_CPUARCH} == "i386" 10130803SmarcelMACHINE_CPU = i486 11130803Smarcel. elif ${MACHINE_CPUARCH} == "amd64" 12130803SmarcelMACHINE_CPU = amd64 sse2 sse mmx 13130803Smarcel. elif ${MACHINE_CPUARCH} == "ia64" 14130803SmarcelMACHINE_CPU = itanium 15130803Smarcel. elif ${MACHINE_CPUARCH} == "powerpc" 16130803SmarcelMACHINE_CPU = aim 17130803Smarcel. elif ${MACHINE_CPUARCH} == "sparc64" 18130803SmarcelMACHINE_CPU = ultrasparc 19130803Smarcel. elif ${MACHINE_CPUARCH} == "arm" 20130803SmarcelMACHINE_CPU = arm 21130803Smarcel. elif ${MACHINE_CPUARCH} == "mips" 22130803SmarcelMACHINE_CPU = mips 23130803Smarcel. endif 24130803Smarcel.else 25130803Smarcel 26130803Smarcel# Handle aliases (not documented in make.conf to avoid user confusion 27130803Smarcel# between e.g. i586 and pentium) 28130803Smarcel 29130803Smarcel. if ${MACHINE_CPUARCH} == "i386" 30130803Smarcel. if ${CPUTYPE} == "barcelona" 31130803SmarcelCPUTYPE = amdfam10 32130803Smarcel. elif ${CPUTYPE} == "k7" 33130803SmarcelCPUTYPE = athlon 34130803Smarcel. elif ${CPUTYPE} == "westmere" || ${CPUTYPE} == "nehalem" 35130803SmarcelCPUTYPE = corei7 36130803Smarcel. elif ${CPUTYPE} == "core" 37130803SmarcelCPUTYPE = prescott 38130803Smarcel. elif ${CPUTYPE} == "p4" 39130803SmarcelCPUTYPE = pentium4 40130803Smarcel. elif ${CPUTYPE} == "p4m" 41130803SmarcelCPUTYPE = pentium4m 42130803Smarcel. elif ${CPUTYPE} == "p3" 43130803SmarcelCPUTYPE = pentium3 44130803Smarcel. elif ${CPUTYPE} == "p3m" 45130803SmarcelCPUTYPE = pentium3m 46130803Smarcel. elif ${CPUTYPE} == "p-m" 47130803SmarcelCPUTYPE = pentium-m 48130803Smarcel. elif ${CPUTYPE} == "p2" 49130803SmarcelCPUTYPE = pentium2 50130803Smarcel. elif ${CPUTYPE} == "i686" 51130803SmarcelCPUTYPE = pentiumpro 52130803Smarcel. elif ${CPUTYPE} == "i586/mmx" 53130803SmarcelCPUTYPE = pentium-mmx 54130803Smarcel. elif ${CPUTYPE} == "i586" 55130803SmarcelCPUTYPE = pentium 56130803Smarcel. endif 57130803Smarcel. elif ${MACHINE_CPUARCH} == "amd64" 58130803Smarcel. if ${CPUTYPE} == "barcelona" 59130803SmarcelCPUTYPE = amdfam10 60130803Smarcel. elif ${CPUTYPE} == "westmere" || ${CPUTYPE} == "nehalem" 61130803SmarcelCPUTYPE = corei7 62130803Smarcel. elif ${CPUTYPE} == "prescott" 63130803SmarcelCPUTYPE = nocona 64130803Smarcel. endif 65130803Smarcel. elif ${MACHINE_ARCH} == "sparc64" 66130803Smarcel. if ${CPUTYPE} == "us" 67130803SmarcelCPUTYPE = ultrasparc 68130803Smarcel. elif ${CPUTYPE} == "us3" 69130803SmarcelCPUTYPE = ultrasparc3 70130803Smarcel. endif 71130803Smarcel. endif 72130803Smarcel 73130803Smarcel############################################################################### 74130803Smarcel# Logic to set up correct gcc optimization flag. This must be included 75130803Smarcel# after /etc/make.conf so it can react to the local value of CPUTYPE 76130803Smarcel# defined therein. Consult: 77130803Smarcel# http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html 78130803Smarcel# http://gcc.gnu.org/onlinedocs/gcc/IA_002d64-Options.html 79130803Smarcel# http://gcc.gnu.org/onlinedocs/gcc/RS_002f6000-and-PowerPC-Options.html 80130803Smarcel# http://gcc.gnu.org/onlinedocs/gcc/MIPS-Options.html 81130803Smarcel# http://gcc.gnu.org/onlinedocs/gcc/SPARC-Options.html 82130803Smarcel# http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html 83130803Smarcel 84130803Smarcel. if ${MACHINE_CPUARCH} == "i386" 85130803Smarcel. if ${CPUTYPE} == "crusoe" 86130803Smarcel_CPUCFLAGS = -march=i686 -falign-functions=0 -falign-jumps=0 -falign-loops=0 87130803Smarcel. elif ${CPUTYPE} == "k5" 88130803Smarcel_CPUCFLAGS = -march=pentium 89130803Smarcel. elif ${CPUTYPE} == "c7" 90130803Smarcel_CPUCFLAGS = -march=c3-2 91130803Smarcel. else 92130803Smarcel_CPUCFLAGS = -march=${CPUTYPE} 93130803Smarcel. endif 94130803Smarcel. elif ${MACHINE_CPUARCH} == "amd64" 95130803Smarcel_CPUCFLAGS = -march=${CPUTYPE} 96130803Smarcel. elif ${MACHINE_CPUARCH} == "arm" 97130803Smarcel. if ${CPUTYPE} == "xscale" 98130803Smarcel#XXX: gcc doesn't seem to like -mcpu=xscale, and dies while rebuilding itself 99130803Smarcel#_CPUCFLAGS = -mcpu=xscale 100130803Smarcel_CPUCFLAGS = -march=armv5te -D__XSCALE__ 101130803Smarcel. elif ${CPUTYPE} == "armv6" 102130803Smarcel_CPUCFLAGS = -march=${CPUTYPE} -DARM_ARCH_6=1 103130803Smarcel. elif ${CPUTYPE} == "cortexa" 104130803Smarcel_CPUCFLAGS = -DARM_ARCH_6=1 -mfpu=vfp 105130803Smarcel. else 106130803Smarcel_CPUCFLAGS = -mcpu=${CPUTYPE} 107130803Smarcel. endif 108130803Smarcel. elif ${MACHINE_ARCH} == "powerpc" 109130803Smarcel. if ${CPUTYPE} == "e500" 110130803Smarcel_CPUCFLAGS = -Wa,-me500 -msoft-float 111130803Smarcel. else 112130803Smarcel_CPUCFLAGS = -mcpu=${CPUTYPE} -mno-powerpc64 113130803Smarcel. endif 114130803Smarcel. elif ${MACHINE_ARCH} == "powerpc64" 115130803Smarcel_CPUCFLAGS = -mcpu=${CPUTYPE} 116130803Smarcel. elif ${MACHINE_CPUARCH} == "mips" 117130803Smarcel. if ${CPUTYPE} == "mips32" 118130803Smarcel_CPUCFLAGS = -march=mips32 119130803Smarcel. elif ${CPUTYPE} == "mips32r2" 120130803Smarcel_CPUCFLAGS = -march=mips32r2 121130803Smarcel. elif ${CPUTYPE} == "mips64" 122130803Smarcel_CPUCFLAGS = -march=mips64 123130803Smarcel. elif ${CPUTYPE} == "mips64r2" 124130803Smarcel_CPUCFLAGS = -march=mips64r2 125130803Smarcel. elif ${CPUTYPE} == "mips4kc" 126130803Smarcel_CPUCFLAGS = -march=4kc 127130803Smarcel. elif ${CPUTYPE} == "mips24kc" 128130803Smarcel_CPUCFLAGS = -march=24kc 129130803Smarcel. endif 130130803Smarcel. elif ${MACHINE_ARCH} == "sparc64" 131130803Smarcel. if ${CPUTYPE} == "v9" 132130803Smarcel_CPUCFLAGS = -mcpu=v9 133130803Smarcel. elif ${CPUTYPE} == "ultrasparc" 134130803Smarcel_CPUCFLAGS = -mcpu=ultrasparc 135130803Smarcel. elif ${CPUTYPE} == "ultrasparc3" 136130803Smarcel_CPUCFLAGS = -mcpu=ultrasparc3 137130803Smarcel. endif 138130803Smarcel. endif 139130803Smarcel 140130803Smarcel# Set up the list of CPU features based on the CPU type. This is an 141130803Smarcel# unordered list to make it easy for client makefiles to test for the 142130803Smarcel# presence of a CPU feature. 143130803Smarcel 144130803Smarcel. if ${MACHINE_CPUARCH} == "i386" 145130803Smarcel. if ${CPUTYPE} == "bdver2" || ${CPUTYPE} == "bdver1" 146130803SmarcelMACHINE_CPU = xop avx sse42 sse41 ssse3 sse4a sse3 sse2 sse mmx k6 k5 i586 147130803Smarcel. elif ${CPUTYPE} == "btver1" 148130803SmarcelMACHINE_CPU = ssse3 sse4a sse3 sse2 sse mmx k6 k5 i586 149130803Smarcel. elif ${CPUTYPE} == "amdfam10" 150130803SmarcelMACHINE_CPU = athlon-xp athlon k7 3dnow sse4a sse3 sse2 sse mmx k6 k5 i586 151130803Smarcel. elif ${CPUTYPE} == "opteron-sse3" || ${CPUTYPE} == "athlon64-sse3" 152130803SmarcelMACHINE_CPU = athlon-xp athlon k7 3dnow sse3 sse2 sse mmx k6 k5 i586 153130803Smarcel. elif ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" || \ 154130803Smarcel ${CPUTYPE} == "athlon-fx" 155130803SmarcelMACHINE_CPU = athlon-xp athlon k7 3dnow sse2 sse mmx k6 k5 i586 156130803Smarcel. elif ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \ 157130803Smarcel ${CPUTYPE} == "athlon-4" 158130803SmarcelMACHINE_CPU = athlon-xp athlon k7 3dnow sse mmx k6 k5 i586 159130803Smarcel. elif ${CPUTYPE} == "athlon" || ${CPUTYPE} == "athlon-tbird" 160130803SmarcelMACHINE_CPU = athlon k7 3dnow mmx k6 k5 i586 161130803Smarcel. elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" || ${CPUTYPE} == "geode" 162130803SmarcelMACHINE_CPU = 3dnow mmx k6 k5 i586 163130803Smarcel. elif ${CPUTYPE} == "k6" 164130803SmarcelMACHINE_CPU = mmx k6 k5 i586 165130803Smarcel. elif ${CPUTYPE} == "k5" 166130803SmarcelMACHINE_CPU = k5 i586 167130803Smarcel. elif ${CPUTYPE} == "core-avx2" 168130803SmarcelMACHINE_CPU = avx2 avx sse42 sse41 ssse3 sse3 sse2 sse i686 mmx i586 169130803Smarcel. elif ${CPUTYPE} == "core-avx-i" || ${CPUTYPE} == "corei7-avx" 170130803SmarcelMACHINE_CPU = avx sse42 sse41 ssse3 sse3 sse2 sse i686 mmx i586 171130803Smarcel. elif ${CPUTYPE} == "corei7" 172130803SmarcelMACHINE_CPU = sse42 sse41 ssse3 sse3 sse2 sse i686 mmx i586 173130803Smarcel. elif ${CPUTYPE} == "penryn" 174130803SmarcelMACHINE_CPU = sse41 ssse3 sse3 sse2 sse i686 mmx i586 175130803Smarcel. elif ${CPUTYPE} == "atom" || ${CPUTYPE} == "core2" 176130803SmarcelMACHINE_CPU = ssse3 sse3 sse2 sse i686 mmx i586 177130803Smarcel. elif ${CPUTYPE} == "yonah" || ${CPUTYPE} == "prescott" 178130803SmarcelMACHINE_CPU = sse3 sse2 sse i686 mmx i586 179130803Smarcel. elif ${CPUTYPE} == "pentium4" || ${CPUTYPE} == "pentium4m" || \ 180130803Smarcel ${CPUTYPE} == "pentium-m" 181130803SmarcelMACHINE_CPU = sse2 sse i686 mmx i586 182130803Smarcel. elif ${CPUTYPE} == "pentium3" || ${CPUTYPE} == "pentium3m" 183130803SmarcelMACHINE_CPU = sse i686 mmx i586 184130803Smarcel. elif ${CPUTYPE} == "pentium2" 185130803SmarcelMACHINE_CPU = i686 mmx i586 186130803Smarcel. elif ${CPUTYPE} == "pentiumpro" 187130803SmarcelMACHINE_CPU = i686 i586 188130803Smarcel. elif ${CPUTYPE} == "pentium-mmx" 189130803SmarcelMACHINE_CPU = mmx i586 190130803Smarcel. elif ${CPUTYPE} == "pentium" 191130803SmarcelMACHINE_CPU = i586 192130803Smarcel. elif ${CPUTYPE} == "c7" 193130803SmarcelMACHINE_CPU = sse3 sse2 sse i686 mmx i586 194130803Smarcel. elif ${CPUTYPE} == "c3-2" 195130803SmarcelMACHINE_CPU = sse i686 mmx i586 196130803Smarcel. elif ${CPUTYPE} == "c3" 197130803SmarcelMACHINE_CPU = 3dnow mmx i586 198130803Smarcel. elif ${CPUTYPE} == "winchip2" 199130803SmarcelMACHINE_CPU = 3dnow mmx 200130803Smarcel. elif ${CPUTYPE} == "winchip-c6" 201130803SmarcelMACHINE_CPU = mmx 202130803Smarcel. endif 203130803SmarcelMACHINE_CPU += i486 204130803Smarcel. elif ${MACHINE_CPUARCH} == "amd64" 205130803Smarcel. if ${CPUTYPE} == "bdver2" || ${CPUTYPE} == "bdver1" 206130803SmarcelMACHINE_CPU = xop avx sse42 sse41 ssse3 sse4a sse3 207130803Smarcel. elif ${CPUTYPE} == "btver1" 208130803SmarcelMACHINE_CPU = ssse3 sse4a sse3 209130803Smarcel. elif ${CPUTYPE} == "amdfam10" 210130803SmarcelMACHINE_CPU = k8 3dnow sse4a sse3 211130803Smarcel. elif ${CPUTYPE} == "opteron-sse3" || ${CPUTYPE} == "athlon64-sse3" || \ 212130803Smarcel ${CPUTYPE} == "k8-sse3" 213130803SmarcelMACHINE_CPU = k8 3dnow sse3 214130803Smarcel. elif ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" || \ 215130803Smarcel ${CPUTYPE} == "athlon-fx" || ${CPUTYPE} == "k8" 216130803SmarcelMACHINE_CPU = k8 3dnow 217130803Smarcel. elif ${CPUTYPE} == "core-avx2" 218130803SmarcelMACHINE_CPU = avx2 avx sse42 sse41 ssse3 sse3 219130803Smarcel. elif ${CPUTYPE} == "core-avx-i" || ${CPUTYPE} == "corei7-avx" 220130803SmarcelMACHINE_CPU = avx sse42 sse41 ssse3 sse3 221130803Smarcel. elif ${CPUTYPE} == "corei7" 222130803SmarcelMACHINE_CPU = sse42 sse41 ssse3 sse3 223130803Smarcel. elif ${CPUTYPE} == "penryn" 224130803SmarcelMACHINE_CPU = sse41 ssse3 sse3 225130803Smarcel. elif ${CPUTYPE} == "atom" || ${CPUTYPE} == "core2" 226130803SmarcelMACHINE_CPU = ssse3 sse3 227130803Smarcel. elif ${CPUTYPE} == "nocona" 228130803SmarcelMACHINE_CPU = sse3 229130803Smarcel. endif 230130803SmarcelMACHINE_CPU += amd64 sse2 sse mmx 231130803Smarcel. elif ${MACHINE_CPUARCH} == "ia64" 232130803Smarcel. if ${CPUTYPE} == "itanium" 233130803SmarcelMACHINE_CPU = itanium 234130803Smarcel. endif 235130803Smarcel. elif ${MACHINE_ARCH} == "powerpc" 236130803Smarcel. if ${CPUTYPE} == "e500" 237130803SmarcelMACHINE_CPU = booke 238130803Smarcel. endif 239130803Smarcel. elif ${MACHINE_ARCH} == "sparc64" 240130803Smarcel. if ${CPUTYPE} == "v9" 241130803SmarcelMACHINE_CPU = v9 242130803Smarcel. elif ${CPUTYPE} == "ultrasparc" 243130803SmarcelMACHINE_CPU = v9 ultrasparc 244130803Smarcel. elif ${CPUTYPE} == "ultrasparc3" 245130803SmarcelMACHINE_CPU = v9 ultrasparc ultrasparc3 246130803Smarcel. endif 247130803Smarcel. endif 248130803Smarcel.endif 249130803Smarcel 250130803Smarcel.if ${MACHINE_CPUARCH} == "mips" 251130803SmarcelCFLAGS += -G0 252130803Smarcel.endif 253130803Smarcel 254130803Smarcel# NB: COPTFLAGS is handled in /usr/src/sys/conf/kern.pre.mk 255130803Smarcel 256130803Smarcel.if !defined(NO_CPU_CFLAGS) 257130803SmarcelCFLAGS += ${_CPUCFLAGS} 258130803Smarcel.endif 259130803Smarcel