aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-02-28 15:08:50 +0000
committergingerBill <bill@gingerbill.org>2022-02-28 15:08:50 +0000
commit09e4fff5b18a314876c5f5d79f01cdd90aed7362 (patch)
tree1829aa86653775193e88df3abc7d502e25f11f5a /src
parent2d89faa17cf88b76e183e35f4d50722271c76d20 (diff)
`-target-features:<string>`
This just passes a string directly to the LLVM features string
Diffstat (limited to 'src')
-rw-r--r--src/build_settings.cpp1
-rw-r--r--src/llvm_backend.cpp4
-rw-r--r--src/main.cpp10
-rw-r--r--src/string.cpp8
4 files changed, 14 insertions, 9 deletions
diff --git a/src/build_settings.cpp b/src/build_settings.cpp
index 7beee8664..e94fade4e 100644
--- a/src/build_settings.cpp
+++ b/src/build_settings.cpp
@@ -232,6 +232,7 @@ struct BuildContext {
String extra_linker_flags;
String extra_assembler_flags;
String microarch;
+ String target_features;
BuildModeKind build_mode;
bool generate_docs;
i32 optimization_level;
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp
index 40c06c23a..ed3ae7dfc 100644
--- a/src/llvm_backend.cpp
+++ b/src/llvm_backend.cpp
@@ -1298,6 +1298,10 @@ void lb_generate_code(lbGenerator *gen) {
}
}
+ if (build_context.target_features.len != 0) {
+ llvm_features = alloc_cstring(permanent_allocator(), build_context.target_features);
+ }
+
// GB_ASSERT_MSG(LLVMTargetHasAsmBackend(target));
LLVMCodeGenOptLevel code_gen_level = LLVMCodeGenLevelNone;
diff --git a/src/main.cpp b/src/main.cpp
index d2263f5a7..5a77e09d8 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -626,6 +626,7 @@ enum BuildFlagKind {
BuildFlag_ExtraLinkerFlags,
BuildFlag_ExtraAssemblerFlags,
BuildFlag_Microarch,
+ BuildFlag_TargetFeatures,
BuildFlag_RelocMode,
BuildFlag_DisableRedZone,
@@ -783,7 +784,8 @@ bool parse_build_flags(Array<String> args) {
add_flag(&build_flags, BuildFlag_IgnoreUnknownAttributes, str_lit("ignore-unknown-attributes"), BuildFlagParam_None, Command__does_check);
add_flag(&build_flags, BuildFlag_ExtraLinkerFlags, str_lit("extra-linker-flags"), BuildFlagParam_String, Command__does_build);
add_flag(&build_flags, BuildFlag_ExtraAssemblerFlags, str_lit("extra-assembler-flags"), BuildFlagParam_String, Command__does_build);
- add_flag(&build_flags, BuildFlag_Microarch, str_lit("microarch"), BuildFlagParam_String, Command__does_build);
+ add_flag(&build_flags, BuildFlag_Microarch, str_lit("microarch"), BuildFlagParam_String, Command__does_build);
+ add_flag(&build_flags, BuildFlag_TargetFeatures, str_lit("target-features"), BuildFlagParam_String, Command__does_build);
add_flag(&build_flags, BuildFlag_RelocMode, str_lit("reloc-mode"), BuildFlagParam_String, Command__does_build);
add_flag(&build_flags, BuildFlag_DisableRedZone, str_lit("disable-red-zone"), BuildFlagParam_None, Command__does_build);
@@ -1351,6 +1353,12 @@ bool parse_build_flags(Array<String> args) {
string_to_lower(&build_context.microarch);
break;
}
+ case BuildFlag_TargetFeatures: {
+ GB_ASSERT(value.kind == ExactValue_String);
+ build_context.target_features = value.value_string;
+ string_to_lower(&build_context.target_features);
+ break;
+ }
case BuildFlag_RelocMode: {
GB_ASSERT(value.kind == ExactValue_String);
String v = value.value_string;
diff --git a/src/string.cpp b/src/string.cpp
index bcaf23b9b..d3dbc6904 100644
--- a/src/string.cpp
+++ b/src/string.cpp
@@ -10,10 +10,6 @@ struct String {
u8 * text;
isize len;
- // u8 &operator[](isize i) {
- // GB_ASSERT_MSG(0 <= i && i < len, "[%td]", i);
- // return text[i];
- // }
u8 const &operator[](isize i) const {
GB_ASSERT_MSG(0 <= i && i < len, "[%td]", i);
return text[i];
@@ -33,10 +29,6 @@ struct String {
struct String16 {
wchar_t *text;
isize len;
- wchar_t &operator[](isize i) {
- GB_ASSERT_MSG(0 <= i && i < len, "[%td]", i);
- return text[i];
- }
wchar_t const &operator[](isize i) const {
GB_ASSERT_MSG(0 <= i && i < len, "[%td]", i);
return text[i];