blob: bf3827581c854d1bcc2d73bc324d08d5fea72dd1 [file] [log] [blame]
Reid Spencercbabe7f2004-08-19 21:17:53 +00001//===- Configuration.h - Configuration Data Mgmt ----------------*- C++ -*-===//
Misha Brukman3da94ae2005-04-22 00:00:37 +00002//
Reid Spencer2594c9a2004-08-13 20:21:22 +00003// The LLVM Compiler Infrastructure
4//
Misha Brukman3da94ae2005-04-22 00:00:37 +00005// This file was developed by Reid Spencer and is distributed under the
Reid Spencer2594c9a2004-08-13 20:21:22 +00006// University of Illinois Open Source License. See LICENSE.TXT for details.
Misha Brukman3da94ae2005-04-22 00:00:37 +00007//
Reid Spencer2594c9a2004-08-13 20:21:22 +00008//===----------------------------------------------------------------------===//
9//
10// This file declares the LLVMC_ConfigDataProvider class which implements the
11// generation of ConfigData objects for the CompilerDriver.
12//
Chris Lattner74f48d12006-05-29 18:52:05 +000013//===----------------------------------------------------------------------===//
14
Reid Spencer2594c9a2004-08-13 20:21:22 +000015#ifndef LLVM_TOOLS_LLVMC_CONFIGDATA_H
16#define LLVM_TOOLS_LLVMC_CONFIGDATA_H
17
18#include "CompilerDriver.h"
Reid Spencer551ccae2004-09-01 22:55:40 +000019#include <llvm/ADT/hash_map>
Reid Spencer2594c9a2004-08-13 20:21:22 +000020
21namespace llvm {
22 /// This class provides the high level interface to the LLVM Compiler Driver.
23 /// The driver's purpose is to make it easier for compiler writers and users
24 /// of LLVM to utilize the compiler toolkits and LLVM toolset by learning only
25 /// the interface of one program (llvmc).
Misha Brukman3da94ae2005-04-22 00:00:37 +000026 ///
Reid Spencer2594c9a2004-08-13 20:21:22 +000027 /// @see llvmc.cpp
28 /// @brief The interface to the LLVM Compiler Driver.
29 class LLVMC_ConfigDataProvider : public CompilerDriver::ConfigDataProvider {
30 /// @name Constructor
31 /// @{
32 public:
Reid Spencer2594c9a2004-08-13 20:21:22 +000033 virtual ~LLVMC_ConfigDataProvider();
34
35 /// @name Methods
36 /// @{
37 public:
38 /// @brief Provide the configuration data to the CompilerDriver.
Misha Brukman3da94ae2005-04-22 00:00:37 +000039 virtual CompilerDriver::ConfigData*
Reid Spencer2594c9a2004-08-13 20:21:22 +000040 ProvideConfigData(const std::string& filetype);
41
42 /// @brief Allow the configuration directory to be set
Misha Brukman3da94ae2005-04-22 00:00:37 +000043 virtual void setConfigDir(const sys::Path& dirName) {
44 configDir = dirName;
Reid Spencer52c2dc12004-08-29 19:26:56 +000045 }
Reid Spencer2594c9a2004-08-13 20:21:22 +000046
Reid Spencer68fb37a2004-08-14 09:37:15 +000047 private:
48 CompilerDriver::ConfigData* ReadConfigData(const std::string& ftype);
49
Reid Spencer2594c9a2004-08-13 20:21:22 +000050 /// @}
51 /// @name Data
52 /// @{
53 private:
54 /// @brief This type is used internally to hold the configuration data.
Chris Lattner83f7c372004-10-25 19:09:41 +000055 typedef hash_map<std::string,CompilerDriver::ConfigData*> ConfigDataMap;
Reid Spencer2594c9a2004-08-13 20:21:22 +000056 ConfigDataMap Configurations; ///< The cache of configurations
Reid Spencer52c2dc12004-08-29 19:26:56 +000057 sys::Path configDir;
Reid Spencer2594c9a2004-08-13 20:21:22 +000058 /// @}
59 };
60}
61
62#endif