CBuild
C++ build system with scripts written in c++
Loading...
Searching...
No Matches
Build.hpp
Go to the documentation of this file.
1
21#ifndef __CBUILD_TOOLCHAIN_HPP__
22#define __CBUILD_TOOLCHAIN_HPP__
23// C++ libraries
24#include "../map.hpp"
25#include "array"
26#include "string"
27#include "vector"
28// Project headers
31#include "../hasher/hasher.hpp"
33// Code
34namespace CBuild {
38typedef struct {
39 std::string path;
40 bool folder;
41} Path;
45typedef struct {
46 std::string path;
47 std::string id;
48 std::string name;
49 std::string headers_path;
54typedef enum { PRE, POST } stage;
59template <class T>
60concept HashImpl = std::is_base_of<CBuild::Hash, T>::value;
61typedef struct ToolState {};
65class Toolchain {
66 protected:
70 std::string name = "";
74 std::string id;
82 std::vector<std::string> depends;
86 std::vector<CBuild::Path> targets;
90 std::vector<std::string> compiler_args;
94 std::vector<std::string> link_args;
98 std::string compiler;
102 std::string linker;
106 std::string packer;
114 std::vector<CBuild::Project_dependency> project_deps;
118 bool dummy = false;
134 std::vector<std::string> pkg_config_include_entries;
142 std::vector<CBuild::Dependency*> dependency_list;
143
144 protected:
145 // Scratch variables
149 std::vector<std::string>* args;
153 bool force;
157 bool stdargs_lock = false;
158
159 protected:
160 /* Build stages */
164 virtual void pre_build() {};
168 virtual void post_build() {};
172 virtual void pre_link() {};
176 virtual void post_link() {};
180 virtual void build() = 0;
184 virtual void link() = 0;
188 virtual void link_pack() = 0;
189 /* Helper */
204 virtual std::string gen_out_file(std::string file);
205
206 public:
212 virtual std::string gen_out_name(std::string executable = ".run", std::string dyn_lib = ".so",
213 std::string stat_lib = ".a");
219 virtual void load_project_deps(std::string curr_path);
220
221 protected:
228 virtual std::string cmd_str(std::string in);
232 virtual void init();
233
234 public:
239 virtual void stdargs();
240
241 public:
243 virtual ~Toolchain() {}
244 std::string get_id() {
245 return this->id;
246 }
257 virtual void call(std::vector<std::string>* args, bool force = false, bool debug = false,
258 bool dummy = false);
264 virtual void run(std::vector<std::string>* args);
271 virtual void debug(std::vector<std::string>* args, std::vector<std::string>* pargs);
275 virtual void clear();
282 virtual void add_define(std::string define, std::string val = "");
288 virtual void add_undef(std::string define);
294 virtual void add_include(std::string include_path);
300 virtual void add_compile_arg(std::string arg);
306 virtual void add_link_arg(std::string arg);
314 virtual void add_library_include(std::string library);
323 virtual void add_library_dir(std::string include, std::string lib);
332 virtual void add_requirment(std::string task_, CBuild::stage run_stage = CBuild::PRE);
338 virtual void depends_on(std::string target);
342 virtual void warn();
346 virtual void static_analizer();
350 virtual void error();
354 virtual void multithreaded_target();
360 virtual void set_standart(std::string std_);
366 virtual void add_file(std::string path);
372 virtual void add_folder(std::string path);
378 virtual void set_type(CBuild::build_type type);
390 virtual void depends_on_project(std::string path, std::string name, std::string id,
391 std::string headers_path);
395 virtual void set_profiling_mode();
401 virtual void set_version_major(int version);
407 virtual std::array<std::string, 3> get_cmds();
417 virtual std::string get_compile_args();
421 virtual void crash() __attribute__((__noreturn__));
427 virtual void compile(std::string cmd);
433 virtual void add_pkgconfig_entry(std::string id);
439 virtual void set_hasher(Hash* hasher);
445 virtual void set_name(std::string name);
451 virtual void set_id(std::string id);
458};
462template <class T>
463concept ToolchainImpl = std::is_base_of<CBuild::Toolchain, T>::value;
464} // namespace CBuild
465#endif // __CBUILD_TOOLCHAIN_HPP__
Toolchain class.
Definition Build.hpp:65
std::vector< CBuild::Project_dependency > project_deps
Project dependencies.
Definition Build.hpp:114
virtual void clear()
Clear all caches and builded app.
Definition Build.cpp:723
virtual void add_undef(std::string define)
Add new undefine (undefine previvious define)
Definition Build.cpp:64
virtual std::string get_compile_args()
Get preprocessed compile args.
Definition Build.cpp:386
virtual void set_standart(std::string std_)
Set standart for code (-std=std_)
Definition Build.cpp:126
virtual void load_project_deps(std::string curr_path)
Load all project dependencies.
Definition Build.cpp:478
bool force
Force argument (scratch variable)
Definition Build.hpp:153
std::string packer
ar command for packing static libraries
Definition Build.hpp:106
std::string get_id()
Definition Build.hpp:244
virtual void link_pack()=0
Linking for static libraries.
virtual void set_version_major(int version)
Set major version component, used in -Wl,-soname
Definition Build.cpp:153
virtual void debug(std::vector< std::string > *args, std::vector< std::string > *pargs)
Build program in debug mode and after run gdb on it.
Definition Build.cpp:698
Hash * hasher
Hasher used here.
Definition Build.hpp:138
bool gen_out_name_without_base_path
gen_out_name() dont prepend base path
Definition Build.hpp:126
std::vector< CBuild::Path > targets
Target files or folders.
Definition Build.hpp:86
virtual void add_include(std::string include_path)
Add compile-time include.
Definition Build.cpp:73
virtual ~Toolchain()
Definition Build.hpp:243
virtual void run(std::vector< std::string > *args)
Run builded app.
Definition Build.cpp:677
virtual void post_link()
After linking.
Definition Build.hpp:176
virtual void build()=0
Build.
virtual void add_compile_arg(std::string arg)
Directly add compiler argument.
Definition Build.cpp:38
void add_external_dependency(CBuild::Dependency *dep)
Add external dependency to this toolchain.
Definition Build.cpp:172
virtual void add_pkgconfig_entry(std::string id)
Add a lib, data for what need to be searched using pkg-config tool.
Definition Build.cpp:160
virtual void compile(std::string cmd)
Call compiler.
Definition Build.cpp:504
virtual void add_requirment(std::string task_, CBuild::stage run_stage=CBuild::PRE)
Add required task, that task will be executed before toolchain, it can have dependecies,...
Definition Build.cpp:104
virtual void post_build()
After build.
Definition Build.hpp:168
std::string name
Name of output, if undefined (""), for id is used for binary name.
Definition Build.hpp:70
virtual void set_id(std::string id)
Change id of this toolchain, if done after registering it can brake things.
Definition Build.cpp:169
virtual lib::map< std::string, std::string > gen_file_list_force()
Generate list of all files, that is tracked by this target.
Definition Build.cpp:379
std::vector< std::string > link_args
Linker args (specified and generated)
Definition Build.hpp:94
virtual void error()
Add -Werror.
Definition Build.cpp:122
virtual void add_folder(std::string path)
Add folder to compile path, scan is not recursive.
Definition Build.cpp:187
virtual void pre_build()
Before build.
Definition Build.hpp:164
virtual void set_name(std::string name)
Change out file name.
Definition Build.cpp:166
virtual void add_library_include(std::string library)
Add system library include, library include folder need to be in PATH.
Definition Build.cpp:83
bool gen_file_list_for_linking
Generate file list for linking - force and no changes to hashes.
Definition Build.hpp:130
virtual lib::map< std::string, std::string > gen_file_list(bool force)
Generate list of files that need to be compiles.
Definition Build.cpp:216
virtual void call(std::vector< std::string > *args, bool force=false, bool debug=false, bool dummy=false)
Call tollchain to execute.
Definition Build.cpp:572
std::string id
Must be initialized in derived classes.
Definition Build.hpp:74
virtual std::string gen_out_name(std::string executable=".run", std::string dyn_lib=".so", std::string stat_lib=".a")
Generate output file name (after linking)
Definition Build.cpp:394
virtual void set_hasher(Hash *hasher)
Set used hasher for this target.
Definition Build.cpp:163
virtual void add_define(std::string define, std::string val="")
Add new define.
Definition Build.cpp:50
std::vector< std::string > compiler_args
Compiler args (specified and generated)
Definition Build.hpp:90
virtual void add_library_dir(std::string include, std::string lib)
Add library include directory (with *.h files) and directory with library *.a and *....
Definition Build.cpp:92
virtual void add_file(std::string path)
Add file for compilation.
Definition Build.cpp:176
int version_major
Major version, can be necesary for shared libraries.
Definition Build.hpp:122
bool dummy
We do dummy compilation.
Definition Build.hpp:118
lib::map< std::string, CBuild::stage > required
Save task id with run stage sprecified for this task.
Definition Build.hpp:78
virtual void multithreaded_target()
Add -pthread argument.
Definition Build.cpp:156
virtual void add_link_arg(std::string arg)
Add linker arguments.
Definition Build.cpp:44
bool stdargs_lock
Lock that specifies that stdargs() function need to do nothing.
Definition Build.hpp:157
virtual void set_type(CBuild::build_type type)
Set the type of build.
Definition Build.cpp:133
std::string linker
Linker command.
Definition Build.hpp:102
virtual void stdargs()
Add standard compile and link arguments into compilation Need to be publick for some hashers to work.
Definition Build.cpp:510
std::vector< std::string > pkg_config_include_entries
Libs that need to be searched in pkg-config.
Definition Build.hpp:134
virtual std::array< std::string, 3 > get_cmds()
Get all three commands from class - compile, linker and packer.
Definition Build.cpp:497
std::vector< std::string > depends
All other targets, that is needed for this target.
Definition Build.hpp:82
virtual std::string cmd_str(std::string in)
Replace spaces by "\ ".
Definition Build.cpp:443
virtual void set_profiling_mode()
Enable -pg for gprof.
Definition Build.cpp:149
virtual std::string gen_out_file(std::string file)
Generate output object file from input file.
Definition Build.cpp:199
virtual void init()
Initialize folder structure.
Definition Build.cpp:454
virtual void link()=0
Linking.
std::string compiler
Compiler command.
Definition Build.hpp:98
virtual void crash() __attribute__((__noreturn__))
Crash compilation, needed when gcc throws error.
Definition Build.cpp:500
virtual void warn()
Enable more warnings.
Definition Build.cpp:110
CBuild::build_type build_type
Type of build.
Definition Build.hpp:110
virtual void depends_on_project(std::string path, std::string name, std::string id, std::string headers_path)
Add another CBuild project as dependency.
Definition Build.cpp:140
virtual void static_analizer()
Enable static anlizer (very slow)
Definition Build.cpp:117
virtual void pre_link()
Before linking.
Definition Build.hpp:172
std::vector< std::string > * args
Argument pointer (scratch variable)
Definition Build.hpp:149
std::vector< CBuild::Dependency * > dependency_list
Dependencies.
Definition Build.hpp:142
virtual void depends_on(std::string target)
This target depends on other target.
Definition Build.cpp:136
Simple map implementation with some stack operation added.
Definition map.hpp:79
Hasher implementation.
Definition Build.hpp:60
Toolchain implementation.
Definition Build.hpp:463
Some external dependency. Base class.
Base class for generator of some output from command sequence.
Hasher base class and some helper functions This file implements some helper funtions,...
Old manual hasher.
Custom implementation of map datatype.
Filebuffer for CBuild ecosystem.
Definition Build.hpp:34
build_type
Definition Build.hpp:55
@ EXECUTABLE
Definition Build.hpp:55
@ STATIC_LIBRARY
Definition Build.hpp:55
@ DYNAMIC_LIBRARY
Definition Build.hpp:55
int version[]
Definition CBuild.cpp:556
stage
Type of depencesies for toolchain.
Definition Build.hpp:54
@ PRE
Definition Build.hpp:54
@ POST
Definition Build.hpp:54
Optional datatype.
Definition map.hpp:29
Path datatype.
Definition Build.hpp:38
bool folder
Definition Build.hpp:40
std::string path
Definition Build.hpp:39
Project dependency data.
Definition Build.hpp:45
std::string headers_path
Definition Build.hpp:49
Command for compile_commands.json.