Skip to content

Commit c09925e

Browse files
authored
Merge pull request swiftlang#28383 from compnerd/explicitly-explicit
build: remove `SWIFT_NEEDS_EXPLICIT_LIBDISPATCH`
2 parents baed359 + 1d5947b commit c09925e

File tree

8 files changed

+134
-125
lines changed

8 files changed

+134
-125
lines changed

CMakeLists.txt

Lines changed: 111 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -465,10 +465,7 @@ option(SWIFT_BUILD_SOURCEKIT "Build SourceKit" TRUE)
465465
option(SWIFT_ENABLE_SOURCEKIT_TESTS "Enable running SourceKit tests" ${SWIFT_BUILD_SOURCEKIT})
466466

467467
if(SWIFT_BUILD_SYNTAXPARSERLIB OR SWIFT_BUILD_SOURCEKIT)
468-
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
469-
set(SWIFT_NEED_EXPLICIT_LIBDISPATCH FALSE)
470-
else()
471-
set(SWIFT_NEED_EXPLICIT_LIBDISPATCH TRUE)
468+
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
472469
if(NOT EXISTS "${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}")
473470
message(SEND_ERROR "SyntaxParserLib and SourceKit require libdispatch on non-Darwin hosts. Please specify SWIFT_PATH_TO_LIBDISPATCH_SOURCE")
474471
endif()
@@ -954,122 +951,124 @@ if (LLVM_ENABLE_DOXYGEN)
954951
message(STATUS "Doxygen: enabled")
955952
endif()
956953

