bsd.cpu.mk revision 169820
172445Sassar# $FreeBSD: head/share/mk/bsd.cpu.mk 169820 2007-05-21 08:39:44Z cognet $
272445Sassar
372445Sassar# 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
572445Sassar# may tune support for more advanced processors.
672445Sassar
772445Sassar.if !defined(CPUTYPE) || empty(CPUTYPE)
872445Sassar_CPUCFLAGS =
972445Sassar. if ${MACHINE_ARCH} == "i386"
1072445SassarMACHINE_CPU = i486
1172445Sassar. elif ${MACHINE_ARCH} == "amd64"
1272445SassarMACHINE_CPU = amd64 sse2 sse
1372445Sassar. elif ${MACHINE_ARCH} == "ia64"
1472445SassarMACHINE_CPU = itanium
1572445Sassar. elif ${MACHINE_ARCH} == "sparc64"
1672445Sassar. elif ${MACHINE_ARCH} == "arm"
1772445SassarMACHINE_CPU = arm
1872445Sassar. endif
1972445Sassar.else
2072445Sassar
2172445Sassar# Handle aliases (not documented in make.conf to avoid user confusion
2272445Sassar# between e.g. i586 and pentium)
2372445Sassar
2472445Sassar. if ${MACHINE_ARCH} == "i386"
2572445Sassar.  if ${CPUTYPE} == "nocona"
2672445SassarCPUTYPE = prescott
2772445Sassar.  elif ${CPUTYPE} == "core" || ${CPUTYPE} == "core2"
2872445SassarCPUTYPE = prescott
2972445Sassar.  elif ${CPUTYPE} == "p4"
3072445SassarCPUTYPE = pentium4
3172445Sassar.  elif ${CPUTYPE} == "p4m"
3272445SassarCPUTYPE = pentium4m
3372445Sassar.  elif ${CPUTYPE} == "p3"
3472445SassarCPUTYPE = pentium3
3572445Sassar.  elif ${CPUTYPE} == "p3m"
3672445SassarCPUTYPE = pentium3m
3772445Sassar.  elif ${CPUTYPE} == "p-m"
3872445SassarCPUTYPE = pentium-m
3972445Sassar.  elif ${CPUTYPE} == "p2"
4072445SassarCPUTYPE = pentium2
4172445Sassar.  elif ${CPUTYPE} == "i686"
4272445SassarCPUTYPE = pentiumpro
4372445Sassar.  elif ${CPUTYPE} == "i586/mmx"
4472445SassarCPUTYPE = pentium-mmx
4572445Sassar.  elif ${CPUTYPE} == "i586"
4672445SassarCPUTYPE = pentium
4772445Sassar.  elif ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" || \
4872445Sassar     ${CPUTYPE} == "k8"
4972445SassarCPUTYPE = athlon-mp
5072445Sassar.  elif ${CPUTYPE} == "k7"
5172445SassarCPUTYPE = athlon
5272445Sassar.  endif
5372445Sassar. elif ${MACHINE_ARCH} == "amd64"
5472445Sassar.  if ${CPUTYPE} == "prescott" || ${CPUTYPE} == "core2"
5572445SassarCPUTYPE = nocona
5672445Sassar.  endif
5772445Sassar. endif
5872445Sassar
5972445Sassar###############################################################################
6072445Sassar# Logic to set up correct gcc optimization flag.  This must be included
6172445Sassar# after /etc/make.conf so it can react to the local value of CPUTYPE
6272445Sassar# defined therein.  Consult:
6372445Sassar#	http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html
6472445Sassar#	http://gcc.gnu.org/onlinedocs/gcc/IA-64-Options.html
6572445Sassar#	http://gcc.gnu.org/onlinedocs/gcc/RS-6000-and-PowerPC-Options.html
6672445Sassar#	http://gcc.gnu.org/onlinedocs/gcc/SPARC-Options.html
6772445Sassar#	http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86-64-Options.html
6872445Sassar
6972445Sassar. if ${MACHINE_ARCH} == "i386"
7072445Sassar.  if ${CPUTYPE} == "crusoe"
7172445Sassar_CPUCFLAGS = -march=i686 -falign-functions=0 -falign-jumps=0 -falign-loops=0
7272445Sassar.  elif ${CPUTYPE} == "k5"
7372445Sassar_CPUCFLAGS = -march=pentium
7472445Sassar.  else
7572445Sassar_CPUCFLAGS = -march=${CPUTYPE}
7672445Sassar.  endif # GCC on 'i386'
7772445Sassar.  if ${CPUTYPE} == "crusoe"
7872445Sassar_ICC_CPUCFLAGS = -tpp6 -xiM
7972445Sassar.  elif ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \
8072445Sassar    ${CPUTYPE} == "athlon-4"
8172445Sassar_ICC_CPUCFLAGS = -tpp6 -xiMK
8272445Sassar.  elif ${CPUTYPE} == "athlon-tbird" || ${CPUTYPE} == "athlon"
8372445Sassar_ICC_CPUCFLAGS = -tpp6 -xiM
8472445Sassar.  elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" || ${CPUTYPE} == "k6"
8572445Sassar_ICC_CPUCFLAGS = -tpp6 -xi
8672445Sassar.  elif ${CPUTYPE} == "k5"
8772445Sassar_ICC_CPUCFLAGS = -tpp5
8872445Sassar.  elif ${CPUTYPE} == "pentium4" || ${CPUTYPE} == "pentium4m"
8972445Sassar_ICC_CPUCFLAGS = -tpp7 -xiMKW
9072445Sassar.  elif ${CPUTYPE} == "pentium3" || ${CPUTYPE} == "pentium3m" || \
9172445Sassar     ${CPUTYPE} == "pentium-m"
9272445Sassar_ICC_CPUCFLAGS = -tpp6 -xiMK
9372445Sassar.  elif ${CPUTYPE} == "pentium2" || ${CPUTYPE} == "pentiumpro"
9472445Sassar_ICC_CPUCFLAGS = -tpp6 -xiM
9572445Sassar.  elif ${CPUTYPE} == "pentium-mmx"
9672445Sassar_ICC_CPUCFLAGS = -tpp5 -xM
9772445Sassar.  elif ${CPUTYPE} == "pentium"
9872445Sassar_ICC_CPUCFLAGS = -tpp5
9972445Sassar.  else
10072445Sassar_ICC_CPUCFLAGS =
10172445Sassar.  endif # ICC on 'i386'
10272445Sassar. elif ${MACHINE_ARCH} == "amd64"
10372445Sassar_CPUCFLAGS = -march=${CPUTYPE}
10472445Sassar. elif ${MACHINE_ARCH} == "arm"
10572445Sassar.  if ${CPUTYPE} == "xscale"
10672445Sassar_CPUCFLAGS = -mcpu=xscale
10772445Sassar.  else
10872445Sassar_CPUCFLAGS = -mcpu=${CPUTYPE}
10972445Sassar.  endif
11072445Sassar. endif
11172445Sassar
11272445Sassar# Set up the list of CPU features based on the CPU type.  This is an
11372445Sassar# unordered list to make it easy for client makefiles to test for the
11472445Sassar# presence of a CPU feature.
11572445Sassar
11672445Sassar. if ${MACHINE_ARCH} == "i386"
11772445Sassar.  if ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64"
11872445SassarMACHINE_CPU = athlon-xp athlon k7 3dnow sse2 sse mmx k6 k5 i586 i486 i386
11972445Sassar.  elif ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \
12072445Sassar    ${CPUTYPE} == "athlon-4"
12172445SassarMACHINE_CPU = athlon-xp athlon k7 3dnow sse mmx k6 k5 i586 i486 i386
12272445Sassar.  elif ${CPUTYPE} == "athlon" || ${CPUTYPE} == "athlon-tbird"
12372445SassarMACHINE_CPU = athlon k7 3dnow mmx k6 k5 i586 i486 i386
12472445Sassar.  elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2"
12572445SassarMACHINE_CPU = 3dnow mmx k6 k5 i586 i486 i386
12672445Sassar.  elif ${CPUTYPE} == "k6"
12772445SassarMACHINE_CPU = mmx k6 k5 i586 i486 i386
12872445Sassar.  elif ${CPUTYPE} == "k5"
12972445SassarMACHINE_CPU = k5 i586 i486 i386
13072445Sassar.  elif ${CPUTYPE} == "c3"
13172445SassarMACHINE_CPU = 3dnow mmx i586 i486 i386
13272445Sassar.  elif ${CPUTYPE} == "c3-2"
13372445SassarMACHINE_CPU = sse mmx i586 i486 i386
13472445Sassar.  elif ${CPUTYPE} == "prescott"
13572445SassarMACHINE_CPU = sse3 sse2 sse i686 mmx i586 i486 i386
13672445Sassar.  elif ${CPUTYPE} == "pentium4" || ${CPUTYPE} == "pentium4m" || ${CPUTYPE} == "pentium-m"
13772445SassarMACHINE_CPU = sse2 sse i686 mmx i586 i486 i386
13872445Sassar.  elif ${CPUTYPE} == "pentium3" || ${CPUTYPE} == "pentium3m"
13972445SassarMACHINE_CPU = sse i686 mmx i586 i486 i386
14072445Sassar.  elif ${CPUTYPE} == "pentium2"
14172445SassarMACHINE_CPU = i686 mmx i586 i486 i386
14272445Sassar.  elif ${CPUTYPE} == "pentiumpro"
14372445SassarMACHINE_CPU = i686 i586 i486 i386
14472445Sassar.  elif ${CPUTYPE} == "pentium-mmx"
14572445SassarMACHINE_CPU = mmx i586 i486 i386
14672445Sassar.  elif ${CPUTYPE} == "pentium"
14772445SassarMACHINE_CPU = i586 i486 i386
14872445Sassar.  elif ${CPUTYPE} == "i486"
14972445SassarMACHINE_CPU = i486 i386
15072445Sassar.  elif ${CPUTYPE} == "i386"
15172445SassarMACHINE_CPU = i386
15272445Sassar.  endif
15372445Sassar. elif ${MACHINE_ARCH} == "amd64"
15472445Sassar.  if ${CPUTYPE} == "opteron" || ${CPUTYPE} == "athlon64" || ${CPUTYPE} == "k8"
15572445SassarMACHINE_CPU = k8 3dnow
15672445Sassar.  elif ${CPUTYPE} == "nocona"
15772445SassarMACHINE_CPU = sse3
15872445Sassar.  endif
15972445SassarMACHINE_CPU += amd64 sse2 sse mmx
16072445Sassar. elif ${MACHINE_ARCH} == "ia64"
16172445Sassar.  if ${CPUTYPE} == "itanium"
16272445SassarMACHINE_CPU = itanium
16372445Sassar.  endif
16472445Sassar. endif
16572445Sassar.endif
16672445Sassar
16772445Sassar.if ${MACHINE_ARCH} == "arm" && defined(TARGET_BIG_ENDIAN)
16872445SassarCFLAGS += -mbig-endian
16972445SassarLDFLAGS += -mbig-endian
17072445SassarLD += -EB
17172445Sassar.endif
17272445Sassar
17372445Sassar# NB: COPTFLAGS is handled in /usr/src/sys/conf/kern.pre.mk
17472445Sassar
17572445Sassar.if !defined(NO_CPU_CFLAGS)
17672445Sassar. if ${CC} == "icc"
17772445SassarCFLAGS += ${_ICC_CPUCFLAGS}
17872445Sassar. else
17972445SassarCFLAGS += ${_CPUCFLAGS}
18072445Sassar. endif
18172445Sassar.endif
18272445Sassar