mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-04 22:58:46 +00:00
Merge pull request #5473 from harold-b/hb.subtarget-enhancements
Check for invalid subtargets and add "ios" pseudo subtarget
This commit is contained in:
+20
-11
@@ -174,8 +174,9 @@ enum Subtarget : u32 {
|
|||||||
Subtarget_iPhone,
|
Subtarget_iPhone,
|
||||||
Subtarget_iPhoneSimulator,
|
Subtarget_iPhoneSimulator,
|
||||||
Subtarget_Android,
|
Subtarget_Android,
|
||||||
|
|
||||||
Subtarget_COUNT,
|
Subtarget_COUNT,
|
||||||
|
Subtarget_Invalid, // NOTE(harold): Must appear after _COUNT as this is not a real subtarget
|
||||||
};
|
};
|
||||||
|
|
||||||
gb_global String subtarget_strings[Subtarget_COUNT] = {
|
gb_global String subtarget_strings[Subtarget_COUNT] = {
|
||||||
@@ -859,7 +860,7 @@ gb_global NamedTargetMetrics *selected_target_metrics;
|
|||||||
gb_global Subtarget selected_subtarget;
|
gb_global Subtarget selected_subtarget;
|
||||||
|
|
||||||
|
|
||||||
gb_internal TargetOsKind get_target_os_from_string(String str, Subtarget *subtarget_ = nullptr) {
|
gb_internal TargetOsKind get_target_os_from_string(String str, Subtarget *subtarget_ = nullptr, String *subtarget_str = nullptr) {
|
||||||
String os_name = str;
|
String os_name = str;
|
||||||
String subtarget = {};
|
String subtarget = {};
|
||||||
auto part = string_partition(str, str_lit(":"));
|
auto part = string_partition(str, str_lit(":"));
|
||||||
@@ -876,18 +877,26 @@ gb_internal TargetOsKind get_target_os_from_string(String str, Subtarget *subtar
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (subtarget_) *subtarget_ = Subtarget_Default;
|
|
||||||
|
|
||||||
if (subtarget.len != 0) {
|
if (subtarget_str) *subtarget_str = subtarget;
|
||||||
if (str_eq_ignore_case(subtarget, "generic") || str_eq_ignore_case(subtarget, "default")) {
|
|
||||||
if (subtarget_) *subtarget_ = Subtarget_Default;
|
if (subtarget_) {
|
||||||
} else {
|
if (subtarget.len != 0) {
|
||||||
for (isize i = 1; i < Subtarget_COUNT; i++) {
|
*subtarget_ = Subtarget_Invalid;
|
||||||
if (str_eq_ignore_case(subtarget_strings[i], subtarget)) {
|
|
||||||
if (subtarget_) *subtarget_ = cast(Subtarget)i;
|
if (str_eq_ignore_case(subtarget, "generic") || str_eq_ignore_case(subtarget, "default")) {
|
||||||
break;
|
*subtarget_ = Subtarget_Default;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
for (isize i = 1; i < Subtarget_COUNT; i++) {
|
||||||
|
if (str_eq_ignore_case(subtarget_strings[i], subtarget)) {
|
||||||
|
*subtarget_ = cast(Subtarget)i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
*subtarget_ = Subtarget_Default;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+23
-3
@@ -6220,9 +6220,10 @@ gb_internal bool parse_build_tag(Token token_for_pos, String s) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Subtarget subtarget = Subtarget_Default;
|
Subtarget subtarget = Subtarget_Invalid;
|
||||||
|
String subtarget_str = {};
|
||||||
|
|
||||||
TargetOsKind os = get_target_os_from_string(p, &subtarget);
|
TargetOsKind os = get_target_os_from_string(p, &subtarget, &subtarget_str);
|
||||||
TargetArchKind arch = get_target_arch_from_string(p);
|
TargetArchKind arch = get_target_arch_from_string(p);
|
||||||
num_tokens += 1;
|
num_tokens += 1;
|
||||||
|
|
||||||
@@ -6233,10 +6234,29 @@ gb_internal bool parse_build_tag(Token token_for_pos, String s) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool is_ios_subtarget = false;
|
||||||
|
if (subtarget == Subtarget_Invalid) {
|
||||||
|
// Special case for pseudo subtarget
|
||||||
|
if (!str_eq_ignore_case(subtarget_str, "ios")) {
|
||||||
|
syntax_error(token_for_pos, "Invalid subtarget '%.*s'.", LIT(subtarget_str));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
is_ios_subtarget = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (os != TargetOs_Invalid) {
|
if (os != TargetOs_Invalid) {
|
||||||
this_kind_os_seen = true;
|
this_kind_os_seen = true;
|
||||||
|
|
||||||
bool same_subtarget = (subtarget == Subtarget_Default) || (subtarget == selected_subtarget);
|
// NOTE: Only testing for 'default' and not 'generic' because the 'generic' nomenclature implies any subtarget.
|
||||||
|
bool is_explicit_default_subtarget = str_eq_ignore_case(subtarget_str, "default");
|
||||||
|
bool same_subtarget = (subtarget == Subtarget_Default && !is_explicit_default_subtarget) || (subtarget == selected_subtarget);
|
||||||
|
|
||||||
|
// Special case for iPhone or iPhoneSimulator
|
||||||
|
if (is_ios_subtarget && (selected_subtarget == Subtarget_iPhone || selected_subtarget == Subtarget_iPhoneSimulator)) {
|
||||||
|
same_subtarget = true;
|
||||||
|
}
|
||||||
|
|
||||||
GB_ASSERT(arch == TargetArch_Invalid);
|
GB_ASSERT(arch == TargetArch_Invalid);
|
||||||
if (is_notted) {
|
if (is_notted) {
|
||||||
|
|||||||
Reference in New Issue
Block a user