mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
LibDriver: Fix output path inference.
The inferred output file name is based on the first input file, not the first one with extension .obj. The output file was also being written to the wrong directory; it needs to be written to whichever directory on the libpath it was found in. This change fixes both issues. llvm-svn: 241710
This commit is contained in:
parent
15a02a12cd
commit
fe08b5f6b2
@ -56,17 +56,13 @@ public:
|
||||
|
||||
}
|
||||
|
||||
static std::string getOutputPath(llvm::opt::InputArgList *Args) {
|
||||
static std::string getOutputPath(llvm::opt::InputArgList *Args,
|
||||
const llvm::NewArchiveIterator &FirstMember) {
|
||||
if (auto *Arg = Args->getLastArg(OPT_out))
|
||||
return Arg->getValue();
|
||||
for (auto *Arg : Args->filtered(OPT_INPUT)) {
|
||||
if (!StringRef(Arg->getValue()).endswith_lower(".obj"))
|
||||
continue;
|
||||
SmallString<128> Val = StringRef(Arg->getValue());
|
||||
llvm::sys::path::replace_extension(Val, ".lib");
|
||||
return Val.str();
|
||||
}
|
||||
llvm_unreachable("internal error");
|
||||
SmallString<128> Val = FirstMember.getNew();
|
||||
llvm::sys::path::replace_extension(Val, ".lib");
|
||||
return Val.str();
|
||||
}
|
||||
|
||||
static std::vector<StringRef> getSearchPaths(llvm::opt::InputArgList *Args,
|
||||
@ -143,8 +139,8 @@ int llvm::libDriverMain(llvm::ArrayRef<const char*> ArgsArr) {
|
||||
llvm::sys::path::filename(Arg->getValue()));
|
||||
}
|
||||
|
||||
std::pair<StringRef, std::error_code> Result =
|
||||
llvm::writeArchive(getOutputPath(&Args), Members, /*WriteSymtab=*/true);
|
||||
std::pair<StringRef, std::error_code> Result = llvm::writeArchive(
|
||||
getOutputPath(&Args, Members[0]), Members, /*WriteSymtab=*/true);
|
||||
if (Result.second) {
|
||||
if (Result.first.empty())
|
||||
Result.first = ArgsArr[0];
|
||||
|
15
test/LibDriver/infer-output-path.test
Normal file
15
test/LibDriver/infer-output-path.test
Normal file
@ -0,0 +1,15 @@
|
||||
RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o %T/a.obj %S/Inputs/a.s
|
||||
RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o %T/b.o %S/Inputs/b.s
|
||||
RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o %T/c %S/Inputs/b.s
|
||||
|
||||
RUN: rm -f %T/a.lib
|
||||
RUN: llvm-lib %T/a.obj
|
||||
RUN: test -e %T/a.lib
|
||||
|
||||
RUN: rm -f %T/b.lib
|
||||
RUN: llvm-lib /libpath:%T b.o
|
||||
RUN: test -e %T/b.lib
|
||||
|
||||
RUN: rm -f %T/c.lib
|
||||
RUN: llvm-lib /libpath:%T c
|
||||
RUN: test -e %T/c.lib
|
Loading…
Reference in New Issue
Block a user