Skip to content

Commit d8b3b62

Browse files
committed
build: use modern target property handling
Use specific operations for setting the compile flags, link flags, linked libraries, and library search paths. This allows us to use CMake more effectively, simplifies the logic, and will ensure that flags are not duplicated.
1 parent e26b216 commit d8b3b62

File tree

4 files changed

+46
-63
lines changed

4 files changed

+46
-63
lines changed

cmake/modules/AddSwift.cmake

Lines changed: 37 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -702,14 +702,6 @@ function(_add_swift_lipo_target)
702702
endif()
703703
endfunction()
704704

705-
function(swift_target_link_search_directories target directories)
706-
set(STLD_FLAGS "")
707-
foreach(directory ${directories})
708-
set(STLD_FLAGS "${STLD_FLAGS} \"${CMAKE_LIBRARY_PATH_FLAG}${directory}\"")
709-
endforeach()
710-
set_property(TARGET ${target} APPEND_STRING PROPERTY LINK_FLAGS ${STLD_FLAGS})
711-
endfunction()
712-
713705
# Add a single variant of a new Swift library.
714706
#
715707
# Usage:
@@ -886,22 +878,10 @@ function(_add_swift_library_single target name)
886878
if(SWIFT_EMBED_BITCODE_SECTION AND NOT SWIFTLIB_SINGLE_DONT_EMBED_BITCODE)
887879
if("${SWIFTLIB_SINGLE_SDK}" STREQUAL "IOS" OR "${SWIFTLIB_SINGLE_SDK}" STREQUAL "TVOS" OR "${SWIFTLIB_SINGLE_SDK}" STREQUAL "WATCHOS")
888880
list(APPEND SWIFTLIB_SINGLE_C_COMPILE_FLAGS "-fembed-bitcode")
889-
list(APPEND SWIFTLIB_SINGLE_LINK_FLAGS "-Xlinker" "-bitcode_bundle" "-Xlinker" "-lto_library" "-Xlinker" "${LLVM_LIBRARY_DIR}/libLTO.dylib")
890-
# If we are asked to hide symbols, pass the obfuscation flag to libLTO.
891-
if (SWIFT_EMBED_BITCODE_SECTION_HIDE_SYMBOLS)
892-
list(APPEND SWIFTLIB_SINGLE_LINK_FLAGS "-Xlinker" "-bitcode_hide_symbols")
893-
endif()
894881
set(embed_bitcode_arg EMBED_BITCODE)
895882
endif()
896883
endif()
897884

898-
if(${SWIFTLIB_SINGLE_SDK} IN_LIST SWIFT_APPLE_PLATFORMS)
899-
list(APPEND SWIFTLIB_SINGLE_LINK_FLAGS "-Xlinker" "-compatibility_version" "-Xlinker" "1")
900-
if (SWIFT_COMPILER_VERSION)
901-
list(APPEND SWIFTLIB_SINGLE_LINK_FLAGS "-Xlinker" "-current_version" "-Xlinker" "${SWIFT_COMPILER_VERSION}" )
902-
endif()
903-
endif()
904-
905885
if(XCODE)
906886
string(REGEX MATCHALL "/[^/]+" split_path ${CMAKE_CURRENT_SOURCE_DIR})
907887
list(GET split_path -1 dir)
@@ -1450,17 +1430,32 @@ function(_add_swift_library_single target name)
14501430
set(PLIST_INFO_BUILD_VERSION)
14511431
endif()
14521432

1453-
# Convert variables to space-separated strings.
1454-
_list_escape_for_shell("${c_compile_flags}" c_compile_flags)
1455-
_list_escape_for_shell("${link_flags}" link_flags)
1456-
14571433
# Set compilation and link flags.
1458-
set_property(TARGET "${target}" APPEND_STRING PROPERTY
1459-
COMPILE_FLAGS " ${c_compile_flags}")
1460-
set_property(TARGET "${target}" APPEND_STRING PROPERTY
1461-
LINK_FLAGS " ${link_flags}")
1462-
set_property(TARGET "${target}" APPEND PROPERTY LINK_LIBRARIES ${link_libraries})
1463-
swift_target_link_search_directories("${target}" "${library_search_directories}")
1434+
target_compile_options(${target} PRIVATE
1435+
${c_compile_flags})
1436+
target_link_options(${target} PRIVATE
1437+
${link_flags})
1438+
if(${SWIFTLIB_SINGLE_SDK} IN_LIST SWIFT_APPLE_PLATFORMS)
1439+
target_link_options(${target} PRIVATE
1440+
"LINKER:-compatibility_version,1")
1441+
if(SWIFT_COMPILER_VERSION)
1442+
target_link_options(${target} PRIVATE
1443+
"LINKER:-current_version,${SWIFT_COMPILER_VERSION}")
1444+
endif()
1445+
# Include LLVM Bitcode slices for iOS, Watch OS, and Apple TV OS device libraries.
1446+
if(SWIFT_EMBED_BITCODE_SECTION AND NOT SWIFTLIB_SINGLE_DONT_EMBED_BITCODE)
1447+
if(${SWIFTLIB_SINGLE_SDK} MATCHES "(I|TV|WATCH)OS")
1448+
target_link_options(${target} PRIVATE
1449+
"LINKER:-bitcode_bundle"
1450+
$<$<BOOL:SWIFT_EMBED_BITCODE_SECTION_HIDE_SYMBOLS>:"LINKER:-bitcode_hide_symbols">
1451+
"LINKER:-lto_library,${LLVM_LIBRARY_DIR}/libLTO.dylib")
1452+
endif()
1453+
endif()
1454+
endif()
1455+
target_link_libraries(${target} PRIVATE
1456+
${link_libraries})
1457+
target_link_directories(${target} PRIVATE
1458+
${library_search_directories})
14641459

