Skip to content

Commit 673728e

Browse files
authored
Merge pull request #21388 from xiaobai/remote_buildtree_exports
2 parents 604852d + f7dde8d commit 673728e

File tree

3 files changed

+92
-27
lines changed

3 files changed

+92
-27
lines changed

cmake/modules/AddSwift.cmake

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1506,19 +1506,22 @@ function(add_swift_host_library name)
15061506
INSTALL_IN_COMPONENT "dev"
15071507
)
15081508

1509+
swift_is_installing_component(dev is_installing)
1510+
if(NOT is_installing)
1511+
set_property(GLOBAL APPEND PROPERTY SWIFT_BUILDTREE_EXPORTS ${name})
1512+
elseif(NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
1513+
set(export_to_swiftexports EXPORT SwiftExports)
1514+
set_property(GLOBAL PROPERTY SWIFT_HAS_EXPORTS True)
1515+
set_property(GLOBAL APPEND PROPERTY SWIFT_EXPORTS ${name})
1516+
endif()
1517+
15091518
if(NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
1510-
swift_install_in_component(TARGETS ${name}
1519+
swift_install_in_component(TARGETS ${name} ${export_to_swiftexports}
15111520
ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} COMPONENT dev
15121521
LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} COMPONENT dev
15131522
RUNTIME DESTINATION bin COMPONENT dev)
15141523
endif()
15151524

1516-
swift_is_installing_component(dev is_installing)
1517-
if(NOT is_installing)
1518-
set_property(GLOBAL APPEND PROPERTY SWIFT_BUILDTREE_EXPORTS ${name})
1519-
else()
1520-
set_property(GLOBAL APPEND PROPERTY SWIFT_EXPORTS ${name})
1521-
endif()
15221525
endfunction()
15231526

15241527
# Add a new Swift target library.
@@ -2117,7 +2120,16 @@ function(add_swift_target_library name)
21172120
endif()
21182121

21192122
if(sdk STREQUAL WINDOWS AND CMAKE_SYSTEM_NAME STREQUAL Windows)
2120-
swift_install_in_component(TARGETS ${name}-windows-${SWIFT_PRIMARY_VARIANT_ARCH}
2123+
set(target_name ${name}-windows-${SWIFT_PRIMARY_VARIANT_ARCH})
2124+
swift_is_installing_component("${SWIFTLIB_INSTALL_IN_COMPONENT}" is_installing)
2125+
if(NOT is_installing)
2126+
set_property(GLOBAL APPEND PROPERTY SWIFT_BUILDTREE_EXPORTS ${target_name})
2127+
else(NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
2128+
set(export_to_swiftexports EXPORT SwiftExports)
2129+
set_property(GLOBAL PROPERTY SWIFT_HAS_EXPORTS True)
2130+
set_property(GLOBAL APPEND PROPERTY SWIFT_EXPORTS ${target_name})
2131+
endif()
2132+
swift_install_in_component(TARGETS ${target_name} ${export_to_swiftexports}
21212133
RUNTIME
21222134
DESTINATION "bin"
21232135
COMPONENT "${SWIFTLIB_INSTALL_IN_COMPONENT}"
@@ -2159,6 +2171,7 @@ function(add_swift_target_library name)
21592171
endif()
21602172

21612173
if(is_installing)
2174+
set_property(GLOBAL PROPERTY SWIFT_HAS_EXPORTS True)
21622175
set_property(GLOBAL APPEND
21632176
PROPERTY SWIFT_EXPORTS ${_variant_name})
21642177
else()
@@ -2406,18 +2419,22 @@ function(add_swift_host_tool executable)
24062419
ARCHITECTURE ${SWIFT_HOST_VARIANT_ARCH}
24072420
${ASHT_UNPARSED_ARGUMENTS})
24082421

2409-
swift_install_in_component(TARGETS ${executable}
2410-
RUNTIME
2411-
DESTINATION bin
2412-
COMPONENT ${ASHT_SWIFT_COMPONENT})
2413-
24142422
swift_is_installing_component(${ASHT_SWIFT_COMPONENT} is_installing)
24152423

24162424
if(NOT is_installing)
24172425
set_property(GLOBAL APPEND PROPERTY SWIFT_BUILDTREE_EXPORTS ${executable})
24182426
else()
2427+
set(export_to_swiftexports EXPORT SwiftExports)
2428+
set_property(GLOBAL PROPERTY SWIFT_HAS_EXPORTS True)
24192429
set_property(GLOBAL APPEND PROPERTY SWIFT_EXPORTS ${executable})
24202430
endif()
2431+
2432+
swift_install_in_component(TARGETS ${executable} ${export_to_swiftexports}
2433+
RUNTIME
2434+
DESTINATION bin
2435+
COMPONENT ${ASHT_SWIFT_COMPONENT})
2436+
2437+
24212438
endfunction()
24222439

24232440
# This declares a swift host tool that links with libfuzzer.

cmake/modules/CMakeLists.txt

Lines changed: 56 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,66 @@
11
set(SWIFT_INSTALL_PACKAGE_DIR lib${LLVM_LIBDIR_SUFFIX}/cmake/swift)
22
set(swift_cmake_builddir "${SWIFT_BINARY_DIR}/${SWIFT_INSTALL_PACKAGE_DIR}")
33

4-
# Generate build-tree exports list only
5-
set(SWIFT_EXPORTS_FILE ${swift_cmake_builddir}/SwiftExports.cmake)
4+
# Exports for those who want to build against an installed Swift
5+
set(SWIFT_EXPORTS_FILE "${swift_cmake_builddir}/SwiftExports.cmake")
66
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})
7+
export(TARGETS ${SWIFT_EXPORTS} FILE ${SWIFT_EXPORTS_FILE})
118

9+
# Export targets that are only available when building against a Swift build
10+
# tree
11+
set(SWIFT_BUILDTREE_EXPORTS_FILE "${swift_cmake_builddir}/SwiftBuildTreeExports.cmake")
12+
get_property(SWIFT_BUILDTREE_EXPORTS GLOBAL PROPERTY SWIFT_BUILDTREE_EXPORTS)
13+
export(TARGETS ${SWIFT_BUILDTREE_EXPORTS} FILE ${SWIFT_BUILDTREE_EXPORTS_FILE})
1214

13-
set(SWIFT_INCLUDE_DIRS ${SWIFT_INCLUDE_DIR} ${SWIFT_MAIN_INCLUDE_DIR})
14-
set(SWIFT_LIBRARY_DIRS ${SWIFT_LIBRARY_OUTPUT_INTDIR})
15+
# Generate SwiftConfig.cmake for the build tree
16+
set(SWIFT_CONFIG_EXPORTS "${SWIFT_EXPORTS};${SWIFT_BUILDTREE_EXPORTS}")
17+
set(SWIFT_CONFIG_EXPORTS_FILE "${SWIFT_EXPORTS_FILE}")
18+
set(SWIFT_CONFIG_BINARY_DIR "${SWIFT_BINARY_DIR}")
19+
set(SWIFT_CONFIG_INCLUDE_DIRS
20+
"${SWIFT_INCLUDE_DIR}"
21+
"${SWIFT_MAIN_INCLUDE_DIR}"
22+
)
23+
set(SWIFT_CONFIG_INCLUDE_DIR "${SWIFT_INCLUDE_DIR}")
24+
set(SWIFT_CONFIG_LIBRARY_DIRS "${SWIFT_LIBRARY_OUTPUT_INTDIR}")
25+
set(SWIFT_CONFIG_CMAKE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
26+
set(swift_config_include_buildtree_exports
27+
"include(\"${SWIFT_BUILDTREE_EXPORTS_FILE}\")")
1528

1629
configure_file(
1730
SwiftConfig.cmake.in
1831
${swift_cmake_builddir}/SwiftConfig.cmake
19-
@ONLY)
32+
@ONLY)
33+
set(swift_config_include_buildtree_exports)
34+
35+
# Generate SwiftConfig.cmake for the install tree
36+
set(SWIFT_CONFIG_CODE
37+
"# Compute the installation prefix from this SwiftConfig.cmake location.
38+
get_filename_component(SWIFT_INSTALL_PREFIX \"\${CMAKE_CURRENT_LIST_FILE}\" PATH)")
39+
# Construct the proper number of get_filename_component(... PATH)
40+
# calls to compute the installation prefix.
41+
file(TO_CMAKE_PATH "${SWIFT_INSTALL_PACKAGE_DIR}" SWIFT_INSTALL_PACKAGE_DIR)
42+
string(REGEX REPLACE "/" ";" _count "${SWIFT_INSTALL_PACKAGE_DIR}")
43+
foreach(p ${_count})
44+
set(SWIFT_CONFIG_CODE "${SWIFT_CONFIG_CODE}
45+
get_filename_component(SWIFT_INSTALL_PREFIX \"\${SWIFT_INSTALL_PREFIX}\" PATH)")
46+
endforeach(p)
47+
set(SWIFT_CONFIG_BINARY_DIR "\${SWIFT_INSTALL_PREFIX}")
48+
set(SWIFT_CONFIG_CMAKE_DIR "\${SWIFT_INSTALL_PREFIX}/${SWIFT_INSTALL_PACKAGE_DIR}")
49+
set(SWIFT_CONFIG_EXPORTS "${SWIFT_EXPORTS}")
50+
set(SWIFT_CONFIG_EXPORTS_FILE "\${SWIFT_CMAKE_DIR}/SwiftExports.cmake")
51+
set(SWIFT_CONFIG_INCLUDE_DIRS "\${SWIFT_INSTALL_PREFIX}/include")
52+
set(SWIFT_CONFIG_LIBRARY_DIRS "\${SWIFT_INSTALL_PREFIX}/lib\${LLVM_LIBDIR_SUFFIX}")
53+
configure_file(
54+
SwiftConfig.cmake.in
55+
${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/SwiftConfig.cmake
56+
@ONLY)
57+
58+
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
59+
get_property(swift_has_exports GLOBAL PROPERTY SWIFT_HAS_EXPORTS)
60+
if(swift_has_exports)
61+
install(EXPORT SwiftExports DESTINATION ${SWIFT_INSTALL_PACKAGE_DIR})
62+
endif()
63+
install(FILES
64+
${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/SwiftConfig.cmake
65+
DESTINATION ${SWIFT_INSTALL_PACKAGE_DIR})
66+
endif()

cmake/modules/SwiftConfig.cmake.in

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@
55
set(SWIFT_VERSION @SWIFT_VERSION@)
66
set(SWIFT_MAIN_SRC_DIR @SWIFT_SOURCE_DIR@)
77

8-
set(SWIFT_INCLUDE_DIRS "@SWIFT_INCLUDE_DIRS@")
8+
set(SWIFT_INCLUDE_DIRS "@SWIFT_CONFIG_INCLUDE_DIRS@")
99
set(SWIFT_LIBRARY_DIRS "@SWIFT_CONFIG_LIBRARY_DIRS@")
1010

1111
# These variables are duplicated, but they must match the LLVM variables of the
1212
# same name. The variables ending in "S" could some day become lists, and are
1313
# preserved for convention and compatibility.
14-
set(SWIFT_INCLUDE_DIR "@SWIFT_INCLUDE_DIRS@")
14+
set(SWIFT_INCLUDE_DIR "@SWIFT_CONFIG_INCLUDE_DIRS@")
1515
set(SWIFT_LIBRARY_DIR "@SWIFT_CONFIG_LIBRARY_DIRS@")
1616

17-
set(SWIFT_CMAKE_DIR "@SWIFT_CMAKE_DIR@")
18-
set(SWIFT_BINARY_DIR "@SWIFT_BINARY_DIR@")
17+
set(SWIFT_CMAKE_DIR "@SWIFT_CONFIG_CMAKE_DIR@")
18+
set(SWIFT_BINARY_DIR "@SWIFT_CONFIG_BINARY_DIR@")
1919

2020
set(CMARK_TARGETS_FILE @SWIFT_PATH_TO_CMARK_BUILD@/src/CMarkExports.cmake)
2121
if(NOT TARGET libcmark_static AND EXISTS ${CMARK_TARGETS_FILE})
@@ -24,5 +24,6 @@ endif()
2424

2525
if(NOT TARGET swift)
2626
set(SWIFT_EXPORTED_TARGETS "@SWIFT_CONFIG_EXPORTS@")
27-
include("@SWIFT_EXPORTS_FILE@")
27+
include("@SWIFT_CONFIG_EXPORTS_FILE@")
28+
@swift_config_include_buildtree_exports@
2829
endif()

0 commit comments

Comments
 (0)