aboutsummaryrefslogtreecommitdiff
path: root/src/build_settings.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2025-04-10 11:36:03 +0100
committergingerBill <bill@gingerbill.org>2025-04-10 11:36:03 +0100
commit1f814c33dcfccec9073d15214268457c0d6ea273 (patch)
tree1c1457ecb2768046229a8119e59f82d16f54b207 /src/build_settings.cpp
parent5e63388de289f6cbf17e3fdae60f3a092f4419e5 (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.cpp34
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) {