From 4f5cb6a47be6ace7cef5213426dd3b6503029e4b Mon Sep 17 00:00:00 2001 From: Rajagopalan-Gangadharan Date: Wed, 4 Aug 2021 20:48:10 +0530 Subject: [PATCH 1/9] -l flag accepts space and emits without space to llvm frontend --- include/swift/Option/Options.td | 2 +- lib/Driver/ToolChains.cpp | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/include/swift/Option/Options.td b/include/swift/Option/Options.td index 3e83fc623a7e7..0e498ccddf932 100644 --- a/include/swift/Option/Options.td +++ b/include/swift/Option/Options.td @@ -701,7 +701,7 @@ def libc : Separate<["-"], "libc">, HelpText<"libc runtime library to use">; def linker_option_Group : OptionGroup<"">; -def l : Joined<["-"], "l">, Group, +def l : JoinedOrSeparate<["-"], "l">, Group, Flags<[FrontendOption, DoesNotAffectIncrementalBuild]>, HelpText<"Specifies a library which should be linked against">; def framework : Separate<["-"], "framework">, Group, diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index f11fed94301a7..01d42c9cf445f 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -142,6 +142,14 @@ static void addLTOArgs(const OutputInfo &OI, ArgStringList &arguments) { } } +static void addLinkedLibArgs(const ArgList &Args, ArgStringList &FrontendArgs) { + for(auto Arg:Args.getAllArgValues(options::OPT_l)) + { + std::string* lArg = new std::string("-l" + Arg); + FrontendArgs.push_back(lArg->c_str()); + } +} + void ToolChain::addCommonFrontendArgs(const OutputInfo &OI, const CommandOutput &output, const ArgList &inputArgs, @@ -842,7 +850,8 @@ ToolChain::constructInvocation(const InterpretJobAction &job, Arguments.push_back("-module-name"); Arguments.push_back(context.Args.MakeArgString(context.OI.ModuleName)); - context.Args.AddAllArgs(Arguments, options::OPT_l, options::OPT_framework); + context.Args.AddAllArgs(Arguments, options::OPT_framework); + addLinkedLibArgs(context.Args, Arguments); // The immediate arguments must be last. context.Args.AddLastArg(Arguments, options::OPT__DASH_DASH); @@ -1190,8 +1199,8 @@ ToolChain::constructInvocation(const REPLJobAction &job, addRuntimeLibraryFlags(context.OI, FrontendArgs); context.Args.AddLastArg(FrontendArgs, options::OPT_import_objc_header); - context.Args.AddAllArgs(FrontendArgs, options::OPT_l, options::OPT_framework, - options::OPT_L); + context.Args.AddAllArgs(FrontendArgs, options::OPT_framework, options::OPT_L); + addLinkedLibArgs(context.Args, FrontendArgs); if (!useLLDB) { FrontendArgs.insert(FrontendArgs.begin(), {"-frontend", "-repl"}); From c2ce6c5533f5df6af3cb2aae7df8f17ac2fed2d7 Mon Sep 17 00:00:00 2001 From: Rajagopalan-Gangadharan Date: Wed, 4 Aug 2021 21:52:26 +0530 Subject: [PATCH 2/9] Add Tests to check if adding space doesn't break invocation --- test/Driver/linker.swift | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test/Driver/linker.swift b/test/Driver/linker.swift index 2282192c66250..d132268c244d4 100644 --- a/test/Driver/linker.swift +++ b/test/Driver/linker.swift @@ -19,6 +19,9 @@ // RUN: %swiftc_driver -sdk "" -driver-print-jobs -target x86_64-unknown-linux-gnu -Ffoo -Fsystem car -F cdr -framework bar -Lbaz -lboo -Xlinker -undefined %s 2>&1 > %t.linux.txt // RUN: %FileCheck -check-prefix LINUX-x86_64 %s < %t.linux.txt +// RUN: %swiftc_driver -sdk "" -driver-print-jobs -target x86_64-unknown-linux-gnu -Ffoo -Fsystem car -F cdr -framework bar -Lbaz -l boo -Xlinker -undefined %s 2>&1 > %t.linux.txt +// RUN: %FileCheck -check-prefix LINUX-lib-flag-space %s < %t.linux.txt + // RUN: %swiftc_driver -sdk "" -driver-print-jobs -target armv6-unknown-linux-gnueabihf -Ffoo -Fsystem car -F cdr -framework bar -Lbaz -lboo -Xlinker -undefined %s 2>&1 > %t.linux.txt // RUN: %FileCheck -check-prefix LINUX-armv6 %s < %t.linux.txt @@ -217,6 +220,22 @@ // LINUX-x86_64-DAG: -Xlinker -undefined // LINUX-x86_64: -o linker +// LINUX-lib-flag-space: swift +// LINUX-lib-flag-space: -o [[OBJECTFILE:.*]] + +// LINUX-lib-flag-space: clang{{(\.exe)?"? }} +// LINUX-lib-flag-space-DAG: -pie +// LINUX-lib-flag-space-DAG: [[OBJECTFILE]] +// LINUX-lib-flag-space-DAG: -lswiftCore +// LINUX-lib-flag-space-DAG: -L [[STDLIB_PATH:[^ ]+(/|\\\\)lib(/|\\\\)swift(/|\\\\)]] +// LINUX-lib-flag-space-DAG: -Xlinker -rpath -Xlinker [[STDLIB_PATH]] +// LINUX-lib-flag-space-DAG: -F foo -iframework car -F cdr +// LINUX-lib-flag-space-DAG: -framework bar +// LINUX-lib-flag-space-DAG: -L baz +// LINUX-lib-flag-space-DAG: -lboo +// LINUX-lib-flag-space-DAG: -Xlinker -undefined +// LINUX-lib-flag-space: -o linker + // LINUX-armv6: swift // LINUX-armv6: -o [[OBJECTFILE:.*]] From 82665ccd6fd93ee0f7fdcee78023d53409e71180 Mon Sep 17 00:00:00 2001 From: Rajagopalan-Gangadharan Date: Thu, 5 Aug 2021 00:21:35 +0530 Subject: [PATCH 3/9] Add space test case to repl tests --- test/Driver/options-repl.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/Driver/options-repl.swift b/test/Driver/options-repl.swift index 118ebd7b834f9..52646ae073fab 100644 --- a/test/Driver/options-repl.swift +++ b/test/Driver/options-repl.swift @@ -16,7 +16,7 @@ // RUN: %swift_driver -sdk "" -lldb-repl -### | %FileCheck -check-prefix=LLDB %s -// RUN: %swift_driver -sdk "" -lldb-repl -D A -DB -D C -DD -L /path/to/libraries -L /path/to/more/libraries -F /path/to/frameworks -lsomelib -framework SomeFramework -sdk / -I "this folder" -module-name Test -target %target-triple -### | %FileCheck -check-prefix=LLDB-OPTS %s +// RUN: %swift_driver -sdk "" -lldb-repl -D A -DB -D C -DD -L /path/to/libraries -L /path/to/more/libraries -F /path/to/frameworks -lsomelib -l otherlib -framework SomeFramework -sdk / -I "this folder" -module-name Test -target %target-triple -### | %FileCheck -check-prefix=LLDB-OPTS %s // LLDB: lldb{{(\.exe)?"?}} {{"?}}--repl= // LLDB-NOT: -module-name @@ -30,6 +30,7 @@ // LLDB-OPTS-DAG: -L /path/to/more/libraries // LLDB-OPTS-DAG: -F /path/to/frameworks // LLDB-OPTS-DAG: -lsomelib +// LLDB-OPTS-DAG: -lotherlib // LLDB-OPTS-DAG: -framework SomeFramework // LLDB-OPTS-DAG: -I \"this folder\" // LLDB-OPTS: " From fd2fcbb7f81971e2234f3c88dfbdceda0a1c4f44 Mon Sep 17 00:00:00 2001 From: Rajagopalan-Gangadharan Date: Thu, 5 Aug 2021 14:53:22 +0530 Subject: [PATCH 4/9] [WIP] Address review comments - Fix memory leak --- lib/Driver/ToolChains.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index 01d42c9cf445f..3aab5ecfc0fa9 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -143,10 +143,10 @@ static void addLTOArgs(const OutputInfo &OI, ArgStringList &arguments) { } static void addLinkedLibArgs(const ArgList &Args, ArgStringList &FrontendArgs) { - for(auto Arg:Args.getAllArgValues(options::OPT_l)) - { - std::string* lArg = new std::string("-l" + Arg); - FrontendArgs.push_back(lArg->c_str()); + Args.getLastArg(options::OPT_l); + for (auto Arg : Args.getAllArgValues(options::OPT_l)) { + const std::string lArg("-l" + Arg); + FrontendArgs.push_back(Args.MakeArgString(Twine(lArg))); } } From 90637aa8ee2dd90e344962faa2265f208e0df70b Mon Sep 17 00:00:00 2001 From: Rajagopalan-Gangadharan Date: Sat, 7 Aug 2021 16:17:39 +0530 Subject: [PATCH 5/9] Take care of OPT_linker_option_Group to produce desired behaviour The -l args values are handled by OPT_l and OPT_linker_option_Group, to do this have created a helper method under Toolchain --- include/swift/Driver/ToolChain.h | 8 ++++++++ lib/Driver/DarwinToolChains.cpp | 5 ++++- lib/Driver/ToolChain.cpp | 25 +++++++++++++++++++++++++ lib/Driver/ToolChains.cpp | 11 ++--------- lib/Driver/UnixToolChains.cpp | 5 ++++- lib/Driver/WindowsToolChains.cpp | 5 ++++- 6 files changed, 47 insertions(+), 12 deletions(-) diff --git a/include/swift/Driver/ToolChain.h b/include/swift/Driver/ToolChain.h index 7be6dffbe37cf..3fb30d073f6b7 100644 --- a/include/swift/Driver/ToolChain.h +++ b/include/swift/Driver/ToolChain.h @@ -249,6 +249,14 @@ class ToolChain { const Driver &getDriver() const { return D; } const llvm::Triple &getTriple() const { return Triple; } + static void addLinkedLibArgs(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &FrontendArgs); + + static void addArgsFromGroupExcept(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &FrontendArgs, + llvm::opt::OptSpecifier groupID, + llvm::opt::OptSpecifier exceptID); + /// Construct a Job for the action \p JA, taking the given information into /// account. /// diff --git a/lib/Driver/DarwinToolChains.cpp b/lib/Driver/DarwinToolChains.cpp index e4047e2839ed4..919f971a1ab47 100644 --- a/lib/Driver/DarwinToolChains.cpp +++ b/lib/Driver/DarwinToolChains.cpp @@ -796,7 +796,10 @@ toolchains::Darwin::constructInvocation(const DynamicLinkJobAction &job, Arguments.push_back("-no_objc_category_merging"); // These custom arguments should be right before the object file at the end. - context.Args.AddAllArgs(Arguments, options::OPT_linker_option_Group); + ToolChain::addArgsFromGroupExcept(context.Args, Arguments, + options::OPT_linker_option_Group, + options::OPT_l); + ToolChain::addLinkedLibArgs(context.Args, Arguments); context.Args.AddAllArgValues(Arguments, options::OPT_Xlinker); // This should be the last option, for convenience in checking output. diff --git a/lib/Driver/ToolChain.cpp b/lib/Driver/ToolChain.cpp index 522a9727c454a..4b5360b831369 100644 --- a/lib/Driver/ToolChain.cpp +++ b/lib/Driver/ToolChain.cpp @@ -287,6 +287,31 @@ mergeBatchInputs(ArrayRef jobs, return false; } +/// Remove space for -l arg values from \c Args and add to \c FrontendArgs +void ToolChain::addLinkedLibArgs(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &FrontendArgs) { + Args.getLastArg(options::OPT_l); + for (auto Arg : Args.getAllArgValues(options::OPT_l)) { + const std::string lArg("-l" + Arg); + FrontendArgs.push_back(Args.MakeArgString(Twine(lArg))); + } +} + +/// Add all values of a \c groupID from \c Args to \c FrontendArgs . +/// except for \c exceptID . +void ToolChain::addArgsFromGroupExcept(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &FrontendArgs, + llvm::opt::OptSpecifier groupID, + llvm::opt::OptSpecifier exceptID) { + for (auto *Arg : Args) { + if (Arg->getOption().matches(groupID) && + !Arg->getOption().matches(exceptID)) { + Arg->claim(); + Arg->render(Args, FrontendArgs); + } + } +} + /// Construct a \c BatchJob by merging the constituent \p jobs' CommandOutput, /// input \c Job and \c Action members. Call through to \c constructInvocation /// on \p BatchJob, to build the \c InvocationInfo. diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index 3aab5ecfc0fa9..ae5306538f915 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -142,13 +142,6 @@ static void addLTOArgs(const OutputInfo &OI, ArgStringList &arguments) { } } -static void addLinkedLibArgs(const ArgList &Args, ArgStringList &FrontendArgs) { - Args.getLastArg(options::OPT_l); - for (auto Arg : Args.getAllArgValues(options::OPT_l)) { - const std::string lArg("-l" + Arg); - FrontendArgs.push_back(Args.MakeArgString(Twine(lArg))); - } -} void ToolChain::addCommonFrontendArgs(const OutputInfo &OI, const CommandOutput &output, @@ -851,7 +844,7 @@ ToolChain::constructInvocation(const InterpretJobAction &job, Arguments.push_back(context.Args.MakeArgString(context.OI.ModuleName)); context.Args.AddAllArgs(Arguments, options::OPT_framework); - addLinkedLibArgs(context.Args, Arguments); + ToolChain::addLinkedLibArgs(context.Args, Arguments); // The immediate arguments must be last. context.Args.AddLastArg(Arguments, options::OPT__DASH_DASH); @@ -1200,7 +1193,7 @@ ToolChain::constructInvocation(const REPLJobAction &job, context.Args.AddLastArg(FrontendArgs, options::OPT_import_objc_header); context.Args.AddAllArgs(FrontendArgs, options::OPT_framework, options::OPT_L); - addLinkedLibArgs(context.Args, FrontendArgs); + ToolChain::addLinkedLibArgs(context.Args, FrontendArgs); if (!useLLDB) { FrontendArgs.insert(FrontendArgs.begin(), {"-frontend", "-repl"}); diff --git a/lib/Driver/UnixToolChains.cpp b/lib/Driver/UnixToolChains.cpp index 30905f6b72253..bcfc359045b88 100644 --- a/lib/Driver/UnixToolChains.cpp +++ b/lib/Driver/UnixToolChains.cpp @@ -358,7 +358,10 @@ toolchains::GenericUnix::constructInvocation(const DynamicLinkJobAction &job, } // These custom arguments should be right before the object file at the end. - context.Args.AddAllArgs(Arguments, options::OPT_linker_option_Group); + ToolChain::addArgsFromGroupExcept(context.Args, Arguments, + options::OPT_linker_option_Group, + options::OPT_l); + ToolChain::addLinkedLibArgs(context.Args, Arguments); context.Args.AddAllArgs(Arguments, options::OPT_Xlinker); context.Args.AddAllArgValues(Arguments, options::OPT_Xclang_linker); diff --git a/lib/Driver/WindowsToolChains.cpp b/lib/Driver/WindowsToolChains.cpp index b3567bf969b11..3bfa0a0e21747 100644 --- a/lib/Driver/WindowsToolChains.cpp +++ b/lib/Driver/WindowsToolChains.cpp @@ -179,7 +179,10 @@ toolchains::Windows::constructInvocation(const DynamicLinkJobAction &job, } context.Args.AddAllArgs(Arguments, options::OPT_Xlinker); - context.Args.AddAllArgs(Arguments, options::OPT_linker_option_Group); + ToolChain::addArgsFromGroupExcept(context.Args, Arguments, + options::OPT_linker_option_Group, + options::OPT_l); + ToolChain::addLinkedLibArgs(context.Args, Arguments); context.Args.AddAllArgValues(Arguments, options::OPT_Xclang_linker); // Run clang in verbose mode if "-v" is set From 8946792301e63ac226650ca27fe99628d19a9e64 Mon Sep 17 00:00:00 2001 From: Rajagopalan-Gangadharan Date: Sat, 7 Aug 2021 16:20:03 +0530 Subject: [PATCH 6/9] Add seperate test since linker test is disabled --- test/Driver/linker-library-with-space.swift | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 test/Driver/linker-library-with-space.swift diff --git a/test/Driver/linker-library-with-space.swift b/test/Driver/linker-library-with-space.swift new file mode 100644 index 0000000000000..e2ddd87bcb9a1 --- /dev/null +++ b/test/Driver/linker-library-with-space.swift @@ -0,0 +1,18 @@ +// RUN: %swiftc_driver -sdk "" -driver-print-jobs -target x86_64-unknown-linux-gnu -Ffoo -Fsystem car -F cdr -framework bar -Lbaz -lboo -Xlinker -undefined %s 2>&1 > %t.linux.txt +// RUN: %FileCheck -check-prefix LINUX-lib-flag-space %s < %t.linux.txt + +// LINUX-lib-flag-space: swift +// LINUX-lib-flag-space: -o [[OBJECTFILE:.*]] + +// LINUX-lib-flag-space: clang{{(\.exe)?"? }} +// LINUX-lib-flag-space-DAG: -pie +// LINUX-lib-flag-space-DAG: [[OBJECTFILE]] +// LINUX-lib-flag-space-DAG: -lswiftCore +// LINUX-lib-flag-space-DAG: -L [[STDLIB_PATH:[^ ]+(/|\\\\)lib(/|\\\\)swift(/|\\\\)]] +// LINUX-lib-flag-space-DAG: -Xlinker -rpath -Xlinker [[STDLIB_PATH]] +// LINUX-lib-flag-space-DAG: -F foo -iframework car -F cdr +// LINUX-lib-flag-space-DAG: -framework bar +// LINUX-lib-flag-space-DAG: -L baz +// LINUX-lib-flag-space-DAG: -lboo +// LINUX-lib-flag-space-DAG: -Xlinker -undefined +// LINUX-lib-flag-space: -o linker From 48de17d1408323d38b8b4ee981ffe22254e95dad Mon Sep 17 00:00:00 2001 From: Rajagopalan-Gangadharan Date: Wed, 11 Aug 2021 10:04:18 +0530 Subject: [PATCH 7/9] Address review comments for reusable function --- include/swift/Driver/ToolChain.h | 10 +++++----- lib/Driver/DarwinToolChains.cpp | 5 ++--- lib/Driver/ToolChain.cpp | 16 ---------------- lib/Driver/UnixToolChains.cpp | 5 ++--- lib/Driver/WindowsToolChains.cpp | 5 ++--- 5 files changed, 11 insertions(+), 30 deletions(-) diff --git a/include/swift/Driver/ToolChain.h b/include/swift/Driver/ToolChain.h index 3fb30d073f6b7..60aa1fd99836e 100644 --- a/include/swift/Driver/ToolChain.h +++ b/include/swift/Driver/ToolChain.h @@ -249,14 +249,14 @@ class ToolChain { const Driver &getDriver() const { return D; } const llvm::Triple &getTriple() const { return Triple; } + /// Special handling for passing down '-l' arguments. + /// + /// Not all downstream tools (lldb, ld etc.) consistently accept + /// a space between the '-l' flag and its argument, so we remove + /// the extra space if it was present in \c Args. static void addLinkedLibArgs(const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &FrontendArgs); - static void addArgsFromGroupExcept(const llvm::opt::ArgList &Args, - llvm::opt::ArgStringList &FrontendArgs, - llvm::opt::OptSpecifier groupID, - llvm::opt::OptSpecifier exceptID); - /// Construct a Job for the action \p JA, taking the given information into /// account. /// diff --git a/lib/Driver/DarwinToolChains.cpp b/lib/Driver/DarwinToolChains.cpp index 919f971a1ab47..af322a56f496b 100644 --- a/lib/Driver/DarwinToolChains.cpp +++ b/lib/Driver/DarwinToolChains.cpp @@ -796,9 +796,8 @@ toolchains::Darwin::constructInvocation(const DynamicLinkJobAction &job, Arguments.push_back("-no_objc_category_merging"); // These custom arguments should be right before the object file at the end. - ToolChain::addArgsFromGroupExcept(context.Args, Arguments, - options::OPT_linker_option_Group, - options::OPT_l); + context.Args.AddAllArgsExcept(Arguments, {options::OPT_linker_option_Group}, + {options::OPT_l}); ToolChain::addLinkedLibArgs(context.Args, Arguments); context.Args.AddAllArgValues(Arguments, options::OPT_Xlinker); diff --git a/lib/Driver/ToolChain.cpp b/lib/Driver/ToolChain.cpp index 4b5360b831369..525af62dd2b56 100644 --- a/lib/Driver/ToolChain.cpp +++ b/lib/Driver/ToolChain.cpp @@ -287,7 +287,6 @@ mergeBatchInputs(ArrayRef jobs, return false; } -/// Remove space for -l arg values from \c Args and add to \c FrontendArgs void ToolChain::addLinkedLibArgs(const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &FrontendArgs) { Args.getLastArg(options::OPT_l); @@ -297,21 +296,6 @@ void ToolChain::addLinkedLibArgs(const llvm::opt::ArgList &Args, } } -/// Add all values of a \c groupID from \c Args to \c FrontendArgs . -/// except for \c exceptID . -void ToolChain::addArgsFromGroupExcept(const llvm::opt::ArgList &Args, - llvm::opt::ArgStringList &FrontendArgs, - llvm::opt::OptSpecifier groupID, - llvm::opt::OptSpecifier exceptID) { - for (auto *Arg : Args) { - if (Arg->getOption().matches(groupID) && - !Arg->getOption().matches(exceptID)) { - Arg->claim(); - Arg->render(Args, FrontendArgs); - } - } -} - /// Construct a \c BatchJob by merging the constituent \p jobs' CommandOutput, /// input \c Job and \c Action members. Call through to \c constructInvocation /// on \p BatchJob, to build the \c InvocationInfo. diff --git a/lib/Driver/UnixToolChains.cpp b/lib/Driver/UnixToolChains.cpp index bcfc359045b88..1dc32acfd8357 100644 --- a/lib/Driver/UnixToolChains.cpp +++ b/lib/Driver/UnixToolChains.cpp @@ -358,9 +358,8 @@ toolchains::GenericUnix::constructInvocation(const DynamicLinkJobAction &job, } // These custom arguments should be right before the object file at the end. - ToolChain::addArgsFromGroupExcept(context.Args, Arguments, - options::OPT_linker_option_Group, - options::OPT_l); + context.Args.AddAllArgsExcept(Arguments, {options::OPT_linker_option_Group}, + {options::OPT_l}); ToolChain::addLinkedLibArgs(context.Args, Arguments); context.Args.AddAllArgs(Arguments, options::OPT_Xlinker); context.Args.AddAllArgValues(Arguments, options::OPT_Xclang_linker); diff --git a/lib/Driver/WindowsToolChains.cpp b/lib/Driver/WindowsToolChains.cpp index 3bfa0a0e21747..5001fa33fd2a5 100644 --- a/lib/Driver/WindowsToolChains.cpp +++ b/lib/Driver/WindowsToolChains.cpp @@ -179,9 +179,8 @@ toolchains::Windows::constructInvocation(const DynamicLinkJobAction &job, } context.Args.AddAllArgs(Arguments, options::OPT_Xlinker); - ToolChain::addArgsFromGroupExcept(context.Args, Arguments, - options::OPT_linker_option_Group, - options::OPT_l); + context.Args.AddAllArgsExcept(Arguments, {options::OPT_linker_option_Group}, + {options::OPT_l}); ToolChain::addLinkedLibArgs(context.Args, Arguments); context.Args.AddAllArgValues(Arguments, options::OPT_Xclang_linker); From cd7a30b43ab9a45fb290b1ee737c839c1c83c572 Mon Sep 17 00:00:00 2001 From: Rajagopalan-Gangadharan Date: Wed, 11 Aug 2021 10:09:23 +0530 Subject: [PATCH 8/9] Address Test review comments --- test/Driver/linker.swift | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/test/Driver/linker.swift b/test/Driver/linker.swift index d132268c244d4..4f36bf7eada78 100644 --- a/test/Driver/linker.swift +++ b/test/Driver/linker.swift @@ -1,6 +1,8 @@ // Must be able to run xcrun-return-self.sh // REQUIRES: shell // REQUIRES: rdar65281056 +// FIXME: When this is turned on, please move the test from linker-library-with-space.swift +// to this file and remove that file. // RUN: %swiftc_driver -sdk "" -driver-print-jobs -target x86_64-apple-macosx10.9 %s 2>&1 > %t.simple.txt // RUN: %FileCheck %s < %t.simple.txt // RUN: %FileCheck -check-prefix SIMPLE %s < %t.simple.txt @@ -19,9 +21,6 @@ // RUN: %swiftc_driver -sdk "" -driver-print-jobs -target x86_64-unknown-linux-gnu -Ffoo -Fsystem car -F cdr -framework bar -Lbaz -lboo -Xlinker -undefined %s 2>&1 > %t.linux.txt // RUN: %FileCheck -check-prefix LINUX-x86_64 %s < %t.linux.txt -// RUN: %swiftc_driver -sdk "" -driver-print-jobs -target x86_64-unknown-linux-gnu -Ffoo -Fsystem car -F cdr -framework bar -Lbaz -l boo -Xlinker -undefined %s 2>&1 > %t.linux.txt -// RUN: %FileCheck -check-prefix LINUX-lib-flag-space %s < %t.linux.txt - // RUN: %swiftc_driver -sdk "" -driver-print-jobs -target armv6-unknown-linux-gnueabihf -Ffoo -Fsystem car -F cdr -framework bar -Lbaz -lboo -Xlinker -undefined %s 2>&1 > %t.linux.txt // RUN: %FileCheck -check-prefix LINUX-armv6 %s < %t.linux.txt @@ -220,22 +219,6 @@ // LINUX-x86_64-DAG: -Xlinker -undefined // LINUX-x86_64: -o linker -// LINUX-lib-flag-space: swift -// LINUX-lib-flag-space: -o [[OBJECTFILE:.*]] - -// LINUX-lib-flag-space: clang{{(\.exe)?"? }} -// LINUX-lib-flag-space-DAG: -pie -// LINUX-lib-flag-space-DAG: [[OBJECTFILE]] -// LINUX-lib-flag-space-DAG: -lswiftCore -// LINUX-lib-flag-space-DAG: -L [[STDLIB_PATH:[^ ]+(/|\\\\)lib(/|\\\\)swift(/|\\\\)]] -// LINUX-lib-flag-space-DAG: -Xlinker -rpath -Xlinker [[STDLIB_PATH]] -// LINUX-lib-flag-space-DAG: -F foo -iframework car -F cdr -// LINUX-lib-flag-space-DAG: -framework bar -// LINUX-lib-flag-space-DAG: -L baz -// LINUX-lib-flag-space-DAG: -lboo -// LINUX-lib-flag-space-DAG: -Xlinker -undefined -// LINUX-lib-flag-space: -o linker - // LINUX-armv6: swift // LINUX-armv6: -o [[OBJECTFILE:.*]] From 855eeaf57571495f8f8a5d44ca43d1505dbbe3bf Mon Sep 17 00:00:00 2001 From: RAJAGOPALAN-GANGADHARAN Date: Tue, 24 Aug 2021 09:24:51 +0530 Subject: [PATCH 9/9] Fix ci test failure --- test/Driver/linker-library-with-space.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Driver/linker-library-with-space.swift b/test/Driver/linker-library-with-space.swift index e2ddd87bcb9a1..b4497301147d6 100644 --- a/test/Driver/linker-library-with-space.swift +++ b/test/Driver/linker-library-with-space.swift @@ -15,4 +15,4 @@ // LINUX-lib-flag-space-DAG: -L baz // LINUX-lib-flag-space-DAG: -lboo // LINUX-lib-flag-space-DAG: -Xlinker -undefined -// LINUX-lib-flag-space: -o linker +// LINUX-lib-flag-space: -o main