aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2025-10-12 10:19:45 +0100
committerGitHub <noreply@github.com>2025-10-12 10:19:45 +0100
commit85005babc2fbcec380d2649a3a4f61316370d2fa (patch)
treed7e0681d5179d02cedd836db21d1bcc9977b0355 /src
parent9e836a2e4996ca0df32329f15b6257ea88a9231a (diff)
parentc4a8af0f0d2d8c5d052f075df524f10b67306730 (diff)
Merge pull request #5794 from alsakandari/improve-target-features
Improve target features flag by allowing the user to disable a target feature
Diffstat (limited to 'src')
-rw-r--r--src/build_settings.cpp12
-rw-r--r--src/llvm_backend.cpp5
-rw-r--r--src/main.cpp5
3 files changed, 21 insertions, 1 deletions
diff --git a/src/build_settings.cpp b/src/build_settings.cpp
index 53953600e..694ba1142 100644
--- a/src/build_settings.cpp
+++ b/src/build_settings.cpp
@@ -2093,7 +2093,19 @@ gb_internal bool check_target_feature_is_enabled(String const &feature, String *
for (;;) {
String str = string_split_iterator(&it, ',');
if (str == "") break;
+
if (!string_set_exists(&build_context.target_features_set, str)) {
+ String plus_str = concatenate_strings(temporary_allocator(), make_string_c("+"), str);
+
+ if (!string_set_exists(&build_context.target_features_set, plus_str)) {
+ if (not_enabled) *not_enabled = str;
+ return false;
+ }
+ }
+
+ String minus_str = concatenate_strings(temporary_allocator(), make_string_c("-"), str);
+
+ if (string_set_exists(&build_context.target_features_set, minus_str)) {
if (not_enabled) *not_enabled = str;
return false;
}
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp
index c2decf091..9256acbb2 100644
--- a/src/llvm_backend.cpp
+++ b/src/llvm_backend.cpp
@@ -3055,7 +3055,10 @@ gb_internal bool lb_generate_code(lbGenerator *gen) {
}
first = false;
- llvm_features = gb_string_appendc(llvm_features, "+");
+ if (*str.text != '+' && *str.text != '-') {
+ llvm_features = gb_string_appendc(llvm_features, "+");
+ }
+
llvm_features = gb_string_append_length(llvm_features, str.text, str.len);
}
diff --git a/src/main.cpp b/src/main.cpp
index 6ad20cf26..2d58cf218 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -3719,6 +3719,11 @@ int main(int arg_count, char const **arg_ptr) {
String item = string_split_iterator(&target_it, ',');
if (item == "") break;
+ if (*item.text == '+' || *item.text == '-') {
+ item.text++;
+ item.len--;
+ }
+
String invalid;
if (!check_target_feature_is_valid_for_target_arch(item, &invalid) && item != str_lit("help")) {
if (item != str_lit("?")) {