mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Add -keep-temp-files option
This commit is contained in:
@@ -19,6 +19,7 @@ struct BuildContext {
|
|||||||
bool generate_docs;
|
bool generate_docs;
|
||||||
i32 optimization_level;
|
i32 optimization_level;
|
||||||
bool show_timings;
|
bool show_timings;
|
||||||
|
bool keep_temp_files;
|
||||||
|
|
||||||
gbAffinity affinity;
|
gbAffinity affinity;
|
||||||
isize thread_count;
|
isize thread_count;
|
||||||
|
|||||||
+19
@@ -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 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_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_move (char const *existing_filename, char const *new_filename);
|
||||||
|
GB_DEF b32 gb_file_delete (char const *filename);
|
||||||
|
|
||||||
|
|
||||||
#ifndef GB_PATH_SEPARATOR
|
#ifndef GB_PATH_SEPARATOR
|
||||||
@@ -7977,6 +7978,19 @@ gb_inline b32 gb_file_move(char const *existing_filename, char const *new_filena
|
|||||||
return result;
|
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
|
#else
|
||||||
@@ -8022,6 +8036,11 @@ gb_inline b32 gb_file_move(char const *existing_filename, char const *new_filena
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
b32 gb_file_delete(char const *filename) {
|
||||||
|
return unlink(filename) != -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+24
-3
@@ -174,6 +174,7 @@ enum BuildFlagKind {
|
|||||||
BuildFlag_OptimizationLevel,
|
BuildFlag_OptimizationLevel,
|
||||||
BuildFlag_ShowTimings,
|
BuildFlag_ShowTimings,
|
||||||
BuildFlag_ThreadCount,
|
BuildFlag_ThreadCount,
|
||||||
|
BuildFlag_KeepTempFiles,
|
||||||
|
|
||||||
BuildFlag_COUNT,
|
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) {
|
bool parse_build_flags(Array<String> args) {
|
||||||
Array<BuildFlag> build_flags = {};
|
Array<BuildFlag> build_flags = {};
|
||||||
array_init(&build_flags, heap_allocator(), BuildFlag_COUNT);
|
array_init(&build_flags, heap_allocator(), BuildFlag_COUNT);
|
||||||
add_flag(&build_flags, BuildFlag_OptimizationLevel, str_lit("opt"), 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_ShowTimings, str_lit("show-timings"), BuildFlagParam_None);
|
||||||
add_flag(&build_flags, BuildFlag_ThreadCount, str_lit("thread-count"), BuildFlagParam_Integer);
|
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;
|
Array<String> flag_args = args;
|
||||||
@@ -350,6 +352,10 @@ bool parse_build_flags(Array<String> args) {
|
|||||||
build_context.thread_count = count;
|
build_context.thread_count = count;
|
||||||
}
|
}
|
||||||
} break;
|
} 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) {
|
int main(int arg_count, char **arg_ptr) {
|
||||||
if (arg_count < 2) {
|
if (arg_count < 2) {
|
||||||
usage(make_string_c(arg_ptr[0]));
|
usage(make_string_c(arg_ptr[0]));
|
||||||
@@ -642,6 +660,7 @@ int main(int arg_count, char **arg_ptr) {
|
|||||||
show_timings(&checker, &timings);
|
show_timings(&checker, &timings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
remove_temp_files(output_base);
|
||||||
|
|
||||||
if (run_output) {
|
if (run_output) {
|
||||||
system_exec_command_line_app("odin run", false, "%.*s.exe", LIT(output_base));
|
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);
|
show_timings(&checker, &timings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
remove_temp_files(output_base);
|
||||||
|
|
||||||
if (run_output) {
|
if (run_output) {
|
||||||
system_exec_command_line_app("odin run", false, "%.*s", LIT(output_base));
|
system_exec_command_line_app("odin run", false, "%.*s", LIT(output_base));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user