diff options
| author | gingerBill <bill@gingerbill.org> | 2025-04-10 11:36:03 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2025-04-10 11:36:03 +0100 |
| commit | 1f814c33dcfccec9073d15214268457c0d6ea273 (patch) | |
| tree | 1c1457ecb2768046229a8119e59f82d16f54b207 /src/build_settings.cpp | |
| parent | 5e63388de289f6cbf17e3fdae60f3a092f4419e5 (diff) | |
Support subtargets in build tags: `#build darwin:generic` and `#build linux:android, darwin:ios`
Diffstat (limited to 'src/build_settings.cpp')
| -rw-r--r-- | src/build_settings.cpp | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/src/build_settings.cpp b/src/build_settings.cpp index c2575e2d4..c941e0f68 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -847,13 +847,39 @@ gb_global NamedTargetMetrics *selected_target_metrics; gb_global Subtarget selected_subtarget; -gb_internal TargetOsKind get_target_os_from_string(String str) { +gb_internal TargetOsKind get_target_os_from_string(String str, Subtarget *subtarget_ = nullptr) { + String os_name = str; + String subtarget = {}; + auto part = string_partition(str, str_lit(":")); + if (part.match.len == 1) { + os_name = part.head; + subtarget = part.tail; + } + + TargetOsKind kind = TargetOs_Invalid; + for (isize i = 0; i < TargetOs_COUNT; i++) { - if (str_eq_ignore_case(target_os_names[i], str)) { - return cast(TargetOsKind)i; + if (str_eq_ignore_case(target_os_names[i], os_name)) { + kind = cast(TargetOsKind)i; + break; } } - return TargetOs_Invalid; + if (subtarget_) *subtarget_ = Subtarget_Default; + + if (subtarget.len != 0) { + if (str_eq_ignore_case(subtarget, "generic") || str_eq_ignore_case(subtarget, "default")) { + if (subtarget_) *subtarget_ = Subtarget_Default; + } else { + for (isize i = 1; i < Subtarget_COUNT; i++) { + if (str_eq_ignore_case(subtarget_strings[i], subtarget)) { + if (subtarget_) *subtarget_ = cast(Subtarget)i; + break; + } + } + } + } + + return kind; } gb_internal TargetArchKind get_target_arch_from_string(String str) { |