Skip to content

Commit c7018ba

Browse files
authored
Merge pull request #7529 from llvm-beanz/swift-cmake-exports
[CMake] Re-apply all the changes from PR7500
2 parents 0874207 + 01b36c0 commit c7018ba

File tree

4 files changed

+76
-2
lines changed

4 files changed

+76
-2
lines changed

CMakeLists.txt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,9 @@ endif()
459459

460460
set(SWIFT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
461461
set(SWIFT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
462+
set(SWIFT_CMAKE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
463+
set(SWIFT_MAIN_INCLUDE_DIR "${SWIFT_SOURCE_DIR}/include")
464+
set(SWIFT_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/include")
462465

463466
set(SWIFT_RUNTIME_OUTPUT_INTDIR "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin")
464467
set(SWIFT_LIBRARY_OUTPUT_INTDIR "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib")
@@ -479,8 +482,8 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
479482

480483
# We'll need this once we have generated headers
481484
include_directories(BEFORE
482-
${CMAKE_CURRENT_BINARY_DIR}/include
483-
${CMAKE_CURRENT_SOURCE_DIR}/include
485+
${SWIFT_MAIN_INCLUDE_DIR}
486+
${SWIFT_INCLUDE_DIR}
484487
)
485488

486489
# A convenience pattern to match Darwin platforms. Example:
@@ -954,6 +957,8 @@ if(SWIFT_INCLUDE_DOCS)
954957
add_subdirectory(docs)
955958
endif()
956959

960+
add_subdirectory(cmake/modules)
961+
957962
swift_install_in_component(license
958963
FILES "LICENSE.txt"
959964
DESTINATION "share/swift")

cmake/modules/AddSwift.cmake

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1756,6 +1756,19 @@ function(add_swift_library name)
17561756
DEPLOYMENT_VERSION_TVOS "${SWIFTLIB_DEPLOYMENT_VERSION_TVOS}"
17571757
DEPLOYMENT_VERSION_WATCHOS "${SWIFTLIB_DEPLOYMENT_VERSION_WATCHOS}"
17581758
)
1759+
1760+
swift_install_in_component(dev
1761+
TARGETS ${name}
1762+
ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
1763+
LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
1764+
RUNTIME DESTINATION bin)
1765+
swift_is_installing_component(dev is_installing)
1766+
1767+
if(NOT is_installing)
1768+
set_property(GLOBAL APPEND PROPERTY SWIFT_BUILDTREE_EXPORTS ${name})
1769+
else()
1770+
set_property(GLOBAL APPEND PROPERTY SWIFT_EXPORTS ${name})
1771+
endif()
17591772
endif()
17601773
endfunction()
17611774

@@ -2075,5 +2088,14 @@ function(add_swift_host_tool executable)
20752088
swift_install_in_component(${ADDSWIFTHOSTTOOL_SWIFT_COMPONENT}
20762089
TARGETS ${executable}
20772090
RUNTIME DESTINATION bin)
2091+
2092+
swift_is_installing_component(${ADDSWIFTHOSTTOOL_SWIFT_COMPONENT}
2093+
is_installing)
2094+
2095+
if(NOT is_installing)
2096+
set_property(GLOBAL APPEND PROPERTY SWIFT_BUILDTREE_EXPORTS ${executable})
2097+
else()
2098+
set_property(GLOBAL APPEND PROPERTY SWIFT_EXPORTS ${executable})
2099+
endif()
20782100
endif()
20792101
endfunction()

cmake/modules/CMakeLists.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
set(SWIFT_INSTALL_PACKAGE_DIR lib${LLVM_LIBDIR_SUFFIX}/cmake/swift)
2+
set(swift_cmake_builddir "${SWIFT_BINARY_DIR}/${SWIFT_INSTALL_PACKAGE_DIR}")
3+
4+
# Generate build-tree exports list only
5+
set(SWIFT_EXPORTS_FILE ${swift_cmake_builddir}/SwiftExports.cmake)
6+
get_property(SWIFT_EXPORTS GLOBAL PROPERTY SWIFT_EXPORTS)
7+
get_property(SWIFT_BUILDTREE_EXPORTS GLOBAL PROPERTY SWIFT_BUILDTREE_EXPORTS)
8+
9+
set(SWIFT_CONFIG_EXPORTS ${SWIFT_EXPORTS} ${SWIFT_BUILDTREE_EXPORTS})
10+
export(TARGETS ${SWIFT_CONFIG_EXPORTS} FILE ${SWIFT_EXPORTS_FILE})
11+
12+
13+
set(SWIFT_INCLUDE_DIRS ${SWIFT_INCLUDE_DIR} ${SWIFT_MAIN_INCLUDE_DIR})
14+
set(SWIFT_LIBRARY_DIRS ${SWIFT_LIBRARY_OUTPUT_INTDIR})
15+
16+
configure_file(
17+
SwiftConfig.cmake.in
18+
${swift_cmake_builddir}/SwiftConfig.cmake
19+
@ONLY)

cmake/modules/SwiftConfig.cmake.in

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# This file provides information and services to the final user.
2+
3+
@SWIFT_CONFIG_CODE@
4+
5+
set(SWIFT_VERSION @SWIFT_VERSION@)
6+
set(SWIFT_MAIN_SRC_DIR @SWIFT_SOURCE_DIR@)
7+
8+
set(SWIFT_INCLUDE_DIRS "@SWIFT_INCLUDE_DIR@")
9+
set(SWIFT_LIBRARY_DIRS "@SWIFT_CONFIG_LIBRARY_DIRS@")
10+
11+
# These variables are duplicated, but they must match the LLVM variables of the
12+
# same name. The variables ending in "S" could some day become lists, and are
13+
# preserved for convention and compatibility.
14+
set(SWIFT_INCLUDE_DIR "@SWIFT_INCLUDE_DIRS@")
15+
set(SWIFT_LIBRARY_DIR "@SWIFT_CONFIG_LIBRARY_DIRS@")
16+
17+
set(SWIFT_CMAKE_DIR "@SWIFT_CMAKE_DIR@")
18+
set(SWIFT_BINARY_DIR "@SWIFT_BINARY_DIR@")
19+
20+
set(CMARK_TARGETS_FILE @SWIFT_PATH_TO_CMARK_BUILD@/src/CMarkExports.cmake)
21+
if(NOT TARGET libcmark_static AND EXISTS ${CMARK_TARGETS_FILE})
22+
include(${CMARK_TARGETS_FILE})
23+
endif()
24+
25+
if(NOT TARGET swift)
26+
set(SWIFT_EXPORTED_TARGETS "@SWIFT_CONFIG_EXPORTS@")
27+
include("@SWIFT_EXPORTS_FILE@")
28+
endif()

0 commit comments

Comments
 (0)