diff options
| author | Ginger Bill <bill@gingerbill.org> | 2017-07-31 12:06:04 +0100 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2017-07-31 12:06:04 +0100 |
| commit | 9f4f5f9346455a322f5e2fbea022fae0406285b3 (patch) | |
| tree | fd7a9a39d77c16f967cc6e5c8af8b2fafd89cff4 /src | |
| parent | 0fae31fb545b474359359fd644911fa335c5c282 (diff) | |
Add -keep-temp-files option
Diffstat (limited to 'src')
| -rw-r--r-- | src/build_settings.cpp | 1 | ||||
| -rw-r--r-- | src/gb/gb.h | 19 | ||||
| -rw-r--r-- | src/main.cpp | 27 |
3 files changed, 44 insertions, 3 deletions
diff --git a/src/build_settings.cpp b/src/build_settings.cpp index b34e906c6..cc06dcfe3 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -19,6 +19,7 @@ struct BuildContext { bool generate_docs; i32 optimization_level; bool show_timings; + bool keep_temp_files; gbAffinity affinity; isize thread_count; diff --git a/src/gb/gb.h b/src/gb/gb.h index e2a605666..a369ca6aa 100644 --- a/src/gb/gb.h +++ b/src/gb/gb.h @@ -2056,6 +2056,7 @@ GB_DEF b32 gb_file_exists (char const *filepath); GB_DEF gbFileTime gb_file_last_write_time(char const *filepath); GB_DEF b32 gb_file_copy (char const *existing_filename, char const *new_filename, b32 fail_if_exists); GB_DEF b32 gb_file_move (char const *existing_filename, char const *new_filename); +GB_DEF b32 gb_file_delete (char const *filename); #ifndef GB_PATH_SEPARATOR @@ -7977,6 +7978,19 @@ gb_inline b32 gb_file_move(char const *existing_filename, char const *new_filena return result; } +b32 gb_file_delete(char const *filename) { + wchar_t *w_filename = NULL; + gbAllocator a = gb_heap_allocator(); + b32 result = false; + w_filename = gb__alloc_utf8_to_ucs2(a, filename, NULL); + if (w_filename == NULL) { + return false; + } + result = DeleteFileW(w_filename); + gb_free(a, w_filename); + return result; +} + #else @@ -8022,6 +8036,11 @@ gb_inline b32 gb_file_move(char const *existing_filename, char const *new_filena return false; } +b32 gb_file_delete(char const *filename) { + return unlink(filename) != -1; +} + + #endif diff --git a/src/main.cpp b/src/main.cpp index 73b49fdc6..4a532dcde 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -174,6 +174,7 @@ enum BuildFlagKind { BuildFlag_OptimizationLevel, BuildFlag_ShowTimings, BuildFlag_ThreadCount, + BuildFlag_KeepTempFiles, BuildFlag_COUNT, }; @@ -204,9 +205,10 @@ void add_flag(Array<BuildFlag> *build_flags, BuildFlagKind kind, String name, Bu bool parse_build_flags(Array<String> args) { Array<BuildFlag> build_flags = {}; array_init(&build_flags, heap_allocator(), BuildFlag_COUNT); - add_flag(&build_flags, BuildFlag_OptimizationLevel, str_lit("opt"), BuildFlagParam_Integer); - add_flag(&build_flags, BuildFlag_ShowTimings, str_lit("show-timings"), BuildFlagParam_None); - add_flag(&build_flags, BuildFlag_ThreadCount, str_lit("thread-count"), BuildFlagParam_Integer); + add_flag(&build_flags, BuildFlag_OptimizationLevel, str_lit("opt"), BuildFlagParam_Integer); + add_flag(&build_flags, BuildFlag_ShowTimings, str_lit("show-timings"), BuildFlagParam_None); + add_flag(&build_flags, BuildFlag_ThreadCount, str_lit("thread-count"), BuildFlagParam_Integer); + add_flag(&build_flags, BuildFlag_KeepTempFiles, str_lit("keep-temp-files"), BuildFlagParam_None); Array<String> flag_args = args; @@ -350,6 +352,10 @@ bool parse_build_flags(Array<String> args) { build_context.thread_count = count; } } break; + case BuildFlag_KeepTempFiles: + GB_ASSERT(value.kind == ExactValue_Invalid); + build_context.keep_temp_files = true; + break; } } @@ -404,6 +410,18 @@ void show_timings(Checker *c, Timings *t) { } } +void remove_temp_files(String output_base) { + if (build_context.keep_temp_files) return; + + gb_file_delete(gb_bprintf("%.*s.ll", LIT(output_base))); + gb_file_delete(gb_bprintf("%.*s.bc", LIT(output_base))); +#if defined(GB_SYSTEM_WINDOWS) + gb_file_delete(gb_bprintf("%.*s.obj", LIT(output_base))); +#else + gb_file_delete(gb_bprintf("%.*s.o", LIT(output_base))); +#endif +} + int main(int arg_count, char **arg_ptr) { if (arg_count < 2) { usage(make_string_c(arg_ptr[0])); @@ -642,6 +660,7 @@ int main(int arg_count, char **arg_ptr) { show_timings(&checker, &timings); } + remove_temp_files(output_base); if (run_output) { system_exec_command_line_app("odin run", false, "%.*s.exe", LIT(output_base)); @@ -748,6 +767,8 @@ int main(int arg_count, char **arg_ptr) { show_timings(&checker, &timings); } + remove_temp_files(output_base); + if (run_output) { system_exec_command_line_app("odin run", false, "%.*s", LIT(output_base)); } |