mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Minor code rearrangement
This commit is contained in:
@@ -309,7 +309,7 @@ String get_fullpath_core(gbAllocator a, String path) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
String const ODIN_VERSION = str_lit("0.8.1");
|
String const ODIN_VERSION = str_lit("0.8.2");
|
||||||
String cross_compile_target = str_lit("");
|
String cross_compile_target = str_lit("");
|
||||||
String cross_compile_lib_dir = str_lit("");
|
String cross_compile_lib_dir = str_lit("");
|
||||||
|
|
||||||
|
|||||||
+73
-78
@@ -113,15 +113,13 @@ i32 system_exec_command_line_app(char *name, bool is_silent, char *fmt, ...) {
|
|||||||
|
|
||||||
|
|
||||||
Array<String> setup_args(int argc, char **argv) {
|
Array<String> setup_args(int argc, char **argv) {
|
||||||
Array<String> args = {};
|
|
||||||
gbAllocator a = heap_allocator();
|
gbAllocator a = heap_allocator();
|
||||||
int i;
|
|
||||||
|
|
||||||
#if defined(GB_SYSTEM_WINDOWS)
|
#if defined(GB_SYSTEM_WINDOWS)
|
||||||
int wargc = 0;
|
int wargc = 0;
|
||||||
wchar_t **wargv = command_line_to_wargv(GetCommandLineW(), &wargc);
|
wchar_t **wargv = command_line_to_wargv(GetCommandLineW(), &wargc);
|
||||||
args = array_make<String>(a, 0, wargc);
|
auto args = array_make<String>(a, 0, wargc);
|
||||||
for (i = 0; i < wargc; i++) {
|
for (isize i = 0; i < wargc; i++) {
|
||||||
wchar_t *warg = wargv[i];
|
wchar_t *warg = wargv[i];
|
||||||
isize wlen = string16_len(warg);
|
isize wlen = string16_len(warg);
|
||||||
String16 wstr = make_string16(warg, wlen);
|
String16 wstr = make_string16(warg, wlen);
|
||||||
@@ -130,17 +128,17 @@ Array<String> setup_args(int argc, char **argv) {
|
|||||||
array_add(&args, arg);
|
array_add(&args, arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return args;
|
||||||
#else
|
#else
|
||||||
args = array_make<String>(a, 0, argc);
|
auto args = array_make<String>(a, 0, argc);
|
||||||
for (i = 0; i < argc; i++) {
|
for (isize i = 0; i < argc; i++) {
|
||||||
String arg = make_string_c(argv[i]);
|
String arg = make_string_c(argv[i]);
|
||||||
if (arg.len > 0) {
|
if (arg.len > 0) {
|
||||||
array_add(&args, arg);
|
array_add(&args, arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return args;
|
return args;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -613,6 +611,62 @@ void remove_temp_files(String output_base) {
|
|||||||
#undef EXT_REMOVE
|
#undef EXT_REMOVE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i32 exec_llvm_opt(String output_base) {
|
||||||
|
#if defined(GB_SYSTEM_WINDOWS)
|
||||||
|
// For more passes arguments: http://llvm.org/docs/Passes.html
|
||||||
|
return system_exec_command_line_app("llvm-opt", false,
|
||||||
|
"\"%.*sbin/opt\" \"%.*s.ll\" -o \"%.*s.bc\" %.*s "
|
||||||
|
"-mem2reg "
|
||||||
|
"-memcpyopt "
|
||||||
|
"-die "
|
||||||
|
"",
|
||||||
|
LIT(build_context.ODIN_ROOT),
|
||||||
|
LIT(output_base), LIT(output_base),
|
||||||
|
LIT(build_context.opt_flags));
|
||||||
|
#else
|
||||||
|
// NOTE(zangent): This is separate because it seems that LLVM tools are packaged
|
||||||
|
// with the Windows version, while they will be system-provided on MacOS and GNU/Linux
|
||||||
|
return system_exec_command_line_app("llvm-opt", false,
|
||||||
|
"opt \"%.*s.ll\" -o \"%.*s.bc\" %.*s "
|
||||||
|
"-mem2reg "
|
||||||
|
"-memcpyopt "
|
||||||
|
"-die "
|
||||||
|
"",
|
||||||
|
LIT(output_base), LIT(output_base),
|
||||||
|
LIT(build_context.opt_flags));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
i32 exec_llvm_llc(String output_base) {
|
||||||
|
#if defined(GB_SYSTEM_WINDOWS)
|
||||||
|
// For more arguments: http://llvm.org/docs/CommandGuide/llc.html
|
||||||
|
return system_exec_command_line_app("llvm-llc", false,
|
||||||
|
"\"%.*sbin/llc\" \"%.*s.bc\" -filetype=obj -O%d "
|
||||||
|
"-o \"%.*s.obj\" "
|
||||||
|
"%.*s "
|
||||||
|
// "-debug-pass=Arguments "
|
||||||
|
"",
|
||||||
|
LIT(build_context.ODIN_ROOT),
|
||||||
|
LIT(output_base),
|
||||||
|
build_context.optimization_level,
|
||||||
|
LIT(output_base),
|
||||||
|
LIT(build_context.llc_flags));
|
||||||
|
#else
|
||||||
|
// NOTE(zangent): Linux / Unix is unfinished and not tested very well.
|
||||||
|
// For more arguments: http://llvm.org/docs/CommandGuide/llc.html
|
||||||
|
return system_exec_command_line_app("llc", false,
|
||||||
|
"llc \"%.*s.bc\" -filetype=obj -relocation-model=pic -O%d "
|
||||||
|
"%.*s "
|
||||||
|
// "-debug-pass=Arguments "
|
||||||
|
"%s"
|
||||||
|
"",
|
||||||
|
LIT(output_base),
|
||||||
|
build_context.optimization_level,
|
||||||
|
LIT(build_context.llc_flags),
|
||||||
|
str_eq_ignore_case(cross_compile_target, str_lit("Essence")) ? "-mtriple=x86_64-pc-none-elf" : "");
|
||||||
|
#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]));
|
||||||
@@ -747,59 +801,18 @@ int main(int arg_count, char **arg_ptr) {
|
|||||||
i32 exit_code = 0;
|
i32 exit_code = 0;
|
||||||
|
|
||||||
timings_start_section(&timings, str_lit("llvm-opt"));
|
timings_start_section(&timings, str_lit("llvm-opt"));
|
||||||
#if defined(GB_SYSTEM_WINDOWS)
|
exit_code = exec_llvm_opt(output_base);
|
||||||
// For more passes arguments: http://llvm.org/docs/Passes.html
|
if (exit_code != 0) {
|
||||||
exit_code = system_exec_command_line_app("llvm-opt", false,
|
return exit_code;
|
||||||
"\"%.*sbin/opt\" \"%.*s.ll\" -o \"%.*s.bc\" %.*s "
|
}
|
||||||
"-mem2reg "
|
|
||||||
"-memcpyopt "
|
timings_start_section(&timings, str_lit("llvm-llc"));
|
||||||
"-die "
|
exit_code = exec_llvm_llc(output_base);
|
||||||
"",
|
if (exit_code != 0) {
|
||||||
LIT(build_context.ODIN_ROOT),
|
return exit_code;
|
||||||
LIT(output_base), LIT(output_base),
|
}
|
||||||
LIT(build_context.opt_flags));
|
|
||||||
// exit_code = system_exec_command_line_app("llvm-opt", false,
|
|
||||||
// "\"%.*sbin/llvm-as\" \"%.*s.ll\" -o \"%.*s.bc\" "
|
|
||||||
// "",
|
|
||||||
// LIT(build_context.ODIN_ROOT),
|
|
||||||
// LIT(output_base), LIT(output_base));
|
|
||||||
if (exit_code != 0) {
|
|
||||||
return exit_code;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
// NOTE(zangent): This is separate because it seems that LLVM tools are packaged
|
|
||||||
// with the Windows version, while they will be system-provided on MacOS and GNU/Linux
|
|
||||||
exit_code = system_exec_command_line_app("llvm-opt", false,
|
|
||||||
"opt \"%.*s.ll\" -o \"%.*s.bc\" %.*s "
|
|
||||||
"-mem2reg "
|
|
||||||
"-memcpyopt "
|
|
||||||
"-die "
|
|
||||||
"",
|
|
||||||
LIT(output_base), LIT(output_base),
|
|
||||||
LIT(build_context.opt_flags));
|
|
||||||
if (exit_code != 0) {
|
|
||||||
return exit_code;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(GB_SYSTEM_WINDOWS)
|
#if defined(GB_SYSTEM_WINDOWS)
|
||||||
timings_start_section(&timings, str_lit("llvm-llc"));
|
|
||||||
// For more arguments: http://llvm.org/docs/CommandGuide/llc.html
|
|
||||||
exit_code = system_exec_command_line_app("llvm-llc", false,
|
|
||||||
"\"%.*sbin/llc\" \"%.*s.bc\" -filetype=obj -O%d "
|
|
||||||
"-o \"%.*s.obj\" "
|
|
||||||
"%.*s "
|
|
||||||
// "-debug-pass=Arguments "
|
|
||||||
"",
|
|
||||||
LIT(build_context.ODIN_ROOT),
|
|
||||||
LIT(output_base),
|
|
||||||
build_context.optimization_level,
|
|
||||||
LIT(output_base),
|
|
||||||
LIT(build_context.llc_flags));
|
|
||||||
if (exit_code != 0) {
|
|
||||||
return exit_code;
|
|
||||||
}
|
|
||||||
|
|
||||||
timings_start_section(&timings, str_lit("msvc-link"));
|
timings_start_section(&timings, str_lit("msvc-link"));
|
||||||
|
|
||||||
gbString lib_str = gb_string_make(heap_allocator(), "");
|
gbString lib_str = gb_string_make(heap_allocator(), "");
|
||||||
@@ -854,25 +867,7 @@ int main(int arg_count, char **arg_ptr) {
|
|||||||
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));
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
timings_start_section(&timings, str_lit("ld-link"));
|
||||||
// NOTE(zangent): Linux / Unix is unfinished and not tested very well.
|
|
||||||
|
|
||||||
|
|
||||||
timings_start_section(&timings, str_lit("llvm-llc"));
|
|
||||||
// For more arguments: http://llvm.org/docs/CommandGuide/llc.html
|
|
||||||
exit_code = system_exec_command_line_app("llc", false,
|
|
||||||
"llc \"%.*s.bc\" -filetype=obj -relocation-model=pic -O%d "
|
|
||||||
"%.*s "
|
|
||||||
// "-debug-pass=Arguments "
|
|
||||||
"%s"
|
|
||||||
"",
|
|
||||||
LIT(output_base),
|
|
||||||
build_context.optimization_level,
|
|
||||||
LIT(build_context.llc_flags),
|
|
||||||
str_eq_ignore_case(cross_compile_target, str_lit("Essence")) ? "-mtriple=x86_64-pc-none-elf" : "");
|
|
||||||
if (exit_code != 0) {
|
|
||||||
return exit_code;
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE(vassvik): get cwd, for used for local shared libs linking, since those have to be relative to the exe
|
// NOTE(vassvik): get cwd, for used for local shared libs linking, since those have to be relative to the exe
|
||||||
char cwd[256];
|
char cwd[256];
|
||||||
|
|||||||
Reference in New Issue
Block a user