1################################################# 2### C variables 3CFLAGS.dflt.clang = -Qunused-arguments -Werror=implicit-function-declaration 4CFLAGS.dflt.icc = -we147 -we10006 # 147 is required for MKC_CHECK_PROTOTYPES 5CFLAGS.dflt.sunpro = -errtags -errwarn=E_ATTRIBUTE_UNKNOWN 6 7CFLAGS.warnerr.gcc = -Werror 8CFLAGS.warnerr.clang = -Werror 9CFLAGS.warnerr.icc = -Werror 10CFLAGS.warnerr.sunpro = -errwarn=%all 11CFLAGS.warnerr.armcc = --diag_error=warning 12 13CFLAGS.warns.gcc.1 = -Wall -Wstrict-prototypes -Wmissing-prototypes \ 14 -Wpointer-arith -Wreturn-type 15CFLAGS.warns.gcc.2 = ${CFLAGS.warns.gcc.1} -Wswitch -Wshadow 16CFLAGS.warns.gcc.3 = ${CFLAGS.warns.gcc.2} -Wcast-qual -Wwrite-strings \ 17 -Wno-unused-parameter 18CFLAGS.warns.gcc.4 = ${CFLAGS.warns.gcc.3} 19 20CFLAGS.warns.clang.1 = ${CFLAGS.warns.gcc.1} 21CFLAGS.warns.clang.2 = ${CFLAGS.warns.gcc.2} 22CFLAGS.warns.clang.3 = ${CFLAGS.warns.gcc.3} 23CFLAGS.warns.clang.4 = ${CFLAGS.warns.gcc.4} 24 25CFLAGS.warns.icc.1 = -Wall -we1011 26CFLAGS.warns.icc.2 = ${CFLAGS.warns.icc.1} 27CFLAGS.warns.icc.3 = ${CFLAGS.warns.icc.2} 28CFLAGS.warns.icc.4 = ${CFLAGS.warns.icc.3} 29 30CFLAGS.warns.hpc.0 = -w3 31CFLAGS.warns.hpc.1 = -w2 32CFLAGS.warns.hpc.2 = -w2 33CFLAGS.warns.hpc.3 = -w2 34CFLAGS.warns.hpc.4 = -w2 35 36_CSTD_LIST := c89 gnu89 c99 gnu99 c11 gnu11 c17 gnu17 37_CXXSTD_LIST := c++98 gnu++98 c++11 gnu++11 c++14 gnu++14 c++17 gnu++17 38 39.for c in C CXX 40. for std in ${_${c}STD_LIST} 41. for t in gcc clang icc pcc sunpro 42${c}FLAGS.std.${std}.${t} := -std=${std} 43. endfor 44. endfor 45.endfor 46 47CFLAGS.ssp.gcc = -fstack-protector -Wstack-protector --param__ssp-buffer-size=1 48CFLAGS.ssp.clang = ${CFLAGS.ssp.gcc} 49CFLAGS.ssp.icc = -fstack-security-check 50CFLAGS.ssp.ibmc = -qstackprotect 51 52CFLAGS.pic.gcc = -fPIC__-DPIC 53CFLAGS.pic.clang = -fPIC__-DPIC 54CFLAGS.pic.icc = -fPIC__-DPIC 55CFLAGS.pic.pcc = -k -DPIC 56CFLAGS.pic.mipspro = -KPIC 57CFLAGS.pic.sunpro = -xcode=pic32 # -KPIC 58CFLAGS.pic.hpc = +Z # +z 59CFLAGS.pic.ibmc = -qpic=large # -qpic=small 60CFLAGS.pic.decc = # ? 61 62CFLAGS.pie.gcc = -fPIE__-DPIC 63CFLAGS.pie.clang = ${CFLAGS.pie.gcc} 64CFLAGS.pie.icc = -fPIE__-DPIC 65 66LDFLAGS.relro = -Wl,-zrelro__-Wl,-znow 67 68_cc_vars += CFLAGS.dflt.${CC_TYPE} CFLAGS.warnerr.${CC_TYPE} CFLAGS.warns.${CC_TYPE}.1 \ 69 CFLAGS.warns.${CC_TYPE}.2 CFLAGS.warns.${CC_TYPE}.3 CFLAGS.warns.${CC_TYPE}.4 \ 70 CFLAGS.ssp.${CC_TYPE} CFLAGS.pic.${CC_TYPE} CFLAGS.pie.${CC_TYPE} 71 72.for std in ${_CSTD_LIST} 73_cc_vars += CFLAGS.std.${std}.${CC_TYPE} 74.endfor 75.for std in ${_CXXSTD_LIST} 76_cxx_vars += CXXFLAGS.std.${std}.${CXX_TYPE} 77.endfor 78 79.undef _CSTD_LIST 80.undef _CXXSTD_LIST 81 82LDFLAGS.pie.gcc = -fPIE__-DPIC__-pie 83LDFLAGS.pie.clang = -fPIE__-DPIC__-pie 84 85_ccld_vars = LDFLAGS.pie.${CC_TYPE} LDFLAGS.relro 86 87### C++ variables 88CXXFLAGS.dflt.clang = ${CFLAGS.dflt.clang} 89CXXFLAGS.dflt.icc = ${CFLAGS.dflt.icc} 90 91CXXFLAGS.warnerr.gcc = ${CFLAGS.warnerr.gcc} 92CXXFLAGS.warnerr.clang = ${CXXFLAGS.warnerr.gcc} 93 94CXXFLAGS.warns.gcc.1 = -Wold-style-cast -Wctor-dtor-privacy -Wreturn-type \ 95 -Wnon-virtual-dtor -Wreorder -Wno-deprecated \ 96 -Wno-non-template-friend -Woverloaded-virtual \ 97 -Wno-pmf-conversions -Wsign-promo -Wsynth \ 98 -Werror=return-type 99CXXFLAGS.warns.gcc.2 = ${CXXFLAGS.warns.gcc.1} -Wswitch -Wshadow 100CXXFLAGS.warns.gcc.3 = ${CXXFLAGS.warns.gcc.2} -Wcast-qual -Wwrite-strings \ 101 -Wno-unused-parameter 102CXXFLAGS.warns.gcc.4 = ${CXXFLAGS.warns.gcc.3} 103 104CXXFLAGS.warns.clang.1 = ${CXXFLAGS.warns.gcc.1} 105CXXFLAGS.warns.clang.2 = ${CXXFLAGS.warns.gcc.2} 106CXXFLAGS.warns.clang.3 = ${CXXFLAGS.warns.gcc.3} 107CXXFLAGS.warns.clang.4 = ${CXXFLAGS.warns.gcc.4} 108 109CXXFLAGS.warns.hpc.0 = ${CFLAGS.warns.hpc.0} 110CXXFLAGS.warns.hpc.1 = ${CFLAGS.warns.hpc.1} 111CXXFLAGS.warns.hpc.2 = ${CFLAGS.warns.hpc.2} 112CXXFLAGS.warns.hpc.3 = ${CFLAGS.warns.hpc.3} 113CXXFLAGS.warns.hpc.4 = ${CFLAGS.warns.hpc.4} 114 115CXXFLAGS.warns.icc.1 = ${CFLAGS.warns.icc.1} 116CXXFLAGS.warns.icc.2 = ${CFLAGS.warns.icc.2} 117CXXFLAGS.warns.icc.3 = ${CFLAGS.warns.icc.3} 118CXXFLAGS.warns.icc.4 = ${CFLAGS.warns.icc.4} 119 120CXXFLAGS.ssp.gcc = ${CFLAGS.ssp.gcc} 121CXXFLAGS.ssp.clang = ${CFLAGS.ssp.clang} 122CXXFLAGS.ssp.icc = ${CFLAGS.ssp.icc} 123CXXFLAGS.ssp.ibmc = ${CFLAGS.ssp.ibmc} 124 125CXXFLAGS.pic.gcc = ${CFLAGS.pic.gcc} 126CXXFLAGS.pic.clang = ${CFLAGS.pic.clang} 127CXXFLAGS.pic.icc = ${CFLAGS.pic.icc} 128CXXFLAGS.pic.pcc = ${CFLAGS.pic.pcc} 129CXXFLAGS.pic.mipspro = ${CFLAGS.pic.mipspro} 130CXXFLAGS.pic.sunpro = ${CFLAGS.pic.sunpro} 131CXXFLAGS.pic.hpc = ${CFLAGS.pic.hpc} 132CXXFLAGS.pic.ibmc = ${CFLAGS.pic.ibmc} 133CXXFLAGS.pic.decc = ${CFLAGS.pic.decc} 134 135CXXFLAGS.pie.gcc = ${CFLAGS.pie.gcc} 136CXXFLAGS.pie.clang = ${CFLAGS.pie.clang} 137CXXFLAGS.pie.icc = ${CFLAGS.pie.icc} 138 139_cxx_vars += CXXFLAGS.dflt.${CXX_TYPE} CXXFLAGS.warnerr.${CXX_TYPE} \ 140 CXXFLAGS.warns.${CXX_TYPE}.1 CXXFLAGS.warns.${CXX_TYPE}.2 \ 141 CXXFLAGS.warns.${CXX_TYPE}.3 CXXFLAGS.warns.${CXX_TYPE}.4 \ 142 CXXFLAGS.ssp.${CXX_TYPE} CXXFLAGS.pic.${CXX_TYPE} CXXFLAGS.pie.${CXX_TYPE} 143 144_cxxld_vars = LDFLAGS.pie.${CXX_TYPE} LDFLAGS.relro 145 146################################################# 147.for c in cc cxx 148cc_cxx_capabilities_filename := mkc_imp.${c}_${${c:tu}_TYPE}-${${c:tu}_VERSION}.mk 149.if !empty(${c:tu}) 150. for v in ${_${c}_vars} 151MKC_CHECK_${c:tu}_OPTS += ${${v}} 152. endfor 153. for v in ${_${c}ld_vars} 154MKC_CHECK_${c:tu}LD_OPTS += ${${v}} 155. endfor 156. include "mkc.conf.mk" 157 158. for v in ${_${c}_vars} 159. for _opt in ${${v}} 160. if ${HAVE_${c:tu}_OPT.${_opt:S/=/_/}:U} == 1 161${v}.new += ${_opt:S/__/ /g} 162. endif 163. endfor 164. endfor 165. for v in ${_${c}ld_vars} 166. for _opt in ${${v}} 167. if ${HAVE_${c:tu}LD_OPT.${_opt:S/=/_/}:U} == 1 168${v}.new += ${_opt:S/__/ /g} 169. endif 170. endfor 171. endfor 172 173LDFLAGS.pie.gcc.new := ${LDFLAGS.pie.gcc.new:U:tW:S/-fPIE -DPIC //} 174LDFLAGS.pie.clang.new := ${LDFLAGS.pie.clang.new:U:tW:S/-fPIE -DPIC //} 175 176###### 177.ifdef RECURS 178all: post_all 179post_all: ${cc_cxx_capabilities_filename} 180${cc_cxx_capabilities_filename}: .PHONY # always regenerate! 181 @printf '' > $@.tmp; 182. for v in ${_${c}_vars} 183 @echo ${v} = ${${v}.new} >> $@.tmp; 184. endfor 185 @printf '' >> $@.tmp; 186. for v in ${_${c}ld_vars} 187 @echo ${v} = ${${v}.new} >> $@.tmp; 188. endfor 189 @mv $@.tmp $@ 190 191.endif # RECURS 192.endif # !empty(${c:tu} 193.endfor # .for c in cc cxx 194 195################################################# 196USE_CC_COMPILERS ?= ${CC} 197USE_CXX_COMPILERS ?= ${CXX} 198 199.ifndef RECURS 200post_all: 201.for CC in ${USE_CC_COMPILERS:U} 202 @env ${MAKE} ${MAKE_FLAGS} ${COMPILER_SETTINGS_MK:U} all USE_CXX_COMPILERS= \ 203 MKCHECKS=yes MKC_NOCACHE=1 RECURS=1 CC=${CC} CXX= src_type=cc 204.endfor # CC 205.for CXX in ${USE_CXX_COMPILERS:U} 206 @env ${MAKE} ${MAKE_FLAGS} ${COMPILER_SETTINGS_MK:U} all USE_CC_COMPILERS= \ 207 MKCHECKS=yes MKC_NOCACHE=1 RECURS=1 CC= CXX=${CXX} src_type=cxx 208.endfor # CXX 209.endif # RECURS 210