1# $FreeBSD$ 2 3# Set default CPU compile flags and baseline CPUTYPE for each arch. The 4# compile flags must support the minimum CPU type for each architecture but 5# may tune support for more advanced processors. 6 7.if !defined(CPUTYPE) || empty(CPUTYPE) 8. if ${MACHINE_ARCH} == "i386" 9_CPUCFLAGS = 10MACHINE_CPU = i486 11. elif ${MACHINE_ARCH} == "alpha" 12_CPUCFLAGS = -mcpu=ev4 -mtune=ev5 13MACHINE_CPU = ev4 14. elif ${MACHINE_ARCH} == "amd64" 15MACHINE_CPU = amd64 sse2 sse 16. elif ${MACHINE_ARCH} == "ia64" 17_CPUCFLAGS = 18MACHINE_CPU = itanium 19. elif ${MACHINE_ARCH} == "sparc64" 20_CPUCFLAGS = 21. elif ${MACHINE_ARCH} == "arm" 22_CPUCFLAGS = 23MACHINE_CPU = arm 24. endif 25.else 26 27# Handle aliases (not documented in make.conf to avoid user confusion 28# between e.g. i586 and pentium) 29 30. if ${MACHINE_ARCH} == "i386" 31. if ${CPUTYPE} == "pentiumpro" 32CPUTYPE = i686 33. elif ${CPUTYPE} == "pentium" 34CPUTYPE = i586 35. elif ${CPUTYPE} == "k7" 36CPUTYPE = athlon 37. endif 38. endif 39 40# Logic to set up correct gcc optimization flag. This must be included 41# after /etc/make.conf so it can react to the local value of CPUTYPE 42# defined therein. Consult: 43# http://gcc.gnu.org/onlinedocs/gcc/DEC-Alpha-Options.html 44# http://gcc.gnu.org/onlinedocs/gcc/IA-64-Options.html 45# http://gcc.gnu.org/onlinedocs/gcc/RS-6000-and-PowerPC-Options.html 46# http://gcc.gnu.org/onlinedocs/gcc/SPARC-Options.html 47# http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86-64-Options.html 48 49. if ${MACHINE_ARCH} == "i386" 50. if ${CPUTYPE} == "crusoe" 51_CPUCFLAGS = -march=i686 -falign-functions=0 -falign-jumps=0 -falign-loops=0 52_ICC_CPUCFLAGS = -tpp6 -xiM 53. elif ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \ 54 ${CPUTYPE} == "athlon-4" 55_CPUCFLAGS = -march=${CPUTYPE} 56_ICC_CPUCFLAGS = -tpp6 -xiMK 57. elif ${CPUTYPE} == "athlon-tbird" || ${CPUTYPE} == "athlon" 58_CPUCFLAGS = -march=${CPUTYPE} 59_ICC_CPUCFLAGS = -tpp6 -xiM 60. elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" || ${CPUTYPE} == "k6" 61_CPUCFLAGS = -march=${CPUTYPE} 62_ICC_CPUCFLAGS = -tpp6 -xi 63. elif ${CPUTYPE} == "k5" 64_CPUCFLAGS = -march=pentium 65_ICC_CPUCFLAGS = -tpp5 66. elif ${CPUTYPE} == "p4" 67_CPUCFLAGS = -march=pentium4 68_ICC_CPUCFLAGS = -tpp7 -xiMKW 69. elif ${CPUTYPE} == "p3" 70_CPUCFLAGS = -march=pentium3 71_ICC_CPUCFLAGS = -tpp6 -xiMK 72. elif ${CPUTYPE} == "p2" 73_CPUCFLAGS = -march=pentium2 74_ICC_CPUCFLAGS = -tpp6 -xiM 75. elif ${CPUTYPE} == "i686" 76_CPUCFLAGS = -march=pentiumpro 77_ICC_CPUCFLAGS = -tpp6 -xiM 78. elif ${CPUTYPE} == "i586/mmx" 79_CPUCFLAGS = -march=pentium-mmx 80_ICC_CPUCFLAGS = -tpp5 -xM 81. elif ${CPUTYPE} == "i586" 82_CPUCFLAGS = -march=pentium 83_ICC_CPUCFLAGS = -tpp5 84. elif ${CPUTYPE} == "i486" 85_CPUCFLAGS = -march=i486 86_ICC_CPUCFLAGS = 87. endif 88. elif ${MACHINE_ARCH} == "alpha" 89. if ${CPUTYPE} == "ev67" 90_CPUCFLAGS = -mcpu=ev67 91. elif ${CPUTYPE} == "ev6" 92_CPUCFLAGS = -mcpu=ev6 93. elif ${CPUTYPE} == "pca56" 94_CPUCFLAGS = -mcpu=pca56 95. elif ${CPUTYPE} == "ev56" 96_CPUCFLAGS = -mcpu=ev56 97. elif ${CPUTYPE} == "ev5" 98_CPUCFLAGS = -mcpu=ev5 99. elif ${CPUTYPE} == "ev45" 100_CPUCFLAGS = -mcpu=ev45 101. elif ${CPUTYPE} == "ev4" 102_CPUCFLAGS = -mcpu=ev4 103. endif 104. endif 105 106# Set up the list of CPU features based on the CPU type. This is an 107# unordered list to make it easy for client makefiles to test for the 108# presence of a CPU feature. 109 110. if ${MACHINE_ARCH} == "i386" 111. if ${CPUTYPE} == "athlon-mp" || ${CPUTYPE} == "athlon-xp" || \ 112 ${CPUTYPE} == "athlon-4" 113MACHINE_CPU = athlon-xp k7 3dnow sse mmx k6 k5 i586 i486 i386 114. elif ${CPUTYPE} == "athlon" || ${CPUTYPE} == "athlon-tbird" 115MACHINE_CPU = athlon k7 3dnow mmx k6 k5 i586 i486 i386 116. elif ${CPUTYPE} == "k6-3" || ${CPUTYPE} == "k6-2" 117MACHINE_CPU = 3dnow mmx k6 k5 i586 i486 i386 118. elif ${CPUTYPE} == "k6" 119MACHINE_CPU = mmx k6 k5 i586 i486 i386 120. elif ${CPUTYPE} == "k5" 121MACHINE_CPU = k5 i586 i486 i386 122. elif ${CPUTYPE} == "p4" 123MACHINE_CPU = sse2 sse i686 mmx i586 i486 i386 124. elif ${CPUTYPE} == "p3" 125MACHINE_CPU = sse i686 mmx i586 i486 i386 126. elif ${CPUTYPE} == "p2" 127MACHINE_CPU = i686 mmx i586 i486 i386 128. elif ${CPUTYPE} == "i686" 129MACHINE_CPU = i686 i586 i486 i386 130. elif ${CPUTYPE} == "i586/mmx" 131MACHINE_CPU = mmx i586 i486 i386 132. elif ${CPUTYPE} == "i586" 133MACHINE_CPU = i586 i486 i386 134. elif ${CPUTYPE} == "i486" 135MACHINE_CPU = i486 i386 136. elif ${CPUTYPE} == "i386" 137MACHINE_CPU = i386 138. endif 139. elif ${MACHINE_ARCH} == "alpha" 140. if ${CPUTYPE} == "ev6" 141MACHINE_CPU = ev6 ev56 pca56 ev5 ev45 ev4 142. elif ${CPUTYPE} == "pca56" 143MACHINE_CPU = pca56 ev56 ev5 ev45 ev4 144. elif ${CPUTYPE} == "ev56" 145MACHINE_CPU = ev56 ev5 ev45 ev4 146. elif ${CPUTYPE} == "ev5" 147MACHINE_CPU = ev5 ev45 ev4 148. elif ${CPUTYPE} == "ev45" 149MACHINE_CPU = ev45 ev4 150. elif ${CPUTYPE} == "ev4" 151MACHINE_CPU = ev4 152. endif 153. elif ${MACHINE_ARCH} == "amd64" 154MACHINE_CPU = amd64 sse2 sse 155. elif ${MACHINE_ARCH} == "ia64" 156. if ${CPUTYPE} == "itanium" 157MACHINE_CPU = itanium 158. endif 159. endif 160.endif 161 162.if ${MACHINE_ARCH} == "alpha" 163_CPUCFLAGS += -mieee 164.endif 165 166# NB: COPTFLAGS is handled in /usr/src/sys/conf/kern.pre.mk 167 168.if !defined(NO_CPU_CFLAGS) 169. if ${CC} == "icc" 170CFLAGS += ${_ICC_CPUCFLAGS} 171. else 172CFLAGS += ${_CPUCFLAGS} 173. endif 174.endif 175