From 3469797df5ba483ff87205741d510570bafdbd1d Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Tue, 2 Oct 2018 16:58:22 -0700 Subject: [PATCH] SourceKit: use shared BlocksRuntime Adjust the SourceKit's embedded libdispatch build to use the shared build of BlocksRuntime now that we can generate that. --- tools/SourceKit/CMakeLists.txt | 100 ++++++++---------- .../cmake/modules/AddSwiftSourceKit.cmake | 15 +-- 2 files changed, 49 insertions(+), 66 deletions(-) diff --git a/tools/SourceKit/CMakeLists.txt b/tools/SourceKit/CMakeLists.txt index b95050200505a..c6354dc2af4d3 100644 --- a/tools/SourceKit/CMakeLists.txt +++ b/tools/SourceKit/CMakeLists.txt @@ -97,82 +97,74 @@ include_directories(BEFORE if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") set(SOURCEKIT_DEFAULT_TARGET_SDK "LINUX") + set(SOURCEKIT_NEED_EXPLICIT_LIBDISPATCH TRUE) + if(SWIFT_BUILD_SOURCEKIT) - if(SWIFT_BUILD_STDLIB) - set(SOURCEKIT_LIBDISPATCH_ENABLE_SWIFT YES) - else() - set(SOURCEKIT_LIBDISPATCH_ENABLE_SWIFT NO) - endif() include(ExternalProject) ExternalProject_Add(libdispatch SOURCE_DIR "${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}" - BINARY_DIR - "${SWIFT_PATH_TO_LIBDISPATCH_BUILD}" CMAKE_ARGS - -DCMAKE_BUILD_TYPE=${LIBDISPATCH_CMAKE_BUILD_TYPE} - -DCMAKE_C_COMPILER=${PATH_TO_CLANG_BUILD}/bin/clang - -DCMAKE_CXX_COMPILER=${PATH_TO_CLANG_BUILD}/bin/clang++ + -DCMAKE_AR=${CMAKE_AR} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} - -DCMAKE_SWIFT_COMPILER=$c -DCMAKE_INSTALL_PREFIX= - -DENABLE_SWIFT=${SOURCEKIT_LIBDISPATCH_ENABLE_SWIFT} + -DCMAKE_LINKER=${CMAKE_LINKER} + -DCMAKE_RANLIB=${CMAKE_RANLIB} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DENABLE_SWIFT=NO + -DENABLE_TESTING=NO + INSTALL_COMMAND + # NOTE(compnerd) provide a custom install command to + # ensure that we strip out the DESTDIR environment + # from the sub-build + ${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --target install BUILD_BYPRODUCTS - ${SWIFT_PATH_TO_LIBDISPATCH_BUILD}/src/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX} - ${SWIFT_PATH_TO_LIBDISPATCH_BUILD}/${CMAKE_STATIC_LIBRARY_PREFIX}BlocksRuntime${CMAKE_STATIC_LIBRARY_SUFFIX} - STEP_TARGETS - configure + /lib/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX} + /lib/${CMAKE_IMPORT_LIBRARY_PREFIX}dispatch${CMAKE_IMPORT_LIBRARY_SUFFIX} + /lib/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX} + /lib/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX} BUILD_ALWAYS 1) + ExternalProject_Get_Property(libdispatch install_dir) + # CMake does not like the addition of INTERFACE_INCLUDE_DIRECTORIES without # the directory existing. Just create the location which will be populated # during the installation. - ExternalProject_Get_Property(libdispatch install_dir) file(MAKE_DIRECTORY ${install_dir}/include) - # TODO(compnerd) this should be taken care of by the - # INTERFACE_INCLUDE_DIRECTORIES below + add_library(dispatch SHARED IMPORTED) + set_target_properties(dispatch + PROPERTIES + IMPORTED_LOCATION + ${install_dir}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX} + IMPORTED_IMPLIB + ${install_dir}/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}dispatch${CMAKE_IMPORT_LIBRARY_SUFFIX} + INTERFACE_INCLUDE_DIRECTORIES + ${install_dir}/include) + + add_library(BlocksRuntime SHARED IMPORTED) + set_target_properties(BlocksRuntime + PROPERTIES + IMPORTED_LOCATION + ${install_dir}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX} + IMPORTED_IMPLIB + ${install_dir}/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX} + INTERFACE_INCLUDE_DIRECTORIES + ${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime) + + # FIXME(compnerd) this should be taken care of by the + # INTERFACE_INCLUDE_DIRECTORIES above include_directories(AFTER ${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime ${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}) - - if(SWIFT_BUILD_STDLIB) - add_dependencies(libdispatch - swift - copy_shim_headers - swiftCore-${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}-${SWIFT_HOST_VARIANT_ARCH} - swiftSwiftOnoneSupport-${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}-${SWIFT_HOST_VARIANT_ARCH} - swiftCore-swiftmodule-${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}-${SWIFT_HOST_VARIANT_ARCH} - swiftSwiftOnoneSupport-swiftmodule-${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}-${SWIFT_HOST_VARIANT_ARCH}) - endif() endif() - - ExternalProject_Get_Property(libdispatch install_dir) - add_library(dispatch SHARED IMPORTED) - set_target_properties(dispatch - PROPERTIES - IMPORTED_LOCATION - ${SWIFT_PATH_TO_LIBDISPATCH_BUILD}/src/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX} - INTERFACE_INCLUDE_DIRECTORIES - ${install_dir}/include) - if(SWIFT_BUILD_STDLIB) - set_target_properties(dispatch - PROPERTIES - IMPORTED_LINK_INTERFACE_LIBRARIES - swiftCore-${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}-${SWIFT_HOST_VARIANT_ARCH}) - endif() - - add_library(BlocksRuntime STATIC IMPORTED) - set_target_properties(BlocksRuntime - PROPERTIES - IMPORTED_LOCATION - ${SWIFT_PATH_TO_LIBDISPATCH_BUILD}/${CMAKE_STATIC_LIBRARY_PREFIX}BlocksRuntime${CMAKE_STATIC_LIBRARY_SUFFIX} - INTERFACE_INCLUDE_DIRECTORIES - ${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime) - - set(SOURCEKIT_NEED_EXPLICIT_LIBDISPATCH TRUE) endif() add_subdirectory(include) diff --git a/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake b/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake index 27fe625edce85..70eb32e37c594 100644 --- a/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake +++ b/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake @@ -66,19 +66,10 @@ function(add_sourcekit_default_compiler_flags target) ANALYZE_CODE_COVERAGE "${analyze_code_coverage}" RESULT_VAR_NAME link_flags) - if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") - # TODO(compnerd) this should really use target_compile_options but the use - # of keyword and non-keyword flags prevents this + # TODO(compnerd) this should really use target_compile_options but the use + # of keyword and non-keyword flags prevents this + if(CMAKE_SYSTEM_NAME STREQUAL "Linux") list(APPEND c_compile_flags "-fblocks") - # TODO(compnerd) this should really use target_link_libraries but the use of - # explicit_llvm_config using target_link_libraries without keywords on - # executables causes conflicts here - list(APPEND link_flags "-L${SWIFT_PATH_TO_LIBDISPATCH_BUILD}") - list(APPEND link_flags "-lBlocksRuntime") - # NOTE(compnerd) since we do not use target_link_libraries, we do not get - # the implicit dependency tracking. Add an explicit dependency until we can - # use target_link_libraries. - add_dependencies(${target} BlocksRuntime) endif() # Convert variables to space-separated strings.