1 /*
2  * This file is part of the Code::Blocks IDE and licensed under the GNU Lesser General Public License, version 3
3  * http://www.gnu.org/licenses/lgpl-3.0.html
4  */
5 
6 #ifndef COMPILEOPTIONSBASE_H
7 #define COMPILEOPTIONSBASE_H
8 
9 #include "globals.h"
10 #include <wx/hashmap.h>
11 
12 WX_DECLARE_STRING_HASH_MAP(wxString, StringHash);
13 
14 /// Enum which specifies which executable from the toolchain executables would be used for linking
15 /// the target.
16 enum class LinkerExecutableOption : int32_t
17 {
18     /// For C-only projects this is the same as CCompiler, for C++ or mixed projects this is the
19     /// same as CppCompiler.
20     AutoDetect = 0,
21     /// Use the C compiler executable.
22     CCompiler,
23     /// Use the C++ compiler executable.
24     CppCompiler,
25     /// Use the linker executable.
26     Linker,
27 
28     /// Not valid options, used for range checks.
29     Last,
30     First = AutoDetect
31 };
32 
33 /**
34   * This is a base class for all classes needing compilation parameters. It
35   * offers functions to get/set the following:\n
36   * \li Compiler options
37   * \li Linker options
38   * \li Compiler include dirs
39   * \li Resource compiler include dirs
40   * \li Linker include dirs
41   * \li Custom commands to be executed before/after build
42   * \li The settings modification status
43   * \n\n
44   * These settings are used by the compiler plugins to construct the necessary
45   * compilation commands.
46   */
47 class DLLIMPORT CompileOptionsBase
48 {
49     public:
50         CompileOptionsBase();
51         virtual ~CompileOptionsBase();
52 
53         virtual void AddPlatform(int platform);
54         virtual void RemovePlatform(int platform);
55         virtual void SetPlatforms(int platforms);
56         virtual int GetPlatforms() const;
57         virtual bool SupportsCurrentPlatform() const;
58 
59         virtual void SetLinkerOptions(const wxArrayString& linkerOpts);
60         virtual const wxArrayString& GetLinkerOptions() const;
61         virtual void AddLinkerOption(const wxString& option);
62         virtual void ReplaceLinkerOption(const wxString& option, const wxString& new_option);
63         virtual void RemoveLinkerOption(const wxString& option);
64 
65         virtual void SetLinkLibs(const wxArrayString& linkLibs);
66         virtual const wxArrayString& GetLinkLibs() const;
67         virtual void AddLinkLib(const wxString& option);
68         virtual void ReplaceLinkLib(const wxString& option, const wxString& new_option);
69         virtual void RemoveLinkLib(const wxString& option);
70 
71         virtual void SetLinkerExecutable(LinkerExecutableOption option);
72         virtual LinkerExecutableOption GetLinkerExecutable() const;
73 
74         virtual void SetCompilerOptions(const wxArrayString& compilerOpts);
75         virtual const wxArrayString& GetCompilerOptions() const;
76         virtual void AddCompilerOption(const wxString& option);
77         virtual void ReplaceCompilerOption(const wxString& option, const wxString& new_option);
78         virtual void RemoveCompilerOption(const wxString& option);
79 
80         virtual void SetResourceCompilerOptions(const wxArrayString& resourceCompilerOpts);
81         virtual const wxArrayString& GetResourceCompilerOptions() const;
82         virtual void AddResourceCompilerOption(const wxString& option);
83         virtual void ReplaceResourceCompilerOption(const wxString& option, const wxString& new_option);
84         virtual void RemoveResourceCompilerOption(const wxString& option);
85 
86         virtual void SetIncludeDirs(const wxArrayString& includeDirs);
87         virtual const wxArrayString& GetIncludeDirs() const;
88         virtual void AddIncludeDir(const wxString& option);
89         virtual void ReplaceIncludeDir(const wxString& option, const wxString& new_option);
90         virtual void RemoveIncludeDir(const wxString& option);
91 
92         virtual void SetResourceIncludeDirs(const wxArrayString& resIncludeDirs);
93         virtual const wxArrayString& GetResourceIncludeDirs() const;
94         virtual void AddResourceIncludeDir(const wxString& option);
95         virtual void ReplaceResourceIncludeDir(const wxString& option, const wxString& new_option);
96         virtual void RemoveResourceIncludeDir(const wxString& option);
97 
98         virtual void SetLibDirs(const wxArrayString& libDirs);
99         virtual const wxArrayString& GetLibDirs() const;
100         virtual void AddLibDir(const wxString& option);
101         virtual void ReplaceLibDir(const wxString& option, const wxString& new_option);
102         virtual void RemoveLibDir(const wxString& option);
103 
104         virtual void SetCommandsBeforeBuild(const wxArrayString& commands);
105         virtual const wxArrayString& GetCommandsBeforeBuild() const;
106         virtual void AddCommandsBeforeBuild(const wxString& command);
107         virtual void RemoveCommandsBeforeBuild(const wxString& command);
108 
109         virtual void SetCommandsAfterBuild(const wxArrayString& commands);
110         virtual const wxArrayString& GetCommandsAfterBuild() const;
111         virtual void AddCommandsAfterBuild(const wxString& command);
112         virtual void RemoveCommandsAfterBuild(const wxString& command);
113 
114         virtual void SetBuildScripts(const wxArrayString& scripts);
115         virtual const wxArrayString& GetBuildScripts() const;
116         virtual void AddBuildScript(const wxString& script);
117         virtual void RemoveBuildScript(const wxString& script);
118 
119         virtual bool GetModified() const;
120         virtual void SetModified(bool modified);
121 
122         virtual bool GetAlwaysRunPostBuildSteps() const;
123         virtual void SetAlwaysRunPostBuildSteps(bool always);
124 
125         virtual bool SetVar(const wxString& key, const wxString& value, bool onlyIfExists = false);
126         virtual bool UnsetVar(const wxString& key);
127         virtual void UnsetAllVars();
128         virtual bool HasVar(const wxString& key) const;
129         virtual const wxString& GetVar(const wxString& key) const;
130         virtual const StringHash& GetAllVars() const;
131     protected:
132         int m_Platform;
133         LinkerExecutableOption m_LinkerExecutable;
134         wxArrayString m_LinkerOptions;
135         wxArrayString m_LinkLibs;
136         wxArrayString m_CompilerOptions;
137         wxArrayString m_ResourceCompilerOptions;
138         wxArrayString m_IncludeDirs;
139         wxArrayString m_ResIncludeDirs;
140         wxArrayString m_LibDirs;
141         wxArrayString m_CmdsBefore;
142         wxArrayString m_CmdsAfter;
143         wxArrayString m_Scripts;
144         bool m_Modified;
145         bool m_AlwaysRunPostCmds;
146         StringHash m_Vars;
147     private:
148 };
149 
150 #endif // COMPILEOPTIONSBASE_H
151 
152