mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Merge pull request #32690 from compnerd/grand-unified-module-theory
Unified Swift Module Layout
This commit is contained in:
@@ -137,10 +137,14 @@ static void updateRuntimeLibraryPaths(SearchPathOptions &SearchPathOpts,
|
|||||||
if (SearchPathOpts.SkipRuntimeLibraryImportPaths)
|
if (SearchPathOpts.SkipRuntimeLibraryImportPaths)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!Triple.isOSDarwin())
|
|
||||||
llvm::sys::path::append(LibPath, swift::getMajorArchitectureName(Triple));
|
|
||||||
SearchPathOpts.RuntimeLibraryImportPaths.push_back(std::string(LibPath.str()));
|
SearchPathOpts.RuntimeLibraryImportPaths.push_back(std::string(LibPath.str()));
|
||||||
|
|
||||||
|
// This is compatibility for <=5.3
|
||||||
|
if (!Triple.isOSDarwin()) {
|
||||||
|
llvm::sys::path::append(LibPath, swift::getMajorArchitectureName(Triple));
|
||||||
|
SearchPathOpts.RuntimeLibraryImportPaths.push_back(std::string(LibPath.str()));
|
||||||
|
}
|
||||||
|
|
||||||
if (!SearchPathOpts.SDKPath.empty()) {
|
if (!SearchPathOpts.SDKPath.empty()) {
|
||||||
if (tripleIsMacCatalystEnvironment(Triple)) {
|
if (tripleIsMacCatalystEnvironment(Triple)) {
|
||||||
LibPath = SearchPathOpts.SDKPath;
|
LibPath = SearchPathOpts.SDKPath;
|
||||||
|
|||||||
@@ -586,17 +586,17 @@ SerializedModuleLoaderBase::findModule(ImportPath::Element moduleID,
|
|||||||
case SearchPathKind::RuntimeLibrary: {
|
case SearchPathKind::RuntimeLibrary: {
|
||||||
isFramework = false;
|
isFramework = false;
|
||||||
|
|
||||||
bool checkTargetSpecificModule;
|
// On Apple platforms, we can assume that the runtime libraries use
|
||||||
if (Kind == SearchPathKind::RuntimeLibrary) {
|
// target-specifi module files wihtin a `.swiftmodule` directory.
|
||||||
// Apple platforms always use target-specific files within a
|
// This was not always true on non-Apple platforms, and in order to
|
||||||
// .swiftmodule directory for the stdlib; non-Apple platforms
|
// ease the transition, check both layouts.
|
||||||
// always use single-architecture swiftmodules.
|
bool checkTargetSpecificModule = true;
|
||||||
checkTargetSpecificModule = Ctx.LangOpts.Target.isOSDarwin();
|
if (Kind != SearchPathKind::RuntimeLibrary ||
|
||||||
} else {
|
!Ctx.LangOpts.Target.isOSDarwin()) {
|
||||||
auto modulePath = currPath;
|
auto modulePath = currPath;
|
||||||
llvm::sys::path::append(modulePath, genericModuleFileName);
|
llvm::sys::path::append(modulePath, genericModuleFileName);
|
||||||
|
|
||||||
llvm::ErrorOr<llvm::vfs::Status> statResult = fs.status(modulePath);
|
llvm::ErrorOr<llvm::vfs::Status> statResult = fs.status(modulePath);
|
||||||
|
|
||||||
// Even if stat fails, we can't just return the error; the path
|
// Even if stat fails, we can't just return the error; the path
|
||||||
// we're looking for might not be "Foo.swiftmodule".
|
// we're looking for might not be "Foo.swiftmodule".
|
||||||
checkTargetSpecificModule = statResult && statResult->isDirectory();
|
checkTargetSpecificModule = statResult && statResult->isDirectory();
|
||||||
|
|||||||
@@ -4,11 +4,7 @@ include(SwiftUtils)
|
|||||||
# Compute the library subdirectory to use for the given sdk and
|
# Compute the library subdirectory to use for the given sdk and
|
||||||
# architecture, placing the result in 'result_var_name'.
|
# architecture, placing the result in 'result_var_name'.
|
||||||
function(compute_library_subdir result_var_name sdk arch)
|
function(compute_library_subdir result_var_name sdk arch)
|
||||||
if(sdk IN_LIST SWIFT_APPLE_PLATFORMS OR sdk STREQUAL "MACCATALYST")
|
set("${result_var_name}" "${SWIFT_SDK_${sdk}_LIB_SUBDIR}" PARENT_SCOPE)
|
||||||
set("${result_var_name}" "${SWIFT_SDK_${sdk}_LIB_SUBDIR}" PARENT_SCOPE)
|
|
||||||
else()
|
|
||||||
set("${result_var_name}" "${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${arch}" PARENT_SCOPE)
|
|
||||||
endif()
|
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# Return a swiftc flag (e.g. -O or -Onone) to control optimization level based
|
# Return a swiftc flag (e.g. -O or -Onone) to control optimization level based
|
||||||
@@ -496,17 +492,10 @@ function(_compile_swift_files
|
|||||||
set(module_base_static "${module_dir_static}/${SWIFTFILE_MODULE_NAME}")
|
set(module_base_static "${module_dir_static}/${SWIFTFILE_MODULE_NAME}")
|
||||||
|
|
||||||
set(module_triple ${SWIFT_SDK_${library_subdir_sdk}_ARCH_${SWIFTFILE_ARCHITECTURE}_MODULE})
|
set(module_triple ${SWIFT_SDK_${library_subdir_sdk}_ARCH_${SWIFTFILE_ARCHITECTURE}_MODULE})
|
||||||
if(SWIFTFILE_SDK IN_LIST SWIFT_APPLE_PLATFORMS OR
|
set(specific_module_dir "${module_base}.swiftmodule")
|
||||||
SWIFTFILE_SDK STREQUAL "MACCATALYST")
|
set(module_base "${module_base}.swiftmodule/${module_triple}")
|
||||||
set(specific_module_dir "${module_base}.swiftmodule")
|
set(specific_module_dir_static "${module_base_static}.swiftmodule")
|
||||||
set(module_base "${module_base}.swiftmodule/${module_triple}")
|
set(module_base_static "${module_base_static}.swiftmodule/${module_triple}")
|
||||||
|
|
||||||
set(specific_module_dir_static "${module_base_static}.swiftmodule")
|
|
||||||
set(module_base_static "${module_base_static}.swiftmodule/${module_triple}")
|
|
||||||
else()
|
|
||||||
set(specific_module_dir)
|
|
||||||
set(specific_module_dir_static)
|
|
||||||
endif()
|
|
||||||
set(module_file "${module_base}.swiftmodule")
|
set(module_file "${module_base}.swiftmodule")
|
||||||
set(module_doc_file "${module_base}.swiftdoc")
|
set(module_doc_file "${module_base}.swiftdoc")
|
||||||
|
|
||||||
@@ -544,25 +533,13 @@ function(_compile_swift_files
|
|||||||
set(optional_arg "OPTIONAL")
|
set(optional_arg "OPTIONAL")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(SWIFTFILE_SDK IN_LIST SWIFT_APPLE_PLATFORMS OR
|
swift_install_in_component(DIRECTORY "${specific_module_dir}"
|
||||||
SWIFTFILE_SDK STREQUAL "MACCATALYST")
|
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/${library_subdir}"
|
||||||
swift_install_in_component(DIRECTORY "${specific_module_dir}"
|
COMPONENT "${SWIFTFILE_INSTALL_IN_COMPONENT}")
|
||||||
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/${library_subdir}"
|
if(SWIFTFILE_STATIC)
|
||||||
|
swift_install_in_component(DIRECTORY "${specific_module_dir_static}"
|
||||||
|
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift_static/${library_subdir}"
|
||||||
COMPONENT "${SWIFTFILE_INSTALL_IN_COMPONENT}")
|
COMPONENT "${SWIFTFILE_INSTALL_IN_COMPONENT}")
|
||||||
if(SWIFTFILE_STATIC)
|
|
||||||
swift_install_in_component(DIRECTORY "${specific_module_dir_static}"
|
|
||||||
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift_static/${library_subdir}"
|
|
||||||
COMPONENT "${SWIFTFILE_INSTALL_IN_COMPONENT}")
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
swift_install_in_component(FILES ${module_outputs}
|
|
||||||
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/${library_subdir}"
|
|
||||||
COMPONENT "${SWIFTFILE_INSTALL_IN_COMPONENT}")
|
|
||||||
if(SWIFTFILE_STATIC)
|
|
||||||
swift_install_in_component(FILES ${module_outputs}
|
|
||||||
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift_static/${library_subdir}"
|
|
||||||
COMPONENT "${SWIFTFILE_INSTALL_IN_COMPONENT}")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# macCatalyst zippered module setup
|
# macCatalyst zippered module setup
|
||||||
@@ -618,29 +595,18 @@ function(_compile_swift_files
|
|||||||
list(APPEND module_outputs_static "${interface_file_static}")
|
list(APPEND module_outputs_static "${interface_file_static}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(SWIFTFILE_SDK IN_LIST SWIFT_APPLE_PLATFORMS)
|
swift_install_in_component(DIRECTORY "${specific_module_dir}"
|
||||||
swift_install_in_component(DIRECTORY "${specific_module_dir}"
|
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/${library_subdir}"
|
||||||
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/${library_subdir}"
|
COMPONENT "${SWIFTFILE_INSTALL_IN_COMPONENT}"
|
||||||
|
OPTIONAL
|
||||||
|
PATTERN "Project" EXCLUDE)
|
||||||
|
|
||||||
|
if(SWIFTFILE_STATIC)
|
||||||
|
swift_install_in_component(DIRECTORY "${specific_module_dir_static}"
|
||||||
|
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift_static/${library_subdir}"
|
||||||
COMPONENT "${SWIFTFILE_INSTALL_IN_COMPONENT}"
|
COMPONENT "${SWIFTFILE_INSTALL_IN_COMPONENT}"
|
||||||
OPTIONAL
|
OPTIONAL
|
||||||
PATTERN "Project" EXCLUDE)
|
PATTERN "Project" EXCLUDE)
|
||||||
|
|
||||||
if(SWIFTFILE_STATIC)
|
|
||||||
swift_install_in_component(DIRECTORY "${specific_module_dir_static}"
|
|
||||||
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift_static/${library_subdir}"
|
|
||||||
COMPONENT "${SWIFTFILE_INSTALL_IN_COMPONENT}"
|
|
||||||
OPTIONAL
|
|
||||||
PATTERN "Project" EXCLUDE)
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
swift_install_in_component(FILES ${module_outputs}
|
|
||||||
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/${library_subdir}"
|
|
||||||
COMPONENT "${SWIFTFILE_INSTALL_IN_COMPONENT}")
|
|
||||||
if(SWIFTFILE_STATIC)
|
|
||||||
swift_install_in_component(FILES ${module_outputs}
|
|
||||||
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift_static/${library_subdir}"
|
|
||||||
COMPONENT "${SWIFTFILE_INSTALL_IN_COMPONENT}")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(line_directive_tool "${SWIFT_SOURCE_DIR}/utils/line-directive")
|
set(line_directive_tool "${SWIFT_SOURCE_DIR}/utils/line-directive")
|
||||||
|
|||||||
21
test/lit.cfg
21
test/lit.cfg
@@ -1459,27 +1459,22 @@ config.substitutions.append(('%target-sdk-name', config.target_sdk_name))
|
|||||||
|
|
||||||
# Add 'stdlib_dir' as the path to the stdlib resource directory
|
# Add 'stdlib_dir' as the path to the stdlib resource directory
|
||||||
stdlib_dir = os.path.join(config.swift_lib_dir, "swift")
|
stdlib_dir = os.path.join(config.swift_lib_dir, "swift")
|
||||||
if platform.system() == 'Darwin':
|
if run_os == 'maccatalyst':
|
||||||
if run_os == 'maccatalyst':
|
stdlib_dir = os.path.join(stdlib_dir, run_os)
|
||||||
stdlib_dir = os.path.join(stdlib_dir, run_os)
|
|
||||||
else:
|
|
||||||
stdlib_dir = os.path.join(stdlib_dir, config.target_sdk_name)
|
|
||||||
else:
|
else:
|
||||||
stdlib_dir = os.path.join(stdlib_dir, config.target_sdk_name, target_arch)
|
stdlib_dir = os.path.join(stdlib_dir, config.target_sdk_name)
|
||||||
config.substitutions.append(('%stdlib_dir', stdlib_dir))
|
config.substitutions.append(('%stdlib_dir', stdlib_dir))
|
||||||
|
|
||||||
# Add 'stdlib_module' as the path to the stdlib .swiftmodule file
|
# Add 'stdlib_module' as the path to the stdlib .swiftmodule file
|
||||||
stdlib_module = os.path.join(stdlib_dir, "Swift.swiftmodule")
|
stdlib_module = os.path.join(stdlib_dir, "Swift.swiftmodule",
|
||||||
if platform.system() == 'Darwin':
|
target_specific_module_triple + ".swiftmodule")
|
||||||
stdlib_module = os.path.join(stdlib_module, target_specific_module_triple + ".swiftmodule")
|
|
||||||
config.substitutions.append(('%stdlib_module', stdlib_module))
|
config.substitutions.append(('%stdlib_module', stdlib_module))
|
||||||
config.substitutions.append(('%/stdlib_module',
|
config.substitutions.append(('%/stdlib_module',
|
||||||
'/'.join(os.path.normpath(stdlib_module).split(os.sep))))
|
'/'.join(os.path.normpath(stdlib_module).split(os.sep))))
|
||||||
|
|
||||||
# Add 'ononesupport_module' as the path to the SwiftOnoneSupport .swiftmodule file
|
# Add 'ononesupport_module' as the path to the SwiftOnoneSupport .swiftmodule file
|
||||||
ononesupport_module = os.path.join(stdlib_dir, "SwiftOnoneSupport.swiftmodule")
|
ononesupport_module = os.path.join(stdlib_dir, "SwiftOnoneSupport.swiftmodule",
|
||||||
if platform.system() == 'Darwin':
|
target_specific_module_triple + ".swiftmodule")
|
||||||
ononesupport_module = os.path.join(ononesupport_module, target_specific_module_triple + ".swiftmodule")
|
|
||||||
config.substitutions.append(('%ononesupport_module', ononesupport_module))
|
config.substitutions.append(('%ononesupport_module', ononesupport_module))
|
||||||
config.substitutions.append(('%/ononesupport_module',
|
config.substitutions.append(('%/ononesupport_module',
|
||||||
'/'.join(os.path.normpath(ononesupport_module).split(os.sep))))
|
'/'.join(os.path.normpath(ononesupport_module).split(os.sep))))
|
||||||
@@ -1688,8 +1683,6 @@ if swift_execution_tests_extra_flags:
|
|||||||
rth_flags = swift_execution_tests_extra_flags + ' -wmo'
|
rth_flags = swift_execution_tests_extra_flags + ' -wmo'
|
||||||
|
|
||||||
platform_module_dir = make_path(test_resource_dir, config.target_sdk_name)
|
platform_module_dir = make_path(test_resource_dir, config.target_sdk_name)
|
||||||
if run_vendor != 'apple':
|
|
||||||
platform_module_dir = make_path(platform_module_dir, target_arch)
|
|
||||||
|
|
||||||
platform_dylib_dir = platform_module_dir
|
platform_dylib_dir = platform_module_dir
|
||||||
if run_os == 'maccatalyst' and config.darwin_maccatalyst_build_flavor == "ios-like":
|
if run_os == 'maccatalyst' and config.darwin_maccatalyst_build_flavor == "ios-like":
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
// Now test a dependency on a library in the compiler's resource directory.
|
// Now test a dependency on a library in the compiler's resource directory.
|
||||||
// RUN: %empty-directory(%t/rsrc/%target-sdk-name)
|
// RUN: %empty-directory(%t/rsrc/%target-sdk-name)
|
||||||
// RUN: ln -s %t/libabc.so %t/rsrc/%target-sdk-name/
|
// RUN: ln -s %t/libabc.so %t/rsrc/%target-sdk-name/
|
||||||
// RUN: ln -s %platform-module-dir/../* %t/rsrc/%target-sdk-name/
|
// RUN: ln -s %platform-module-dir/* %t/rsrc/%target-sdk-name/
|
||||||
// RUN: ln -s %platform-module-dir/../../shims %t/rsrc/
|
// RUN: ln -s %platform-module-dir/../shims %t/rsrc/
|
||||||
// RUN: %empty-directory(%t/other)
|
// RUN: %empty-directory(%t/other)
|
||||||
// RUN: ln -s %t/libfoo.so %t/other
|
// RUN: ln -s %t/libfoo.so %t/other
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user