aboutsummaryrefslogtreecommitdiffstats
path: root/tools/llvmc2/Plugin.h
blob: ba22450697b31a33696348e1b6a3d89dd50d8b20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//===--- 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 llvmc2.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_TOOLS_LLVMC2_PLUGIN_H
#define LLVM_TOOLS_LLVMC2_PLUGIN_H

namespace llvmc {

  class LanguageMap;
  class CompilationGraph;

  /// BasePlugin - An abstract base class for all LLVMC plugins.
  struct BasePlugin {

    /// PopulateLanguageMap - The auto-generated function that fills in
    /// the language map (map from file extensions to language names).
    virtual void PopulateLanguageMap(LanguageMap&) const = 0;

    /// PopulateCompilationGraph - The auto-generated function that
    /// populates the compilation graph with nodes and edges.
    virtual void PopulateCompilationGraph(CompilationGraph&) const = 0;
  };

  // Helper class for RegisterPlugin.
  class RegisterPluginImpl {
  protected:
    RegisterPluginImpl(BasePlugin*);
  };

  /// RegisterPlugin<T> template - Used to register LLVMC plugins.
  template <class T>
  struct RegisterPlugin : RegisterPluginImpl {
    RegisterPlugin() : RegisterPluginImpl (new T()) {}
  };

  /// PopulateLanguageMap - Fills in the language map by calling
  /// PopulateLanguageMap methods of all plugins.
  void PopulateLanguageMap(LanguageMap& langMap);

  /// PopulateCompilationGraph - Populates the compilation graph by
  /// calling PopulateCompilationGraph methods of all plugins.
  void PopulateCompilationGraph(CompilationGraph& tools);

}

#endif // LLVM_TOOLS_LLVMC2_PLUGIN_H