aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-07-08 23:39:14 +0100
committergingerBill <bill@gingerbill.org>2024-07-08 23:39:14 +0100
commit87ac68fcf2b5fcaa02118929b820e61bbd8c10c4 (patch)
treee39b1d5203b780d611a67f4bddb3e9c60689df4c /src/main.cpp
parent48aef5016499291996f0710449a26f1f92078d51 (diff)
Add `-internal-cached`
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/main.cpp b/src/main.cpp
index bbb326af3..006a7ddbc 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -71,6 +71,8 @@ gb_global Timings global_timings = {0};
#include "checker.cpp"
#include "docs.cpp"
+#include "cached.cpp"
+
#include "linker.cpp"
#if defined(GB_SYSTEM_WINDOWS) && defined(ODIN_TILDE_BACKEND)
@@ -391,6 +393,7 @@ enum BuildFlagKind {
BuildFlag_InternalIgnoreLLVMBuild,
BuildFlag_InternalIgnorePanic,
BuildFlag_InternalModulePerFile,
+ BuildFlag_InternalCached,
BuildFlag_Tilde,
@@ -594,6 +597,7 @@ gb_internal bool parse_build_flags(Array<String> args) {
add_flag(&build_flags, BuildFlag_InternalIgnoreLLVMBuild, str_lit("internal-ignore-llvm-build"),BuildFlagParam_None, Command_all);
add_flag(&build_flags, BuildFlag_InternalIgnorePanic, str_lit("internal-ignore-panic"), BuildFlagParam_None, Command_all);
add_flag(&build_flags, BuildFlag_InternalModulePerFile, str_lit("internal-module-per-file"), BuildFlagParam_None, Command_all);
+ add_flag(&build_flags, BuildFlag_InternalCached, str_lit("internal-cached"), BuildFlagParam_None, Command_all);
#if ALLOW_TILDE
add_flag(&build_flags, BuildFlag_Tilde, str_lit("tilde"), BuildFlagParam_None, Command__does_build);
@@ -1413,6 +1417,10 @@ gb_internal bool parse_build_flags(Array<String> args) {
case BuildFlag_InternalModulePerFile:
build_context.module_per_file = true;
break;
+ case BuildFlag_InternalCached:
+ build_context.cached = true;
+ build_context.use_separate_modules = true;
+ break;
case BuildFlag_Tilde:
build_context.tilde_backend = true;
@@ -1921,9 +1929,6 @@ gb_internal void show_timings(Checker *c, Timings *t) {
gb_internal GB_COMPARE_PROC(file_path_cmp) {
AstFile *x = *(AstFile **)a;
AstFile *y = *(AstFile **)b;
- if (x == y) {
- return 0;
- }
return string_compare(x->fullpath, y->fullpath);
}
@@ -3322,6 +3327,13 @@ int main(int arg_count, char const **arg_ptr) {
return 0;
}
+ if (build_context.cached) {
+ MAIN_TIME_SECTION("check cached build");
+ if (try_cached_build(checker)) {
+ goto end_of_code_gen;
+ }
+ }
+
#if ALLOW_TILDE
if (build_context.tilde_backend) {
LinkerData linker_data = {};
@@ -3383,6 +3395,8 @@ int main(int arg_count, char const **arg_ptr) {
remove_temp_files(gen);
}
+end_of_code_gen:;
+
if (build_context.show_timings) {
show_timings(checker, &global_timings);
}
@@ -3391,6 +3405,12 @@ int main(int arg_count, char const **arg_ptr) {
export_dependencies(checker);
}
+
+ if (!build_context.build_cache_data.copy_already_done &&
+ build_context.cached) {
+ try_copy_executable_to_cache();
+ }
+
if (run_output) {
String exe_name = path_to_string(heap_allocator(), build_context.build_paths[BuildPath_Output]);
defer (gb_free(heap_allocator(), exe_name.text));