kernel - Fix SMP race in procfs
[dragonfly.git] / share / mk / bsd.cpu.gcc47.mk
1 # Set default CPU compile flags and baseline CPUTYPE for each arch.  The
2 # compile flags must support the minimum CPU type for each architecture but
3 # may tune support for more advanced processors.
4
5 generic_x86_64= x86_64 mmx sse sse2
6 generic_i386=   i386
7
8 .if !defined(CPUTYPE) || empty(CPUTYPE) || ${CPUTYPE} == "native"
9
10 . if defined(CPUTYPE) && ${CPUTYPE:Mnative}
11 _CPUCFLAGS=     -march=native
12 . else
13 _CPUCFLAGS=
14 . endif
15
16 MACHINE_CPU=    ${generic_${MACHINE_ARCH}}
17
18 .else
19
20 ###############################################################################
21 # Logic to set up correct gcc optimization flag.  This must be included
22 # after /etc/make.conf so it can react to the local value of CPUTYPE
23 # defined therein.  Consult:
24 # https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/i386-and-x86-64-Options.html
25 ###############################################################################
26
27 # Some GCC cpu-types have aliases, rename them to a single identifier
28 # If the value for cpu-type is not recognized, throw it away and use -native
29
30 . if ${CPUTYPE} == "k8" \
31   || ${CPUTYPE} == "opteron" \
32   || ${CPUTYPE} == "athlon-fx"
33 CT2=    athlon64
34 . elif ${CPUTYPE} == "k8-sse3" \
35     || ${CPUTYPE} == "opteron-sse3"
36 CT2=    athlon64-sse3
37 . elif ${CPUTYPE} == "amdfam10"
38 CT2=    barcelona
39 . else
40 CT2=    ${CPUTYPE}
41 . endif
42
43 known_x86_64=   athlon64 \
44                 athlon64-sse3 \
45                 atom \
46                 barcelona \
47                 bdver1 \
48                 bdver2 \
49                 btver1 \
50                 core-avx-i \
51                 core2 \
52                 corei7 \
53                 corei7-avx \
54                 i386 \
55                 nocona \
56                 znver1
57
58 known_i386=     i386
59
60 . if defined(known_${MACHINE_ARCH}) && \
61      !empty(known_${MACHINE_ARCH}:M${CT2})              # CID: Check CPUTYPE
62
63 # Set up the list of CPU features based on the CPU type.  This is an
64 # unordered list to make it easy for client makefiles to test for the
65 # presence of a CPU feature.
66
67 .  if ${MACHINE_ARCH} == "x86_64"
68 C_i386=         ${generic_i386}
69 C_nocona=       ${generic_x86_64} sse3
70 C_core2=        ${C_nocona} ssse3
71 C_corei7=       ${C_core2} sse41 sse42
72 C_corei7avx=    ${C_corei7} avx aes pclmul
73 C_atom=         ${C_core2}
74 C_athlon64=     ${generic_x86_64} 3dnow
75 C_athlon64sse3= ${C_athlon64} sse3
76 C_barcelona=    ${C_athlon64sse3} sse4a abm
77 C_bdver1=       ${C_corei7avx} sse4a abm fma4 xop lwp cx16
78 C_bdver2=       ${C_bdver1} bmi f16c fma tbm
79 C_btver1=       ${C_barcelona} cx16
80 C_coreavxi=     ${C_corei7avx} fsgsbase rdrnd f16c
81 C_znver1=       ${C_corei7avx} bmi bmi2 f16c fma fsgsbase avx2 adcx rdseed \
82                 mwaitx sha clzero cx16 movbe sse4a abm xsavec xsaves \
83                 clflushop popcnt
84
85 .  endif        # end of x86_64 feature list
86
87 # i386 used for 32-bit BIOS-based boot loaders
88
89 .  if ${MACHINE_ARCH} == "i386"
90 C_i386=         ${generic_i386}
91 .  endif        # end of i386 feature list
92
93 _CPUCFLAGS=     -march=${CT2}
94 MACHINE_CPU=    ${C_${CT2:S|-||}}
95
96 . else                                                  # CID: Check CPUTYPE
97
98 # CPUTYPE was defined and was not empty, but the value does not match known
99 # CPU types of the defined MACHINE_ARCH.  Set -march to native and define
100 # generic features based on MACHINE_ARCH
101
102 _CPUCFLAGS=     -march=native
103 MACHINE_CPU=    ${generic_${MACHINE_ARCH}}
104
105 . endif                                                 # CID: Check CPUTYPE
106
107 .endif