Merge pull request #32690 from compnerd/grand-unified-module-theory

Unified Swift Module Layout
This commit is contained in:
Saleem Abdulrasool
2020-09-15 17:23:15 -07:00
committed by GitHub
5 changed files with 43 additions and 80 deletions

View File

@@ -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;

View File

@@ -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();

View File

@@ -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")

View File

@@ -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":

View File

@@ -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