-
Notifications
You must be signed in to change notification settings - Fork 104
Configure CMake build to install content into toolchain #581
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
295838e
008ea62
a5ffe52
5eee2cf
2753f4d
91ffb07
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -97,16 +97,8 @@ target_link_libraries(Testing PRIVATE | |
add_dependencies(Testing | ||
TestingMacros) | ||
target_compile_options(Testing PRIVATE | ||
-enable-library-evolution) | ||
-enable-library-evolution | ||
-emit-module-interface -emit-module-interface-path $<TARGET_PROPERTY:Testing,Swift_MODULE_DIRECTORY>/Testing.swiftinterface) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We might want to stop emitting (Should we stop There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think we need |
||
|
||
if(SwiftTesting_BuildMacrosAsExecutables) | ||
if(CMAKE_HOST_WIN32) | ||
set(_TestingMacros_ExecutableSuffix ".exe") | ||
endif() | ||
|
||
target_compile_options(Testing PUBLIC | ||
"SHELL:$<$<COMPILE_LANGUAGE:Swift>:-load-plugin-executable ${BINARY_DIR}/TestingMacros${_TestingMacros_ExecutableSuffix}#TestingMacros>") | ||
else() | ||
target_compile_options(Testing PUBLIC | ||
"SHELL:$<$<COMPILE_LANGUAGE:Swift>:-plugin-path ${BINARY_DIR}>") | ||
endif() | ||
include(SwiftModuleInstallation) | ||
_swift_testing_install_target(Testing) |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -58,6 +58,22 @@ if(SwiftTesting_BuildMacrosAsExecutables) | |
target_compile_definitions(TestingMacros PRIVATE SWT_NO_LIBRARY_MACRO_PLUGINS) | ||
else() | ||
add_library(TestingMacros SHARED) | ||
|
||
target_link_options(TestingMacros PRIVATE "-no-toolchain-stdlib-rpath") | ||
# Not setting RPATH means it requires all the dependencies are already loaded | ||
# in the process, because 'plugin' directory wouldn't contain any dependencies. | ||
set_property(TARGET TestingMacros PROPERTY INSTALL_RPATH) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You should use There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't know how to unset a property using There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is it critical to change it? Or just an efficiency thing? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Efficiency and stylistic thing I think. I believe this also work, set_target_properties(TestingMacros PROPERTIES
INSTALL_RPATH ""
BUILD_WITH_INSTALL_RPATH YES) but I just wanted to clear the property. tbh, I'm not sure which is more correct. Explicit empty list ( There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I believe you can do both with set_property(TARGET TestingMacros
PROPERTY INSTALL_RPATH
PROPERTY BUILD_WITH_INSTALL_RPATH YES) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmm, are you sure? I don't think this handles multiple |
||
set_property(TARGET TestingMacros PROPERTY BUILD_WITH_INSTALL_RPATH YES) | ||
|
||
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") | ||
set(plugin_destination_dir "lib/swift/host/plugins/testing") | ||
else() | ||
set(plugin_destination_dir "lib/swift/host/plugins") | ||
endif() | ||
|
||
install(TARGETS TestingMacros | ||
LIBRARY DESTINATION "${plugin_destination_dir}" | ||
RUNTIME DESTINATION bin) | ||
endif() | ||
|
||
target_sources(TestingMacros PRIVATE | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
# This source file is part of the Swift.org open source project | ||
# | ||
# Copyright (c) 2024 Apple Inc. and the Swift project authors | ||
# Licensed under Apache License v2.0 with Runtime Library Exception | ||
# | ||
# See http://swift.org/LICENSE.txt for license information | ||
# See http://swift.org/CONTRIBUTORS.txt for Swift project authors | ||
|
||
# Returns the os name in a variable | ||
# | ||
# Usage: | ||
# get_swift_host_os(result_var_name) | ||
# | ||
# | ||
# Sets ${result_var_name} with the converted OS name derived from | ||
# CMAKE_SYSTEM_NAME. | ||
function(get_swift_host_os result_var_name) | ||
set(${result_var_name} ${SWIFT_SYSTEM_NAME} PARENT_SCOPE) | ||
endfunction() | ||
|
||
function(_swift_testing_install_target module) | ||
get_swift_host_os(swift_os) | ||
get_target_property(type ${module} TYPE) | ||
|
||
if(type STREQUAL STATIC_LIBRARY) | ||
set(swift swift_static) | ||
else() | ||
set(swift swift) | ||
endif() | ||
|
||
target_compile_options(Testing PRIVATE "-no-toolchain-stdlib-rpath") | ||
|
||
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") | ||
set(lib_destination_dir "lib/${swift}/${swift_os}/testing") | ||
set_property(TARGET ${module} PROPERTY | ||
INSTALL_RPATH "@loader_path/..") | ||
else() | ||
set(lib_destination_dir "lib/${swift}/${swift_os}") | ||
set_property(TARGET ${module} PROPERTY | ||
INSTALL_RPATH "$ORIGIN") | ||
endif() | ||
|
||
install(TARGETS ${module} | ||
ARCHIVE DESTINATION "${lib_destination_dir}" | ||
LIBRARY DESTINATION "${lib_destination_dir}" | ||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) | ||
if(type STREQUAL EXECUTABLE) | ||
return() | ||
endif() | ||
|
||
get_target_property(module_name ${module} Swift_MODULE_NAME) | ||
if(NOT module_name) | ||
set(module_name ${module}) | ||
endif() | ||
|
||
if(NOT SwiftTesting_MODULE_TRIPLE) | ||
set(module_triple_command "${CMAKE_Swift_COMPILER}" -print-target-info) | ||
if(CMAKE_Swift_COMPILER_TARGET) | ||
list(APPEND module_triple_command -target ${CMAKE_Swift_COMPILER_TARGET}) | ||
endif() | ||
execute_process(COMMAND ${module_triple_command} OUTPUT_VARIABLE target_info_json) | ||
string(JSON module_triple GET "${target_info_json}" "target" "moduleTriple") | ||
set(SwiftTesting_MODULE_TRIPLE "${module_triple}" CACHE STRING "swift module triple used for installed swiftmodule and swiftinterface files") | ||
mark_as_advanced(SwiftTesting_MODULE_TRIPLE) | ||
endif() | ||
|
||
set(module_dir "${lib_destination_dir}/${module_name}.swiftmodule") | ||
install(FILES $<TARGET_PROPERTY:${module},Swift_MODULE_DIRECTORY>/${module_name}.swiftdoc | ||
DESTINATION "${module_dir}" | ||
RENAME ${SwiftTesting_MODULE_TRIPLE}.swiftdoc) | ||
install(FILES $<TARGET_PROPERTY:${module},Swift_MODULE_DIRECTORY>/${module_name}.swiftmodule | ||
DESTINATION "${module_dir}" | ||
RENAME ${SwiftTesting_MODULE_TRIPLE}.swiftmodule) | ||
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") | ||
# Only Darwin has stable ABI. | ||
install(FILES $<TARGET_PROPERTY:${module},Swift_MODULE_DIRECTORY>/${module_name}.swiftinterface | ||
DESTINATION "${module_dir}" | ||
RENAME ${SwiftTesting_MODULE_TRIPLE}.swiftinterface) | ||
endif() | ||
endfunction() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What flags are you hoping to pull here?
This seems risky given that these flags might be for an entirely different machine than the one the macros will build for/run on.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is actually a leftover from when I was trying around. Let me remove this as a followup.