Skip to content

Commit 764b8d3

Browse files
committed
Have the frontend and new swift-driver look in an external -sdk for non-Darwin platform runtime libraries and modules too
as done originally in #25990 with the legacy C++ Driver, but since lost in the new swift-driver. only difference is this checks if resource directory exists in `-sdk` and falls back to default if not
1 parent c447f58 commit 764b8d3

24 files changed

+68
-64
lines changed

include/swift/AST/DiagnosticsFrontend.def

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@
2424
WARNING(warning_no_such_sdk,none,
2525
"no such SDK: '%0'", (StringRef))
2626

27+
WARNING(warning_no_resource_dir_in_sdk, none,
28+
" You passed in an external -sdk without a Swift runtime.\n"
29+
" Either specify a directory containing the runtime libraries with\n"
30+
" the -resource-dir flag, or use -sysroot instead to point at a C/C++\n"
31+
" sysroot alone. Falling back to this path for the Swift runtime modules\n"
32+
" and libraries:\n"
33+
" %0", (StringRef))
2734
ERROR(error_no_frontend_args, none,
2835
"no arguments provided to '-frontend'", ())
2936

lib/ClangImporter/ClangImporter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -770,8 +770,8 @@ void importer::getNormalInvocationArguments(
770770
invocationArgStrs.push_back("-fapinotes-swift-version=" +
771771
languageVersion.asAPINotesVersionString());
772772

773-
// Prefer `-sdk` paths.
774-
if (!searchPathOpts.getSDKPath().empty()) {
773+
// Prefer `-sdk` paths for Darwin.
774+
if (triple.isOSDarwin() && !searchPathOpts.getSDKPath().empty()) {
775775
llvm::SmallString<261> path{searchPathOpts.getSDKPath()};
776776
llvm::sys::path::append(path, "usr", "lib", "swift", "apinotes");
777777

lib/Frontend/CompilerInvocation.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2280,6 +2280,7 @@ static bool validateSwiftModuleFileArgumentAndAdd(const std::string &swiftModule
22802280

22812281
static bool ParseSearchPathArgs(SearchPathOptions &Opts, ArgList &Args,
22822282
DiagnosticEngine &Diags,
2283+
const llvm::Triple &Triple,
22832284
const CASOptions &CASOpts,
22842285
const FrontendOptions &FrontendOpts,
22852286
StringRef workingDirectory) {
@@ -2414,6 +2415,18 @@ static bool ParseSearchPathArgs(SearchPathOptions &Opts, ArgList &Args,
24142415

24152416
if (const Arg *A = Args.getLastArg(OPT_resource_dir))
24162417
Opts.RuntimeResourcePath = A->getValue();
2418+
else if (!Triple.isOSDarwin() && Args.hasArg(OPT_sdk)) {
2419+
llvm::SmallString<128> SDKResourcePath(Opts.getSDKPath());
2420+
llvm::sys::path::append(
2421+
SDKResourcePath, "usr", "lib",
2422+
FrontendOpts.UseSharedResourceFolder ? "swift" : "swift_static");
2423+
// Check for eg <sdkRoot>/usr/lib/swift/
2424+
if (llvm::sys::fs::exists(SDKResourcePath))
2425+
Opts.RuntimeResourcePath = SDKResourcePath.str();
2426+
else
2427+
Diags.diagnose(SourceLoc(), diag::warning_no_resource_dir_in_sdk,
2428+
Opts.RuntimeResourcePath);
2429+
}
24172430

24182431
Opts.SkipAllImplicitImportPaths |= Args.hasArg(OPT_nostdimport);
24192432
Opts.SkipSDKImportPaths |= Args.hasArg(OPT_nostdlibimport);
@@ -4073,7 +4086,7 @@ bool CompilerInvocation::parseArgs(
40734086

40744087
ParseSymbolGraphArgs(SymbolGraphOpts, ParsedArgs, Diags, LangOpts);
40754088

4076-
if (ParseSearchPathArgs(SearchPathOpts, ParsedArgs, Diags,
4089+
if (ParseSearchPathArgs(SearchPathOpts, ParsedArgs, Diags, LangOpts.Target,
40774090
CASOpts, FrontendOpts, workingDirectory)) {
40784091
return true;
40794092
}

test/ClangImporter/sdk-apinotes.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -typecheck %s -verify
1+
// RUN: %empty-directory(%t/sdk/usr/lib/swift/apinotes)
2+
// RUN: %empty-directory(%t/sdk/usr/lib/swift/%target-sdk-name)
3+
// RUN: cp -r %clang-importer-sdk-path/usr/include %t/sdk/usr
4+
// RUN: cp -r %test-resource-dir/shims %t/sdk/usr/lib/swift
5+
// RUN: cp %S/Inputs/cfuncs.apinotes %t/sdk/usr/lib/swift/apinotes
6+
// RUN: cp -r %platform-module-dir/Swift.swiftmodule %t/sdk/usr/lib/swift/%target-sdk-name/
7+
// RUN: %target-swift-frontend(mock-sdk: -sdk %t/sdk) -typecheck %s -verify -disable-implicit-concurrency-module-import -disable-implicit-string-processing-module-import
28

39
import cfuncs
410

test/Serialization/module_defining_interface.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
// RUN: %empty-directory(%t)
22
// RUN: %empty-directory(%t/inputs)
33
// RUN: %empty-directory(%t/test-sdk)
4-
// RUN: %empty-directory(%t/test-sdk/usr/lib/swift)
5-
// RUN: cp -r %platform-module-dir/Swift.swiftmodule %t/test-sdk/usr/lib/swift/Swift.swiftmodule
4+
// RUN: %empty-directory(%t/test-sdk/usr/lib/swift/%target-sdk-name)
5+
// RUN: cp -r %test-resource-dir/shims %t/test-sdk/usr/lib/swift
6+
// RUN: cp -r %platform-module-dir/Swift{,OnoneSupport}.swiftmodule %t/test-sdk/usr/lib/swift/%target-sdk-name/
67

78
// RUN: %empty-directory(%t/test-sdk/usr/lib/Foo.swiftmodule)
89
// RUN: split-file %s %t

test/Serialization/module_defining_interface_client.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
// RUN: %empty-directory(%t)
22
// RUN: %empty-directory(%t/inputs)
33
// RUN: %empty-directory(%t/test-sdk)
4-
// RUN: %empty-directory(%t/test-sdk/usr/lib/swift)
4+
// RUN: %empty-directory(%t/test-sdk/usr/lib/swift/%target-sdk-name)
55
// RUN: %empty-directory(%t/test-sdk/usr/lib/Foo.swiftmodule)
66
// RUN: %empty-directory(%t/test-sdk/usr/lib/Bar.swiftmodule)
77
// RUN: %empty-directory(%t/test-sdk/usr/lib/_Foo_Bar.swiftmodule)
88
// RUN: %empty-directory(%t/test-sdk/usr/lib/Foo.swiftcrossimport)
9-
// RUN: cp -r %platform-module-dir/Swift.swiftmodule %t/test-sdk/usr/lib/swift/Swift.swiftmodule
9+
// RUN: cp -r %test-resource-dir/shims %t/test-sdk/usr/lib/swift
10+
// RUN: cp -r %platform-module-dir/Swift{,OnoneSupport}.swiftmodule %t/test-sdk/usr/lib/swift/%target-sdk-name/
1011

1112
// RUN: split-file %s %t
1213

test/embedded/builtin-float.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// RUN: mkdir -p %t/include
33
// RUN: %{python} %utils/split_file.py -o %t %s
44

5-
// RUN: %target-swift-frontend -target armv7em-none-none-eabi -emit-ir %t/Main.swift -enable-experimental-feature Embedded -module-cache-path %t/ModuleCache -Xcc -I%t/include
5+
// RUN: %swift_frontend_plain -target armv7em-none-none-eabi -emit-ir %t/Main.swift -enable-experimental-feature Embedded -module-cache-path %t/ModuleCache -Xcc -I%t/include
66

77
// UNSUPPORTED: CPU=wasm32
88
// REQUIRES: swift_in_compiler

test/embedded/float-abi-hard.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// RUN: %empty-directory(%t)
22
// RUN: %{python} %utils/split_file.py -o %t %s
33

4-
// RUN: %target-swift-emit-ir %t/Main.swift -import-bridging-header %t/BridgingHeader.h -parse-as-library -enable-experimental-feature Embedded -wmo \
4+
// RUN: %swift_frontend_plain -emit-ir %t/Main.swift -import-bridging-header %t/BridgingHeader.h -parse-as-library -enable-experimental-feature Embedded -wmo \
55
// RUN: -target armv7em-none-none-eabi -Xcc -mthumb -Xcc -mcpu=cortex-m7 -Xcc -mfloat-abi=hard -Xcc -mfpu=fpv5-sp-d16 -Xcc -D__FPU_USED=1 -Xcc -falign-functions=16
66

77
// UNSUPPORTED: CPU=wasm32

test/embedded/fragile-reference.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// RUN: %target-swift-frontend -target armv7-apple-none-macho -module-name main -parse-as-library -emit-ir %s -enable-experimental-feature Embedded | %FileCheck %s
2-
// RUN: %target-swift-frontend -target arm64-apple-none-macho -module-name main -parse-as-library -emit-ir %s -enable-experimental-feature Embedded | %FileCheck %s
1+
// RUN: %swift_frontend_plain -target armv7-apple-none-macho -module-name main -parse-as-library -emit-ir %s -enable-experimental-feature Embedded | %FileCheck %s
2+
// RUN: %swift_frontend_plain -target arm64-apple-none-macho -module-name main -parse-as-library -emit-ir %s -enable-experimental-feature Embedded | %FileCheck %s
33

44
// UNSUPPORTED: CPU=wasm32
55
// REQUIRES: swift_in_compiler

0 commit comments

Comments
 (0)