mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-20 10:24:12 +00:00
Enable response files in all tools. Patch by Liu, Yaxun (Sam). I have simplified
the test. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165535 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -41,16 +41,14 @@ namespace cl {
|
|||||||
// ParseCommandLineOptions - Command line option processing entry point.
|
// ParseCommandLineOptions - Command line option processing entry point.
|
||||||
//
|
//
|
||||||
void ParseCommandLineOptions(int argc, const char * const *argv,
|
void ParseCommandLineOptions(int argc, const char * const *argv,
|
||||||
const char *Overview = 0,
|
const char *Overview = 0);
|
||||||
bool ReadResponseFiles = false);
|
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// ParseEnvironmentOptions - Environment variable option processing alternate
|
// ParseEnvironmentOptions - Environment variable option processing alternate
|
||||||
// entry point.
|
// entry point.
|
||||||
//
|
//
|
||||||
void ParseEnvironmentOptions(const char *progName, const char *envvar,
|
void ParseEnvironmentOptions(const char *progName, const char *envvar,
|
||||||
const char *Overview = 0,
|
const char *Overview = 0);
|
||||||
bool ReadResponseFiles = false);
|
|
||||||
|
|
||||||
///===---------------------------------------------------------------------===//
|
///===---------------------------------------------------------------------===//
|
||||||
/// SetVersionPrinter - Override the default (LLVM specific) version printer
|
/// SetVersionPrinter - Override the default (LLVM specific) version printer
|
||||||
|
@ -464,7 +464,7 @@ static void ParseCStringVector(std::vector<char *> &OutputVector,
|
|||||||
/// an environment variable (whose name is given in ENVVAR).
|
/// an environment variable (whose name is given in ENVVAR).
|
||||||
///
|
///
|
||||||
void cl::ParseEnvironmentOptions(const char *progName, const char *envVar,
|
void cl::ParseEnvironmentOptions(const char *progName, const char *envVar,
|
||||||
const char *Overview, bool ReadResponseFiles) {
|
const char *Overview) {
|
||||||
// Check args.
|
// Check args.
|
||||||
assert(progName && "Program name not specified");
|
assert(progName && "Program name not specified");
|
||||||
assert(envVar && "Environment variable name missing");
|
assert(envVar && "Environment variable name missing");
|
||||||
@ -483,7 +483,7 @@ void cl::ParseEnvironmentOptions(const char *progName, const char *envVar,
|
|||||||
// and hand it off to ParseCommandLineOptions().
|
// and hand it off to ParseCommandLineOptions().
|
||||||
ParseCStringVector(newArgv, envValue);
|
ParseCStringVector(newArgv, envValue);
|
||||||
int newArgc = static_cast<int>(newArgv.size());
|
int newArgc = static_cast<int>(newArgv.size());
|
||||||
ParseCommandLineOptions(newArgc, &newArgv[0], Overview, ReadResponseFiles);
|
ParseCommandLineOptions(newArgc, &newArgv[0], Overview);
|
||||||
|
|
||||||
// Free all the strdup()ed strings.
|
// Free all the strdup()ed strings.
|
||||||
for (std::vector<char*>::iterator i = newArgv.begin(), e = newArgv.end();
|
for (std::vector<char*>::iterator i = newArgv.begin(), e = newArgv.end();
|
||||||
@ -529,7 +529,7 @@ static void ExpandResponseFiles(unsigned argc, const char*const* argv,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
||||||
const char *Overview, bool ReadResponseFiles) {
|
const char *Overview) {
|
||||||
// Process all registered options.
|
// Process all registered options.
|
||||||
SmallVector<Option*, 4> PositionalOpts;
|
SmallVector<Option*, 4> PositionalOpts;
|
||||||
SmallVector<Option*, 4> SinkOpts;
|
SmallVector<Option*, 4> SinkOpts;
|
||||||
@ -541,12 +541,10 @@ void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
|||||||
|
|
||||||
// Expand response files.
|
// Expand response files.
|
||||||
std::vector<char*> newArgv;
|
std::vector<char*> newArgv;
|
||||||
if (ReadResponseFiles) {
|
|
||||||
newArgv.push_back(strdup(argv[0]));
|
newArgv.push_back(strdup(argv[0]));
|
||||||
ExpandResponseFiles(argc, argv, newArgv);
|
ExpandResponseFiles(argc, argv, newArgv);
|
||||||
argv = &newArgv[0];
|
argv = &newArgv[0];
|
||||||
argc = static_cast<int>(newArgv.size());
|
argc = static_cast<int>(newArgv.size());
|
||||||
}
|
|
||||||
|
|
||||||
// Copy the program name into ProgName, making sure not to overflow it.
|
// Copy the program name into ProgName, making sure not to overflow it.
|
||||||
std::string ProgName = sys::path::filename(argv[0]);
|
std::string ProgName = sys::path::filename(argv[0]);
|
||||||
@ -839,12 +837,10 @@ void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
|||||||
MoreHelp->clear();
|
MoreHelp->clear();
|
||||||
|
|
||||||
// Free the memory allocated by ExpandResponseFiles.
|
// Free the memory allocated by ExpandResponseFiles.
|
||||||
if (ReadResponseFiles) {
|
|
||||||
// Free all the strdup()ed strings.
|
// Free all the strdup()ed strings.
|
||||||
for (std::vector<char*>::iterator i = newArgv.begin(), e = newArgv.end();
|
for (std::vector<char*>::iterator i = newArgv.begin(), e = newArgv.end();
|
||||||
i != e; ++i)
|
i != e; ++i)
|
||||||
free(*i);
|
free(*i);
|
||||||
}
|
|
||||||
|
|
||||||
// If we had an error processing our arguments, don't let the program execute
|
// If we had an error processing our arguments, don't let the program execute
|
||||||
if (ErrorParsing) exit(1);
|
if (ErrorParsing) exit(1);
|
||||||
|
9
test/Other/ResponseFile.ll
Normal file
9
test/Other/ResponseFile.ll
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
; RUN: echo %s > %t.list
|
||||||
|
; RUN: llvm-as @%t.list -o %t.bc
|
||||||
|
; RUN: llvm-nm %t.bc 2>&1 | FileCheck %s
|
||||||
|
|
||||||
|
; CHECK: T foobar
|
||||||
|
|
||||||
|
define void @foobar() {
|
||||||
|
ret void
|
||||||
|
}
|
Reference in New Issue
Block a user