diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2025-10-12 10:19:45 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-12 10:19:45 +0100 |
| commit | 85005babc2fbcec380d2649a3a4f61316370d2fa (patch) | |
| tree | d7e0681d5179d02cedd836db21d1bcc9977b0355 /src | |
| parent | 9e836a2e4996ca0df32329f15b6257ea88a9231a (diff) | |
| parent | c4a8af0f0d2d8c5d052f075df524f10b67306730 (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.cpp | 12 | ||||
| -rw-r--r-- | src/llvm_backend.cpp | 5 | ||||
| -rw-r--r-- | src/main.cpp | 5 |
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("?")) { |