@@ -322,104 +322,107 @@ function(_add_host_variant_c_compile_flags)
322
322
set ("${CFLAGS_RESULT_VAR_NAME} " "${result} " PARENT_SCOPE )
323
323
endfunction ()
324
324
325
- function (_add_host_variant_link_flags )
326
- set (oneValueArgs
327
- RESULT_VAR_NAME ENABLE_LTO LTO_OBJECT_NAME LINK_LIBRARIES_VAR_NAME LIBRARY_SEARCH_DIRECTORIES_VAR_NAME )
328
- cmake_parse_arguments (LFLAGS
329
- ""
330
- "${oneValueArgs} "
331
- ""
332
- ${ARGN} )
333
-
334
- set (result ${${LFLAGS_RESULT_VAR_NAME}} )
335
- set (link_libraries ${${LFLAGS_LINK_LIBRARIES_VAR_NAME}} )
336
- set (library_search_directories ${${LFLAGS_LIBRARY_SEARCH_DIRECTORIES_VAR_NAME}} )
337
-
325
+ function (_add_host_variant_link_flags target )
338
326
_add_host_variant_c_compile_link_flags (
339
327
ANALYZE_CODE_COVERAGE ${SWIFT_ANALYZE_CODE_COVERAGE}
340
328
RESULT_VAR_NAME result )
329
+ target_link_options (${target} PRIVATE
330
+ ${result} )
331
+
341
332
if (SWIFT_HOST_VARIANT_SDK STREQUAL LINUX )
342
- list (APPEND link_libraries "pthread" "dl" )
333
+ target_link_libraries (${target} PRIVATE
334
+ pthread
335
+ dl )
343
336
elseif (SWIFT_HOST_VARIANT_SDK STREQUAL FREEBSD )
344
- list (APPEND link_libraries "pthread" )
337
+ target_link_libraries (${target} PRIVATE
338
+ pthread )
345
339
elseif (SWIFT_HOST_VARIANT_SDK STREQUAL CYGWIN )
346
340
# No extra libraries required.
347
341
elseif (SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS )
348
- # We don't need to add -nostdlib using MSVC or clang-cl, as MSVC and clang-cl rely on auto-linking entirely.
342
+ # We don't need to add -nostdlib using MSVC or clang-cl, as MSVC and
343
+ # clang-cl rely on auto-linking entirely.
349
344
if (NOT SWIFT_COMPILER_IS_MSVC_LIKE )
350
345
# NOTE: we do not use "/MD" or "/MDd" and select the runtime via linker
351
346
# options. This causes conflicts.
352
- list (APPEND result "-nostdlib" )
347
+ target_link_options (${target} PRIVATE
348
+ -nostdlib )
353
349
endif ()
354
350
swift_windows_lib_for_arch (${SWIFT_HOST_VARIANT_ARCH}
355
351
${SWIFT_HOST_VARIANT_ARCH} _LIB )
356
- list (APPEND library_search_directories ${${SWIFT_HOST_VARIANT_ARCH}_LIB} )
352
+ target_link_directories (${target} PRIVATE
353
+ ${${SWIFT_HOST_VARIANT_ARCH}_LIB} )
357
354
358
355
# NOTE(compnerd) workaround incorrectly extensioned import libraries from
359
356
# the Windows SDK on case sensitive file systems.
360
- list ( APPEND library_search_directories
357
+ target_link_directories ( ${target} PRIVATE
361
358
${CMAKE_BINARY_DIR} /winsdk_lib_${SWIFT_HOST_VARIANT_ARCH}_symlinks )
362
359
elseif (SWIFT_HOST_VARIANT_SDK STREQUAL HAIKU )
363
- list (APPEND link_libraries "bsd" "atomic" )
364
- list (APPEND result "-Wl,-Bsymbolic" )
360
+ target_link_libraries (${target} PRIVATE
361
+ atomic
362
+ bsd )
363
+ target_link_options (${target} PRIVATE
364
+ "SHELL:-Xlinker -Bsymbolic" )
365
365
elseif (SWIFT_HOST_VARIANT_SDK STREQUAL ANDROID )
366
- list (APPEND link_libraries "dl" "log" "atomic" )
367
- # We need to add the math library, which is linked implicitly by libc++
368
- list (APPEND result "-lm" )
366
+ target_link_libraries (${target} PRIVATE
367
+ atomic
368
+ dl
369
+ log
370
+ # We need to add the math library, which is linked implicitly by libc++
371
+ m )
369
372
370
373
# link against the custom C++ library
371
- swift_android_cxx_libraries_for_arch (${SWIFT_HOST_VARIANT_ARCH} cxx_link_libraries )
372
- list (APPEND link_libraries ${cxx_link_libraries} )
374
+ swift_android_cxx_libraries_for_arch (${SWIFT_HOST_VARIANT_ARCH}
375
+ cxx_link_libraries )
376
+ target_link_libraries (${target} PRIVATE
377
+ ${cxx_link_libraries} )
373
378
374
379
# link against the ICU libraries
375
- list ( APPEND link_libraries
380
+ target_link_libraries ( ${target} PRIVATE
376
381
${SWIFT_ANDROID_${SWIFT_HOST_VARIANT_ARCH}_ICU_I18N}
377
382
${SWIFT_ANDROID_${SWIFT_HOST_VARIANT_ARCH}_ICU_UC} )
378
383
379
384
swift_android_lib_for_arch (${SWIFT_HOST_VARIANT_ARCH}
380
385
${SWIFT_HOST_VARIANT_ARCH} _LIB )
381
- foreach (path IN LISTS ${SWIFT_HOST_VARIANT_ARCH} _LIB )
382
- list (APPEND library_search_directories ${path} )
383
- endforeach ()
386
+ target_link_directories (${target} PRIVATE
387
+ ${${SWIFT_HOST_VARIANT_ARCH}_LIB} )
384
388
else ()
385
389
# If lto is enabled, we need to add the object path flag so that the LTO code
386
390
# generator leaves the intermediate object file in a place where it will not
387
391
# be touched. The reason why this must be done is that on OS X, debug info is
388
392
# left in object files. So if the object file is removed when we go to
389
393
# generate a dsym, the debug info is gone.
390
394
if (SWIFT_TOOLS_ENABLE_LTO )
391
- precondition (LFLAGS_LTO_OBJECT_NAME
392
- MESSAGE "Should specify a unique name for the lto object" )
393
- set (lto_object_dir ${CMAKE_CURRENT_BINARY_DIR} /${CMAKE_CFG_INTDIR} )
394
- set (lto_object ${lto_object_dir} /${LFLAGS_LTO_OBJECT_NAME}-lto.o )
395
- list (APPEND result "-Wl,-object_path_lto,${lto_object} " )
396
- endif ()
395
+ target_link_options (${target} PRIVATE
396
+ "SHELL:-Xlinker -object_path_lto"
397
+ "SHELL:-Xlinker ${CMAKE_CURRENT_BINARY_DIR} /${CMAKE_CFG_INTDIR} /${target} -${SWIFT_HOST_VARIANT_SDK} -${SWIFT_HOST_VARIANT_ARCH} -lto${CMAKE_C_OUTPUT_EXTENSION} " )
398
+ endif ()
397
399
endif ()
398
400
399
401
if (NOT "${SWIFT_${SWIFT_HOST_VARIANT_SDK} _${SWIFT_HOST_VARIANT_SDK} _ICU_UC}" STREQUAL "" )
400
402
get_filename_component (SWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_ARCH}_ICU_UC_LIBDIR
401
403
"${SWIFT_${SWIFT_HOST_VARIANT_SDK} _${SWIFT_HOST_VARIANT_SDK} _ICU_UC}" DIRECTORY )
402
- list (APPEND library_search_directories "${SWIFT_${SWIFT_HOST_VARIANT_SDK} _${SWIFT_HOST_VARIANT_ARCH} _ICU_UC_LIBDIR}" )
404
+ target_link_directories (${target} PRIVATE
405
+ "${SWIFT_${SWIFT_HOST_VARIANT_SDK} _${SWIFT_HOST_VARIANT_ARCH} _ICU_UC_LIBDIR}" )
403
406
endif ()
404
407
if (NOT "${SWIFT_${SWIFT_HOST_VARIANT_SDK} _${SWIFT_HOST_VARIANT_ARCH} _ICU_I18N}" STREQUAL "" )
405
408
get_filename_component (SWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_SDK}_ICU_I18N_LIBDIR
406
409
"${SWIFT_${SWIFT_HOST_VARIANT_SDK} _${SWIFT_HOST_VARIANT_ARCH} _ICU_I18N}" DIRECTORY )
407
- list (APPEND library_search_directories "${SWIFT_${SWIFT_HOST_VARIANT_SDK} _${SWIFT_HOST_VARIANT_ARCH} _ICU_I18N_LIBDIR}" )
410
+ target_link_directories (${target} PRIVATE
411
+ "${SWIFT_${SWIFT_HOST_VARIANT_SDK} _${SWIFT_HOST_VARIANT_ARCH} _ICU_I18N_LIBDIR}" )
408
412
endif ()
409
413
410
414
if (NOT SWIFT_COMPILER_IS_MSVC_LIKE )
411
415
# FIXME: On Apple platforms, find_program needs to look for "ld64.lld"
412
416
find_program (LDLLD_PATH "ld.lld" )
413
417
if ((SWIFT_ENABLE_LLD_LINKER AND LDLLD_PATH AND NOT APPLE ) OR
414
- (SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS AND
415
- NOT CMAKE_SYSTEM_NAME STREQUAL WINDOWS ))
416
- list (APPEND result "-fuse-ld=lld" )
418
+ (SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS AND NOT CMAKE_SYSTEM_NAME STREQUAL WINDOWS ))
419
+ target_link_options (${target} PRIVATE -fuse-ld=lld )
417
420
elseif (SWIFT_ENABLE_GOLD_LINKER AND
418
- "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK} _OBJECT_FORMAT}" STREQUAL "ELF" )
421
+ "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK} _OBJECT_FORMAT}" STREQUAL "ELF" )
419
422
if (CMAKE_HOST_SYSTEM_NAME STREQUAL Windows )
420
- list ( APPEND result " -fuse-ld=gold.exe" )
423
+ target_link_options ( ${target} PRIVATE -fuse-ld=gold.exe )
421
424
else ()
422
- list ( APPEND result " -fuse-ld=gold" )
425
+ target_link_options ( ${target} PRIVATE -fuse-ld=gold )
423
426
endif ()
424
427
endif ()
425
428
endif ()
@@ -431,19 +434,16 @@ function(_add_host_variant_link_flags)
431
434
# TODO: Evaluate/enable -f{function,data}-sections --gc-sections for bfd,
432
435
# gold, and lld.
433
436
if (NOT CMAKE_BUILD_TYPE STREQUAL Debug )
434
- if (${ CMAKE_SYSTEM_NAME} MATCHES " Darwin" )
437
+ if (CMAKE_SYSTEM_NAME MATCHES Darwin )
435
438
# See rdar://48283130: This gives 6MB+ size reductions for swift and
436
439
# SourceKitService, and much larger size reductions for sil-opt etc.
437
- list (APPEND result "-Wl,-dead_strip" )
440
+ target_link_options (${target} PRIVATE
441
+ "SHELL:-Xlinker -dead_strip" )
438
442
endif ()
439
443
endif ()
440
444
441
445
get_maccatalyst_build_flavor (maccatalyst_build_flavor
442
446
"${SWIFT_HOST_VARIANT_SDK} " "" )
443
-
444
- set ("${LFLAGS_RESULT_VAR_NAME} " "${result} " PARENT_SCOPE )
445
- set ("${LFLAGS_LINK_LIBRARIES_VAR_NAME} " "${link_libraries} " PARENT_SCOPE )
446
- set ("${LFLAGS_LIBRARY_SEARCH_DIRECTORIES_VAR_NAME} " "${library_search_directories} " PARENT_SCOPE )
447
447
endfunction ()
448
448
449
449
# Add a single variant of a new Swift library.
@@ -591,20 +591,14 @@ function(_add_swift_host_library_single target)
591
591
set (c_compile_flags ${ASHLS_C_COMPILE_FLAGS} )
592
592
set (link_flags )
593
593
594
- set (library_search_directories )
595
-
596
594
_add_host_variant_c_compile_flags (RESULT_VAR_NAME c_compile_flags )
597
595
598
596
if (SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS )
599
597
if (libkind STREQUAL SHARED )
600
598
list (APPEND c_compile_flags -D_WINDLL )
601
599
endif ()
602
600
endif ()
603
- _add_host_variant_link_flags (
604
- LTO_OBJECT_NAME "${target} -${SWIFT_HOST_VARIANT_SDK} -${SWIFT_HOST_VARIANT_ARCH} "
605
- RESULT_VAR_NAME link_flags
606
- LIBRARY_SEARCH_DIRECTORIES_VAR_NAME library_search_directories
607
- )
601
+ _add_host_variant_link_flags (${target} )
608
602
609
603
# Set compilation and link flags.
610
604
if (SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS )
@@ -629,8 +623,6 @@ function(_add_swift_host_library_single target)
629
623
630
624
target_compile_options (${target} PRIVATE
631
625
${c_compile_flags} )
632
- target_link_options (${target} PRIVATE
633
- ${link_flags} )
634
626
if (${SWIFT_HOST_VARIANT_SDK} IN_LIST SWIFT_APPLE_PLATFORMS )
635
627
target_link_options (${target} PRIVATE
636
628
"LINKER:-compatibility_version,1" )
@@ -657,10 +649,6 @@ function(_add_swift_host_library_single target)
657
649
endif ()
658
650
endif ()
659
651
endif ()
660
- target_link_libraries (${target} PRIVATE
661
- ${link_libraries} )
662
- target_link_directories (${target} PRIVATE
663
- ${library_search_directories} )
664
652
665
653
# Do not add code here.
666
654
endfunction ()
@@ -755,29 +743,14 @@ function(add_swift_host_tool executable)
755
743
precondition (ASHT_SWIFT_COMPONENT
756
744
MESSAGE "Swift Component is required to add a host tool" )
757
745
758
- # Determine compiler flags.
759
- set (c_compile_flags )
760
- set (link_flags )
761
- set (link_libraries )
762
- set (library_search_directories
763
- ${SWIFTLIB_DIR} /${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR} )
764
-
765
746
_add_host_variant_c_compile_flags (RESULT_VAR_NAME c_compile_flags )
766
- _add_host_variant_link_flags (
767
- LTO_OBJECT_NAME "${executable} -${SWIFT_HOST_VARIANT_SDK} -${SWIFT_HOST_VARIANT_ARCH} "
768
- RESULT_VAR_NAME link_flags
769
- LINK_LIBRARIES_VAR_NAME link_libraries
770
- LIBRARY_SEARCH_DIRECTORIES_VAR_NAME library_search_directories )
771
747
772
748
add_executable (${executable} ${ASHT_UNPARSED_ARGUMENTS} )
773
749
target_compile_options (${executable} PRIVATE
774
750
${c_compile_flags} )
751
+ _add_host_variant_link_flags (${executable} )
775
752
target_link_directories (${executable} PRIVATE
776
- ${library_search_directories} )
777
- target_link_options (${executable} PRIVATE
778
- ${link_flags} )
779
- target_link_libraries (${executable} PRIVATE
780
- ${link_libraries} )
753
+ ${SWIFTLIB_DIR} /${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR} )
781
754
782
755
set_target_properties (${executable} PROPERTIES
783
756
FOLDER "Swift executables" )
0 commit comments