diff options
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 73 |
1 files changed, 36 insertions, 37 deletions
diff --git a/src/main.cpp b/src/main.cpp index 6fea6d583..a7a95a555 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,12 +16,13 @@ // NOTE(bill): `name` is used in debugging and profiling modes i32 win32_exec_command_line_app(char *name, char *fmt, ...) { STARTUPINFOW start_info = {gb_size_of(STARTUPINFOW)}; - PROCESS_INFORMATION pi = {}; - char cmd_line[4096] = {}; + PROCESS_INFORMATION pi = {0}; + char cmd_line[4096] = {0}; isize cmd_len; va_list va; gbTempArenaMemory tmp; String16 cmd; + i32 exit_code = 0; start_info.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; start_info.wShowWindow = SW_SHOW; @@ -35,57 +36,55 @@ i32 win32_exec_command_line_app(char *name, char *fmt, ...) { // gb_printf("%.*s\n", cast(int)cmd_len, cmd_line); tmp = gb_temp_arena_memory_begin(&string_buffer_arena); - defer (gb_temp_arena_memory_end(tmp)); cmd = string_to_string16(string_buffer_allocator, make_string(cast(u8 *)cmd_line, cmd_len-1)); if (CreateProcessW(NULL, cmd.text, NULL, NULL, true, 0, NULL, NULL, &start_info, &pi)) { - DWORD exit_code = 0; - WaitForSingleObject(pi.hProcess, INFINITE); - GetExitCodeProcess(pi.hProcess, &exit_code); + GetExitCodeProcess(pi.hProcess, cast(DWORD *)&exit_code); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); - - return cast(i32)exit_code; } else { // NOTE(bill): failed to create process gb_printf_err("Failed to execute command:\n\t%s\n", cmd_line); - return -1; + exit_code = -1; } + + gb_temp_arena_memory_end(tmp); + return exit_code; } -enum ArchKind { +typedef enum { ArchKind_x64, ArchKind_x86, -}; +} ArchKind; -struct ArchData { +typedef struct { BaseTypeSizes sizes; String llc_flags; String link_flags; -}; +} ArchData; ArchData make_arch_data(ArchKind kind) { - ArchData data = {}; + ArchData data = {0}; switch (kind) { case ArchKind_x64: default: data.sizes.word_size = 8; data.sizes.max_align = 16; - data.llc_flags = make_string("-march=x86-64 "); - data.link_flags = make_string("/machine:x64 "); + data.llc_flags = str_lit("-march=x86-64 "); + data.link_flags = str_lit("/machine:x64 "); break; case ArchKind_x86: data.sizes.word_size = 4; data.sizes.max_align = 8; - data.llc_flags = make_string("-march=x86 "); - data.link_flags = make_string("/machine:x86 "); + data.llc_flags = str_lit("-march=x86 "); + data.link_flags = str_lit("/machine:x86 "); break; } @@ -110,9 +109,9 @@ int main(int argc, char **argv) { } prof_init(); - Timings timings = {}; - timings_init(&timings, make_string("Total Time"), 128); - defer (timings_destroy(&timings)); + Timings timings = {0}; + timings_init(&timings, str_lit("Total Time"), 128); + // defer (timings_destroy(&timings)); #if 1 init_string_buffer_memory(); @@ -124,13 +123,13 @@ int main(int argc, char **argv) { char *init_filename = NULL; b32 run_output = false; - String arg1 = make_string(argv[1]); - if (arg1 == "run") { + String arg1 = make_string_c(argv[1]); + if (str_eq(arg1, str_lit("run"))) { run_output = true; init_filename = argv[2]; - } else if (arg1 == "build") { + } else if (str_eq(arg1, str_lit("build"))) { init_filename = argv[2]; - } else if (arg1 == "version") { + } else if (str_eq(arg1, str_lit("version"))) { gb_printf("%s version %s", argv[0], VERSION_STRING); return 0; } else { @@ -140,7 +139,7 @@ int main(int argc, char **argv) { // TODO(bill): prevent compiling without a linker - timings_start_section(&timings, make_string("parse files")); + timings_start_section(&timings, str_lit("parse files")); Parser parser = {0}; if (!init_parser(&parser)) { @@ -154,9 +153,9 @@ int main(int argc, char **argv) { #if 1 - timings_start_section(&timings, make_string("type check")); + timings_start_section(&timings, str_lit("type check")); - Checker checker = {}; + Checker checker = {0}; ArchData arch_data = make_arch_data(ArchKind_x64); init_checker(&checker, &parser, arch_data.sizes); @@ -168,25 +167,25 @@ int main(int argc, char **argv) { #endif #if 1 - ssaGen ssa = {}; + ssaGen ssa = {0}; if (!ssa_gen_init(&ssa, &checker)) { return 1; } // defer (ssa_gen_destroy(&ssa)); - timings_start_section(&timings, make_string("ssa gen")); + timings_start_section(&timings, str_lit("ssa gen")); ssa_gen_tree(&ssa); - timings_start_section(&timings, make_string("ssa opt")); + timings_start_section(&timings, str_lit("ssa opt")); ssa_opt_tree(&ssa); - timings_start_section(&timings, make_string("ssa print")); + timings_start_section(&timings, str_lit("ssa print")); ssa_print_llvm_ir(&ssa); // prof_print_all(); #if 1 - timings_start_section(&timings, make_string("llvm-opt")); + timings_start_section(&timings, str_lit("llvm-opt")); char const *output_name = ssa.output_file.filename; isize base_name_len = gb_path_extension(output_name)-1 - output_name; @@ -213,7 +212,7 @@ int main(int argc, char **argv) { } #if 1 - timings_start_section(&timings, make_string("llvm-llc")); + timings_start_section(&timings, str_lit("llvm-llc")); // For more arguments: http://llvm.org/docs/CommandGuide/llc.html exit_code = win32_exec_command_line_app("llvm-llc", "%.*sbin/llc %.*s.bc -filetype=obj -O%d " @@ -228,11 +227,11 @@ int main(int argc, char **argv) { return exit_code; } - timings_start_section(&timings, make_string("msvc-link")); + timings_start_section(&timings, str_lit("msvc-link")); gbString lib_str = gb_string_make(heap_allocator(), "Kernel32.lib"); // defer (gb_string_free(lib_str)); - char lib_str_buf[1024] = {}; + char lib_str_buf[1024] = {0}; for_array(i, parser.foreign_libraries) { String lib = parser.foreign_libraries[i]; isize len = gb_snprintf(lib_str_buf, gb_size_of(lib_str_buf), @@ -243,7 +242,7 @@ int main(int argc, char **argv) { exit_code = win32_exec_command_line_app("msvc-link", "link %.*s.obj -OUT:%.*s.exe %s " "/defaultlib:libcmt " - "/nologo /incremental:no /opt:ref /subsystem:console /debug " + "/nologo /incremental:no /opt:ref /subsystem:console " " %.*s " "", LIT(output), LIT(output), |