gnu_compiler.conf 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. _OPTIMIZE_RELEASE=
  2. when ($_BUILD_RELEASE == "yes") {
  3. when ($_BUILD_SIZE_OPTIMIZED == "yes") {
  4. # -Oz is clang's more size-aggressive version of -Os
  5. # For ARM specifically, clang -Oz is on par with gcc -Os:
  6. # https://github.com/android/ndk/issues/133#issuecomment-365763507
  7. when($CLANG == "yes") {
  8. _OPTIMIZE_RELEASE=-Oz
  9. }
  10. otherwise {
  11. _OPTIMIZE_RELEASE=-Os
  12. }
  13. }
  14. otherwise {
  15. _OPTIMIZE_RELEASE=-O3
  16. }
  17. }
  18. _SFDL_FLAGS=-E -C -x c++
  19. when ($CLANG == "yes") {
  20. _SFDL_FLAGS+=-Qunused-arguments
  21. }
  22. _DEBUG_INFO_FLAGS=-g
  23. when ($OS_LINUX == "yes") {
  24. _DEBUG_INFO_FLAGS=-g -ggnu-pubnames
  25. }
  26. _CROSS_SUFFIX=.pic
  27. when ($FORCE_NO_PIC == "yes") {
  28. _CROSS_SUFFIX=
  29. }
  30. C_COMPILER=${quo:C_COMPILER_UNQUOTED}
  31. OPTIMIZE=$_OPTIMIZE_RELEASE
  32. FSTACK=-fstack-protector
  33. DUMP_DEPS=
  34. GCC_PREPROCESSOR_OPTS=$DUMP_DEPS $C_DEFINES
  35. # PIE is only valid for executables, while PIC implies a shared library
  36. # `-pie` with a shared library is either ignored or fails to link
  37. when ($PIC == "yes") {
  38. CFLAGS+=-fPIC
  39. LDFLAGS+=-fPIC
  40. }
  41. elsewhen ($PIE == "yes") {
  42. CFLAGS+=-fPIE
  43. LDFLAGS+=-fPIE -pie
  44. }
  45. when ($CLANG16 == "yes") {
  46. CFLAGS+=-Wno-array-parameter -Wno-deprecate-lax-vec-conv-all -Wno-unqualified-std-cast-call -Wno-unused-but-set-parameter -Wno-unused-command-line-argument -Wno-unused-but-set-variable -Wno-implicit-function-declaration -Wno-int-conversion -Wno-incompatible-function-pointer-types -Wno-implicit-int -Wno-address-of-packed-member
  47. }
  48. when ($ARCH_XTENSA == "yes") {
  49. FSTACK=
  50. }
  51. when ($OS_EMSCRIPTEN == "yes") {
  52. FSTACK=-fno-stack-protector
  53. }
  54. CFLAGS+=$_C_FLAGS $DEBUG_INFO_FLAGS $_C_FOPTIONS $C_WARNING_OPTS $GCC_PREPROCESSOR_OPTS $USER_CFLAGS $USER_CFLAGS_GLOBAL
  55. CXXFLAGS+=$CFLAGS $_CXX_STD $CXX_WARNING_OPTS $USER_CXXFLAGS $USER_CXXFLAGS_GLOBAL
  56. CONLYFLAGS+=$USER_CONLYFLAGS $USER_CONLYFLAGS_GLOBAL
  57. CXX_COMPILER=${quo:CXX_COMPILER_UNQUOTED}
  58. NOGCCSTACKCHECK=yes
  59. SFDL_FLAG=$_SFDL_FLAGS -o $SFDL_TMP_OUT
  60. WERROR_FLAG=-Werror
  61. DEBUG_INFO_FLAGS=$_DEBUG_INFO_FLAGS
  62. when ($NO_WSHADOW == "yes") {
  63. C_WARNING_OPTS += -Wno-shadow
  64. }
  65. # Though -w is intended to switch off all the warnings,
  66. # it does not switch at least -Wregister and -Wreserved-user-defined-literal under clang.
  67. #
  68. # Use -Wno-everything to force warning suppression.
  69. when ($NO_COMPILER_WARNINGS == "yes") {
  70. C_WARNING_OPTS = -w
  71. CXX_WARNING_OPTS = -Wno-everything
  72. }
  73. when ($NO_OPTIMIZE == "yes") {
  74. OPTIMIZE = -O0
  75. }
  76. when ($SAVE_TEMPS == "yes") {
  77. CXXFLAGS += -save-temps
  78. }
  79. when ($NOGCCSTACKCHECK != "yes") {
  80. FSTACK += -fstack-check
  81. }
  82. when ($FORCE_CONSISTENT_DEBUG == "yes") {
  83. when ($CLANG == "yes") {
  84. 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
  85. }
  86. otherwise {
  87. CL_DEBUG_INFO=-fdebug-prefix-map=${ARCADIA_BUILD_ROOT}=/-B -fdebug-prefix-map=${ARCADIA_ROOT}=/-S -fdebug-prefix-map=$(TOOL_ROOT)=/-T
  88. when ($ARCH_XTENSA == "yes") {
  89. CL_DEBUG_INFO=
  90. }
  91. }
  92. YASM_DEBUG_INFO=--replace=${ARCADIA_BUILD_ROOT}=/-B --replace=${ARCADIA_ROOT}=/-S --replace=$(TOOL_ROOT)=/-T ${env:"YASM_TEST_SUITE=1"}
  93. }
  94. elsewhen ($CONSISTENT_DEBUG == "yes") {
  95. when ($CLANG == "yes") {
  96. 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
  97. }
  98. otherwise {
  99. 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
  100. when ($ARCH_XTENSA == "yes") {
  101. CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=
  102. }
  103. }
  104. 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"}
  105. }
  106. elsewhen ($CONSISTENT_DEBUG_LIGHT == "yes") {
  107. when ($CLANG == "yes") {
  108. CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=-fdebug-prefix-map=${ARCADIA_BUILD_ROOT}=/-B -Xclang -fdebug-compilation-dir -Xclang /tmp
  109. }
  110. otherwise {
  111. CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=-fdebug-prefix-map=${ARCADIA_BUILD_ROOT}=/-B
  112. when ($ARCH_XTENSA == "yes") {
  113. CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=
  114. }
  115. }
  116. YASM_DEBUG_INFO_DISABLE_CACHE__NO_UID__=--replace=${ARCADIA_BUILD_ROOT}=/-B ${env:"YASM_TEST_SUITE=1"}
  117. }
  118. when ($FORCE_CONSISTENT_BUILD == "yes") {
  119. 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)/=
  120. }
  121. elsewhen ($CONSISTENT_BUILD == "yes") {
  122. 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)/=
  123. }
  124. _CFLAGS_ARCH_I386=
  125. when ($ARCH_I386 == "yes" && $ARCH_I686 != "yes") {
  126. _CFLAGS_ARCH_I386=-march=pentiumpro -mtune=pentiumpro
  127. }
  128. CFLAGS+=$_CFLAGS_ARCH_I386
  129. BC_CFLAGS+=$CFLAGS
  130. BC_CXXFLAGS+=$CXXFLAGS
  131. C_DEFINES+=-D__LONG_LONG_SUPPORTED
  132. OBJ_CROSS_SUF=$OBJ_SUF$_CROSS_SUFFIX
  133. OBJECT_SUF=$OBJ_SUF$_CROSS_SUFFIX.o
  134. GCC_COMPILE_FLAGS=$EXTRA_C_FLAGS -c -o $_COMPILE_OUTPUTS ${pre=-I:_C__INCLUDE}
  135. EXTRA_COVERAGE_OUTPUT=${output;noauto;hide;suf=${OBJECT_SUF}.gcno:SRC}
  136. CLANG_TIDY_OUTPUT_FILE=${output;noauto;suf=${OBJECT_SUF}.tidyjson:SRC}
  137. YNDEXER_OUTPUT_FILE=${output;noauto;suf=${OBJECT_SUF}${COMPILE_OUT_SUFFIX}.ydx.pb2:SRC}
  138. when ($DUMP_COMPILER_DEPS == "yes") {
  139. DUMP_DEPS=-MD ${output;hide;noauto;suf=${OBJ_SUF}.o.d:SRC}
  140. }
  141. elsewhen ($DUMP_COMPILER_DEPS_FAST == "yes") {
  142. DUMP_DEPS=-E -M -MF ${output;noauto;suf=${OBJ_SUF}.o.d:SRC}
  143. }
  144. _COMPILER_TIME_TRACE_GRANULARITY=500
  145. when ($TIME_TRACE_GRANULARITY && $TIME_TRACE_GRANULARITY != "") {
  146. _COMPILER_TIME_TRACE_GRANULARITY=$TIME_TRACE_GRANULARITY
  147. }
  148. _COMPILER_TIME_TRACE_FLAGS=
  149. _COMPILER_TIME_TRACE_POSTPROCESS=
  150. when (($TIME_TRACE == "yes" || $COMPILER_TIME_TRACE == "yes") && $_HAS_TIME_TRACE == "yes") {
  151. _COMPILER_TIME_TRACE_FLAGS=-ftime-trace -ftime-trace-granularity=$_COMPILER_TIME_TRACE_GRANULARITY
  152. _COMPILER_TIME_TRACE_POSTPROCESS=$YMAKE_PYTHON ${input:"build/scripts/find_time_trace.py"} $_COMPILE_OUTPUTS $_COMPILE_TIME_TRACE_OUTPUTS
  153. }
  154. _C_CPP_KV_STYLE=${hide;kv:"p CC"} ${hide;kv:"pc green"}
  155. _CPP_ARGS=\
  156. $CLANG_TIDY_ARGS \
  157. $YNDEXER_ARGS \
  158. $RETRY_ARGS \
  159. $CXX_COMPILER \
  160. $C_FLAGS_PLATFORM \
  161. $GCC_COMPILE_FLAGS \
  162. $CXXFLAGS \
  163. $CL_MACRO_INFO \
  164. $CL_MACRO_INFO_DISABLE_CACHE__NO_UID__ \
  165. $_COMPILER_TIME_TRACE_FLAGS \
  166. $EXTRA_OUTPUT \
  167. $SRCFLAGS \
  168. $_LANG_CFLAGS_VALUE \
  169. ${input:SRC} \
  170. $TOOLCHAIN_ENV \
  171. $YNDEXER_OUTPUT \
  172. && $_COMPILER_TIME_TRACE_POSTPROCESS \
  173. $_C_CPP_KV_STYLE
  174. _C_ARGS=\
  175. $CLANG_TIDY_ARGS \
  176. $YNDEXER_ARGS \
  177. $RETRY_ARGS \
  178. $C_COMPILER \
  179. $C_FLAGS_PLATFORM \
  180. $GCC_COMPILE_FLAGS \
  181. $CFLAGS \
  182. $CL_MACRO_INFO \
  183. $CL_MACRO_INFO_DISABLE_CACHE__NO_UID__ \
  184. $_COMPILER_TIME_TRACE_FLAGS \
  185. $CONLYFLAGS \
  186. $EXTRA_OUTPUT \
  187. $SRCFLAGS \
  188. ${input:SRC} \
  189. $TOOLCHAIN_ENV \
  190. $YNDEXER_OUTPUT \
  191. $_C_CPP_KV_STYLE
  192. ### _SRC_C_NODEPS_CMD is obtained from _C_ARGS by filtering the following elements:
  193. ### ${input:SRC}
  194. ### $CL_MACRO_INFO
  195. ### $CL_MACRO_INFO_DISABLE_CACHE__NO_UID__
  196. ### $CLANG_TIDY_ARGS
  197. ### $EXTRA_OUTPUT
  198. ### $EXTRA_COVERAGE_OUTPUT
  199. ### $SRCFLAGS
  200. ### $YNDEXER_ARGS
  201. ### $YNDEXER_OUTPUT
  202. ###
  203. ### $GCC_COMPILE_FLAGS is substituted for $EXTRA_C_FLAGS -c -o ${OUTFILE} ${SRC} ${pre=-I:INC}
  204. _SRC_C_NODEPS_CMD=\
  205. $C_COMPILER \
  206. $C_FLAGS_PLATFORM \
  207. $EXTRA_C_FLAGS -c -o ${OUTFILE} ${SRC} ${pre=-I:INC} \
  208. $CFLAGS \
  209. $CONLYFLAGS \
  210. $TOOLCHAIN_ENV \
  211. $_C_CPP_KV_STYLE
  212. _FORCE_CPP_FLAGS=-x c++
  213. _SRC_CPP_CMD=$_CPP_ARGS
  214. _SRC_C_CMD=$_C_ARGS
  215. _SRC_M_CMD=$SRC_c($SRC $SRCFLAGS)
  216. _SRC_MASM_CMD=$_EMPTY_CMD