Skip to content

Commit 2e2e886

Browse files
committed
build: bifurcate _add_swift_executable_single
1 parent dddcfb8 commit 2e2e886

File tree

2 files changed

+145
-3
lines changed

2 files changed

+145
-3
lines changed

cmake/modules/AddSwift.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2756,7 +2756,7 @@ endfunction()
27562756
#
27572757
# [ARCHITECTURE architecture]
27582758
# Architecture to build for.
2759-
function(_add_swift_executable_single name)
2759+
function(_add_swift_host_executable_single name)
27602760
set(options)
27612761
set(single_parameter_options
27622762
ARCHITECTURE
@@ -2908,7 +2908,7 @@ function(add_swift_host_tool executable)
29082908
MESSAGE "Swift Component is required to add a host tool")
29092909

29102910
# Create the executable rule.
2911-
_add_swift_executable_single(${executable}
2911+
_add_swift_host_executable_single(${executable}
29122912
SDK ${SWIFT_HOST_VARIANT_SDK}
29132913
ARCHITECTURE ${SWIFT_HOST_VARIANT_ARCH}
29142914
${ASHT_UNPARSED_ARGUMENTS})

stdlib/cmake/modules/AddSwiftStdlib.cmake

Lines changed: 143 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,148 @@
11

22
include(AddSwift)
33

4+
# Add an executable compiled for a given variant.
5+
#
6+
# Don't use directly, use add_swift_executable and add_swift_target_executable
7+
# instead.
8+
#
9+
# See add_swift_executable for detailed documentation.
10+
#
11+
# Additional parameters:
12+
# [SDK sdk]
13+
# SDK to build for.
14+
#
15+
# [ARCHITECTURE architecture]
16+
# Architecture to build for.
17+
function(_add_swift_target_executable_single name)
18+
set(options)
19+
set(single_parameter_options
20+
ARCHITECTURE
21+
SDK)
22+
set(multiple_parameter_options
23+
COMPILE_FLAGS
24+
DEPENDS
25+
LLVM_LINK_COMPONENTS)
26+
cmake_parse_arguments(SWIFTEXE_SINGLE
27+
"${options}"
28+
"${single_parameter_options}"
29+
"${multiple_parameter_options}"
30+
${ARGN})
31+
32+
set(SWIFTEXE_SINGLE_SOURCES ${SWIFTEXE_SINGLE_UNPARSED_ARGUMENTS})
33+
34+
# Check arguments.
35+
precondition(SWIFTEXE_SINGLE_SDK MESSAGE "Should specify an SDK")
36+
precondition(SWIFTEXE_SINGLE_ARCHITECTURE MESSAGE "Should specify an architecture")
37+
38+
# Determine compiler flags.
39+
set(c_compile_flags)
40+
set(link_flags)
41+
42+
# Prepare linker search directories.
43+
set(library_search_directories
44+
"${SWIFTLIB_DIR}/${SWIFT_SDK_${SWIFTEXE_SINGLE_SDK}_LIB_SUBDIR}")
45+
46+
# Add variant-specific flags.
47+
_add_variant_c_compile_flags(
48+
SDK "${SWIFTEXE_SINGLE_SDK}"
49+
ARCH "${SWIFTEXE_SINGLE_ARCHITECTURE}"
50+
BUILD_TYPE "${CMAKE_BUILD_TYPE}"
51+
ENABLE_ASSERTIONS "${LLVM_ENABLE_ASSERTIONS}"
52+
ENABLE_LTO "${SWIFT_TOOLS_ENABLE_LTO}"
53+
ANALYZE_CODE_COVERAGE "${SWIFT_ANALYZE_CODE_COVERAGE}"
54+
RESULT_VAR_NAME c_compile_flags)
55+
_add_variant_link_flags(
56+
SDK "${SWIFTEXE_SINGLE_SDK}"
57+
ARCH "${SWIFTEXE_SINGLE_ARCHITECTURE}"
58+
BUILD_TYPE "${CMAKE_BUILD_TYPE}"
59+
ENABLE_ASSERTIONS "${LLVM_ENABLE_ASSERTIONS}"
60+
ENABLE_LTO "${SWIFT_TOOLS_ENABLE_LTO}"
61+
LTO_OBJECT_NAME "${name}-${SWIFTEXE_SINGLE_SDK}-${SWIFTEXE_SINGLE_ARCHITECTURE}"
62+
ANALYZE_CODE_COVERAGE "${SWIFT_ANALYZE_CODE_COVERAGE}"
63+
RESULT_VAR_NAME link_flags
64+
LINK_LIBRARIES_VAR_NAME link_libraries
65+
LIBRARY_SEARCH_DIRECTORIES_VAR_NAME library_search_directories)
66+
67+
handle_swift_sources(
68+
dependency_target
69+
unused_module_dependency_target
70+
unused_sib_dependency_target
71+
unused_sibopt_dependency_target
72+
unused_sibgen_dependency_target
73+
SWIFTEXE_SINGLE_SOURCES SWIFTEXE_SINGLE_EXTERNAL_SOURCES ${name}
74+
DEPENDS
75+
${SWIFTEXE_SINGLE_DEPENDS}
76+
MODULE_NAME ${name}
77+
SDK ${SWIFTEXE_SINGLE_SDK}
78+
ARCHITECTURE ${SWIFTEXE_SINGLE_ARCHITECTURE}
79+
COMPILE_FLAGS ${SWIFTEXE_SINGLE_COMPILE_FLAGS}
80+
IS_MAIN)
81+
add_swift_source_group("${SWIFTEXE_SINGLE_EXTERNAL_SOURCES}")
82+
83+
add_executable(${name}
84+
${SWIFTEXE_SINGLE_SOURCES}
85+
${SWIFTEXE_SINGLE_EXTERNAL_SOURCES})
86+
87+
add_dependencies_multiple_targets(
88+
TARGETS "${name}"
89+
DEPENDS
90+
${dependency_target}
91+
${LLVM_COMMON_DEPENDS}
92+
${SWIFTEXE_SINGLE_DEPENDS})
93+
llvm_update_compile_flags("${name}")
94+
95+
if(SWIFTEXE_SINGLE_SDK STREQUAL WINDOWS)
96+
swift_windows_include_for_arch(${SWIFTEXE_SINGLE_ARCHITECTURE}
97+
${SWIFTEXE_SINGLE_ARCHITECTURE}_INCLUDE)
98+
target_include_directories(${name} SYSTEM PRIVATE
99+
${${SWIFTEXE_SINGLE_ARCHITECTURE}_INCLUDE})
100+
101+
if(NOT ${CMAKE_C_COMPILER_ID} STREQUAL MSVC)
102+
# MSVC doesn't support -Xclang. We don't need to manually specify
103+
# the dependent libraries as `cl` does so.
104+
target_compile_options(${name} PRIVATE
105+
"SHELL:-Xclang --dependent-lib=oldnames"
106+
# TODO(compnerd) handle /MT, /MTd
107+
"SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d>")
108+
endif()
109+
endif()
110+
target_compile_options(${name} PRIVATE
111+
${c_compile_flags})
112+
target_link_directories(${name} PRIVATE
113+
${library_search_directories})
114+
target_link_options(${name} PRIVATE
115+
${link_flags})
116+
target_link_libraries(${name} PRIVATE
117+
${link_libraries})
118+
if (SWIFT_PARALLEL_LINK_JOBS)
119+
set_property(TARGET ${name} PROPERTY JOB_POOL_LINK swift_link_job_pool)
120+
endif()
121+
if(${SWIFTEXE_SINGLE_SDK} IN_LIST SWIFT_APPLE_PLATFORMS)
122+
set_target_properties(${name} PROPERTIES
123+
BUILD_WITH_INSTALL_RPATH YES
124+
INSTALL_RPATH "@executable_path/../lib/swift/${SWIFT_SDK_${SWIFTEXE_SINGLE_SDK}_LIB_SUBDIR}")
125+
endif()
126+
set_output_directory(${name}
127+
BINARY_DIR ${SWIFT_RUNTIME_OUTPUT_INTDIR}
128+
LIBRARY_DIR ${SWIFT_LIBRARY_OUTPUT_INTDIR})
129+
130+
swift_common_llvm_config("${name}" ${SWIFTEXE_SINGLE_LLVM_LINK_COMPONENTS})
131+
132+
# NOTE(compnerd) use the C linker language to invoke `clang` rather than
133+
# `clang++` as we explicitly link against the C++ runtime. We were previously
134+
# actually passing `-nostdlib++` to avoid the C++ runtime linkage.
135+
if(${SWIFTEXE_SINGLE_SDK} STREQUAL ANDROID)
136+
set_property(TARGET "${name}" PROPERTY
137+
LINKER_LANGUAGE "C")
138+
else()
139+
set_property(TARGET "${name}" PROPERTY
140+
LINKER_LANGUAGE "CXX")
141+
endif()
142+
143+
set_target_properties(${name} PROPERTIES FOLDER "Swift executables")
144+
endfunction()
145+
4146
# Add an executable for each target variant. Executables are given suffixes
5147
# with the variant SDK and ARCH.
6148
#
@@ -39,7 +181,7 @@ function(add_swift_target_executable name)
39181
"${SWIFTEXE_TARGET_DEPENDS}"
40182
"-${SWIFT_SDK_${sdk}_LIB_SUBDIR}"
41183
SWIFTEXE_TARGET_DEPENDS_with_suffix)
42-
_add_swift_executable_single(
184+
_add_swift_target_executable_single(
43185
${VARIANT_NAME}
44186
${SWIFTEXE_TARGET_SOURCES}
45187
DEPENDS ${SWIFTEXE_TARGET_DEPENDS_with_suffix}

0 commit comments

Comments
 (0)