mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
Make -save-temps behave like in GCC 4.5.
The -save-temps option now behaves like described in GCC 4.5 release notes (you can specify output directory for temporary files with -save-temps=obj -o $DIRNAME). I do not have GCC 4.5 installed, so if there are any inconsistencies between llvmc and GCC in the implementation of this feature, please let me know. llvm-svn: 74190
This commit is contained in:
parent
7e0ff6ab63
commit
e665ff7b38
33
include/llvm/CompilerDriver/BuiltinOptions.h
Normal file
33
include/llvm/CompilerDriver/BuiltinOptions.h
Normal file
@ -0,0 +1,33 @@
|
||||
//===--- BuiltinOptions.h - The LLVM Compiler Driver ------------*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open
|
||||
// Source License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Declarations of all global command-line option variables.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLVM_INCLUDE_COMPILER_DRIVER_BUILTIN_OPTIONS_H
|
||||
#define LLVM_INCLUDE_COMPILER_DRIVER_BUILTIN_OPTIONS_H
|
||||
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace SaveTempsEnum { enum Values { Cwd, Obj, Unset }; }
|
||||
|
||||
extern llvm::cl::list<std::string> InputFilenames;
|
||||
extern llvm::cl::opt<std::string> OutputFilename;
|
||||
extern llvm::cl::list<std::string> Languages;
|
||||
extern llvm::cl::opt<bool> DryRun;
|
||||
extern llvm::cl::opt<bool> VerboseMode;
|
||||
extern llvm::cl::opt<bool> CheckGraph;
|
||||
extern llvm::cl::opt<bool> WriteGraph;
|
||||
extern llvm::cl::opt<bool> ViewGraph;
|
||||
extern llvm::cl::opt<SaveTempsEnum::Values> SaveTemps;
|
||||
|
||||
#endif // LLVM_INCLUDE_COMPILER_DRIVER_BUILTIN_OPTIONS_H
|
@ -17,6 +17,7 @@
|
||||
#ifndef LLVM_INCLUDE_COMPILER_DRIVER_MAIN_INC
|
||||
#define LLVM_INCLUDE_COMPILER_DRIVER_MAIN_INC
|
||||
|
||||
#include "llvm/CompilerDriver/BuiltinOptions.h"
|
||||
#include "llvm/CompilerDriver/CompilationGraph.h"
|
||||
#include "llvm/CompilerDriver/Error.h"
|
||||
#include "llvm/CompilerDriver/ForceLinkage.h"
|
||||
@ -58,27 +59,56 @@ cl::opt<bool> WriteGraph("write-graph",
|
||||
cl::opt<bool> ViewGraph("view-graph",
|
||||
cl::desc("Show compilation graph in GhostView"),
|
||||
cl::Hidden);
|
||||
cl::opt<bool> SaveTemps("save-temps",
|
||||
cl::desc("Keep temporary files"),
|
||||
cl::Hidden);
|
||||
|
||||
cl::opt<SaveTempsEnum::Values> SaveTemps
|
||||
("save-temps", cl::desc("Keep temporary files"),
|
||||
cl::init(SaveTempsEnum::Unset),
|
||||
cl::values(clEnumValN(SaveTempsEnum::Obj, "obj",
|
||||
"Save files in the directory specified with -o"),
|
||||
clEnumValN(SaveTempsEnum::Cwd, "cwd",
|
||||
"Use current working directory"),
|
||||
clEnumValN(SaveTempsEnum::Obj, "", "Same as 'cwd'"),
|
||||
clEnumValEnd),
|
||||
cl::ValueOptional);
|
||||
|
||||
namespace {
|
||||
|
||||
sys::Path getTempDir() {
|
||||
sys::Path tempDir;
|
||||
|
||||
// GCC 4.5-style -save-temps handling.
|
||||
if (SaveTemps == SaveTempsEnum::Unset) {
|
||||
tempDir = sys::Path::GetTemporaryDirectory();
|
||||
}
|
||||
else if (SaveTemps == SaveTempsEnum::Obj && !OutputFilename.empty()) {
|
||||
tempDir = OutputFilename;
|
||||
|
||||
if (!tempDir.exists()) {
|
||||
std::string ErrMsg;
|
||||
if (tempDir.createDirectoryOnDisk(true, &ErrMsg))
|
||||
throw std::runtime_error(ErrMsg);
|
||||
}
|
||||
}
|
||||
// else if (SaveTemps == Cwd) -> use current dir (leave tempDir empty)
|
||||
|
||||
return tempDir;
|
||||
}
|
||||
|
||||
/// BuildTargets - A small wrapper for CompilationGraph::Build.
|
||||
int BuildTargets(CompilationGraph& graph, const LanguageMap& langMap) {
|
||||
int ret;
|
||||
const sys::Path& tempDir = SaveTemps
|
||||
? sys::Path("")
|
||||
: sys::Path(sys::Path::GetTemporaryDirectory());
|
||||
const sys::Path& tempDir = getTempDir();
|
||||
|
||||
try {
|
||||
ret = graph.Build(tempDir, langMap);
|
||||
}
|
||||
catch(...) {
|
||||
tempDir.eraseFromDisk(true);
|
||||
if (SaveTemps == SaveTempsEnum::Unset)
|
||||
tempDir.eraseFromDisk(true);
|
||||
throw;
|
||||
}
|
||||
|
||||
if (!SaveTemps)
|
||||
if (SaveTemps == SaveTempsEnum::Unset)
|
||||
tempDir.eraseFromDisk(true);
|
||||
return ret;
|
||||
}
|
||||
|
@ -12,8 +12,8 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/CompilerDriver/Action.h"
|
||||
#include "llvm/CompilerDriver/BuiltinOptions.h"
|
||||
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/System/Program.h"
|
||||
|
||||
#include <iostream>
|
||||
@ -22,9 +22,6 @@
|
||||
using namespace llvm;
|
||||
using namespace llvmc;
|
||||
|
||||
extern cl::opt<bool> DryRun;
|
||||
extern cl::opt<bool> VerboseMode;
|
||||
|
||||
namespace {
|
||||
int ExecuteProgram(const std::string& name,
|
||||
const StrVector& args) {
|
||||
|
@ -11,11 +11,11 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/CompilerDriver/BuiltinOptions.h"
|
||||
#include "llvm/CompilerDriver/CompilationGraph.h"
|
||||
#include "llvm/CompilerDriver/Error.h"
|
||||
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/DOTGraphTraits.h"
|
||||
#include "llvm/Support/GraphWriter.h"
|
||||
|
||||
@ -30,9 +30,6 @@
|
||||
using namespace llvm;
|
||||
using namespace llvmc;
|
||||
|
||||
extern cl::list<std::string> InputFilenames;
|
||||
extern cl::list<std::string> Languages;
|
||||
|
||||
namespace llvmc {
|
||||
|
||||
const std::string& LanguageMap::GetLanguage(const sys::Path& File) const {
|
||||
@ -477,7 +474,7 @@ namespace llvm {
|
||||
{
|
||||
|
||||
template<typename GraphType>
|
||||
static std::string getNodeLabel(const Node* N, const GraphType&,
|
||||
static std::string getNodeLabel(const Node* N, const GraphType&,
|
||||
bool ShortNames)
|
||||
{
|
||||
if (N->ToolPtr)
|
||||
|
@ -11,16 +11,14 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/CompilerDriver/BuiltinOptions.h"
|
||||
#include "llvm/CompilerDriver/Tool.h"
|
||||
|
||||
#include "llvm/System/Path.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
|
||||
using namespace llvm;
|
||||
using namespace llvmc;
|
||||
|
||||
extern cl::opt<std::string> OutputFilename;
|
||||
|
||||
namespace {
|
||||
sys::Path MakeTempFile(const sys::Path& TempDir, const std::string& BaseName,
|
||||
const std::string& Suffix) {
|
||||
@ -39,7 +37,7 @@ namespace {
|
||||
// NOTE: makeUnique always *creates* a unique temporary file,
|
||||
// which is good, since there will be no races. However, some
|
||||
// tools do not like it when the output file already exists, so
|
||||
// they have to be placated with -f or something like that.
|
||||
// they need to be placated with -f or something like that.
|
||||
Out.makeUnique(true, NULL);
|
||||
return Out;
|
||||
}
|
||||
@ -52,7 +50,7 @@ sys::Path Tool::OutFilename(const sys::Path& In,
|
||||
sys::Path Out;
|
||||
|
||||
if (StopCompilation) {
|
||||
if (!OutputFilename.empty()) {
|
||||
if (!OutputFilename.empty() && SaveTemps != SaveTempsEnum::Obj ) {
|
||||
Out.set(OutputFilename);
|
||||
}
|
||||
else if (IsJoin()) {
|
||||
|
Loading…
Reference in New Issue
Block a user