957-
if(SWIFT_NEED_EXPLICIT_LIBDISPATCH)
958-
if(CMAKE_C_COMPILER_ID STREQUAL Clang AND
959-
CMAKE_C_COMPILER_VERSION VERSION_GREATER 3.8
960-
OR LLVM_USE_SANITIZER)
961-
set(SWIFT_LIBDISPATCH_C_COMPILER ${CMAKE_C_COMPILER})
962-
set(SWIFT_LIBDISPATCH_CXX_COMPILER ${CMAKE_CXX_COMPILER})
963-
elseif(${CMAKE_SYSTEM_NAME} STREQUAL ${CMAKE_HOST_SYSTEM_NAME})
964-
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
965-
set(SWIFT_LIBDISPATCH_C_COMPILER
966-
$<TARGET_FILE_DIR:clang>/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
967-
set(SWIFT_LIBDISPATCH_CXX_COMPILER
968-
$<TARGET_FILE_DIR:clang>/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
954+
if(SWIFT_BUILD_SYNTAXPARSERLIB OR SWIFT_BUILD_SOURCEKIT)
955+
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
956+
if(CMAKE_C_COMPILER_ID STREQUAL Clang AND
957+
CMAKE_C_COMPILER_VERSION VERSION_GREATER 3.8
958+
OR LLVM_USE_SANITIZER)
959+
set(SWIFT_LIBDISPATCH_C_COMPILER ${CMAKE_C_COMPILER})
960+
set(SWIFT_LIBDISPATCH_CXX_COMPILER ${CMAKE_CXX_COMPILER})
961+
elseif(${CMAKE_SYSTEM_NAME} STREQUAL ${CMAKE_HOST_SYSTEM_NAME})
962+
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
963+
set(SWIFT_LIBDISPATCH_C_COMPILER
964+
$<TARGET_FILE_DIR:clang>/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
965+
set(SWIFT_LIBDISPATCH_CXX_COMPILER
966+
$<TARGET_FILE_DIR:clang>/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
967+
else()
968+
set(SWIFT_LIBDISPATCH_C_COMPILER $<TARGET_FILE_DIR:clang>/clang)
969+
set(SWIFT_LIBDISPATCH_CXX_COMPILER $<TARGET_FILE_DIR:clang>/clang++)
970+
endif()
969971
else()
970-
set(SWIFT_LIBDISPATCH_C_COMPILER $<TARGET_FILE_DIR:clang>/clang)
971-
set(SWIFT_LIBDISPATCH_CXX_COMPILER $<TARGET_FILE_DIR:clang>/clang++)
972+
message(SEND_ERROR "libdispatch requires a newer clang compiler (${CMAKE_C_COMPILER_VERSION} < 3.9)")
972973
endif()
973-
else()
974-
message(SEND_ERROR "libdispatch requires a newer clang compiler (${CMAKE_C_COMPILER_VERSION} < 3.9)")
975-
endif()
976974

977-
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
978-
set(SOURCEKIT_LIBDISPATCH_RUNTIME_DIR bin)
979-
else()
980-
set(SOURCEKIT_LIBDISPATCH_RUNTIME_DIR lib)
981-
endif()
975+
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
976+
set(SOURCEKIT_LIBDISPATCH_RUNTIME_DIR bin)
977+
else()
978+
set(SOURCEKIT_LIBDISPATCH_RUNTIME_DIR lib)
979+
endif()
982980

983-
include(ExternalProject)
984-
ExternalProject_Add(libdispatch
985-
SOURCE_DIR
986-
"${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}"
987-
CMAKE_ARGS
988-
-DCMAKE_AR=${CMAKE_AR}
989-
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
990-
-DCMAKE_C_COMPILER=${SWIFT_LIBDISPATCH_C_COMPILER}
991-
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
992-
-DCMAKE_CXX_COMPILER=${SWIFT_LIBDISPATCH_CXX_COMPILER}
993-
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
994-
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
995-
-DCMAKE_INSTALL_LIBDIR=lib
996-
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
997-
-DCMAKE_LINKER=${CMAKE_LINKER}
998-
-DCMAKE_RANLIB=${CMAKE_RANLIB}
999-
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
1000-
-DBUILD_SHARED_LIBS=YES
1001-
-DENABLE_SWIFT=NO
1002-
-DENABLE_TESTING=NO
1003-
INSTALL_COMMAND
1004-
# NOTE(compnerd) provide a custom install command to
1005-
# ensure that we strip out the DESTDIR environment
1006-
# from the sub-build
1007-
${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --target install
1008-
STEP_TARGETS
1009-
install
1010-
BUILD_BYPRODUCTS
1011-
<INSTALL_DIR>/${SOURCEKIT_LIBDISPATCH_RUNTIME_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX}
1012-
<INSTALL_DIR>/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}dispatch${CMAKE_IMPORT_LIBRARY_SUFFIX}
1013-
<INSTALL_DIR>/${SOURCEKIT_LIBDISPATCH_RUNTIME_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
1014-
<INSTALL_DIR>/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX}
1015-
BUILD_ALWAYS
1016-
1)
1017-
1018-
ExternalProject_Get_Property(libdispatch install_dir)
1019-
1020-
# CMake does not like the addition of INTERFACE_INCLUDE_DIRECTORIES without
1021-
# the directory existing. Just create the location which will be populated
1022-
# during the installation.
1023-
file(MAKE_DIRECTORY ${install_dir}/include)
1024-
1025-
add_library(dispatch SHARED IMPORTED)
1026-
set_target_properties(dispatch
1027-
PROPERTIES
1028-
IMPORTED_LOCATION
1029-
${install_dir}/${SOURCEKIT_LIBDISPATCH_RUNTIME_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX}
1030-
IMPORTED_IMPLIB
1031-
${install_dir}/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}dispatch${CMAKE_IMPORT_LIBRARY_SUFFIX}
1032-
INTERFACE_INCLUDE_DIRECTORIES
1033-
${install_dir}/include)
1034-
1035-
add_library(BlocksRuntime SHARED IMPORTED)
1036-
set_target_properties(BlocksRuntime
1037-
PROPERTIES
1038-
IMPORTED_LOCATION
1039-
${install_dir}/${SOURCEKIT_LIBDISPATCH_RUNTIME_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
1040-
IMPORTED_IMPLIB
1041-
${install_dir}/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX}
1042-
INTERFACE_INCLUDE_DIRECTORIES
1043-
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime)
1044-
1045-
add_dependencies(dispatch libdispatch-install)
1046-
add_dependencies(BlocksRuntime libdispatch-install)
1047-
1048-
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
1049-
set(SOURCEKIT_RUNTIME_DIR bin)
1050-
else()
1051-
set(SOURCEKIT_RUNTIME_DIR lib)
1052-
endif()
1053-
add_dependencies(sourcekit-inproc BlocksRuntime dispatch)
1054-
swift_install_in_component(FILES
1055-
$<TARGET_FILE:dispatch>
1056-
$<TARGET_FILE:BlocksRuntime>
1057-
DESTINATION ${SOURCEKIT_RUNTIME_DIR}
1058-
COMPONENT sourcekit-inproc)
1059-
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
981+
include(ExternalProject)
982+
ExternalProject_Add(libdispatch
983+
SOURCE_DIR
984+
"${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}"
985+
CMAKE_ARGS
986+
-DCMAKE_AR=${CMAKE_AR}
987+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
988+
-DCMAKE_C_COMPILER=${SWIFT_LIBDISPATCH_C_COMPILER}
989+
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
990+
-DCMAKE_CXX_COMPILER=${SWIFT_LIBDISPATCH_CXX_COMPILER}
991+
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
992+
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
993+
-DCMAKE_INSTALL_LIBDIR=lib
994+
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
995+
-DCMAKE_LINKER=${CMAKE_LINKER}
996+
-DCMAKE_RANLIB=${CMAKE_RANLIB}
997+
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
998+
-DBUILD_SHARED_LIBS=YES
999+
-DENABLE_SWIFT=NO
1000+
-DENABLE_TESTING=NO
1001+
INSTALL_COMMAND
1002+
# NOTE(compnerd) provide a custom install command to
1003+
# ensure that we strip out the DESTDIR environment
1004+
# from the sub-build
1005+
${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --target install
1006+
STEP_TARGETS
1007+
install
1008+
BUILD_BYPRODUCTS
1009+
<INSTALL_DIR>/${SOURCEKIT_LIBDISPATCH_RUNTIME_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX}
1010+
<INSTALL_DIR>/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}dispatch${CMAKE_IMPORT_LIBRARY_SUFFIX}
1011+
<INSTALL_DIR>/${SOURCEKIT_LIBDISPATCH_RUNTIME_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
1012+
<INSTALL_DIR>/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX}
1013+
BUILD_ALWAYS
1014+
1)
1015+
1016+
ExternalProject_Get_Property(libdispatch install_dir)
1017+
1018+
# CMake does not like the addition of INTERFACE_INCLUDE_DIRECTORIES without
1019+
# the directory existing. Just create the location which will be populated
1020+
# during the installation.
1021+
file(MAKE_DIRECTORY ${install_dir}/include)
1022+
1023+
add_library(dispatch SHARED IMPORTED)
1024+
set_target_properties(dispatch
1025+
PROPERTIES
1026+
IMPORTED_LOCATION
1027+
${install_dir}/${SOURCEKIT_LIBDISPATCH_RUNTIME_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX}
1028+
IMPORTED_IMPLIB
1029+
${install_dir}/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}dispatch${CMAKE_IMPORT_LIBRARY_SUFFIX}
1030+
INTERFACE_INCLUDE_DIRECTORIES
1031+
${install_dir}/include)
1032+
1033+
add_library(BlocksRuntime SHARED IMPORTED)
1034+
set_target_properties(BlocksRuntime
1035+
PROPERTIES
1036+
IMPORTED_LOCATION
1037+
${install_dir}/${SOURCEKIT_LIBDISPATCH_RUNTIME_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
1038+
IMPORTED_IMPLIB
1039+
${install_dir}/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX}
1040+
INTERFACE_INCLUDE_DIRECTORIES
1041+
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime)
1042+
1043+
add_dependencies(dispatch libdispatch-install)
1044+
add_dependencies(BlocksRuntime libdispatch-install)
1045+
1046+
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
1047+
set(SOURCEKIT_RUNTIME_DIR bin)
1048+
else()
1049+
set(SOURCEKIT_RUNTIME_DIR lib)
1050+
endif()
1051+
add_dependencies(sourcekit-inproc BlocksRuntime dispatch)
10601052
swift_install_in_component(FILES
1061-
$<TARGET_LINKER_FILE:dispatch>
1062-
$<TARGET_LINKER_FILE:BlocksRuntime>
1063-
DESTINATION lib
1053+
$<TARGET_FILE:dispatch>
1054+
$<TARGET_FILE:BlocksRuntime>
1055+
DESTINATION ${SOURCEKIT_RUNTIME_DIR}
10641056
COMPONENT sourcekit-inproc)
1065-
endif()
1057+
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
1058+
swift_install_in_component(FILES
1059+
$<TARGET_LINKER_FILE:dispatch>
1060+
$<TARGET_LINKER_FILE:BlocksRuntime>
1061+
DESTINATION lib
1062+
COMPONENT sourcekit-inproc)
1063+
endif()
10661064

10671065

1068-
# FIXME(compnerd) this should be taken care of by the
1069-
# INTERFACE_INCLUDE_DIRECTORIES above
1070-
include_directories(AFTER
1071-
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime
1072-
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE})
1066+
# FIXME(compnerd) this should be taken care of by the
1067+
# INTERFACE_INCLUDE_DIRECTORIES above
1068+
include_directories(AFTER
1069+
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime
1070+
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE})
1071+
endif()
10731072
endif()
10741073

