llvm-6502/include/llvm/CompilerDriver/Plugin.h

82 lines
2.6 KiB
C
Raw Normal View History

//===--- Plugin.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.
//
//===----------------------------------------------------------------------===//
//
// Plugin support for llvmc.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_INCLUDE_COMPILER_DRIVER_PLUGIN_H
#define LLVM_INCLUDE_COMPILER_DRIVER_PLUGIN_H
#include "llvm/Support/Registry.h"
namespace llvmc {
class LanguageMap;
class CompilationGraph;
/// BasePlugin - An abstract base class for all LLVMC plugins.
struct BasePlugin {
/// Priority - Plugin priority, useful for handling dependencies
/// between plugins. Plugins with lower priorities are loaded
/// first.
virtual int Priority() const { return 0; }
/// PreprocessOptions - The auto-generated function that performs various
/// consistency checks on options (like ensuring that -O2 and -O3 are not
/// used together).
virtual int PreprocessOptions() const = 0;
/// PopulateLanguageMap - The auto-generated function that fills in
/// the language map (map from file extensions to language names).
virtual int PopulateLanguageMap(LanguageMap&) const = 0;
/// PopulateCompilationGraph - The auto-generated function that
/// populates the compilation graph with nodes and edges.
virtual int PopulateCompilationGraph(CompilationGraph&) const = 0;
/// Needed to avoid a compiler warning.
virtual ~BasePlugin() {}
};
typedef llvm::Registry<BasePlugin> PluginRegistry;
template <class P>
struct RegisterPlugin
: public PluginRegistry::Add<P> {
typedef PluginRegistry::Add<P> Base;
RegisterPlugin(const char* Name = "Nameless",
const char* Desc = "Auto-generated plugin")
: Base(Name, Desc) {}
};
/// PluginLoader - Helper class used by the main program for
/// lifetime management.
struct PluginLoader {
PluginLoader();
~PluginLoader();
/// RunInitialization - Calls PreprocessOptions, PopulateLanguageMap and
/// PopulateCompilationGraph methods of all plugins. This populates the
/// global language map and the compilation graph.
int RunInitialization(LanguageMap& langMap, CompilationGraph& graph) const;
private:
// noncopyable
PluginLoader(const PluginLoader& other);
const PluginLoader& operator=(const PluginLoader& other);
};
}
#endif // LLVM_INCLUDE_COMPILER_DRIVER_PLUGIN_H