gnu_compiler.conf 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. _STD_CXX=-std=$_STD_CXX_VERSION
  2. _OPTIMIZE_RELEASE=
  3. when ($_BUILD_RELEASE == "yes") {
  4. when ($_BUILD_SIZE_OPTIMIZED == "yes") {
  5. # -Oz is clang's more size-aggressive version of -Os
  6. # For ARM specifically, clang -Oz is on par with gcc -Os:
  7. # https://github.com/android/ndk/issues/133#issuecomment-365763507
  8. when($CLANG == "yes") {
  9. _OPTIMIZE_RELEASE=-Oz
  10. }
  11. otherwise {
  12. _OPTIMIZE_RELEASE=-Os
  13. }
  14. }
  15. otherwise {
  16. _OPTIMIZE_RELEASE=-O3
  17. }
  18. }
  19. _SFDL_FLAGS=-E -C -x c++
  20. when ($CLANG == "yes") {
  21. _SFDL_FLAGS+=-Qunused-arguments
  22. }
  23. _DEBUG_INFO_FLAGS=-g
  24. when ($CLANG == "yes") {
  25. _DEBUG_INFO_FLAGS+=-fdebug-default-version=4
  26. when ($OS_LINUX == "yes") {
  27. _DEBUG_INFO_FLAGS+=-ggnu-pubnames
  28. when ($_BUILD_RELEASE == "yes") {
  29. # Clang's more accurate debug info for sampling-PGO purposes. PGO only makes sense in release builds
  30. _DEBUG_INFO_FLAGS+=-fdebug-info-for-profiling
  31. }
  32. }
  33. }
  34. _CROSS_SUFFIX=.pic
  35. when ($FORCE_NO_PIC == "yes") {
  36. when ($TOOL_BUILD_MODE == "yes" && $PIC == "yes") {
  37. # FIXME(spreis): This is temporary fix until more appropriate control over pic-like-in-tools mode will come
  38. }
  39. otherwise {
  40. _CROSS_SUFFIX=
  41. }
  42. }
  43. OPTIMIZE=$_OPTIMIZE_RELEASE
  44. FSTACK=-fstack-protector
  45. DUMP_DEPS=
  46. GCC_PREPROCESSOR_OPTS=$DUMP_DEPS $C_DEFINES
  47. # PIE is only valid for executables, while PIC implies a shared library
  48. # `-pie` with a shared library is either ignored or fails to link
  49. when ($PIC == "yes") {
  50. CFLAGS+=-fPIC
  51. LDFLAGS+=-fPIC
  52. }
  53. elsewhen ($PIE == "yes") {
  54. CFLAGS+=-fPIE
  55. LDFLAGS+=-fPIE -pie
  56. }
  57. when ($CLANG == "yes" && $ARCH_AARCH64 == "yes") {
  58. # Clang generates outline atomics if libgcc version is >= 9.3.1
  59. # See https://github.com/llvm/llvm-project/commit/c5e7e649d537067dec7111f3de1430d0fc8a4d11
  60. CFLAGS+=-mno-outline-atomics
  61. }
  62. when ($CLANG16 == "yes") {
  63. CFLAGS+=-Wno-array-parameter -Wno-deprecate-lax-vec-conv-all -Wno-unqualified-std-cast-call -Wno-unused-but-set-parameter -Wno-implicit-function-declaration -Wno-int-conversion -Wno-incompatible-function-pointer-types -Wno-address-of-packed-member
  64. }
  65. when ($CLANG18 == "yes") {
  66. CFLAGS+=-Wno-array-parameter -Wno-deprecate-lax-vec-conv-all -Wno-unqualified-std-cast-call -Wno-unused-but-set-parameter -Wno-implicit-function-declaration -Wno-int-conversion -Wno-incompatible-function-pointer-types -Wno-address-of-packed-member
  67. CFLAGS+=-Wno-deprecated-this-capture -Wno-c++11-narrowing-const-reference -Wno-missing-designated-field-initializers \
  68. -Wno-packed-non-pod -Wno-format -Wno-vla-cxx-extension -Wno-invalid-offsetof \
  69. -Wno-include-angled-in-module-purview
  70. when ($MAPSMOBI_BUILD_TARGET == "yes") {
  71. CFLAGS+=-Wno-deprecated-declarations
  72. }
  73. }
  74. when ($MSAN_TRACK_ORIGIN == "yes") {
  75. CFLAGS+=-fsanitize-memory-track-origins=2
  76. }
  77. when ($ARCH_XTENSA == "yes") {
  78. FSTACK=
  79. CFLAGS+=-Wno-c++14-extensions
  80. when ($ARCH_XTENSA_HIFI4 == "yes") {
  81. CFLAGS+=-Wno-c++1z-extensions
  82. }
  83. otherwise {
  84. CFLAGS+=-Wno-c++17-extensions
  85. }
  86. }
  87. when ($OS_EMSCRIPTEN == "yes") {
  88. FSTACK=-fno-stack-protector
  89. CFLAGS+=-D__EMSCRIPTEN__
  90. }
  91. CFLAGS+=$_C_FLAGS $DEBUG_INFO_FLAGS $_C_FOPTIONS $C_WARNING_OPTS $GCC_PREPROCESSOR_OPTS $USER_CFLAGS $USER_CFLAGS_GLOBAL
  92. CXXFLAGS+=$CFLAGS $_STD_CXX $CXX_WARNING_OPTS $USER_CXXFLAGS $USER_CXXFLAGS_GLOBAL
  93. CONLYFLAGS+=$USER_CONLYFLAGS $USER_CONLYFLAGS_GLOBAL
  94. NOGCCSTACKCHECK=yes
  95. SFDL_FLAG=$_SFDL_FLAGS -o $SFDL_TMP_OUT
  96. DEBUG_INFO_FLAGS=$_DEBUG_INFO_FLAGS
  97. when ($NO_WSHADOW == "yes") {
  98. C_WARNING_OPTS += -Wno-shadow
  99. }
  100. when ($NO_COMPILER_WARNINGS == "yes") {
  101. # Though -w is intended to switch off all the warnings,
  102. # it does not switch at least -Wregister and -Wreserved-user-defined-literal under clang.
  103. #
  104. # Use -Wno-everything to force warning suppression.
  105. when ($CLANG == "yes") {
  106. C_WARNING_OPTS = -Wno-everything
  107. CXX_WARNING_OPTS = -Wno-everything
  108. }
  109. # On gcc -Wno-everything is not supported, so we use -w
  110. # see https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
  111. elsewhen ($GCC == "yes") {
  112. C_WARNING_OPTS = -w
  113. CXX_WARNING_OPTS = -w
  114. }
  115. }
  116. when ($NO_OPTIMIZE == "yes") {
  117. OPTIMIZE = -O0
  118. }
  119. when ($SAVE_TEMPS == "yes") {
  120. CXXFLAGS += -save-temps
  121. }
  122. when ($NOGCCSTACKCHECK != "yes") {
  123. FSTACK += -fstack-check
  124. }
  125. when ($FORCE_CONSISTENT_DEBUG == "yes") {
  126. when ($CLANG == "yes") {
  127. CL_DEBUG_INFO=-fdebug-prefix-map=${ARCADIA_BUILD_ROOT}=/-B -fdebug-prefix-map=${ARCADIA_ROOT}=/-S -fdebug-prefix-map=$(TOOL_ROOT)=/-T -Xclang -fdebug-compilation-dir -Xclang /tmp
  128. }
  129. otherwise {
  130. CL_DEBUG_INFO=-fdebug-prefix-map=${ARCADIA_BUILD_ROOT}=/-B -fdebug-prefix-map=${ARCADIA_ROOT}=/-S -fdebug-prefix-map=$(TOOL_ROOT)=/-T
  131. when ($ARCH_XTENSA == "yes") {
  132. CL_DEBUG_INFO=
  133. }
  134. }
  135. YASM_DEBUG_INFO=--replace=${ARCADIA_BUILD_ROOT}=/-B --replace=${ARCADIA_ROOT}=/-S --replace=$(TOOL_ROOT)=/-T ${env:"YASM_TEST_SUITE=1"}
  136. }
  137. elsewhen ($CONSISTENT_DEBUG == "yes") {
  138. when ($CLANG == "yes") {
  139. CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=-fdebug-prefix-map=${ARCADIA_BUILD_ROOT}=/-B -fdebug-prefix-map=${ARCADIA_ROOT}=/-S -fdebug-prefix-map=$(TOOL_ROOT)=/-T -Xclang -fdebug-compilation-dir -Xclang /tmp
  140. }
  141. otherwise {
  142. CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=-fdebug-prefix-map=${ARCADIA_BUILD_ROOT}=/-B -fdebug-prefix-map=${ARCADIA_ROOT}=/-S -fdebug-prefix-map=$(TOOL_ROOT)=/-T
  143. when ($ARCH_XTENSA == "yes") {
  144. CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=
  145. }
  146. }
  147. YASM_DEBUG_INFO_DISABLE_CACHE__NO_UID__=--replace=${ARCADIA_BUILD_ROOT}=/-B --replace=${ARCADIA_ROOT}=/-S --replace=$(TOOL_ROOT)=/-T ${env:"YASM_TEST_SUITE=1"}
  148. }
  149. elsewhen ($CONSISTENT_DEBUG_LIGHT == "yes") {
  150. when ($CLANG == "yes") {
  151. CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=-fdebug-prefix-map=${ARCADIA_BUILD_ROOT}=/-B -Xclang -fdebug-compilation-dir -Xclang /tmp
  152. }
  153. otherwise {
  154. CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=-fdebug-prefix-map=${ARCADIA_BUILD_ROOT}=/-B
  155. when ($ARCH_XTENSA == "yes") {
  156. CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=
  157. }
  158. }
  159. YASM_DEBUG_INFO_DISABLE_CACHE__NO_UID__=--replace=${ARCADIA_BUILD_ROOT}=/-B ${env:"YASM_TEST_SUITE=1"}
  160. }
  161. when ($FORCE_CONSISTENT_BUILD == "yes") {
  162. CL_MACRO_INFO=-Wno-builtin-macro-redefined -D__DATE__=\""Sep 31 2019\"" -D__TIME__=\"00:00:00\" -fmacro-prefix-map=${ARCADIA_BUILD_ROOT}/= -fmacro-prefix-map=${ARCADIA_ROOT}/= -fmacro-prefix-map=$(TOOL_ROOT)/=
  163. }
  164. elsewhen ($CONSISTENT_BUILD == "yes") {
  165. CL_MACRO_INFO_DISABLE_CACHE__NO_UID__=-Wno-builtin-macro-redefined -D__DATE__=\""Sep 31 2019\"" -D__TIME__=\"00:00:00\" -fmacro-prefix-map=${ARCADIA_BUILD_ROOT}/= -fmacro-prefix-map=${ARCADIA_ROOT}/= -fmacro-prefix-map=$(TOOL_ROOT)/=
  166. }
  167. _CFLAGS_ARCH_I386=
  168. when ($ARCH_I386 == "yes" && $ARCH_I686 != "yes") {
  169. _CFLAGS_ARCH_I386=-march=pentiumpro -mtune=pentiumpro
  170. }
  171. CFLAGS+=$_CFLAGS_ARCH_I386
  172. BC_CFLAGS+=$CFLAGS
  173. BC_CXXFLAGS+=$CXXFLAGS
  174. C_DEFINES+=-D__LONG_LONG_SUPPORTED
  175. OBJ_CROSS_SUF=$OBJ_SUF$_CROSS_SUFFIX
  176. OBJECT_SUF=$OBJ_SUF$_CROSS_SUFFIX.o
  177. GCC_COMPILE_FLAGS=$EXTRA_C_FLAGS -c -o $_COMPILE_OUTPUTS ${pre=-I:_C__INCLUDE}
  178. EXTRA_COVERAGE_OUTPUT=${hide;noauto;output;suf=${OBJECT_SUF}.gcno:SRC}
  179. CLANG_TIDY_OUTPUT_FILE=${noauto;output;suf=${OBJECT_SUF}.tidyjson:SRC}
  180. YNDEXER_OUTPUT_FILE=${noauto;output;suf=${OBJECT_SUF}${COMPILE_OUT_SUFFIX}.ydx.pb2:SRC}
  181. when ($DUMP_COMPILER_DEPS == "yes") {
  182. DUMP_DEPS=-MD ${hide;noauto;output;suf=${OBJ_SUF}.o.d:SRC}
  183. }
  184. elsewhen ($DUMP_COMPILER_DEPS_FAST == "yes") {
  185. DUMP_DEPS=-E -M -MF ${noauto;output;suf=${OBJ_SUF}.o.d:SRC}
  186. }
  187. _COMPILER_TIME_TRACE_GRANULARITY=500
  188. when ($TIME_TRACE_GRANULARITY && $TIME_TRACE_GRANULARITY != "") {
  189. _COMPILER_TIME_TRACE_GRANULARITY=$TIME_TRACE_GRANULARITY
  190. }
  191. _COMPILER_TIME_TRACE_FLAGS=
  192. _COMPILER_TIME_TRACE_POSTPROCESS=
  193. when (($TIME_TRACE == "yes" || $COMPILER_TIME_TRACE == "yes") && $_HAS_TIME_TRACE == "yes") {
  194. _COMPILER_TIME_TRACE_FLAGS=-ftime-trace -ftime-trace-granularity=$_COMPILER_TIME_TRACE_GRANULARITY
  195. _COMPILER_TIME_TRACE_POSTPROCESS=$YMAKE_PYTHON ${input:"build/scripts/find_time_trace.py"} $_COMPILE_OUTPUTS $_COMPILE_TIME_TRACE_OUTPUTS
  196. }
  197. _C_CPP_KV_STYLE=${hide;kv:"p CC"} ${hide;kv:"pc green"}
  198. _C_CPP_KV_STYLE_NEW=${hide;kv:_C_CPP_KV_STYLE_P} ${hide;kv:_C_CPP_KV_STYLE_PC}
  199. _C_CPP_KV_STYLE_P=p CC
  200. _C_CPP_KV_STYLE_PC=pc green
  201. # --wrapcc-end argument must be the last one
  202. _C_CPP_WRAPPER=$YMAKE_PYTHON3 ${input:"build/scripts/wrapcc.py"} \
  203. --source-file ${input:SRC} \
  204. --source-root ${ARCADIA_ROOT} \
  205. --build-root ${ARCADIA_BUILD_ROOT} \
  206. --wrapcc-end
  207. when ($CLANG_TIDY_ARGS || $OPENSOURCE == "yes" || $RAW_COMPILE_CPP_CMD == "yes" ) {
  208. _C_CPP_WRAPPER=
  209. }
  210. _CPP_ARGS_NEW=\
  211. $CLANG_STATIC_ANALYZER_OPTIONS_NEW && \
  212. $CLANG_TIDY_ARGS \
  213. $_C_CPP_WRAPPER \
  214. $YNDEXER_ARGS \
  215. $RETRY_ARGS \
  216. $CXX_COMPILER \
  217. $C_FLAGS_PLATFORM \
  218. $GCC_COMPILE_FLAGS \
  219. $CXXFLAGS \
  220. $CL_MACRO_INFO \
  221. $CL_MACRO_INFO_DISABLE_CACHE__NO_UID__ \
  222. $_COMPILER_TIME_TRACE_FLAGS \
  223. $EXTRA_OUTPUT \
  224. $SRCFLAGS \
  225. $_LANG_CFLAGS_VALUE_NEW \
  226. ${input:SRC} \
  227. $TOOLCHAIN_ENV \
  228. $YNDEXER_OUTPUT \
  229. && $_COMPILER_TIME_TRACE_POSTPROCESS \
  230. $_C_CPP_KV_STYLE_NEW
  231. _C_ARGS_NEW=\
  232. $CLANG_TIDY_ARGS \
  233. $_C_CPP_WRAPPER \
  234. $YNDEXER_ARGS \
  235. $RETRY_ARGS \
  236. $C_COMPILER \
  237. $C_FLAGS_PLATFORM \
  238. $GCC_COMPILE_FLAGS \
  239. $CFLAGS \
  240. $CL_MACRO_INFO \
  241. $CL_MACRO_INFO_DISABLE_CACHE__NO_UID__ \
  242. $_COMPILER_TIME_TRACE_FLAGS \
  243. $CONLYFLAGS \
  244. $EXTRA_OUTPUT \
  245. $SRCFLAGS \
  246. ${input:SRC} \
  247. $TOOLCHAIN_ENV \
  248. $YNDEXER_OUTPUT \
  249. $_C_CPP_KV_STYLE_NEW \
  250. $SCU_NAME_KV_NEW
  251. ### _SRC_C_NODEPS_CMD is obtained from _C_ARGS by filtering the following elements:
  252. ### ${input:SRC}
  253. ### $CL_MACRO_INFO
  254. ### $CL_MACRO_INFO_DISABLE_CACHE__NO_UID__
  255. ### $CLANG_TIDY_ARGS
  256. ### $EXTRA_OUTPUT
  257. ### $EXTRA_COVERAGE_OUTPUT
  258. ### $SRCFLAGS
  259. ### $YNDEXER_ARGS
  260. ### $YNDEXER_OUTPUT
  261. ###
  262. ### $GCC_COMPILE_FLAGS is substituted for $EXTRA_C_FLAGS -c -o ${OUTFILE} ${SRC} ${pre=-I:INC}
  263. _SRC_C_NODEPS_CMD=\
  264. $C_COMPILER \
  265. $C_FLAGS_PLATFORM \
  266. $EXTRA_C_FLAGS -c -o ${OUTFILE} ${SRC} ${pre=-I:INC} \
  267. $CFLAGS \
  268. $CONLYFLAGS \
  269. $TOOLCHAIN_ENV \
  270. $_C_CPP_KV_STYLE
  271. _FORCE_CPP_FLAGS=-x c++
  272. _SRC_CPP_CMD_NEW=$_CPP_ARGS_NEW
  273. _SRC_C_CMD_NEW=$_C_ARGS_NEW
  274. _SRC_M_CMD=$SRC_c($SRC $SRCFLAGS)
  275. _SRC_MASM_CMD=$_EMPTY_CMD