aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2017-07-31 12:06:04 +0100
committerGinger Bill <bill@gingerbill.org>2017-07-31 12:06:04 +0100
commit9f4f5f9346455a322f5e2fbea022fae0406285b3 (patch)
treefd7a9a39d77c16f967cc6e5c8af8b2fafd89cff4 /src
parent0fae31fb545b474359359fd644911fa335c5c282 (diff)
Add -keep-temp-files option
Diffstat (limited to 'src')
-rw-r--r--src/build_settings.cpp1
-rw-r--r--src/gb/gb.h19
-rw-r--r--src/main.cpp27
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));
}