CBuild
C++ build system with scripts written in c++
Loading...
Searching...
No Matches
gcc_hash.hpp
Go to the documentation of this file.
1
22// C++ libraries
23#include "../map.hpp"
24#include "string"
25#include "vector"
26// Project includes
27#include "../build_data.hpp"
28#include "gcc_hash_impl.hpp"
29#include "hasher.hpp"
30// Code
31#ifndef __GCC_HASH_HPP__
32#define __GCC_HASH_HPP__
33namespace CBuild {
34class GCCHash : public CBuild::Hash {
35 protected:
36 public:
37 GCCHash(std::string target_id) : Hash(target_id) {}
39 get_files_for_recompilation(std::vector<std::string> file_list,
40 std::vector<std::string> objects_list) override {
41 if (file_list.size() != objects_list.size()) {
42 return {};
43 }
44 return CBuild::gcc_hash_impl(file_list, objects_list, this->target_id);
45 }
46 virtual int compare_and_set_cargs(std::vector<std::string> cargs) override {
48 if (CBuild::read_target_metadata(this->target_id, &meta) != 0) {
49 return -1;
50 }
51 if (cargs != meta.cargs) {
52 meta.cargs = cargs;
54 return 1;
55 }
56 return 0;
57 }
58 virtual int compare_and_set_largs(std::vector<std::string> largs) override {
60 if (CBuild::read_target_metadata(this->target_id, &meta) != 0) {
61 return -1;
62 }
63 if (largs != meta.largs) {
64 meta.largs = largs;
66 return 1;
67 }
68 return 0;
69 }
70 virtual int compare_and_set_commands(std::string compiler, std::string linker,
71 std::string packer) override {
73 if (CBuild::read_target_metadata(this->target_id, &meta) != 0) {
74 return -1;
75 }
76 if (compiler != meta.compiler || linker != meta.linker || packer != meta.packer) {
77 meta.compiler = compiler;
78 meta.linker = linker;
79 meta.packer = packer;
81 return 1;
82 }
83 return 0;
84 }
85 virtual int compare_and_set_output_file(std::string out) override {
87 if (CBuild::read_target_metadata(this->target_id, &meta) != 0) {
88 return -1;
89 }
90 if (out != meta.out) {
91 meta.out = out;
93 return 1;
94 }
95 return 0;
96 }
97 virtual void set_target_meta(std::vector<std::string> cargs, std::vector<std::string> largs,
98 std::string out, std::string compiler, std::string linker,
99 std::string packer) override {
101 meta.cargs = cargs;
102 meta.largs = largs;
103 meta.out = out;
104 meta.compiler = compiler;
105 meta.linker = linker;
106 meta.packer = packer;
108 }
109};
110} // namespace CBuild
111#endif // __GCC_HASH_HPP__
Build metadata config file.
virtual int compare_and_set_commands(std::string compiler, std::string linker, std::string packer) override
Compare shell commands used for compilation and update metadata.
Definition gcc_hash.hpp:70
virtual int compare_and_set_largs(std::vector< std::string > largs) override
Compare link args and update metadata.
Definition gcc_hash.hpp:58
GCCHash(std::string target_id)
Definition gcc_hash.hpp:37
virtual int compare_and_set_cargs(std::vector< std::string > cargs) override
Compare compile args and update metadata.
Definition gcc_hash.hpp:46
virtual int compare_and_set_output_file(std::string out) override
Compare output file name and update metadata.
Definition gcc_hash.hpp:85
virtual void set_target_meta(std::vector< std::string > cargs, std::vector< std::string > largs, std::string out, std::string compiler, std::string linker, std::string packer) override
Set the target meta.
Definition gcc_hash.hpp:97
virtual lib::map< std::string, std::string > get_files_for_recompilation(std::vector< std::string > file_list, std::vector< std::string > objects_list) override
Pass a list of source files and coresponding object files and get a map of source-object that need to...
Definition gcc_hash.hpp:39
std::string target_id
Definition hasher.hpp:64
Simple map implementation with some stack operation added.
Definition map.hpp:79
GCC hasher low-level implementation.
Hasher base class and some helper functions This file implements some helper funtions,...
Custom implementation of map datatype.
Filebuffer for CBuild ecosystem.
Definition Build.hpp:34
lib::map< std::string, std::string > gcc_hash_impl(std::vector< std::string > file_list, std::vector< std::string > objects_list, std::string target_id)
Implementation of GCC hasher.
Definition gcc_hash.cpp:76
int read_target_metadata(std::string target_id, CBuild::target_metadata_file *metadata)
Load metadata for a full target.
int write_target_metadata(std::string target_id, CBuild::target_metadata_file *metadata)
Write a metadata for a full target.
Metadata for a full toolchain Structure of file:
std::string out
Path to output binary (relative to CBuild.run)
std::string packer
Command used to pack this target to a static library (what shell command was used)
std::vector< std::string > largs
Link args.
std::vector< std::string > cargs
Compile args.
std::string linker
Command used to link this target (what shell command was used)
std::string compiler
Command used to compile this target (what shell command was used)