From b90cd834ca5a849fcfcb6bbca5d38f73f5c37fcf Mon Sep 17 00:00:00 2001 From: Mikhail Glushenkov Date: Tue, 6 May 2008 16:34:12 +0000 Subject: [PATCH] Code reorg git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50722 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/llvmc2/Action.cpp | 58 +++++++++++++++++++ tools/llvmc2/Action.h | 36 ++++++++++++ tools/llvmc2/{Tools.cpp => AutoGenerated.cpp} | 14 ++--- tools/llvmc2/{Tools.h => AutoGenerated.h} | 18 +++--- .../llvmc2/{Core.cpp => CompilationGraph.cpp} | 35 ++--------- tools/llvmc2/CompilationGraph.h | 36 ++++++++++++ tools/llvmc2/Makefile | 6 +- tools/llvmc2/Tool.cpp | 21 +++++++ tools/llvmc2/{Core.h => Tool.h} | 42 +++----------- tools/llvmc2/Utility.cpp | 39 ------------- tools/llvmc2/Utility.h | 27 --------- tools/llvmc2/{llvmcc.cpp => llvmc.cpp} | 11 ++-- utils/TableGen/LLVMCCConfigurationEmitter.cpp | 4 +- 13 files changed, 190 insertions(+), 157 deletions(-) create mode 100644 tools/llvmc2/Action.cpp create mode 100644 tools/llvmc2/Action.h rename tools/llvmc2/{Tools.cpp => AutoGenerated.cpp} (72%) rename tools/llvmc2/{Tools.h => AutoGenerated.h} (57%) rename tools/llvmc2/{Core.cpp => CompilationGraph.cpp} (76%) create mode 100644 tools/llvmc2/CompilationGraph.h create mode 100644 tools/llvmc2/Tool.cpp rename tools/llvmc2/{Core.h => Tool.h} (58%) delete mode 100644 tools/llvmc2/Utility.cpp delete mode 100644 tools/llvmc2/Utility.h rename tools/llvmc2/{llvmcc.cpp => llvmc.cpp} (91%) diff --git a/tools/llvmc2/Action.cpp b/tools/llvmc2/Action.cpp new file mode 100644 index 00000000000..82a1e0c4c96 --- /dev/null +++ b/tools/llvmc2/Action.cpp @@ -0,0 +1,58 @@ +//===--- Tools.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. +// +//===----------------------------------------------------------------------===// +// +// Action class - implementation and auxiliary functions. +// +//===----------------------------------------------------------------------===// + +#include "Action.h" + +#include "llvm/Support/CommandLine.h" +#include "llvm/System/Program.h" + +#include +#include + +using namespace llvm; + +extern cl::opt VerboseMode; + +namespace { + int ExecuteProgram(const std::string& name, + const std::vector& args) { + sys::Path prog = sys::Program::FindProgramByName(name); + + if (prog.isEmpty()) + throw std::runtime_error("Can't find program '" + name + "'"); + if (!prog.canExecute()) + throw std::runtime_error("Program '" + name + "' is not executable."); + + // Invoke the program + std::vector argv((args.size()+2)); + argv[0] = name.c_str(); + for (unsigned i = 1; i <= args.size(); ++i) + argv[i] = args[i-1].c_str(); + argv[args.size()+1] = 0; // null terminate list. + + return sys::Program::ExecuteAndWait(prog, &argv[0]); + } + + void print_string (const std::string& str) { + std::cerr << str << ' '; + } +} + +int llvmcc::Action::Execute() { + if (VerboseMode) { + std::cerr << Command_ << " "; + std::for_each(Args_.begin(), Args_.end(), print_string); + std::cerr << '\n'; + } + return ExecuteProgram(Command_, Args_); +} diff --git a/tools/llvmc2/Action.h b/tools/llvmc2/Action.h new file mode 100644 index 00000000000..43495c463aa --- /dev/null +++ b/tools/llvmc2/Action.h @@ -0,0 +1,36 @@ +//===--- Tools.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. +// +//===----------------------------------------------------------------------===// +// +// Action - encapsulates a single shell command. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_TOOLS_LLVMC2_ACTION_H +#define LLVM_TOOLS_LLVMC2_ACTION_H + +#include +#include + +namespace llvmcc { + + class Action { + std::string Command_; + std::vector Args_; + public: + Action (std::string const& C, + std::vector const& A) + : Command_(C), Args_(A) + {} + + int Execute(); + }; + +} + +#endif // LLVM_TOOLS_LLVMC2_ACTION_H diff --git a/tools/llvmc2/Tools.cpp b/tools/llvmc2/AutoGenerated.cpp similarity index 72% rename from tools/llvmc2/Tools.cpp rename to tools/llvmc2/AutoGenerated.cpp index 7a9921c54b7..327e8e758e3 100644 --- a/tools/llvmc2/Tools.cpp +++ b/tools/llvmc2/AutoGenerated.cpp @@ -7,22 +7,20 @@ // //===----------------------------------------------------------------------===// // -// Auto-generated tool descriptions. +// Auto-generated tool descriptions - implementation. // //===----------------------------------------------------------------------===// -#include "Tools.h" -#include "Core.h" +#include "AutoGenerated.h" +#include "CompilationGraph.h" +#include "Tool.h" -#include "llvm/ADT/IntrusiveRefCntPtr.h" #include "llvm/Support/CommandLine.h" #include -#include -#include using namespace llvm; using namespace llvmcc; -// Include the auto-generated file -#include "Tools.inc" +// The auto-generated file +#include "AutoGenerated.inc" diff --git a/tools/llvmc2/Tools.h b/tools/llvmc2/AutoGenerated.h similarity index 57% rename from tools/llvmc2/Tools.h rename to tools/llvmc2/AutoGenerated.h index ba8f06dbd6d..686ae3feaff 100644 --- a/tools/llvmc2/Tools.h +++ b/tools/llvmc2/AutoGenerated.h @@ -1,4 +1,4 @@ -//===--- Tools.h - The LLVM Compiler Driver ---------------------*- C++ -*-===// +//===--- Tools.cpp - The LLVM Compiler Driver -------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -7,20 +7,24 @@ // //===----------------------------------------------------------------------===// // -// Auto-generated tool descriptions. +// Auto-generated tool descriptions - public interface. // //===----------------------------------------------------------------------===// -#ifndef LLVM_TOOLS_LLVMCC_TOOLS_H -#define LLVM_TOOLS_LLVMCC_TOOLS_H +#ifndef LLVM_TOOLS_LLVMC2_AUTOGENERATED_H +#define LLVM_TOOLS_LLVMC2_AUTOGENERATED_H -#include "Core.h" +#include "llvm/ADT/StringMap.h" + +#include namespace llvmcc { + typedef llvm::StringMap LanguageMap; + class CompilationGraph; + void PopulateLanguageMap(LanguageMap& language_map); void PopulateCompilationGraph(CompilationGraph& tools); - } -#endif //LLVM_TOOLS_LLVMCC_TOOLS_H +#endif // LLVM_TOOLS_LLVMC2_AUTOGENERATED_H diff --git a/tools/llvmc2/Core.cpp b/tools/llvmc2/CompilationGraph.cpp similarity index 76% rename from tools/llvmc2/Core.cpp rename to tools/llvmc2/CompilationGraph.cpp index d08ee7c00fa..36e5fc7c0ab 100644 --- a/tools/llvmc2/Core.cpp +++ b/tools/llvmc2/CompilationGraph.cpp @@ -1,4 +1,4 @@ -//===--- Core.cpp - The LLVM Compiler Driver --------------------*- C++ -*-===// +//===--- CompilationGraph.cpp - The LLVM Compiler Driver --------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -7,42 +7,21 @@ // //===----------------------------------------------------------------------===// // -// Core driver abstractions. +// Compilation graph - implementation. // //===----------------------------------------------------------------------===// -#include "Core.h" -#include "Utility.h" +#include "CompilationGraph.h" -#include "llvm/ADT/STLExtras.h" -#include "llvm/ADT/StringExtras.h" #include "llvm/Support/CommandLine.h" +#include "llvm/ADT/STLExtras.h" -#include -#include #include using namespace llvm; -using namespace llvmcc; extern cl::list InputFilenames; extern cl::opt OutputFilename; -extern cl::opt VerboseMode; - -namespace { - void print_string (const std::string& str) { - std::cerr << str << ' '; - } -} - -int llvmcc::Action::Execute() { - if (VerboseMode) { - std::cerr << Command_ << " "; - std::for_each(Args_.begin(), Args_.end(), print_string); - std::cerr << '\n'; - } - return ExecuteProgram(Command_, Args_); -} int llvmcc::CompilationGraph::Build (const sys::Path& tempDir) const { sys::Path In(InputFilenames.at(0)), Out; @@ -107,9 +86,3 @@ int llvmcc::CompilationGraph::Build (const sys::Path& tempDir) const { return 0; } - -void llvmcc::Tool::UnpackValues (const std::string& from, - std::vector& to) const { - SplitString(from, to, ","); -} - diff --git a/tools/llvmc2/CompilationGraph.h b/tools/llvmc2/CompilationGraph.h new file mode 100644 index 00000000000..c34b58ff5e4 --- /dev/null +++ b/tools/llvmc2/CompilationGraph.h @@ -0,0 +1,36 @@ +//===--- CompilationGraph.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. +// +//===----------------------------------------------------------------------===// +// +// Compilation graph - definition. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_TOOLS_LLVMC2_COMPILATION_GRAPH_H +#define LLVM_TOOLS_LLVMC2_COMPILATION_GRAPH_H + +#include "AutoGenerated.h" +#include "Tool.h" + +#include "llvm/ADT/StringMap.h" +#include "llvm/System/Path.h" + +namespace llvmcc { + + typedef std::vector > ToolChain; + typedef llvm::StringMap ToolChainMap; + + struct CompilationGraph { + ToolChainMap ToolChains; + LanguageMap ExtsToLangs; + + int Build(llvm::sys::Path const& tempDir) const; + }; +} + +#endif // LLVM_TOOLS_LLVMC2_COMPILATION_GRAPH_H diff --git a/tools/llvmc2/Makefile b/tools/llvmc2/Makefile index ab8ff478c90..8fe1e818712 100644 --- a/tools/llvmc2/Makefile +++ b/tools/llvmc2/Makefile @@ -8,7 +8,7 @@ ##===----------------------------------------------------------------------===## LEVEL = ../.. TOOLNAME = llvmc2 -BUILT_SOURCES = Tools.inc +BUILT_SOURCES = AutoGenerated.inc LINK_COMPONENTS = support system REQUIRES_EH := 1 @@ -23,10 +23,10 @@ endif # TOFIX: integrate this part into Makefile.rules? # The degree of horrorshowness in that file is too much for me atm. -$(ObjDir)/Tools.inc.tmp: $(TOOLS_SOURCE) $(ObjDir)/.dir +$(ObjDir)/AutoGenerated.inc.tmp: $(TOOLS_SOURCE) $(ObjDir)/.dir $(Echo) "Building LLVMCC configuration library with tblgen" $(Verb) $(TableGen) -gen-llvmcc -o $(call SYSPATH, $@) $< -Tools.inc : $(ObjDir)/Tools.inc.tmp +AutoGenerated.inc : $(ObjDir)/AutoGenerated.inc.tmp $(Verb) $(CMP) -s $@ $< || $(CP) $< $@ diff --git a/tools/llvmc2/Tool.cpp b/tools/llvmc2/Tool.cpp new file mode 100644 index 00000000000..d0e703a9c1c --- /dev/null +++ b/tools/llvmc2/Tool.cpp @@ -0,0 +1,21 @@ +//===--- Tools.cpp - 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. +// +//===----------------------------------------------------------------------===// +// +// Tool abstract base class - implementation of the auxiliary functions. +// +//===----------------------------------------------------------------------===// + +#include "Tool.h" + +#include "llvm/ADT/StringExtras.h" + +void llvmcc::Tool::UnpackValues (const std::string& from, + std::vector& to) { + llvm::SplitString(from, to, ","); +} diff --git a/tools/llvmc2/Core.h b/tools/llvmc2/Tool.h similarity index 58% rename from tools/llvmc2/Core.h rename to tools/llvmc2/Tool.h index f82e0fa98ea..b0cd2373038 100644 --- a/tools/llvmc2/Core.h +++ b/tools/llvmc2/Tool.h @@ -1,4 +1,4 @@ -//===--- Core.h - The LLVM Compiler Driver ----------------------*- C++ -*-===// +//===--- Tools.h - The LLVM Compiler Driver ---------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -7,41 +7,24 @@ // //===----------------------------------------------------------------------===// // -// Core driver abstractions. +// Tool abstract base class - an interface to tool descriptions. // //===----------------------------------------------------------------------===// -#ifndef LLVM_TOOLS_LLVMCC_CORE_H -#define LLVM_TOOLS_LLVMCC_CORE_H +#ifndef LLVM_TOOLS_LLVMC2_TOOL_H +#define LLVM_TOOLS_LLVMC2_TOOL_H -#include "Utility.h" +#include "Action.h" #include "llvm/ADT/IntrusiveRefCntPtr.h" -#include "llvm/ADT/StringMap.h" #include "llvm/System/Path.h" -#include #include #include -// Core functionality - namespace llvmcc { typedef std::vector PathVector; - typedef llvm::StringMap LanguageMap; - - class Action { - std::string Command_; - std::vector Args_; - public: - Action (std::string const& C, - std::vector const& A) - : Command_(C), Args_(A) - {} - - int Execute(); - }; class Tool : public llvm::RefCountedBaseVPTR { public: @@ -62,22 +45,13 @@ namespace llvmcc { // Helper function that is called by the auto-generated code // Splits strings of the form ",-foo,-bar,-baz" // TOFIX: find a better name - void UnpackValues (std::string const& from, - std::vector& to) const; + static void UnpackValues (std::string const& from, + std::vector& to); virtual ~Tool() {} }; - typedef std::vector > ToolChain; - typedef llvm::StringMap ToolChainMap; - - struct CompilationGraph { - ToolChainMap ToolChains; - LanguageMap ExtsToLangs; - - int Build(llvm::sys::Path const& tempDir) const; - }; } -#endif // LLVM_TOOLS_LLVMCC_CORE_H +#endif //LLVM_TOOLS_LLVMC2_TOOL_H diff --git a/tools/llvmc2/Utility.cpp b/tools/llvmc2/Utility.cpp deleted file mode 100644 index c53578ad44b..00000000000 --- a/tools/llvmc2/Utility.cpp +++ /dev/null @@ -1,39 +0,0 @@ -//===--- Utility.cpp - 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. -// -//===----------------------------------------------------------------------===// -// -// Various helper and utility functions - implementation. -// -//===----------------------------------------------------------------------===// - -#include "Utility.h" - -#include "llvm/System/Program.h" - -#include - -using namespace llvm; - -int llvmcc::ExecuteProgram(const std::string& name, - const std::vector& args) { - sys::Path prog = sys::Program::FindProgramByName(name); - - if (prog.isEmpty()) - throw std::runtime_error("Can't find program '" + name + "'"); - if (!prog.canExecute()) - throw std::runtime_error("Program '" + name + "' is not executable."); - - // Invoke the program - std::vector argv((args.size()+2)); - argv[0] = name.c_str(); - for (unsigned i = 1; i <= args.size(); ++i) - argv[i] = args[i-1].c_str(); - argv[args.size()+1] = 0; // null terminate list. - - return sys::Program::ExecuteAndWait(prog, &argv[0]); -} diff --git a/tools/llvmc2/Utility.h b/tools/llvmc2/Utility.h deleted file mode 100644 index 3c985a49fc9..00000000000 --- a/tools/llvmc2/Utility.h +++ /dev/null @@ -1,27 +0,0 @@ -//===--- Utility.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. -// -//===----------------------------------------------------------------------===// -// -// Various helper and utility functions. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_TOOLS_LLVMCC_UTILITY_H -#define LLVM_TOOLS_LLVMCC_UTILITY_H - -#include -#include - -namespace llvmcc { - - int ExecuteProgram (const std::string& name, - const std::vector& arguments); - -} - -#endif // LLVM_TOOLS_LLVMCC_UTILITY_H diff --git a/tools/llvmc2/llvmcc.cpp b/tools/llvmc2/llvmc.cpp similarity index 91% rename from tools/llvmc2/llvmcc.cpp rename to tools/llvmc2/llvmc.cpp index c5edac96062..feed61f89f1 100644 --- a/tools/llvmc2/llvmcc.cpp +++ b/tools/llvmc2/llvmc.cpp @@ -14,9 +14,8 @@ // //===----------------------------------------------------------------------===// -#include "Core.h" -#include "Utility.h" -#include "Tools.h" +#include "CompilationGraph.h" +#include "Tool.h" #include "llvm/System/Path.h" #include "llvm/Support/CommandLine.h" @@ -25,11 +24,11 @@ #include #include -using namespace llvm; +namespace cl = llvm::cl; +namespace sys = llvm::sys; using namespace llvmcc; -// These variables are also used in Core.cpp, -// so they should have external linkage. +// External linkage here is intentional. cl::list InputFilenames(cl::Positional, cl::desc(""), cl::OneOrMore); cl::opt OutputFilename("o", cl::desc("Output file name"), diff --git a/utils/TableGen/LLVMCCConfigurationEmitter.cpp b/utils/TableGen/LLVMCCConfigurationEmitter.cpp index 9c6f0644601..7723ed96bfa 100644 --- a/utils/TableGen/LLVMCCConfigurationEmitter.cpp +++ b/utils/TableGen/LLVMCCConfigurationEmitter.cpp @@ -623,10 +623,10 @@ void EmitOptionPropertyHandlingCode (const ToolProperties& P, << "::iterator B = " << D.GenVariableName() << ".begin(),\n" << Indent3 << "E = " << D.GenVariableName() << ".end(); B != E; ++B)\n" - << Indent4 << "UnpackValues(*B, vec);\n"; + << Indent4 << "Tool::UnpackValues(*B, vec);\n"; } else if (D.Type == OptionType::Prefix || D.Type == OptionType::Parameter){ - O << Indent3 << "UnpackValues(" + O << Indent3 << "Tool::UnpackValues(" << D.GenVariableName() << ", vec);\n"; } else { -- 2.34.1