summaryrefslogtreecommitdiff
path: root/tools/llvmc/Configuration.h
blob: 2ed565a80ed97704607b7677d2bcb397d7817bec (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
57
58
59
60
61
62
//===- Configuration.h - Configuration Data Mgmt ----------------*- C++ -*-===//
// 
//                     The LLVM Compiler Infrastructure
//
// This file was developed by Reid Spencer and is distributed under the 
// University of Illinois Open Source License. See LICENSE.TXT for details.
// 
//===----------------------------------------------------------------------===//
//
// This file declares the LLVMC_ConfigDataProvider class which implements the
// generation of ConfigData objects for the CompilerDriver.
//
//===------------------------------------------------------------------------===
#ifndef LLVM_TOOLS_LLVMC_CONFIGDATA_H
#define LLVM_TOOLS_LLVMC_CONFIGDATA_H

#include "CompilerDriver.h"
#include <Support/hash_map>

namespace llvm {
  /// This class provides the high level interface to the LLVM Compiler Driver.
  /// The driver's purpose is to make it easier for compiler writers and users
  /// of LLVM to utilize the compiler toolkits and LLVM toolset by learning only
  /// the interface of one program (llvmc).
  /// 
  /// @see llvmc.cpp
  /// @brief The interface to the LLVM Compiler Driver.
  class LLVMC_ConfigDataProvider : public CompilerDriver::ConfigDataProvider {
    /// @name Constructor
    /// @{
    public:
      virtual ~LLVMC_ConfigDataProvider();

    /// @name Methods
    /// @{
    public:
      /// @brief Provide the configuration data to the CompilerDriver.
      virtual CompilerDriver::ConfigData* 
        ProvideConfigData(const std::string& filetype);

      /// @brief Allow the configuration directory to be set
      virtual void setConfigDir(const sys::Path& dirName) { 
        configDir = dirName; 
      }

    private:
      CompilerDriver::ConfigData* ReadConfigData(const std::string& ftype);

    /// @}
    /// @name Data
    /// @{
    private:
      /// @brief This type is used internally to hold the configuration data.
      typedef hash_map<std::string,CompilerDriver::ConfigData*,
          hash<std::string>,std::equal_to<std::string> > ConfigDataMap;
      ConfigDataMap Configurations; ///< The cache of configurations
      sys::Path configDir;
    /// @}
  };
}

#endif