mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[Macros] Add default plugin paths for Darwin SDKs and platforms.
Corresponding to https://github.com/apple/swift-driver/pull/1377, this adds some default plugin paths for Darwin SDKs and platforms. Fixes rdar://110819604.
This commit is contained in:
@@ -143,6 +143,11 @@ protected:
|
|||||||
const llvm::opt::ArgList &inputArgs,
|
const llvm::opt::ArgList &inputArgs,
|
||||||
llvm::opt::ArgStringList &arguments) const;
|
llvm::opt::ArgStringList &arguments) const;
|
||||||
|
|
||||||
|
virtual void addPlatformSpecificPluginFrontendArgs(
|
||||||
|
const OutputInfo &OI,
|
||||||
|
const CommandOutput &output,
|
||||||
|
const llvm::opt::ArgList &inputArgs,
|
||||||
|
llvm::opt::ArgStringList &arguments) const;
|
||||||
virtual InvocationInfo constructInvocation(const CompileJobAction &job,
|
virtual InvocationInfo constructInvocation(const CompileJobAction &job,
|
||||||
const JobContext &context) const;
|
const JobContext &context) const;
|
||||||
virtual InvocationInfo constructInvocation(const InterpretJobAction &job,
|
virtual InvocationInfo constructInvocation(const InterpretJobAction &job,
|
||||||
|
|||||||
@@ -620,6 +620,51 @@ void toolchains::Darwin::addCommonFrontendArgs(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Add the frontend arguments needed to find external plugins in standard
|
||||||
|
/// locations based on the base path.
|
||||||
|
static void addExternalPluginFrontendArgs(
|
||||||
|
StringRef basePath, const llvm::opt::ArgList &inputArgs,
|
||||||
|
llvm::opt::ArgStringList &arguments) {
|
||||||
|
// Plugin server: $BASE/usr/bin/swift-plugin-server
|
||||||
|
SmallString<128> pluginServer;
|
||||||
|
llvm::sys::path::append(
|
||||||
|
pluginServer, basePath, "usr", "bin", "swift-plugin-server");
|
||||||
|
|
||||||
|
SmallString<128> pluginDir;
|
||||||
|
llvm::sys::path::append(pluginDir, basePath, "usr", "lib");
|
||||||
|
llvm::sys::path::append(pluginDir, "swift", "host", "plugins");
|
||||||
|
arguments.push_back("-external-plugin-path");
|
||||||
|
arguments.push_back(inputArgs.MakeArgString(pluginDir + "#" + pluginServer));
|
||||||
|
|
||||||
|
pluginDir.clear();
|
||||||
|
llvm::sys::path::append(pluginDir, basePath, "usr", "local", "lib");
|
||||||
|
llvm::sys::path::append(pluginDir, "swift", "host", "plugins");
|
||||||
|
arguments.push_back("-external-plugin-path");
|
||||||
|
arguments.push_back(inputArgs.MakeArgString(pluginDir + "#" + pluginServer));
|
||||||
|
}
|
||||||
|
|
||||||
|
void toolchains::Darwin::addPlatformSpecificPluginFrontendArgs(
|
||||||
|
const OutputInfo &OI,
|
||||||
|
const CommandOutput &output,
|
||||||
|
const llvm::opt::ArgList &inputArgs,
|
||||||
|
llvm::opt::ArgStringList &arguments) const {
|
||||||
|
// Add SDK-relative directories for plugins.
|
||||||
|
if (!OI.SDKPath.empty()) {
|
||||||
|
addExternalPluginFrontendArgs(OI.SDKPath, inputArgs, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add platform-relative directories for plugins.
|
||||||
|
if (!OI.SDKPath.empty()) {
|
||||||
|
SmallString<128> platformPath;
|
||||||
|
llvm::sys::path::append(platformPath, OI.SDKPath);
|
||||||
|
llvm::sys::path::remove_filename(platformPath); // specific SDK
|
||||||
|
llvm::sys::path::remove_filename(platformPath); // SDKs
|
||||||
|
llvm::sys::path::remove_filename(platformPath); // Developer
|
||||||
|
llvm::sys::path::append(platformPath, "Developer");
|
||||||
|
addExternalPluginFrontendArgs(platformPath, inputArgs, arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ToolChain::InvocationInfo
|
ToolChain::InvocationInfo
|
||||||
toolchains::Darwin::constructInvocation(const DynamicLinkJobAction &job,
|
toolchains::Darwin::constructInvocation(const DynamicLinkJobAction &job,
|
||||||
const JobContext &context) const {
|
const JobContext &context) const {
|
||||||
|
|||||||
@@ -375,6 +375,9 @@ void ToolChain::addCommonFrontendArgs(const OutputInfo &OI,
|
|||||||
// Specify default plugin search path options after explicitly specified
|
// Specify default plugin search path options after explicitly specified
|
||||||
// options.
|
// options.
|
||||||
inputArgs.AddAllArgs(arguments, options::OPT_plugin_search_Group);
|
inputArgs.AddAllArgs(arguments, options::OPT_plugin_search_Group);
|
||||||
|
addPlatformSpecificPluginFrontendArgs(OI, output, inputArgs, arguments);
|
||||||
|
|
||||||
|
// Toolchain-relative plugin paths
|
||||||
{
|
{
|
||||||
SmallString<64> pluginPath;
|
SmallString<64> pluginPath;
|
||||||
auto programPath = getDriver().getSwiftProgramPath();
|
auto programPath = getDriver().getSwiftProgramPath();
|
||||||
@@ -403,6 +406,14 @@ void ToolChain::addCommonFrontendArgs(const OutputInfo &OI,
|
|||||||
inputArgs.AddAllArgs(arguments, options::OPT_Xcc);
|
inputArgs.AddAllArgs(arguments, options::OPT_Xcc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ToolChain::addPlatformSpecificPluginFrontendArgs(
|
||||||
|
const OutputInfo &OI,
|
||||||
|
const CommandOutput &output,
|
||||||
|
const llvm::opt::ArgList &inputArgs,
|
||||||
|
llvm::opt::ArgStringList &arguments) const {
|
||||||
|
// Overridden where necessary.
|
||||||
|
}
|
||||||
|
|
||||||
static void addRuntimeLibraryFlags(const OutputInfo &OI,
|
static void addRuntimeLibraryFlags(const OutputInfo &OI,
|
||||||
ArgStringList &Arguments) {
|
ArgStringList &Arguments) {
|
||||||
if (!OI.RuntimeVariant)
|
if (!OI.RuntimeVariant)
|
||||||
|
|||||||
@@ -53,6 +53,12 @@ protected:
|
|||||||
const llvm::opt::ArgList &inputArgs,
|
const llvm::opt::ArgList &inputArgs,
|
||||||
llvm::opt::ArgStringList &arguments) const override;
|
llvm::opt::ArgStringList &arguments) const override;
|
||||||
|
|
||||||
|
void addPlatformSpecificPluginFrontendArgs(
|
||||||
|
const OutputInfo &OI,
|
||||||
|
const CommandOutput &output,
|
||||||
|
const llvm::opt::ArgList &inputArgs,
|
||||||
|
llvm::opt::ArgStringList &arguments) const override;
|
||||||
|
|
||||||
InvocationInfo constructInvocation(const InterpretJobAction &job,
|
InvocationInfo constructInvocation(const InterpretJobAction &job,
|
||||||
const JobContext &context) const override;
|
const JobContext &context) const override;
|
||||||
InvocationInfo constructInvocation(const DynamicLinkJobAction &job,
|
InvocationInfo constructInvocation(const DynamicLinkJobAction &job,
|
||||||
|
|||||||
24
test/Driver/compiler_plugin_path_macosx.swift
Normal file
24
test/Driver/compiler_plugin_path_macosx.swift
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
// RUN: %swiftc_driver -driver-print-jobs -target x86_64-apple-macosx10.9 %s 2>^1 | %FileCheck %s
|
||||||
|
// REQUIRES: OS=macosx
|
||||||
|
|
||||||
|
// CHECK: -external-plugin-path
|
||||||
|
// CHECK-SAME: .sdk/usr/lib/swift/host/plugins#
|
||||||
|
// CHECK-SAME: .sdk/usr/bin/swift-plugin-server
|
||||||
|
|
||||||
|
// CHECK-SAME: -external-plugin-path
|
||||||
|
// CHECK-SAME: .sdk/usr/local/lib/swift/host/plugins#
|
||||||
|
// CHECK-SAME: .sdk/usr/bin/swift-plugin-server
|
||||||
|
|
||||||
|
// CHECK-SAME: -external-plugin-path
|
||||||
|
// CHECK-SAME: MacOSX.platform/Developer/usr/lib/swift/host/plugins#
|
||||||
|
// CHECK-SAME: MacOSX.platform/Developer/usr/bin/swift-plugin-server
|
||||||
|
|
||||||
|
// CHECK-SAME: -external-plugin-path
|
||||||
|
// CHECK-SAME: MacOSX.platform/Developer/usr/local/lib/swift/host/plugins#
|
||||||
|
// CHECK-SAME: MacOSX.platform/Developer/usr/bin/swift-plugin-server
|
||||||
|
|
||||||
|
// CHECK-SAME: -plugin-path
|
||||||
|
// CHECK-SAME: {{(/|\\\\)}}lib{{(/|\\\\)}}swift{{(/|\\\\)}}host{{(/|\\\\)}}plugins
|
||||||
|
|
||||||
|
// CHECK-SAME: -plugin-path
|
||||||
|
// CHECK-SAME: {{(/|\\\\)}}local{{(/|\\\\)}}lib{{(/|\\\\)}}swift{{(/|\\\\)}}host{{(/|\\\\)}}plugins
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
// COMPLEX: bin{{/|\\\\}}swift
|
// COMPLEX: bin{{/|\\\\}}swift
|
||||||
// COMPLEX: -c
|
// COMPLEX: -c
|
||||||
// COMPLEX: Driver{{/|\\\\}}driver-compile.swift
|
// COMPLEX: Driver{{/|\\\\}}driver-compile.swift
|
||||||
// COMPLEX-DAG: -sdk {{.*}}/Inputs/clang-importer-sdk
|
// COMPLEX-DAG: -sdk
|
||||||
// COMPLEX-DAG: -foo -bar
|
// COMPLEX-DAG: -foo -bar
|
||||||
// COMPLEX-DAG: -Xllvm -baz
|
// COMPLEX-DAG: -Xllvm -baz
|
||||||
// COMPLEX-DAG: -Xcc -garply
|
// COMPLEX-DAG: -Xcc -garply
|
||||||
|
|||||||
@@ -36,15 +36,16 @@
|
|||||||
// SIMPLE: -o main.swiftmodule
|
// SIMPLE: -o main.swiftmodule
|
||||||
|
|
||||||
|
|
||||||
// COMPLEX: {{bin(/|\\\\)swift(-frontend|c)?(\.exe)?"?}} -frontend
|
// COMPLEX: -frontend
|
||||||
// COMPLEX: -emit-module
|
// COMPLEX: -emit-module
|
||||||
// COMPLEX-DAG: -emit-module-doc-path {{[^ ]*[/\\]}}merge-module-{{[^ ]*}}.swiftdoc
|
// COMPLEX-DAG: -emit-module-doc-path {{[^ ]*[/\\]}}merge-module-{{[^ ]*}}.swiftdoc
|
||||||
// COMPLEX-DAG: -sdk {{.*}}/Inputs/clang-importer-sdk
|
// COMPLEX-DAG: -sdk
|
||||||
|
// COMPLEX-DAG /Inputs/clang-importer-sdk
|
||||||
// COMPLEX-DAG: -foo -bar
|
// COMPLEX-DAG: -foo -bar
|
||||||
// COMPLEX-DAG: -F /path/to/frameworks -F /path/to/more/frameworks
|
// COMPLEX-DAG: -F /path/to/frameworks -F /path/to/more/frameworks
|
||||||
// COMPLEX-DAG: -I /path/to/headers -I path/to/more/headers
|
// COMPLEX-DAG: -I /path/to/headers -I path/to/more/headers
|
||||||
// COMPLEX-DAG: -module-cache-path /tmp/modules
|
// COMPLEX-DAG: -module-cache-path /tmp/modules
|
||||||
// COMPLEX: {{bin(/|\\\\)swift(-frontend|c)?(\.exe)?"?}} -frontend
|
// COMPLEX-DAG: -frontend
|
||||||
// COMPLEX: -emit-module
|
// COMPLEX: -emit-module
|
||||||
// COMPLEX-DAG: -F /path/to/frameworks -F /path/to/more/frameworks
|
// COMPLEX-DAG: -F /path/to/frameworks -F /path/to/more/frameworks
|
||||||
// COMPLEX-DAG: -I /path/to/headers -I path/to/more/headers
|
// COMPLEX-DAG: -I /path/to/headers -I path/to/more/headers
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
// OSX: bin{{/|\\\\}}swift
|
// OSX: bin{{/|\\\\}}swift
|
||||||
// OSX: Driver{{/|\\\\}}sdk.swift
|
// OSX: Driver{{/|\\\\}}sdk.swift
|
||||||
// OSX: -sdk {{.*}}/Inputs/clang-importer-sdk
|
// OSX: -sdk {{.*}}/Inputs/clang-importer-sdk
|
||||||
// OSX-NEXT: bin{{/|\\\\}}swift
|
// OSX: bin{{/|\\\\}}swift
|
||||||
// OSX: -sdk {{.*}}/Inputs/clang-importer-sdk
|
// OSX: -sdk {{.*}}/Inputs/clang-importer-sdk
|
||||||
// OSX: {{.*}}.o{{[ "]}}
|
// OSX: {{.*}}.o{{[ "]}}
|
||||||
// OSX: {{-syslibroot|--sysroot}} {{[^ ]*}}/Inputs/clang-importer-sdk
|
// OSX: {{-syslibroot|--sysroot}} {{[^ ]*}}/Inputs/clang-importer-sdk
|
||||||
|
|||||||
Reference in New Issue
Block a user