aboutsummaryrefslogtreecommitdiff
path: root/src/build_settings.cpp
diff options
context:
space:
mode:
authorYawning Angel <yawning@schwanenlied.me>2023-12-15 17:29:59 +0900
committerYawning Angel <yawning@schwanenlied.me>2024-01-07 20:04:40 +0900
commitcd65a15d81b32636c5097200446cc6d6afc7199b (patch)
tree27d17da8cbc4eb1e9d6380e2179968b0cc87d333 /src/build_settings.cpp
parent9235e8245193fb891e46ee4a7daa3e101ff8032a (diff)
src: `enable_target_feature` should add features, not overwrite
`llvm_features` being empty is the default state, and implies the presence of certain features. Previously if any target features were explicitly enabled by the `enable_target_feature` attribute, they were added comma separated to `llvm_features`. For example: `lzcnt,popcnt,...,sse4.2,sse` This was causing LLVM to try to target a CPU that *ONLY* has the explicitly enabled features. This now will prefix explicitly enabled features with a `+`, and preserve the existing `llvm_features` string by appending to it if it is set.
Diffstat (limited to 'src/build_settings.cpp')
-rw-r--r--src/build_settings.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/build_settings.cpp b/src/build_settings.cpp
index 18ad8ac0d..9d909fcae 100644
--- a/src/build_settings.cpp
+++ b/src/build_settings.cpp
@@ -1493,7 +1493,7 @@ gb_internal void enable_target_feature(TokenPos pos, String const &target_featur
}
-gb_internal char const *target_features_set_to_cstring(gbAllocator allocator, bool with_quotes) {
+gb_internal char const *target_features_set_to_cstring(gbAllocator allocator, bool with_quotes, bool with_plus) {
isize len = 0;
isize i = 0;
for (String const &feature : build_context.target_features_set) {
@@ -1502,6 +1502,7 @@ gb_internal char const *target_features_set_to_cstring(gbAllocator allocator, bo
}
len += feature.len;
if (with_quotes) len += 2;
+ if (with_plus) len += 1;
i += 1;
}
char *features = gb_alloc_array(allocator, char, len+1);
@@ -1513,6 +1514,7 @@ gb_internal char const *target_features_set_to_cstring(gbAllocator allocator, bo
}
if (with_quotes) features[len++] = '"';
+ if (with_plus) features[len++] = '+';
gb_memmove(features + len, feature.text, feature.len);
len += feature.len;
if (with_quotes) features[len++] = '"';