diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2025-07-22 11:01:50 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-22 11:01:50 +0100 |
| commit | e2b75d2addc9ae520030bc3daec701b80f7ef7c5 (patch) | |
| tree | 2241e57d3b69260b2a0b967a55af4d395c901ccb /src/parser.cpp | |
| parent | b095dd71cbe8386de901674535c9d86ccf4cb9d3 (diff) | |
| parent | 7c917d56e9d07a5c8940560d7f1d35c01bc5fe58 (diff) | |
Merge pull request #5473 from harold-b/hb.subtarget-enhancements
Check for invalid subtargets and add "ios" pseudo subtarget
Diffstat (limited to 'src/parser.cpp')
| -rw-r--r-- | src/parser.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index 5d0a75f8a..7a2693e29 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -6220,9 +6220,10 @@ gb_internal bool parse_build_tag(Token token_for_pos, String s) { 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); num_tokens += 1; @@ -6233,10 +6234,29 @@ gb_internal bool parse_build_tag(Token token_for_pos, String s) { 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) { 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); if (is_notted) { |