Support subtargets in build tags: #build darwin:generic and #build linux:android, darwin:ios

This commit is contained in:
gingerBill
2025-04-10 11:36:03 +01:00
parent 5e63388de2
commit 1f814c33dc
5 changed files with 138 additions and 13 deletions
+30 -4
View File
@@ -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) {