Skip to content

Commit d794762

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 3db1a66 commit d794762

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
@@ -768,8 +768,8 @@ void importer::getNormalInvocationArguments(
768768
invocationArgStrs.push_back("-fapinotes-swift-version=" +
769769
languageVersion.asAPINotesVersionString());
770770

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

lib/Frontend/CompilerInvocation.cpp

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

22832283
static bool ParseSearchPathArgs(SearchPathOptions &Opts, ArgList &Args,
22842284
DiagnosticEngine &Diags,
2285+
const llvm::Triple &Triple,
22852286
const CASOptions &CASOpts,
22862287
const FrontendOptions &FrontendOpts,
22872288
StringRef workingDirectory) {
@@ -2416,6 +2417,18 @@ static bool ParseSearchPathArgs(SearchPathOptions &Opts, ArgList &Args,
24162417

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

24202433
Opts.SkipAllImplicitImportPaths |= Args.hasArg(OPT_nostdimport);
24212434
Opts.SkipSDKImportPaths |= Args.hasArg(OPT_nostdlibimport);
@@ -4075,7 +4088,7 @@ bool CompilerInvocation::parseArgs(
40754088

40764089
ParseSymbolGraphArgs(SymbolGraphOpts, ParsedArgs, Diags, LangOpts);
40774090

4078-
if (ParseSearchPathArgs(SearchPathOpts, ParsedArgs, Diags,
4091+
if (ParseSearchPathArgs(SearchPathOpts, ParsedArgs, Diags, LangOpts.Target,
40794092
CASOpts, FrontendOpts, workingDirectory)) {
40804093
return true;
40814094
}

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)