10751074
# Add all of the subdirectories, where we actually do work.

tools/SourceKit/lib/Support/CMakeLists.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ target_link_libraries(SourceKitSupport PRIVATE
1111
swiftSyntax
1212
clangBasic
1313
clangRewrite)
14-
if(SWIFT_NEED_EXPLICIT_LIBDISPATCH)
15-
target_link_libraries(SourceKitSupport INTERFACE dispatch BlocksRuntime)
14+
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
15+
target_link_libraries(SourceKitSupport INTERFACE
16+
dispatch
17+
BlocksRuntime)
1618
endif()
1719

tools/SourceKit/tools/complete-test/CMakeLists.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ if(SWIFT_SOURCEKIT_USE_INPROC_LIBRARY)
77
else()
88
target_link_libraries(complete-test PRIVATE sourcekitd)
99
endif()
10-
if(SWIFT_NEED_EXPLICIT_LIBDISPATCH)
11-
target_link_libraries(complete-test PRIVATE dispatch BlocksRuntime)
10+
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
11+
target_link_libraries(complete-test PRIVATE
12+
dispatch
13+
BlocksRuntime)
1214
endif()
1315

1416
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

tools/SourceKit/tools/sourcekitd-repl/CMakeLists.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ if(HAVE_UNICODE_LIBEDIT)
1212
else()
1313
target_link_libraries(sourcekitd-repl PRIVATE sourcekitd)
1414
endif()
15-
if(SWIFT_NEED_EXPLICIT_LIBDISPATCH)
16-
target_link_libraries(sourcekitd-repl PRIVATE dispatch BlocksRuntime)
15+
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
16+
target_link_libraries(sourcekitd-repl PRIVATE
17+
dispatch
18+
BlocksRuntime)
1719
endif()
1820

