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