14651460
# Adjust the linked libraries for windows targets. On Windows, the link is
14661461
# performed against the import library, and the runtime uses the dll. Not
@@ -1510,8 +1505,8 @@ function(_add_swift_library_single target name)
15101505
endif()
15111506

15121507
if(target_static)
1513-
set_property(TARGET "${target_static}" APPEND_STRING PROPERTY
1514-
COMPILE_FLAGS " ${c_compile_flags}")
1508+
target_link_options(${target_static} PRIVATE
1509+
${c_compile_flags})
15151510
# FIXME: The fallback paths here are going to be dynamic libraries.
15161511

15171512
if(SWIFTLIB_INSTALL_WITH_SHARED)
@@ -1523,7 +1518,8 @@ function(_add_swift_library_single target name)
15231518
"${search_base_dir}/${SWIFTLIB_SINGLE_SUBDIR}"
15241519
"${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFTLIB_SINGLE_SUBDIR}"
15251520
"${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_LIB_SUBDIR}")
1526-
swift_target_link_search_directories("${target_static}" "${library_search_directories}")
1521+
target_link_directories(${target_static} PRIVATE
1522+
${library_search_directories})
15271523
target_link_libraries("${target_static}" PRIVATE
15281524
${SWIFTLIB_SINGLE_PRIVATE_LINK_LIBRARIES})
15291525
endif()
@@ -2624,16 +2620,14 @@ function(_add_swift_executable_single name)
26242620
${SWIFTEXE_SINGLE_DEPENDS})
26252621
llvm_update_compile_flags("${name}")
26262622

2627-
# Convert variables to space-separated strings.
2628-
_list_escape_for_shell("${c_compile_flags}" c_compile_flags)
2629-
_list_escape_for_shell("${link_flags}" link_flags)
2630-
2631-
set_property(TARGET ${name} APPEND_STRING PROPERTY
2632-
COMPILE_FLAGS " ${c_compile_flags}")
2633-
swift_target_link_search_directories("${name}" "${library_search_directories}")
2634-
set_property(TARGET ${name} APPEND_STRING PROPERTY
2635-
LINK_FLAGS " ${link_flags}")
2636-
set_property(TARGET ${name} APPEND PROPERTY LINK_LIBRARIES ${link_libraries})
2623+
target_compile_options(${name} PRIVATE
2624+
${c_compile_flags})
2625+
target_link_directories(${name} PRIVATE
2626+
${library_search_directories})
2627+
target_link_options(${name} PRIVATE
2628+
${link_flags})
2629+
target_link_libraries(${name} PRIVATE
2630+
${link_libraries})
26372631
if (SWIFT_PARALLEL_LINK_JOBS)
26382632
set_property(TARGET ${name} PROPERTY JOB_POOL_LINK swift_link_job_pool)
26392633
endif()

cmake/modules/SwiftList.cmake

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,6 @@ function(_list_add_string_suffix input_list suffix result_var_name)
3838
set("${result_var_name}" "${result}" PARENT_SCOPE)
3939
endfunction()
4040

41-
function(_list_escape_for_shell input_list result_var_name)
42-
set(result "")
43-
foreach(element ${input_list})
44-
string(REPLACE " " "\\ " element "${element}")
45-
set(result "${result}${element} ")
46-
endforeach()
47-
set("${result_var_name}" "${result}" PARENT_SCOPE)
48-
endfunction()
49-
5041
function(list_replace input_list old new)
5142
set(replaced_list)
5243
foreach(item ${${input_list}})

lib/SymbolGraphGen/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ add_swift_host_library(swiftSymbolGraphGen STATIC
77
SymbolGraphGen.cpp
88
SymbolGraphASTWalker.cpp)
99

10-
target_link_libraries(swiftSymbolGraphGen
10+
target_link_libraries(swiftSymbolGraphGen PRIVATE
1111
swiftAST
1212
swiftFrontend
1313
swiftMarkup)

tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -70,17 +70,15 @@ function(add_sourcekit_default_compiler_flags target)
7070
LINK_LIBRARIES_VAR_NAME link_libraries
7171
LIBRARY_SEARCH_DIRECTORIES_VAR_NAME library_search_directories)
7272

73-
# Convert variables to space-separated strings.
74-
_list_escape_for_shell("${c_compile_flags}" c_compile_flags)
75-
_list_escape_for_shell("${link_flags}" link_flags)
76-
7773
# Set compilation and link flags.
78-
set_property(TARGET "${target}" APPEND_STRING PROPERTY
79-
COMPILE_FLAGS " ${c_compile_flags} -fblocks")
80-
set_property(TARGET "${target}" APPEND_STRING PROPERTY
81-
LINK_FLAGS " ${link_flags}")
82-
set_property(TARGET "${target}" APPEND PROPERTY LINK_LIBRARIES ${link_libraries})
83-
swift_target_link_search_directories("${target}" "${library_search_directories}")
74+
target_compile_options(${target} PRIVATE
75+
-fblocks)
76+
target_link_options(${target} PRIVATE
77+
${link_flags})
78+
target_link_directories(${target} PRIVATE
79+
${library_search_directories})
80+
target_link_libraries(${target} PRIVATE
81+
${link_libraries})
8482
endfunction()
8583

8684
# Add a new SourceKit library.

0 commit comments

Comments
 (0)