bsd.cpu.mk revision 243831
1233294Sstas# $FreeBSD: head/share/mk/bsd.cpu.mk 243831 2012-12-03 19:27:31Z jkim $ 272445Sassar 3178825Sdfr# Set default CPU compile flags and baseline CPUTYPE for each arch. The 472445Sassar# compile flags must support the minimum CPU type for each architecture but 555682Smarkm# may tune support for more advanced processors. 655682Smarkm 7178825Sdfr.if !defined(CPUTYPE) || empty(CPUTYPE) 8178825Sdfr_CPUCFLAGS = 9178825Sdfr. if ${MACHINE_CPUARCH} == "i386" 10178825SdfrMACHINE_CPU = i486 11178825Sdfr. elif ${MACHINE_CPUARCH} == "amd64" 12178825SdfrMACHINE_CPU = amd64 sse2 sse mmx 13178825Sdfr. elif ${MACHINE_CPUARCH} == "ia64" 1472445SassarMACHINE_CPU = itanium 15178825Sdfr. elif ${MACHINE_CPUARCH} == "powerpc" 16178825SdfrMACHINE_CPU = aim 17178825Sdfr. elif ${MACHINE_CPUARCH} == "sparc64" 18178825SdfrMACHINE_CPU = ultrasparc 19178825Sdfr. elif ${MACHINE_CPUARCH} == "arm" 20178825SdfrMACHINE_CPU = arm 21178825Sdfr. elif ${MACHINE_CPUARCH} == "mips" 22178825SdfrMACHINE_CPU = mips 23178825Sdfr. endif 24178825Sdfr.else 25178825Sdfr 26233294Sstas# Handle aliases (not documented in make.conf to avoid user confusion 27127808Snectar# between e.g. i586 and pentium) 28127808Snectar 29127808Snectar. if ${MACHINE_CPUARCH} == "i386" 30178825Sdfr. if ${CPUTYPE} == "nocona" || ${CPUTYPE} == "core" || \ 31178825Sdfr ${CPUTYPE} == "core2" || ${CPUTYPE} == "corei7" || \ 32178825Sdfr ${CPUTYPE} == "corei7-avx" || ${CPUTYPE} == "core-avx-i" 33233294SstasCPUTYPE = prescott 3472445Sassar. elif ${CPUTYPE} == "p4" 3572445SassarCPUTYPE = pentium4 3672445Sassar. elif ${CPUTYPE} == "p4m" 3755682SmarkmCPUTYPE = pentium4m 3855682Smarkm. elif ${CPUTYPE} == "p3" 3955682SmarkmCPUTYPE = pentium3 4055682Smarkm. elif ${CPUTYPE} == "p3m" 4155682SmarkmCPUTYPE = pentium3m 4255682Smarkm. elif ${CPUTYPE} == "p-m" 4355682SmarkmCPUTYPE = pentium-m 4455682Smarkm. elif ${CPUTYPE} == "p2" 4555682SmarkmCPUTYPE = pentium2 4655682Smarkm. elif ${CPUTYPE} == "i686" 4755682SmarkmCPUTYPE = pentiumpro 48178825Sdfr. elif ${CPUTYPE} == "i586/mmx" 4955682SmarkmCPUTYPE = pentium-mmx 50178825Sdfr. elif ${CPUTYPE} == "i586" 51178825SdfrCPUTYPE = pentium 5255682Smarkm. elif ${CPUTYPE} == "opteron-sse3" || ${CPUTYPE} == "athlon64-sse3" || \ 5355682Smarkm ${CPUTYPE} == "k8-sse3" || ${CPUTYPE} == "amdfam10" || \ 5455682Smarkm ${CPUTYPE} == "btver1" || ${CPUTYPE} == "bdver1" || ${CPUTYPE} == "bdver2" 5555682SmarkmCPUTYPE = prescott 5655682Smarkm. elif ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" || \ 5755682Smarkm ${CPUTYPE} == "k8" 5855682SmarkmCPUTYPE = athlon-mp 5955682Smarkm. elif ${CPUTYPE} == "k7" 60178825SdfrCPUTYPE = athlon 6155682Smarkm. endif 6255682Smarkm. elif ${MACHINE_CPUARCH} == "amd64" 6355682Smarkm. if ${CPUTYPE} == "prescott" 6455682SmarkmCPUTYPE = nocona 6555682Smarkm. endif 6655682Smarkm. elif ${MACHINE_ARCH} == "sparc64" 6755682Smarkm. if ${CPUTYPE} == "us" 6855682SmarkmCPUTYPE = ultrasparc 6955682Smarkm. elif ${CPUTYPE} == "us3" 7055682SmarkmCPUTYPE = ultrasparc3 7155682Smarkm. endif 7255682Smarkm. endif 73127808Snectar 7455682Smarkm############################################################################### 7555682Smarkm# Logic to set up correct gcc optimization flag. This must be included 7655682Smarkm# after /etc/make.conf so it can react to the local value of CPUTYPE 7755682Smarkm# defined therein. Consult: 78127808Snectar# http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html 7955682Smarkm# http://gcc.gnu.org/onlinedocs/gcc/IA_002d64-Options.html 80178825Sdfr# http://gcc.gnu.org/onlinedocs/gcc/RS_002f6000-and-PowerPC-Options.html 8155682Smarkm# http://gcc.gnu.org/onlinedocs/gcc/MIPS-Options.html 8255682Smarkm# http://gcc.gnu.org/onlinedocs/gcc/SPARC-Options.html 8355682Smarkm# http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html 8455682Smarkm 8555682Smarkm. if ${MACHINE_CPUARCH} == "i386" 86127808Snectar. if ${CPUTYPE} == "crusoe" 8755682Smarkm_CPUCFLAGS = -march=i686 -falign-functions=0 -falign-jumps=0 -falign-loops=0 8855682Smarkm. elif ${CPUTYPE} == "k5" 8955682Smarkm_CPUCFLAGS = -march=pentium 9055682Smarkm. elif ${CPUTYPE} == "core2" 9155682Smarkm_CPUCFLAGS = -march=prescott 9255682Smarkm. else 9355682Smarkm_CPUCFLAGS = -march=${CPUTYPE} 94127808Snectar. endif # GCC on 'i386' 95127808Snectar. elif ${MACHINE_CPUARCH} == "amd64" 96233294Sstas_CPUCFLAGS = -march=${CPUTYPE} 97233294Sstas. elif ${MACHINE_CPUARCH} == "arm" 9855682Smarkm. if ${CPUTYPE} == "xscale" 9955682Smarkm#XXX: gcc doesn't seem to like -mcpu=xscale, and dies while rebuilding itself 10055682Smarkm#_CPUCFLAGS = -mcpu=xscale 10155682Smarkm_CPUCFLAGS = -march=armv5te -D__XSCALE__ -DARM_WANT_TP_ADDRESS 10255682Smarkm. elif ${CPUTYPE} == "armv6" 10355682Smarkm_CPUCFLAGS = -march=${CPUTYPE} -DARM_ARCH_6=1 10455682Smarkm. elif ${CPUTYPE} == "cortexa" 105178825Sdfr_CPUCFLAGS = -march=armv6 -DARM_ARCH_6=1 -mfpu=vfp 106178825Sdfr. else 10755682Smarkm_CPUCFLAGS = -mcpu=${CPUTYPE} -DARM_WANT_TP_ADDRESS 10855682Smarkm. endif 109233294Sstas. elif ${MACHINE_ARCH} == "powerpc" 110233294Sstas. if ${CPUTYPE} == "e500" 111233294Sstas_CPUCFLAGS = -Wa,-me500 -msoft-float 112233294Sstas. else 113233294Sstas_CPUCFLAGS = -mcpu=${CPUTYPE} -mno-powerpc64 114233294Sstas. endif 115233294Sstas. elif ${MACHINE_ARCH} == "powerpc64" 116233294Sstas_CPUCFLAGS = -mcpu=${CPUTYPE} 117178825Sdfr. elif ${MACHINE_CPUARCH} == "mips" 11855682Smarkm. if ${CPUTYPE} == "mips32" 11955682Smarkm_CPUCFLAGS = -march=mips32 120127808Snectar. elif ${CPUTYPE} == "mips32r2" 121178825Sdfr_CPUCFLAGS = -march=mips32r2 122178825Sdfr. elif ${CPUTYPE} == "mips64" 12355682Smarkm_CPUCFLAGS = -march=mips64 124127808Snectar. elif ${CPUTYPE} == "mips64r2" 125127808Snectar_CPUCFLAGS = -march=mips64r2 126127808Snectar. elif ${CPUTYPE} == "mips4kc" 127127808Snectar_CPUCFLAGS = -march=4kc 12855682Smarkm. elif ${CPUTYPE} == "mips24kc" 12955682Smarkm_CPUCFLAGS = -march=24kc 13055682Smarkm. endif 13155682Smarkm. elif ${MACHINE_ARCH} == "sparc64" 13255682Smarkm. if ${CPUTYPE} == "v9" 13355682Smarkm_CPUCFLAGS = -mcpu=v9 13455682Smarkm. elif ${CPUTYPE} == "ultrasparc" 13555682Smarkm_CPUCFLAGS = -mcpu=ultrasparc 136178825Sdfr. elif ${CPUTYPE} == "ultrasparc3" 137178825Sdfr_CPUCFLAGS = -mcpu=ultrasparc3 13855682Smarkm. endif 13955682Smarkm. endif 140178825Sdfr 141178825Sdfr# Set up the list of CPU features based on the CPU type. This is an 142178825Sdfr# unordered list to make it easy for client makefiles to test for the 143178825Sdfr# presence of a CPU feature. 144178825Sdfr 145178825Sdfr. if ${MACHINE_CPUARCH} == "i386" 146178825Sdfr. if ${CPUTYPE} == "bdver1" || ${CPUTYPE} == "bdver2" 147178825SdfrMACHINE_CPU = xop avx sse42 sse41 ssse3 sse4a sse3 sse2 sse mmx k6 k5 i586 148178825Sdfr. elif ${CPUTYPE} == "btver1" 14955682SmarkmMACHINE_CPU = ssse3 sse4a sse3 sse2 sse mmx k6 k5 i586 15055682Smarkm. elif ${CPUTYPE} == "amdfam10" 15155682SmarkmMACHINE_CPU = athlon-xp athlon k7 3dnow sse4a sse3 sse2 sse mmx k6 k5 i586 15255682Smarkm. elif ${CPUTYPE} == "opteron-sse3" || ${CPUTYPE} == "athlon64-sse3" 15355682SmarkmMACHINE_CPU = athlon-xp athlon k7 3dnow sse3 sse2 sse mmx k6 k5 i586 154178825Sdfr. elif ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" 15555682SmarkmMACHINE_CPU = athlon-xp athlon k7 3dnow sse2 sse mmx k6 k5 i586 15655682Smarkm. elif ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \ 15755682Smarkm ${CPUTYPE} == "athlon-4" 158178825SdfrMACHINE_CPU = athlon-xp athlon k7 3dnow sse mmx k6 k5 i586 15955682Smarkm. elif ${CPUTYPE} == "athlon" || ${CPUTYPE} == "athlon-tbird" 16055682SmarkmMACHINE_CPU = athlon k7 3dnow mmx k6 k5 i586 16155682Smarkm. elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" || ${CPUTYPE} == "geode" 16255682SmarkmMACHINE_CPU = 3dnow mmx k6 k5 i586 16355682Smarkm. elif ${CPUTYPE} == "k6" 16455682SmarkmMACHINE_CPU = mmx k6 k5 i586 16555682Smarkm. elif ${CPUTYPE} == "k5" 166178825SdfrMACHINE_CPU = k5 i586 16755682Smarkm. elif ${CPUTYPE} == "c3" 16855682SmarkmMACHINE_CPU = 3dnow mmx i586 16955682Smarkm. elif ${CPUTYPE} == "c3-2" 170178825SdfrMACHINE_CPU = sse mmx i586 171178825Sdfr. elif ${CPUTYPE} == "c7" 17255682SmarkmMACHINE_CPU = sse3 sse2 sse i686 mmx i586 17355682Smarkm. elif ${CPUTYPE} == "corei7-avx" || ${CPUTYPE} == "core-avx-i" 17455682SmarkmMACHINE_CPU = avx sse42 sse41 ssse3 sse3 sse2 sse i686 mmx i586 17555682Smarkm. elif ${CPUTYPE} == "corei7" 17655682SmarkmMACHINE_CPU = sse42 sse41 ssse3 sse3 sse2 sse i686 mmx i586 17755682Smarkm. elif ${CPUTYPE} == "core2" 17855682SmarkmMACHINE_CPU = ssse3 sse3 sse2 sse i686 mmx i586 17955682Smarkm. elif ${CPUTYPE} == "prescott" 18055682SmarkmMACHINE_CPU = sse3 sse2 sse i686 mmx i586 18155682Smarkm. elif ${CPUTYPE} == "pentium4" || ${CPUTYPE} == "pentium4m" || \ 18255682Smarkm ${CPUTYPE} == "pentium-m" 18355682SmarkmMACHINE_CPU = sse2 sse i686 mmx i586 18455682Smarkm. elif ${CPUTYPE} == "pentium3" || ${CPUTYPE} == "pentium3m" 18555682SmarkmMACHINE_CPU = sse i686 mmx i586 18655682Smarkm. elif ${CPUTYPE} == "pentium2" 18755682SmarkmMACHINE_CPU = i686 mmx i586 18855682Smarkm. elif ${CPUTYPE} == "pentiumpro" 18955682SmarkmMACHINE_CPU = i686 i586 19055682Smarkm. elif ${CPUTYPE} == "pentium-mmx" 19155682SmarkmMACHINE_CPU = mmx i586 19255682Smarkm. elif ${CPUTYPE} == "pentium" 19355682SmarkmMACHINE_CPU = i586 19455682Smarkm. endif 19555682SmarkmMACHINE_CPU += i486 19655682Smarkm. elif ${MACHINE_CPUARCH} == "amd64" 19755682Smarkm. if ${CPUTYPE} == "bdver1" || ${CPUTYPE} == "bdver2" 19855682SmarkmMACHINE_CPU = xop avx sse42 sse41 ssse3 sse4a sse3 19955682Smarkm. elif ${CPUTYPE} == "btver1" 20055682SmarkmMACHINE_CPU = ssse3 sse4a sse3 201178825Sdfr. elif ${CPUTYPE} == "amdfam10" 202178825SdfrMACHINE_CPU = k8 3dnow sse4a sse3 203178825Sdfr. elif ${CPUTYPE} == "opteron-sse3" || ${CPUTYPE} == "athlon64-sse3" || \ 204178825Sdfr ${CPUTYPE} == "k8-sse3" 205178825SdfrMACHINE_CPU = k8 3dnow sse3 206178825Sdfr. elif ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" || \ 207178825Sdfr ${CPUTYPE} == "k8" 208178825SdfrMACHINE_CPU = k8 3dnow 209178825Sdfr. elif ${CPUTYPE} == "corei7-avx" || ${CPUTYPE} == "core-avx-i" 210178825SdfrMACHINE_CPU = avx sse42 sse41 ssse3 sse3 211178825Sdfr. elif ${CPUTYPE} == "corei7" 212178825SdfrMACHINE_CPU = sse42 sse41 ssse3 sse3 213178825Sdfr. elif ${CPUTYPE} == "core2" 214178825SdfrMACHINE_CPU = ssse3 sse3 215178825Sdfr. elif ${CPUTYPE} == "nocona" 216178825SdfrMACHINE_CPU = sse3 217178825Sdfr. endif 218178825SdfrMACHINE_CPU += amd64 sse2 sse mmx 219178825Sdfr. elif ${MACHINE_CPUARCH} == "ia64" 220178825Sdfr. if ${CPUTYPE} == "itanium" 221178825SdfrMACHINE_CPU = itanium 222178825Sdfr. endif 223178825Sdfr. elif ${MACHINE_ARCH} == "powerpc" 224178825Sdfr. if ${CPUTYPE} == "e500" 225178825SdfrMACHINE_CPU = booke 226178825Sdfr. endif 227178825Sdfr. elif ${MACHINE_ARCH} == "sparc64" 228178825Sdfr. if ${CPUTYPE} == "v9" 229178825SdfrMACHINE_CPU = v9 230178825Sdfr. elif ${CPUTYPE} == "ultrasparc" 231178825SdfrMACHINE_CPU = v9 ultrasparc 232178825Sdfr. elif ${CPUTYPE} == "ultrasparc3" 233178825SdfrMACHINE_CPU = v9 ultrasparc ultrasparc3 234178825Sdfr. endif 235178825Sdfr. endif 236178825Sdfr.endif 237178825Sdfr 238178825Sdfr.if ${MACHINE_CPUARCH} == "mips" 239178825SdfrCFLAGS += -G0 240178825Sdfr.endif 241178825Sdfr 242178825Sdfr# NB: COPTFLAGS is handled in /usr/src/sys/conf/kern.pre.mk 243178825Sdfr 244178825Sdfr.if !defined(NO_CPU_CFLAGS) 245178825SdfrCFLAGS += ${_CPUCFLAGS} 246178825Sdfr.endif 247178825Sdfr