mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-03 13:31:05 +00:00
* Print commands as we execute them with `-v'
* Add option `-save-temps' Patch contributed by Markus Oberhumer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21367 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7d27fc0252
commit
b0bafc55be
@ -120,6 +120,13 @@ static void RemoveEnv(const char * name, char ** const envp) {
|
||||
return;
|
||||
}
|
||||
|
||||
static void dumpArgs(const char **args) {
|
||||
std::cout << *args++;
|
||||
while (*args)
|
||||
std::cout << ' ' << *args++;
|
||||
std::cout << '\n';
|
||||
}
|
||||
|
||||
static inline void addPass(PassManager &PM, Pass *P) {
|
||||
// Add the pass to the pass manager...
|
||||
PM.add(P);
|
||||
@ -297,7 +304,8 @@ int llvm::GenerateBytecode(Module *M, int StripLevel, bool Internalize,
|
||||
///
|
||||
int llvm::GenerateAssembly(const std::string &OutputFilename,
|
||||
const std::string &InputFilename,
|
||||
const sys::Path &llc) {
|
||||
const sys::Path &llc,
|
||||
bool Verbose) {
|
||||
// Run LLC to convert the bytecode file into assembly code.
|
||||
std::vector<const char*> args;
|
||||
args.push_back(llc.c_str());
|
||||
@ -306,7 +314,7 @@ int llvm::GenerateAssembly(const std::string &OutputFilename,
|
||||
args.push_back(OutputFilename.c_str());
|
||||
args.push_back(InputFilename.c_str());
|
||||
args.push_back(0);
|
||||
|
||||
if (Verbose) dumpArgs(&args[0]);
|
||||
return sys::Program::ExecuteAndWait(llc, &args[0]);
|
||||
}
|
||||
|
||||
@ -314,7 +322,8 @@ int llvm::GenerateAssembly(const std::string &OutputFilename,
|
||||
/// specified bytecode file.
|
||||
int llvm::GenerateCFile(const std::string &OutputFile,
|
||||
const std::string &InputFile,
|
||||
const sys::Path &llc) {
|
||||
const sys::Path &llc,
|
||||
bool Verbose) {
|
||||
// Run LLC to convert the bytecode file into C.
|
||||
std::vector<const char*> args;
|
||||
args.push_back(llc.c_str());
|
||||
@ -324,6 +333,7 @@ int llvm::GenerateCFile(const std::string &OutputFile,
|
||||
args.push_back(OutputFile.c_str());
|
||||
args.push_back(InputFile.c_str());
|
||||
args.push_back(0);
|
||||
if (Verbose) dumpArgs(&args[0]);
|
||||
return sys::Program::ExecuteAndWait(llc, &args[0]);
|
||||
}
|
||||
|
||||
@ -349,7 +359,8 @@ int llvm::GenerateNative(const std::string &OutputFilename,
|
||||
const sys::Path &gcc, char ** const envp,
|
||||
bool Shared,
|
||||
const std::string &RPath,
|
||||
const std::string &SOName) {
|
||||
const std::string &SOName,
|
||||
bool Verbose) {
|
||||
// Remove these environment variables from the environment of the
|
||||
// programs that we will execute. It appears that GCC sets these
|
||||
// environment variables so that the programs it uses can configure
|
||||
@ -417,6 +428,7 @@ int llvm::GenerateNative(const std::string &OutputFilename,
|
||||
args.push_back(0);
|
||||
|
||||
// Run the compiler to assembly and link together the program.
|
||||
if (Verbose) dumpArgs(&args[0]);
|
||||
return sys::Program::ExecuteAndWait(gcc, &args[0], (const char**)clean_env);
|
||||
}
|
||||
|
||||
|
@ -83,6 +83,10 @@ namespace {
|
||||
cl::opt<bool>
|
||||
NativeCBE("native-cbe",
|
||||
cl::desc("Generate a native binary with the C backend and GCC"));
|
||||
|
||||
cl::opt<bool>
|
||||
SaveTemps("save-temps",
|
||||
cl::desc("Do not delete temporary files"));
|
||||
|
||||
cl::opt<std::string>
|
||||
RPath("rpath",
|
||||
@ -300,16 +304,19 @@ int main(int argc, char **argv, char **envp ) {
|
||||
|
||||
// Generate an assembly language file for the bytecode.
|
||||
if (Verbose) std::cout << "Generating Assembly Code\n";
|
||||
GenerateAssembly(AssemblyFile.toString(), RealBytecodeOutput, llc);
|
||||
GenerateAssembly(AssemblyFile.toString(), RealBytecodeOutput, llc,
|
||||
Verbose);
|
||||
if (Verbose) std::cout << "Generating Native Code\n";
|
||||
GenerateNative(OutputFilename, AssemblyFile.toString(),
|
||||
LibPaths, Libraries, gcc, envp, LinkAsLibrary, RPath,
|
||||
SOName );
|
||||
SOName, Verbose);
|
||||
|
||||
// Remove the assembly language file.
|
||||
AssemblyFile.destroyFile();
|
||||
// Remove the bytecode language file.
|
||||
sys::Path(RealBytecodeOutput).destroyFile();
|
||||
if (!SaveTemps) {
|
||||
// Remove the assembly language file.
|
||||
AssemblyFile.destroyFile();
|
||||
// Remove the bytecode language file.
|
||||
sys::Path(RealBytecodeOutput).destroyFile();
|
||||
}
|
||||
|
||||
} else if (NativeCBE) {
|
||||
sys::Path CFile (OutputFilename);
|
||||
@ -329,18 +336,19 @@ int main(int argc, char **argv, char **envp ) {
|
||||
return PrintAndReturn(argv[0], "Failed to find gcc");
|
||||
|
||||
// Generate an assembly language file for the bytecode.
|
||||
if (Verbose) std::cout << "Generating Assembly Code\n";
|
||||
GenerateCFile(CFile.toString(), RealBytecodeOutput, llc);
|
||||
if (Verbose) std::cout << "Generating C Source Code\n";
|
||||
GenerateCFile(CFile.toString(), RealBytecodeOutput, llc, Verbose);
|
||||
if (Verbose) std::cout << "Generating Native Code\n";
|
||||
GenerateNative(OutputFilename, CFile.toString(),
|
||||
LibPaths, Libraries, gcc, envp, LinkAsLibrary, RPath,
|
||||
SOName );
|
||||
SOName, Verbose);
|
||||
|
||||
// Remove the assembly language file.
|
||||
CFile.destroyFile();
|
||||
|
||||
// Remove the bytecode language file.
|
||||
sys::Path(RealBytecodeOutput).destroyFile();
|
||||
if (!SaveTemps) {
|
||||
// Remove the assembly language file.
|
||||
CFile.destroyFile();
|
||||
// Remove the bytecode language file.
|
||||
sys::Path(RealBytecodeOutput).destroyFile();
|
||||
}
|
||||
|
||||
} else if (!LinkAsLibrary) {
|
||||
EmitShellScript(argv);
|
||||
|
@ -29,12 +29,14 @@ GenerateBytecode (Module * M,
|
||||
int
|
||||
GenerateAssembly (const std::string & OutputFilename,
|
||||
const std::string & InputFilename,
|
||||
const sys::Path & llc);
|
||||
const sys::Path & llc,
|
||||
bool Verbose=false);
|
||||
|
||||
int
|
||||
GenerateCFile (const std::string &OutputFile,
|
||||
const std::string &InputFile,
|
||||
const sys::Path &llc);
|
||||
const sys::Path &llc,
|
||||
bool Verbose=false);
|
||||
int
|
||||
GenerateNative (const std::string & OutputFilename,
|
||||
const std::string & InputFilename,
|
||||
@ -44,6 +46,7 @@ GenerateNative (const std::string & OutputFilename,
|
||||
char ** const envp,
|
||||
bool Shared,
|
||||
const std::string & RPath,
|
||||
const std::string & SOName);
|
||||
const std::string & SOName,
|
||||
bool Verbose=false);
|
||||
|
||||
} // End llvm namespace
|
||||
|
Loading…
Reference in New Issue
Block a user