-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbuild.c
More file actions
78 lines (69 loc) · 1.63 KB
/
build.c
File metadata and controls
78 lines (69 loc) · 1.63 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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "redbuild.h"
#include "syscalls/syscalls.h"
bool bootstrap = true;
bool rulegen(){
new_module("rulegen");
set_name("rulegen");
set_target(target_native);
set_package_type(package_bin);
source("ir/manual_gen.c");
source("codegen/codeformat.c");
add_precomp_flag("NOCODETRANSFORM");
add_precomp_flag("RULECODEGEN");
add_precomp_flag("RULETRANSFORM");
source("codegen/identity_transform.c");
source("codegen/codegen.c");
source("ir/general.c");
source("rule_generator/rulecodegen.c");
source("rule_generator/ruleparser.c");
source("rule_generator/rule_transform.c");
if (compile()){
gen_compile_commands("rule_generator/ruleparser.c");
return run() == 0;
}
return 0;
}
bool genc(){
if (rulegen()){
if (bootstrap){
return true;
}
return quick_cred("semantic/sem_enum.cred", "semantic/semantic_rules") && quick_cred("codegen/codegen.cred", "codegen/codegen") && true;
}
return false;
}
void compiler(){
if (genc()){
new_module("compiler");
set_name("cred");
set_target(target_native);
set_package_type(package_bin);
ignore_source("ruleparser.c");
ignore_source("build.c");
ignore_source("output.c");
add_precomp_flag("CCODEGEN");
add_precomp_flag("CTRANS");
add_precomp_flag("NORULETRANSFORM");
debug();
source_all(".c");
if (compile()){
gen_compile_commands(0);
print("Running cred");
run();
}
}
}
int main(){
int __return_val;
u64 start = get_time();
print("Start at %i", start);
rebuild_self();
compiler();
u64 end = get_time();
print("Compilation finished %lims", end - start);
__return_val = 0;
goto defer;
defer:
emit_compile_commands();
return __return_val;
}