1921
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

tools/SourceKit/tools/sourcekitd-test/CMakeLists.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@ if(SWIFT_SOURCEKIT_USE_INPROC_LIBRARY)
1717
else()
1818
target_link_libraries(sourcekitd-test PRIVATE sourcekitd)
1919
endif()
20-
if(SWIFT_NEED_EXPLICIT_LIBDISPATCH)
21-
target_link_libraries(sourcekitd-test PRIVATE dispatch BlocksRuntime)
20+
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
21+
target_link_libraries(sourcekitd-test PRIVATE
22+
dispatch
23+
BlocksRuntime)
2224
endif()
2325

2426
add_dependencies(sourcekitd-test sourcekitdTestOptionsTableGen)

tools/libSwiftSyntaxParser/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,9 @@ endif()
4545

4646
set_property(TARGET libSwiftSyntaxParser APPEND_STRING PROPERTY
4747
COMPILE_FLAGS " -fblocks")
48-
if(SWIFT_NEED_EXPLICIT_LIBDISPATCH)
49-
target_link_libraries(libSwiftSyntaxParser PRIVATE BlocksRuntime)
48+
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
49+
target_link_libraries(libSwiftSyntaxParser PRIVATE
50+
BlocksRuntime)
5051
endif()
5152

5253
add_dependencies(parser-lib libSwiftSyntaxParser)

tools/swift-syntax-parser-test/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ endif()
2727

2828
set_property(TARGET swift-syntax-parser-test APPEND_STRING PROPERTY
2929
COMPILE_FLAGS " -fblocks")
30-
if(SWIFT_NEED_EXPLICIT_LIBDISPATCH)
31-
target_link_libraries(swift-syntax-parser-test PRIVATE BlocksRuntime)
30+
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
31+
target_link_libraries(swift-syntax-parser-test PRIVATE
32+
BlocksRuntime)
3233
endif()

unittests/SyntaxParser/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@ endif()
2424

2525
set_property(TARGET SwiftSyntaxParserTests APPEND_STRING PROPERTY
2626
COMPILE_FLAGS " -fblocks")
27-
if(SWIFT_NEED_EXPLICIT_LIBDISPATCH)
27+
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
2828
target_link_libraries(SwiftSyntaxParserTests PRIVATE BlocksRuntime)
2929
endif()

0 commit comments

Comments
 (0)