mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Merge branch 'master' into llvm-integration
This commit is contained in:
@@ -277,9 +277,9 @@ Logger_Proc :: #type proc(data: rawptr, level: Logger_Level, text: string, optio
|
|||||||
|
|
||||||
Logger :: struct {
|
Logger :: struct {
|
||||||
procedure: Logger_Proc,
|
procedure: Logger_Proc,
|
||||||
data: rawptr,
|
data: rawptr,
|
||||||
lowest_level: Logger_Level,
|
lowest_level: Logger_Level,
|
||||||
options: Logger_Options,
|
options: Logger_Options,
|
||||||
}
|
}
|
||||||
|
|
||||||
Context :: struct {
|
Context :: struct {
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ struct BuildContext {
|
|||||||
bool use_lld;
|
bool use_lld;
|
||||||
bool vet;
|
bool vet;
|
||||||
bool cross_compiling;
|
bool cross_compiling;
|
||||||
|
bool use_subsystem_windows;
|
||||||
|
|
||||||
bool use_llvm_api;
|
bool use_llvm_api;
|
||||||
|
|
||||||
|
|||||||
+29
-9
@@ -248,6 +248,7 @@ enum BuildFlagKind {
|
|||||||
#if defined(GB_SYSTEM_WINDOWS)
|
#if defined(GB_SYSTEM_WINDOWS)
|
||||||
BuildFlag_ResourceFile,
|
BuildFlag_ResourceFile,
|
||||||
BuildFlag_WindowsPdbName,
|
BuildFlag_WindowsPdbName,
|
||||||
|
BuildFlag_Subsystem,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
BuildFlag_COUNT,
|
BuildFlag_COUNT,
|
||||||
@@ -337,8 +338,9 @@ bool parse_build_flags(Array<String> args) {
|
|||||||
add_flag(&build_flags, BuildFlag_GoToDefinitions, str_lit("go-to-definitions"), BuildFlagParam_None);
|
add_flag(&build_flags, BuildFlag_GoToDefinitions, str_lit("go-to-definitions"), BuildFlagParam_None);
|
||||||
|
|
||||||
#if defined(GB_SYSTEM_WINDOWS)
|
#if defined(GB_SYSTEM_WINDOWS)
|
||||||
add_flag(&build_flags, BuildFlag_ResourceFile, str_lit("resource"), BuildFlagParam_String);
|
add_flag(&build_flags, BuildFlag_ResourceFile, str_lit("resource"), BuildFlagParam_String);
|
||||||
add_flag(&build_flags, BuildFlag_WindowsPdbName, str_lit("pdb-name"), BuildFlagParam_String);
|
add_flag(&build_flags, BuildFlag_WindowsPdbName, str_lit("pdb-name"), BuildFlagParam_String);
|
||||||
|
add_flag(&build_flags, BuildFlag_Subsystem, str_lit("subsystem"), BuildFlagParam_String);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GB_ASSERT(args.count >= 3);
|
GB_ASSERT(args.count >= 3);
|
||||||
@@ -775,7 +777,19 @@ bool parse_build_flags(Array<String> args) {
|
|||||||
bad_flags = true;
|
bad_flags = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case BuildFlag_Subsystem: {
|
||||||
|
GB_ASSERT(value.kind == ExactValue_String);
|
||||||
|
String subsystem = value.value_string;
|
||||||
|
if (str_eq_ignore_case(subsystem, str_lit("console"))) {
|
||||||
|
build_context.use_subsystem_windows = false;
|
||||||
|
} else if (str_eq_ignore_case(subsystem, str_lit("windows"))) {
|
||||||
|
build_context.use_subsystem_windows = true;
|
||||||
|
} else {
|
||||||
|
gb_printf_err("Invalid -subsystem string, got %.*s, expected either 'console' or 'windows'\n", LIT(subsystem));
|
||||||
|
bad_flags = true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -1401,8 +1415,8 @@ int main(int arg_count, char const **arg_ptr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char const *subsystem_str = build_context.use_subsystem_windows ? "WINDOWS" : "CONSOLE";
|
||||||
if (!build_context.use_lld) { // msvc
|
if (!build_context.use_lld) { // msvc
|
||||||
|
|
||||||
if (build_context.has_resource) {
|
if (build_context.has_resource) {
|
||||||
exit_code = system_exec_command_line_app("msvc-link",
|
exit_code = system_exec_command_line_app("msvc-link",
|
||||||
"\"%.*src.exe\" /nologo /fo \"%.*s.res\" \"%.*s.rc\"",
|
"\"%.*src.exe\" /nologo /fo \"%.*s.res\" \"%.*s.rc\"",
|
||||||
@@ -1417,36 +1431,42 @@ int main(int arg_count, char const **arg_ptr) {
|
|||||||
|
|
||||||
exit_code = system_exec_command_line_app("msvc-link",
|
exit_code = system_exec_command_line_app("msvc-link",
|
||||||
"\"%.*slink.exe\" \"%.*s.obj\" \"%.*s.res\" -OUT:\"%.*s.%s\" %s "
|
"\"%.*slink.exe\" \"%.*s.obj\" \"%.*s.res\" -OUT:\"%.*s.%s\" %s "
|
||||||
"/nologo /incremental:no /opt:ref /subsystem:CONSOLE "
|
"/nologo /incremental:no /opt:ref /subsystem:%s "
|
||||||
" %.*s "
|
" %.*s "
|
||||||
" %s "
|
" %s "
|
||||||
"",
|
"",
|
||||||
LIT(find_result.vs_exe_path), LIT(output_base), LIT(output_base), LIT(output_base), output_ext,
|
LIT(find_result.vs_exe_path), LIT(output_base), LIT(output_base), LIT(output_base), output_ext,
|
||||||
link_settings, LIT(build_context.link_flags),
|
link_settings,
|
||||||
|
subsystem_str,
|
||||||
|
LIT(build_context.link_flags),
|
||||||
lib_str
|
lib_str
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
exit_code = system_exec_command_line_app("msvc-link",
|
exit_code = system_exec_command_line_app("msvc-link",
|
||||||
"\"%.*slink.exe\" \"%.*s.obj\" -OUT:\"%.*s.%s\" %s "
|
"\"%.*slink.exe\" \"%.*s.obj\" -OUT:\"%.*s.%s\" %s "
|
||||||
"/nologo /incremental:no /opt:ref /subsystem:CONSOLE "
|
"/nologo /incremental:no /opt:ref /subsystem:%s "
|
||||||
" %.*s "
|
" %.*s "
|
||||||
" %s "
|
" %s "
|
||||||
"",
|
"",
|
||||||
LIT(find_result.vs_exe_path), LIT(output_base), LIT(output_base), output_ext,
|
LIT(find_result.vs_exe_path), LIT(output_base), LIT(output_base), output_ext,
|
||||||
link_settings, LIT(build_context.link_flags),
|
link_settings,
|
||||||
|
subsystem_str,
|
||||||
|
LIT(build_context.link_flags),
|
||||||
lib_str
|
lib_str
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else { // lld
|
} else { // lld
|
||||||
exit_code = system_exec_command_line_app("msvc-link",
|
exit_code = system_exec_command_line_app("msvc-link",
|
||||||
"\"%.*s\\bin\\lld-link\" \"%.*s.obj\" -OUT:\"%.*s.%s\" %s "
|
"\"%.*s\\bin\\lld-link\" \"%.*s.obj\" -OUT:\"%.*s.%s\" %s "
|
||||||
"/nologo /incremental:no /opt:ref /subsystem:CONSOLE "
|
"/nologo /incremental:no /opt:ref /subsystem:%s "
|
||||||
" %.*s "
|
" %.*s "
|
||||||
" %s "
|
" %s "
|
||||||
"",
|
"",
|
||||||
LIT(build_context.ODIN_ROOT),
|
LIT(build_context.ODIN_ROOT),
|
||||||
LIT(output_base), LIT(output_base), output_ext,
|
LIT(output_base), LIT(output_base), output_ext,
|
||||||
link_settings, LIT(build_context.link_flags),
|
link_settings,
|
||||||
|
subsystem_str,
|
||||||
|
LIT(build_context.link_flags),
|
||||||
lib_str
|
lib_str
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user