-target-features:<string>

This just passes a string directly to the LLVM features string
This commit is contained in:
gingerBill
2022-02-28 15:08:50 +00:00
parent 2d89faa17c
commit 09e4fff5b1
4 changed files with 14 additions and 9 deletions
+1
View File
@@ -232,6 +232,7 @@ struct BuildContext {
String extra_linker_flags; String extra_linker_flags;
String extra_assembler_flags; String extra_assembler_flags;
String microarch; String microarch;
String target_features;
BuildModeKind build_mode; BuildModeKind build_mode;
bool generate_docs; bool generate_docs;
i32 optimization_level; i32 optimization_level;
+4
View File
@@ -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)); // GB_ASSERT_MSG(LLVMTargetHasAsmBackend(target));
LLVMCodeGenOptLevel code_gen_level = LLVMCodeGenLevelNone; LLVMCodeGenOptLevel code_gen_level = LLVMCodeGenLevelNone;
+9 -1
View File
@@ -626,6 +626,7 @@ enum BuildFlagKind {
BuildFlag_ExtraLinkerFlags, BuildFlag_ExtraLinkerFlags,
BuildFlag_ExtraAssemblerFlags, BuildFlag_ExtraAssemblerFlags,
BuildFlag_Microarch, BuildFlag_Microarch,
BuildFlag_TargetFeatures,
BuildFlag_RelocMode, BuildFlag_RelocMode,
BuildFlag_DisableRedZone, 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_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_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_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_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); 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); string_to_lower(&build_context.microarch);
break; 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: { case BuildFlag_RelocMode: {
GB_ASSERT(value.kind == ExactValue_String); GB_ASSERT(value.kind == ExactValue_String);
String v = value.value_string; String v = value.value_string;
-8
View File
@@ -10,10 +10,6 @@ struct String {
u8 * text; u8 * text;
isize len; isize len;
// u8 &operator[](isize i) {
// GB_ASSERT_MSG(0 <= i && i < len, "[%td]", i);
// return text[i];
// }
u8 const &operator[](isize i) const { u8 const &operator[](isize i) const {
GB_ASSERT_MSG(0 <= i && i < len, "[%td]", i); GB_ASSERT_MSG(0 <= i && i < len, "[%td]", i);
return text[i]; return text[i];
@@ -33,10 +29,6 @@ struct String {
struct String16 { struct String16 {
wchar_t *text; wchar_t *text;
isize len; 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 { wchar_t const &operator[](isize i) const {
GB_ASSERT_MSG(0 <= i && i < len, "[%td]", i); GB_ASSERT_MSG(0 <= i && i < len, "[%td]", i);
return text[i]; return text[i];