-
Notifications
You must be signed in to change notification settings - Fork 34
Expand file tree
/
Copy pathCompilationProcess.h
More file actions
63 lines (47 loc) · 1.77 KB
/
Copy pathCompilationProcess.h
File metadata and controls
63 lines (47 loc) · 1.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#pragma once
#include <string>
#include <vector>
/*
Represents a single command compilation or linkage.
E.g: cc -c -I../include source1.c -o bla.o
This class method-chains
So you can do:
object.clear().setCompiler(...).addArguments(...).compile()
*/
class CompilationProcess {
// Literal compiler command used
std::string compiler;
std::string language;
// Do we optimize?
bool optimization;
bool link_time_optimization;
// Extra args
std::vector<std::string> extra_arguments;
std::vector<std::string> include_directories;
std::vector<std::string> libraries;
void runCompiler(const std::vector<std::string>& files, const std::string& out,
int link_objects);
public:
CompilationProcess();
CompilationProcess& clear();
// runCompiler without linking
void compile(const std::vector<std::string>& sources, const std::string& out);
// runCompiler with linking
void link(const std::vector<std::string>& objects, const std::string& out);
// Optimize
CompilationProcess& setOptimization(bool do_optimize = true);
CompilationProcess& setLinkTimeOptimization(bool do_optimize = true);
// Change actual compiler use
CompilationProcess& setCompiler(const std::string&);
// These infer each other if one is not set
CompilationProcess& setLanguage(const std::string&);
// Add any sort of argument(misc)
CompilationProcess& addArgument(const std::string&);
CompilationProcess& addArguments(const std::vector<std::string>&);
// Specifically add include directory
CompilationProcess& addIncludeDirectory(const std::string&);
CompilationProcess& addIncludeDirectories(const std::vector<std::string>&);
// Or libs(don't add 'm' if not on Linux)
CompilationProcess& addLibrary(const std::string&);
CompilationProcess& addLibraries(const std::vector<std::string>&);
};