Skip to content

Commit 7d93a36

Browse files
committed
[Build] Tweak Libdispatch.cmake for static linking support.
Don't try to build dynamic libraries if the SDK only supports static linking. Also, *do* build static libraries if the SDK only supports static linking. rdar://123503191
1 parent 26b2b31 commit 7d93a36

File tree

1 file changed

+94
-92
lines changed

1 file changed

+94
-92
lines changed

cmake/modules/Libdispatch.cmake

Lines changed: 94 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -84,105 +84,107 @@ foreach(sdk ${DISPATCH_SDKS})
8484
set(SWIFT_LIBDISPATCH_SYSTEM_PROCESSOR -DCMAKE_SYSTEM_PROCESSOR=${arch})
8585
endif()
8686

87-
ExternalProject_Add("${LIBDISPATCH_VARIANT_NAME}"
88-
SOURCE_DIR
89-
"${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}"
90-
CMAKE_ARGS
91-
-DCMAKE_AR=${CMAKE_AR}
92-
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
93-
${SWIFT_LIBDISPATCH_COMPILER_CMAKE_ARGS}
94-
${SWIFT_LIBDISPATCH_COMPILER_TRIPLE_CMAKE_ARGS}
95-
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
96-
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
97-
-DCMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS}
98-
-DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS}
99-
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
100-
-DCMAKE_INSTALL_LIBDIR=lib
101-
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
102-
-DCMAKE_LINKER=${CMAKE_LINKER}
103-
-DCMAKE_MT=${CMAKE_MT}
104-
-DCMAKE_RANLIB=${CMAKE_RANLIB}
105-
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
106-
-DCMAKE_SYSTEM_NAME=${SWIFT_SDK_${sdk}_NAME}
107-
${SWIFT_LIBDISPATCH_SYSTEM_PROCESSOR}
108-
"${SWIFT_LIBDISPATCH_ANDROID_NDK}"
109-
-DCMAKE_ANDROID_ARCH_ABI=${SWIFT_SDK_ANDROID_ARCH_${arch}_ABI}
110-
-DCMAKE_ANDROID_API=${SWIFT_ANDROID_API_LEVEL}
111-
-DBUILD_SHARED_LIBS=YES
112-
-DENABLE_SWIFT=NO
113-
-DBUILD_TESTING=NO
114-
INSTALL_COMMAND
115-
# NOTE(compnerd) provide a custom install command to
116-
# ensure that we strip out the DESTDIR environment
117-
# from the sub-build
118-
${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --target install
119-
COMMAND
120-
${CMAKE_COMMAND} -E copy
121-
<INSTALL_DIR>/${LIBDISPATCH_RUNTIME_DIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}dispatch${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
122-
${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${arch}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}dispatch${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
123-
COMMAND
124-
${CMAKE_COMMAND} -E copy
125-
<INSTALL_DIR>/${LIBDISPATCH_RUNTIME_DIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}BlocksRuntime${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
126-
${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${arch}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}BlocksRuntime${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
127-
COMMAND
128-
${CMAKE_COMMAND} -E copy
129-
<INSTALL_DIR>/${LIBDISPATCH_RUNTIME_DIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}dispatch${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
130-
${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}dispatch${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
131-
COMMAND
132-
${CMAKE_COMMAND} -E copy
133-
<INSTALL_DIR>/${LIBDISPATCH_RUNTIME_DIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}BlocksRuntime${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
134-
${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}BlocksRuntime${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
135-
STEP_TARGETS
136-
install
137-
BUILD_BYPRODUCTS
138-
<INSTALL_DIR>/${LIBDISPATCH_RUNTIME_DIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}dispatch${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
139-
<INSTALL_DIR>/lib/${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_PREFIX}dispatch${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_SUFFIX}
140-
<INSTALL_DIR>/${LIBDISPATCH_RUNTIME_DIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}BlocksRuntime${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
141-
<INSTALL_DIR>/lib/${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_PREFIX}BlocksRuntime${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_SUFFIX}
142-
BUILD_ALWAYS
143-
1)
87+
if(NOT SWIFT_SDK_${sdk}_STATIC_ONLY)
88+
ExternalProject_Add("${LIBDISPATCH_VARIANT_NAME}"
89+
SOURCE_DIR
90+
"${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}"
91+
CMAKE_ARGS
92+
-DCMAKE_AR=${CMAKE_AR}
93+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
94+
${SWIFT_LIBDISPATCH_COMPILER_CMAKE_ARGS}
95+
${SWIFT_LIBDISPATCH_COMPILER_TRIPLE_CMAKE_ARGS}
96+
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
97+
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
98+
-DCMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS}
99+
-DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS}
100+
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
101+
-DCMAKE_INSTALL_LIBDIR=lib
102+
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
103+
-DCMAKE_LINKER=${CMAKE_LINKER}
104+
-DCMAKE_MT=${CMAKE_MT}
105+
-DCMAKE_RANLIB=${CMAKE_RANLIB}
106+
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
107+
-DCMAKE_SYSTEM_NAME=${SWIFT_SDK_${sdk}_NAME}
108+
${SWIFT_LIBDISPATCH_SYSTEM_PROCESSOR}
109+
"${SWIFT_LIBDISPATCH_ANDROID_NDK}"
110+
-DCMAKE_ANDROID_ARCH_ABI=${SWIFT_SDK_ANDROID_ARCH_${arch}_ABI}
111+
-DCMAKE_ANDROID_API=${SWIFT_ANDROID_API_LEVEL}
112+
-DBUILD_SHARED_LIBS=YES
113+
-DENABLE_SWIFT=NO
114+
-DBUILD_TESTING=NO
115+
INSTALL_COMMAND
116+
# NOTE(compnerd) provide a custom install command to
117+
# ensure that we strip out the DESTDIR environment
118+
# from the sub-build
119+
${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --target install
120+
COMMAND
121+
${CMAKE_COMMAND} -E copy
122+
<INSTALL_DIR>/${LIBDISPATCH_RUNTIME_DIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}dispatch${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
123+
${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${arch}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}dispatch${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
124+
COMMAND
125+
${CMAKE_COMMAND} -E copy
126+
<INSTALL_DIR>/${LIBDISPATCH_RUNTIME_DIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}BlocksRuntime${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
127+
${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${arch}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}BlocksRuntime${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
128+
COMMAND
129+
${CMAKE_COMMAND} -E copy
130+
<INSTALL_DIR>/${LIBDISPATCH_RUNTIME_DIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}dispatch${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
131+
${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}dispatch${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
132+
COMMAND
133+
${CMAKE_COMMAND} -E copy
134+
<INSTALL_DIR>/${LIBDISPATCH_RUNTIME_DIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}BlocksRuntime${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
135+
${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}BlocksRuntime${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
136+
STEP_TARGETS
137+
install
138+
BUILD_BYPRODUCTS
139+
<INSTALL_DIR>/${LIBDISPATCH_RUNTIME_DIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}dispatch${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
140+
<INSTALL_DIR>/lib/${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_PREFIX}dispatch${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_SUFFIX}
141+
<INSTALL_DIR>/${LIBDISPATCH_RUNTIME_DIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}BlocksRuntime${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
142+
<INSTALL_DIR>/lib/${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_PREFIX}BlocksRuntime${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_SUFFIX}
143+
BUILD_ALWAYS
144+
1)
144145

145-
ExternalProject_Get_Property("${LIBDISPATCH_VARIANT_NAME}" install_dir)
146+
ExternalProject_Get_Property("${LIBDISPATCH_VARIANT_NAME}" install_dir)
146147

147-
if(NOT SWIFT_BUILT_STANDALONE AND NOT "${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
148-
add_dependencies("${LIBDISPATCH_VARIANT_NAME}" clang)
149-
endif()
148+
if(NOT SWIFT_BUILT_STANDALONE AND NOT "${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
149+
add_dependencies("${LIBDISPATCH_VARIANT_NAME}" clang)
150+
endif()
150151

151-
# CMake does not like the addition of INTERFACE_INCLUDE_DIRECTORIES without
152-
# the directory existing. Just create the location which will be populated
153-
# during the installation.
154-
file(MAKE_DIRECTORY ${install_dir}/include)
152+
# CMake does not like the addition of INTERFACE_INCLUDE_DIRECTORIES without
153+
# the directory existing. Just create the location which will be populated
154+
# during the installation.
155+
file(MAKE_DIRECTORY ${install_dir}/include)
155156

156-
set(DISPATCH_VARIANT_NAME "dispatch-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}")
157-
add_library("${DISPATCH_VARIANT_NAME}" SHARED IMPORTED GLOBAL)
158-
set_target_properties("${DISPATCH_VARIANT_NAME}"
159-
PROPERTIES
160-
IMPORTED_LOCATION
161-
${install_dir}/${LIBDISPATCH_RUNTIME_DIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}dispatch${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
162-
IMPORTED_IMPLIB
163-
${install_dir}/lib/${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_PREFIX}dispatch${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_SUFFIX}
164-
INTERFACE_INCLUDE_DIRECTORIES
165-
${install_dir}/include
166-
IMPORTED_NO_SONAME
167-
1)
157+
set(DISPATCH_VARIANT_NAME "dispatch-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}")
158+
add_library("${DISPATCH_VARIANT_NAME}" SHARED IMPORTED GLOBAL)
159+
set_target_properties("${DISPATCH_VARIANT_NAME}"
160+
PROPERTIES
161+
IMPORTED_LOCATION
162+
${install_dir}/${LIBDISPATCH_RUNTIME_DIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}dispatch${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
163+
IMPORTED_IMPLIB
164+
${install_dir}/lib/${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_PREFIX}dispatch${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_SUFFIX}
165+
INTERFACE_INCLUDE_DIRECTORIES
166+
${install_dir}/include
167+
IMPORTED_NO_SONAME
168+
1)
168169

169-
set(BLOCKS_RUNTIME_VARIANT_NAME "BlocksRuntime-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}")
170-
add_library("${BLOCKS_RUNTIME_VARIANT_NAME}" SHARED IMPORTED GLOBAL)
171-
set_target_properties("${BLOCKS_RUNTIME_VARIANT_NAME}"
172-
PROPERTIES
173-
IMPORTED_LOCATION
174-
${install_dir}/${LIBDISPATCH_RUNTIME_DIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}BlocksRuntime${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
175-
IMPORTED_IMPLIB
176-
${install_dir}/lib/${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_PREFIX}BlocksRuntime${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_SUFFIX}
177-
INTERFACE_INCLUDE_DIRECTORIES
178-
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime
179-
IMPORTED_NO_SONAME
180-
1)
170+
set(BLOCKS_RUNTIME_VARIANT_NAME "BlocksRuntime-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}")
171+
add_library("${BLOCKS_RUNTIME_VARIANT_NAME}" SHARED IMPORTED GLOBAL)
172+
set_target_properties("${BLOCKS_RUNTIME_VARIANT_NAME}"
173+
PROPERTIES
174+
IMPORTED_LOCATION
175+
${install_dir}/${LIBDISPATCH_RUNTIME_DIR}/${SWIFT_SDK_${sdk}_SHARED_LIBRARY_PREFIX}BlocksRuntime${SWIFT_SDK_${sdk}_SHARED_LIBRARY_SUFFIX}
176+
IMPORTED_IMPLIB
177+
${install_dir}/lib/${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_PREFIX}BlocksRuntime${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_SUFFIX}
178+
INTERFACE_INCLUDE_DIRECTORIES
179+
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime
180+
IMPORTED_NO_SONAME
181+
1)
181182

182-
add_dependencies("${DISPATCH_VARIANT_NAME}" "${LIBDISPATCH_VARIANT_NAME}-install")
183-
add_dependencies("${BLOCKS_RUNTIME_VARIANT_NAME}" "${LIBDISPATCH_VARIANT_NAME}-install")
183+
add_dependencies("${DISPATCH_VARIANT_NAME}" "${LIBDISPATCH_VARIANT_NAME}-install")
184+
add_dependencies("${BLOCKS_RUNTIME_VARIANT_NAME}" "${LIBDISPATCH_VARIANT_NAME}-install")
185+
endif()
184186

185-
if(SWIFT_BUILD_STATIC_STDLIB)
187+
if(SWIFT_BUILD_STATIC_STDLIB OR SWIFT_SDK_${sdk}_STATIC_ONLY)
186188
set(LIBDISPATCH_STATIC_VARIANT_NAME "libdispatch-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}-static")
187189
ExternalProject_Add("${LIBDISPATCH_STATIC_VARIANT_NAME}"
188190
SOURCE_DIR

0 commit comments

Comments
 (0)