ld.conf 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. LDFLAGS+=$USER_LDFLAGS $_LD_FLAGS
  2. _START_GROUP=
  3. _END_GROUP=
  4. BEFORE_PEERS=
  5. AFTER_PEERS=
  6. START_WHOLE_ARCHIVE_VALUE=
  7. END_WHOLE_ARCHIVE_VALUE=
  8. LD_STRIP_FLAG=
  9. _SONAME_OPTION=
  10. _LD_SRCS_GLOBALS=--start-wa ${rootrel;ext=.a:SRCS_GLOBAL} --end-wa ${rootrel;ext=.o:SRCS_GLOBAL} ${rootrel;ext=.supp:SRCS_GLOBAL}
  11. when ($OS_LINUX == "yes" || $OS_ANDROID == "yes" || $OS_CYGWIN == "yes" || $OS_NONE == "yes") {
  12. _START_GROUP=-Wl,--start-group
  13. _END_GROUP=-Wl,--end-group
  14. START_WHOLE_ARCHIVE_VALUE=-Wl,--whole-archive
  15. END_WHOLE_ARCHIVE_VALUE=-Wl,--no-whole-archive
  16. LD_STRIP_FLAG=-s
  17. _SONAME_OPTION=-soname
  18. _LD_SRCS_GLOBALS=-Wl,--whole-archive --ya-start-command-file ${rootrel;ext=.a:SRCS_GLOBAL} --ya-end-command-file -Wl,--no-whole-archive ${rootrel;ext=.o:SRCS_GLOBAL} ${rootrel;ext=.supp:SRCS_GLOBAL}
  19. }
  20. when ($_LD_WHOLE_ARCHIVE == "yes") {
  21. }
  22. when ($OS_DARWIN == "yes" || $OS_IOS == "yes") {
  23. _SONAME_OPTION=-install_name
  24. }
  25. _LD_LINKER_OUTPUT=
  26. _LD_LINKER_OUTPUT_FLAG=--linker-output ${output;pre=$MODULE_PREFIX;suf=$MODULE_SUFFIX$MODULE_VERSION.linker.txt:REALPRJNAME}
  27. # Enable section-level DCE (dead code elimination):
  28. # remove whole unused code and data sections
  29. # (needs `-ffunction-sections` and `-fdata-sections` to be useful)
  30. #
  31. # NOTE: CGO linker doesn't seem to support DCE, but shares common LDFLAGS
  32. _LD_DCE_FLAG_GC_SECTIONS=
  33. _LD_DCE_FLAG_PRINT_SECTIONS=
  34. when ($OS_DARWIN == "yes" || $OS_IOS == "yes" || $OS_IOSSIM == "yes") {
  35. _LD_DCE_FLAG_GC_SECTIONS=-Wl,-dead_strip
  36. }
  37. elsewhen ($OS_LINUX == "yes" || $OS_ANDROID == "yes" || $OS_NONE == "yes") {
  38. _LD_DCE_FLAG_GC_SECTIONS=-Wl,--gc-sections
  39. when ($LINKER_DCE_PRINT_SECTIONS == "yes") {
  40. _LD_DCE_FLAG_PRINT_SECTIONS=-Wl,--print-gc-sections
  41. _LD_LINKER_OUTPUT=$_LD_LINKER_OUTPUT_FLAG
  42. }
  43. }
  44. LD_DCE_FLAG =
  45. LD_DCE_FLAG+=$_LD_DCE_FLAG_GC_SECTIONS
  46. LD_DCE_FLAG+=$_LD_DCE_FLAG_PRINT_SECTIONS
  47. DCE_FLAG=
  48. _LD_ICF_FLAG=
  49. _LD_ICF_FLAG_PRINT_SECTIONS=
  50. when ($_DEFAULT_LINKER_ID == "lld") {
  51. # Enable ICF (identical code folding pass) in safe mode
  52. # https://research.google/pubs/pub36912/
  53. _LD_ICF_FLAG=-Wl,--icf=safe
  54. when ($LINKER_ICF_PRINT_SECTIONS == "yes") {
  55. _LD_ICF_FLAG_PRINT_SECTIONS=-Wl,--print-icf-sections
  56. _LD_LINKER_OUTPUT=$_LD_LINKER_OUTPUT_FLAG
  57. }
  58. }
  59. LD_ICF_FLAG =
  60. LD_ICF_FLAG+=$_LD_ICF_FLAG
  61. LD_ICF_FLAG+=$_LD_ICF_FLAG_PRINT_SECTIONS
  62. ICF_FLAG=
  63. _LD_NO_PIE_FLAG=
  64. when ($_LINKER_ID == "lld" && $PIE != "yes" && ($PIC != "yes" || $PIC_NO_PIE == "yes")) {
  65. when ($OS_LINUX == "yes") {
  66. _LD_NO_PIE_FLAG=-Wl,-no-pie
  67. }
  68. }
  69. STRIP_FLAG=
  70. C_LIBRARY_PATH=
  71. C_SYSTEM_LIBRARIES_INTERCEPT=
  72. when ($USEMPROF == "yes" || $USE_MPROF == "yes") {
  73. C_SYSTEM_LIBRARIES_INTERCEPT+=-ldmalloc
  74. }
  75. _LD_USE_STDLIB=
  76. when ($_BUILD_COVERAGE == "yes" || $GCOV_COVERAGE == "yes" || $CLANG_COVERAGE == "yes" || $_BUILD_SANITIZED == "yes") {
  77. _LD_USE_STDLIB=
  78. }
  79. elsewhen ($OS_ANDROID == "yes") {
  80. when ($_ANDROID_NDK_VERSION_LESS_THEN_23 == "yes") {
  81. # Preserve old behaviour: specify runtime libs manually
  82. _LD_USE_STDLIB=-nodefaultlibs
  83. }
  84. otherwise {
  85. # Use toolchain defaults to link with libunwind/clang_rt.builtins
  86. _LD_USE_STDLIB=-nostdlib++
  87. }
  88. }
  89. elsewhen ($OS_LINUX == "yes" || $OS_DARWIN == "yes" || $OS_IOS == "yes") {
  90. _LD_USE_STDLIB=-nodefaultlibs
  91. }
  92. when ($OS_LINUX == "yes" && $MUSL != "yes") {
  93. # NB:
  94. # glibc merged pthread into libc.so as of 2.34 / Ubuntu 22.04, see
  95. # https://developers.redhat.com/articles/2021/12/17/why-glibc-234-removed-libpthread
  96. #
  97. # In macOS and iOS libpthread points to libSystem already (just as libc.tbd does):
  98. # $ file libpthread.tbd
  99. # libpthread.tbd: symbolic link to libSystem.tbd
  100. #
  101. # Android does not provide libpthread at all.
  102. # Once we will be building against glibc=2.34, we might simply remove -lpthread
  103. _C_SYSTEM_LIBRARIES=$_LD_USE_STDLIB -lpthread -lc
  104. }
  105. when ($MUSL == "yes") {
  106. _C_SYSTEM_LIBRARIES=-nostdlib
  107. }
  108. when ($OS_EMSCRIPTEN == "yes") {
  109. _C_SYSTEM_LIBRARIES=-nostdlib
  110. }
  111. when ($OS_ANDROID == "yes") {
  112. _C_SYSTEM_LIBRARIES=$_LD_USE_STDLIB -lc
  113. }
  114. C_SYSTEM_LIBRARIES=$_C_SYSTEM_LIBRARIES
  115. LD_EXPORT_ALL_DYNAMIC_SYMBOLS_FLAG=
  116. when ($OS_LINUX == "yes" || $OS_ANDROID == "yes") {
  117. LD_EXPORT_ALL_DYNAMIC_SYMBOLS_FLAG=-rdynamic
  118. }
  119. NO_EXPORT_DYNAMIC_SYMBOLS=
  120. EXPORTS_VALUE=$LD_EXPORT_ALL_DYNAMIC_SYMBOLS_FLAG
  121. when ($EXPORTS_FILE) {
  122. EXPORTS_VALUE=$LD_EXPORT_ALL_DYNAMIC_SYMBOLS_FLAG -Wl,--version-script=${input:EXPORTS_FILE}
  123. }
  124. when ($NO_EXPORT_DYNAMIC_SYMBOLS == "yes") {
  125. EXPORTS_VALUE=
  126. }
  127. LINKER_SCRIPT_VALUE=${ext=.ld;pre=-T:SRCS_GLOBAL}
  128. _LINKER_TIME_TRACE_GRANULARITY=500
  129. when ($TIME_TRACE_GRANULARITY && $TIME_TRACE_GRANULARITY != "") {
  130. _LINKER_TIME_TRACE_GRANULARITY=$TIME_TRACE_GRANULARITY
  131. }
  132. _LINKER_TIME_TRACE_FLAG=
  133. when (($TIME_TRACE == "yes" || $LINKER_TIME_TRACE == "yes") && $_DEFAULT_LINKER_ID == "lld") {
  134. _LINKER_TIME_TRACE_FLAG=\
  135. -Wl,--time-trace=${rootrel;output;pre=$MODULE_PREFIX;suf=$MODULE_SUFFIX.time_trace.json:REALPRJNAME} \
  136. -Wl,--time-trace-granularity=$_LINKER_TIME_TRACE_GRANULARITY
  137. }
  138. _EXE_FLAGS=\
  139. $C_FLAGS_PLATFORM \
  140. $BEFORE_PEERS \
  141. $_START_GROUP \
  142. ${rootrel:PEERS} \
  143. $_END_GROUP \
  144. $AFTER_PEERS \
  145. $EXPORTS_VALUE \
  146. $LINKER_SCRIPT_VALUE \
  147. $LDFLAGS \
  148. $LDFLAGS_GLOBAL \
  149. $OBJADDE \
  150. $OBJADDE_LIB \
  151. $OBJADDE_LIB_GLOBAL \
  152. $C_LIBRARY_PATH \
  153. $C_SYSTEM_LIBRARIES_INTERCEPT \
  154. $C_SYSTEM_LIBRARIES \
  155. $STRIP_FLAG \
  156. $DCE_FLAG \
  157. $ICF_FLAG \
  158. $_LD_NO_PIE_FLAG \
  159. $_LINKER_TIME_TRACE_FLAG
  160. _SONAME_FLAG=-Wl,$_SONAME_OPTION,$_SONAME
  161. when ($OS_EMSCRIPTEN == "yes") {
  162. _SONAME_FLAG=
  163. }
  164. _SHARED_FLAG=-shared
  165. when ($OS_EMSCRIPTEN == "yes") {
  166. _SHARED_FLAG=-Wl,-shared -Wl,--no-entry -Wl,--export-all -Wl,--import-memory -Wl,--import-undefined
  167. }
  168. _EXEC_SHARED_FLAG=
  169. when ($OS_LINUX == "yes") {
  170. _EXEC_SHARED_FLAG=-pie -fPIE -Wl,--unresolved-symbols=ignore-all -rdynamic
  171. }
  172. _LD_ENV_STYLE=${cwd:ARCADIA_BUILD_ROOT} $TOOLCHAIN_ENV ${hide;kv:"p LD"} ${hide;kv:"pc light-blue"} ${hide;kv:"show_out"}
  173. _ROOT_FLAGS=--source-root $ARCADIA_ROOT --build-root $(BUILD_ROOT)
  174. # Program
  175. GENERATE_MF_CMD=\
  176. $YMAKE_PYTHON ${input:"build/scripts/generate_mf.py"} ${hide;input:"build/scripts/process_command_files.py"} \
  177. --build-root $ARCADIA_BUILD_ROOT \
  178. --module-name $REALPRJNAME \
  179. -o ${rootrel;output;pre=$MODULE_PREFIX;suf=$MODULE_SUFFIX.mf:REALPRJNAME} \
  180. -t $MODULE_TYPE \
  181. --ya-start-command-file \
  182. -Ya,lics $LICENSE_NAMES \
  183. -Ya,peers ${rootrel:PEERS} \
  184. -Ya,credits ${input:CREDITS_TEXTS_FILE} $CREDITS_FLAGS \
  185. --ya-end-command-file
  186. _LINK_SCRIPT_IMPORTS=\
  187. ${hide;input:"build/scripts/fix_py2_protobuf.py"} \
  188. ${hide;input:"build/scripts/thinlto_cache.py"} \
  189. $_PROCESS_WHOLE_ARCHIVE_SCRIPT
  190. LINK_SCRIPT_EXE_FLAGS=
  191. REAL_LINK_EXE_CMDLINE =\
  192. $YMAKE_PYTHON ${input:"build/scripts/link_exe.py"} \
  193. REAL_LINK_EXE_CMDLINE+=--clang-ver $CLANG_VER
  194. REAL_LINK_EXE_CMDLINE+=$_LD_LINKER_OUTPUT
  195. REAL_LINK_EXE_CMDLINE+=\
  196. $_ROOT_FLAGS \
  197. ${pre=--whole-archive-peers :WHOLE_ARCHIVE_PEERS} \
  198. ${pre=--whole-archive-libs :_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL} \
  199. $_LD_ARCH_FLAG \
  200. $LINK_SCRIPT_EXE_FLAGS \
  201. $_THINLTO_CACHE_FLAGS \
  202. $CXX_COMPILER_OLD \
  203. $_LD_SRCS_GLOBALS \
  204. $VCS_C_OBJ $_EXTRA_OBJS $AUTO_INPUT -o $TARGET \
  205. $_EXE_FLAGS \
  206. $_LINK_SCRIPT_IMPORTS \
  207. $_LD_ENV_STYLE
  208. REAL_LINK_EXE_TIDY=\
  209. $YMAKE_PYTHON ${input:"build/scripts/clang_tidy_arch.py"} \
  210. --output-file $TARGET \
  211. $_ROOT_FLAGS \
  212. $AUTO_INPUT \
  213. ${ext=.tidyjson:SRCS_GLOBAL} \
  214. $_LD_ENV_STYLE
  215. # Executable Shared Library
  216. REAL_LINK_EXEC_DYN_LIB_CMDLINE =\
  217. $YMAKE_PYTHON ${input:"build/scripts/link_dyn_lib.py"} \
  218. ${hide;input:"build/scripts/link_exe.py"} \
  219. --target $TARGET
  220. REAL_LINK_EXEC_DYN_LIB_CMDLINE+=$_LD_LINKER_OUTPUT
  221. REAL_LINK_EXEC_DYN_LIB_CMDLINE+=\
  222. $_ROOT_FLAGS \
  223. ${pre=--whole-archive-peers :WHOLE_ARCHIVE_PEERS} \
  224. ${pre=--whole-archive-libs :_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL} \
  225. $_LD_ARCH_FLAG \
  226. $LINK_DYN_LIB_FLAGS \
  227. $_THINLTO_CACHE_FLAGS \
  228. $CXX_COMPILER_OLD \
  229. $_LD_SRCS_GLOBALS \
  230. $VCS_C_OBJ $_EXTRA_OBJS $AUTO_INPUT -o $TARGET \
  231. $_EXEC_SHARED_FLAG \
  232. $_SONAME_FLAG \
  233. $_EXE_FLAGS \
  234. $_LINK_SCRIPT_IMPORTS \
  235. $_LD_ENV_STYLE
  236. REAL_LINK_EXEC_DYN_LIB=$REAL_LINK_EXEC_DYN_LIB_IMPL($_WHOLE_ARCHIVE_PEERS_VALUE)
  237. # Shared Library
  238. LINK_DYN_LIB_FLAGS=
  239. REAL_LINK_DYN_LIB_CMDLINE =\
  240. $YMAKE_PYTHON ${input:"build/scripts/link_dyn_lib.py"} \
  241. ${hide;input:"build/scripts/link_exe.py"} \
  242. --target $TARGET
  243. REAL_LINK_DYN_LIB_CMDLINE+=$_LD_LINKER_OUTPUT
  244. REAL_LINK_DYN_LIB_CMDLINE+=\
  245. ${pre=--whole-archive-peers :WHOLE_ARCHIVE_PEERS} \
  246. ${pre=--whole-archive-libs :_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL} \
  247. $_ROOT_FLAGS \
  248. $_LD_ARCH_FLAG \
  249. $LINK_DYN_LIB_FLAGS \
  250. $_THINLTO_CACHE_FLAGS \
  251. $CXX_COMPILER_OLD \
  252. $_LD_SRCS_GLOBALS \
  253. $VCS_C_OBJ $_EXTRA_OBJS $AUTO_INPUT -o $TARGET \
  254. $_SHARED_FLAG \
  255. $_SONAME_FLAG \
  256. $_EXE_FLAGS \
  257. $_LINK_SCRIPT_IMPORTS \
  258. $_LD_ENV_STYLE
  259. REAL_LINK_DYN_LIB=$REAL_LINK_DYN_LIB_IMPL($_WHOLE_ARCHIVE_PEERS_VALUE)
  260. _DWARF_COMMAND=
  261. when (($OS_DARWIN == "yes" || $OS_IOS || $OS_IOSSIM) && $NO_DEBUGINFO != "yes" && $SPLIT_DWARF_VALUE != "no" && $NO_SPLIT_DWARF != "yes") {
  262. _DWARF_COMMAND=$DWARF_TOOL $TARGET -o ${output;pre=$MODULE_PREFIX$REALPRJNAME.dSYM/Contents/Resources/DWARF/$MODULE_PREFIX:REALPRJNAME} $_LD_ENV_STYLE
  263. }
  264. elsewhen ($OS_DARWIN == "yes" && $NO_DEBUGINFO != "yes") {
  265. _EXE_FLAGS+=$DEBUG_INFO_FLAGS
  266. }
  267. otherwise {
  268. _DWARF_COMMAND=
  269. }
  270. DWARF_COMMAND=$_DWARF_COMMAND
  271. _REAL_LINK_EXE=$REAL_LINK_EXE_IMPL($_WHOLE_ARCHIVE_PEERS_VALUE)
  272. _EXTRA_OBJS=
  273. _GENERATE_EXTRA_OBJS=
  274. _EXTRA_LINK_CMD=
  275. _LINK_EXE=
  276. _LINK_EXE+=$GENERATE_MF
  277. _LINK_EXE+=&& $GENERATE_VCS_C_INFO_NODEP
  278. _LINK_EXE+=&& $_GENERATE_EXTRA_OBJS
  279. _LINK_EXE+=&& $COPY_PROFILE_RUNTIME
  280. _LINK_EXE+=&& $REAL_LINK_EXE
  281. _LINK_EXE+=&& $DWARF_COMMAND
  282. _LINK_EXE+=&& $LINK_ADDITIONAL_SECTIONS_COMMAND
  283. _LINK_EXE+=&& $PACK_IOS_CMD
  284. _LINK_EXE+=&& $_EXTRA_LINK_CMD
  285. _LINK_DYN_LIB=
  286. _LINK_DYN_LIB+=$GENERATE_MF
  287. _LINK_DYN_LIB+=&& $GENERATE_VCS_C_INFO_NODEP
  288. _LINK_DYN_LIB+=&& $_GENERATE_EXTRA_OBJS
  289. _LINK_DYN_LIB+=&& $COPY_PROFILE_RUNTIME
  290. _LINK_DYN_LIB+=&& $REAL_LINK_DYN_LIB
  291. _LINK_DYN_LIB+=&& $DWARF_COMMAND
  292. _LINK_DYN_LIB+=&& $LINK_ADDITIONAL_SECTIONS_COMMAND
  293. _LINK_DYN_LIB+=&& $_EXTRA_LINK_CMD
  294. when ($TIDY == "yes") {
  295. _REAL_LINK_EXE=$REAL_LINK_EXE_TIDY
  296. _LINK_EXE=$REAL_LINK_EXE
  297. _LINK_DYN_LIB=$REAL_LINK_EXE
  298. }
  299. REAL_LINK_EXE=$_REAL_LINK_EXE
  300. LINK_EXE=$_LINK_EXE
  301. LINK_DYN_LIB=$_LINK_DYN_LIB
  302. LINK_EXEC_DYN_LIB=\
  303. $GENERATE_MF && \
  304. $GENERATE_VCS_C_INFO_NODEP && \
  305. $_GENERATE_EXTRA_OBJS && \
  306. $REAL_LINK_EXEC_DYN_LIB && \
  307. $DWARF_COMMAND && \
  308. $LINK_ADDITIONAL_SECTIONS_COMMAND
  309. _LD_LINK_LIB_EXTRA_INPUT=
  310. _LD_TAIL_LINK_LIB=$AUTO_INPUT $_LD_LINK_LIB_EXTRA_INPUT ${hide;kv:"p AR"} $TOOLCHAIN_ENV ${hide;kv:"pc light-red"} ${hide;kv:"show_out"}
  311. _LD_ARCHIVER=$YMAKE_PYTHON ${input:"build/scripts/link_lib.py"} ${quo:AR_TOOL} $AR_TYPE $_LD_LLVM_AR_FORMAT $ARCADIA_BUILD_ROOT $_LD_AR_PLUGIN
  312. _LD_LIB_GENERATE_MF=$GENERATE_MF &&
  313. when ($TIDY == "yes") {
  314. _LD_ARCHIVER=$YMAKE_PYTHON ${input:"build/scripts/clang_tidy_arch.py"} --source-root $ARCADIA_ROOT --build-root $ARCADIA_BUILD_ROOT --output-file
  315. _LD_LIB_GENERATE_MF=
  316. }
  317. LINK_LIB=$_LD_LIB_GENERATE_MF $_LD_ARCHIVER $TARGET $_LD_TAIL_LINK_LIB
  318. GLOBAL_LINK_LIB=$_LD_ARCHIVER $GLOBAL_TARGET $_LD_TAIL_LINK_LIB
  319. # "Fat Object" : pre-linked global objects and static library with all dependencies
  320. _LD_LINK_FAT_PREFIX=$GENERATE_MF && $GENERATE_VCS_C_INFO_NODEP && $YMAKE_PYTHON ${input:"build/scripts/link_fat_obj.py"} --build-root $ARCADIA_BUILD_ROOT $_PROCESS_WHOLE_ARCHIVE_SCRIPT
  321. _LD_LINK_FAT_SRCS_GLOBALS_WA=$_LD_SRCS_GLOBALS
  322. _LD_LINK_FAT_SRCS_GLOBALS_NO_WA=${rootrel;ext=.a:SRCS_GLOBAL} ${rootrel;ext=.o:SRCS_GLOBAL}
  323. macro _FAT_OBJECT_ARGS_BASE(Flag, Lib) {
  324. .CMD=$Flag=$Lib
  325. }
  326. # FIXME: pre=lib here is weird legacy
  327. _FAT_OBJECT_ARGS=--obj=${output;pre=lib;suf=.o:REALPRJNAME}
  328. _LD_LINK_FAT_SRCS_GLOBALS=$_LD_LINK_FAT_SRCS_GLOBALS_WA
  329. macro PACK_GLOBALS_IN_LIBRARY() {
  330. SET(_FAT_OBJECT_ARGS $_FAT_OBJECT_ARGS_BASE(--globals-lib, \${output;pre=$MODULE_PREFIX;suf=.globals.a:REALPRJNAME}))
  331. }
  332. when ($OS_ANDROID == "yes") {
  333. _FAT_OBJECT_ARGS=
  334. _LD_LINK_FAT_SRCS_GLOBALS=$_LD_LINK_FAT_SRCS_GLOBALS_NO_WA
  335. }
  336. _LD_LINK_FAT_SUFFIX1=$_LD_ARCH_FLAG \
  337. -Ya,input $AUTO_INPUT $VCS_C_OBJ \
  338. -Ya,global_srcs
  339. _LD_LINK_FAT_SUFFIX2=-Ya,peers $PEERS \
  340. -Ya,linker $CXX_COMPILER_OLD \
  341. $LDFLAGS_GLOBAL $C_FLAGS_PLATFORM $LD_SDK_VERSION \
  342. -Ya,archiver $_LD_ARCHIVER \
  343. $TOOLCHAIN_ENV ${hide;kv:"p LD"} ${hide;kv:"pc light-blue"} ${hide;kv:"show_out"}
  344. LINK_FAT_OBJECT=\
  345. $_LD_LINK_FAT_PREFIX \
  346. --lib=$TARGET $_FAT_OBJECT_ARGS \
  347. $_LD_LINK_FAT_SUFFIX1 \
  348. $_LD_LINK_FAT_SRCS_GLOBALS \
  349. $_LD_LINK_FAT_SUFFIX2
  350. LINK_RECURSIVE_LIBRARY=\
  351. $_LD_LINK_FAT_PREFIX \
  352. --lib=$TARGET --with-own-obj --with-global-srcs \
  353. $_LD_LINK_FAT_SUFFIX1 \
  354. $_LD_LINK_FAT_SRCS_GLOBALS_NO_WA \
  355. $_LD_LINK_FAT_SUFFIX2
  356. LIBRT=-lrt
  357. LIBRESOLV=
  358. when ($OS_LINUX || $OS_DARWIN || $OS_ANDROID) {
  359. LIBRESOLV=-lresolv
  360. }
  361. PROFFLAG=-pg
  362. _THINLTO_CACHE_FLAGS=
  363. macro THINLTO_CACHE(file) {
  364. DEFAULT(THINLTO_CACHE use)
  365. SET(_THINLTO_FILE $file)
  366. when ($CLANG && $USE_THINLTO == "yes") {
  367. select ($THINLTO_CACHE) {
  368. "gen" ? {
  369. _THINLTO_CACHE_FLAGS=--thinlto-cache-write --thinlto-cache=${output;pre=out-:_THINLTO_FILE}
  370. }
  371. "use" ? {
  372. _THINLTO_CACHE_FLAGS=--thinlto-cache=${input:_THINLTO_FILE}
  373. }
  374. }
  375. }
  376. }