diff options
| author | gingerBill <bill@gingerbill.org> | 2023-08-08 11:35:51 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2023-08-08 11:35:51 +0100 |
| commit | 939bf4bb5dd2c94f0e67d3193becf56ec9c7abf1 (patch) | |
| tree | fe2aa1ccb9b65d1e6ae78bb219b6fd010264ebca /src/main.cpp | |
| parent | 7861dfd667aa8f610292b241269326911fba7b15 (diff) | |
Add experimental `-subtarget:ios`
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/src/main.cpp b/src/main.cpp index 2a7c90744..f1b62320f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -238,6 +238,7 @@ enum BuildFlagKind { BuildFlag_Define, BuildFlag_BuildMode, BuildFlag_Target, + BuildFlag_Subtarget, BuildFlag_Debug, BuildFlag_DisableAssert, BuildFlag_NoBoundsCheck, @@ -423,6 +424,7 @@ gb_internal bool parse_build_flags(Array<String> args) { add_flag(&build_flags, BuildFlag_Define, str_lit("define"), BuildFlagParam_String, Command__does_check, true); add_flag(&build_flags, BuildFlag_BuildMode, str_lit("build-mode"), BuildFlagParam_String, Command__does_build); // Commands_build is not used to allow for a better error message add_flag(&build_flags, BuildFlag_Target, str_lit("target"), BuildFlagParam_String, Command__does_check); + add_flag(&build_flags, BuildFlag_Subtarget, str_lit("subtarget"), BuildFlagParam_String, Command__does_check); add_flag(&build_flags, BuildFlag_Debug, str_lit("debug"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_DisableAssert, str_lit("disable-assert"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_NoBoundsCheck, str_lit("no-bounds-check"), BuildFlagParam_None, Command__does_check); @@ -907,6 +909,42 @@ gb_internal bool parse_build_flags(Array<String> args) { break; } + case BuildFlag_Subtarget: + if (selected_target_metrics == nullptr) { + gb_printf_err("-target must be set before -subtarget is used\n"); + bad_flags = true; + } else { + GB_ASSERT(value.kind == ExactValue_String); + String str = value.value_string; + bool found = false; + + if (selected_target_metrics->metrics->os != TargetOs_darwin) { + gb_printf_err("-subtarget can only be used with darwin based targets at the moment\n"); + bad_flags = true; + break; + } + + for (u32 i = 1; i < Subtarget_COUNT; i++) { + String name = subtarget_strings[i]; + if (str_eq_ignore_case(str, name)) { + selected_subtarget = cast(Subtarget)i; + found = true; + break; + } + } + + if (!found) { + gb_printf_err("Unknown subtarget '%.*s'\n", LIT(str)); + gb_printf_err("All supported subtargets:\n"); + for (u32 i = 1; i < Subtarget_COUNT; i++) { + String name = subtarget_strings[i]; + gb_printf_err("\t%.*s\n", LIT(name)); + } + bad_flags = true; + } + } + break; + case BuildFlag_BuildMode: { GB_ASSERT(value.kind == ExactValue_String); String str = value.value_string; @@ -2452,7 +2490,7 @@ int main(int arg_count, char const **arg_ptr) { get_fullpath_relative(heap_allocator(), odin_root_dir(), str_lit("shared"))); } - init_build_context(selected_target_metrics ? selected_target_metrics->metrics : nullptr); + init_build_context(selected_target_metrics ? selected_target_metrics->metrics : nullptr, selected_subtarget); // if (build_context.word_size == 4 && build_context.metrics.os != TargetOs_js) { // print_usage_line(0, "%.*s 32-bit is not yet supported for this platform", LIT(args[0])); // return 1; |