mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Add -reloc-mode:<string>
This commit is contained in:
@@ -189,6 +189,13 @@ enum ErrorPosStyle {
|
|||||||
ErrorPosStyle_COUNT
|
ErrorPosStyle_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum RelocMode {
|
||||||
|
RelocMode_Default,
|
||||||
|
RelocMode_Static,
|
||||||
|
RelocMode_PIC,
|
||||||
|
RelocMode_DynamicNoPIC,
|
||||||
|
};
|
||||||
|
|
||||||
// This stores the information for the specify architecture of this build
|
// This stores the information for the specify architecture of this build
|
||||||
struct BuildContext {
|
struct BuildContext {
|
||||||
// Constants
|
// Constants
|
||||||
@@ -270,6 +277,8 @@ struct BuildContext {
|
|||||||
|
|
||||||
bool copy_file_contents;
|
bool copy_file_contents;
|
||||||
|
|
||||||
|
RelocMode reloc_mode;
|
||||||
|
|
||||||
|
|
||||||
u32 cmd_doc_flags;
|
u32 cmd_doc_flags;
|
||||||
Array<String> extra_packages;
|
Array<String> extra_packages;
|
||||||
|
|||||||
@@ -1308,6 +1308,20 @@ void lb_generate_code(lbGenerator *gen) {
|
|||||||
reloc_mode = LLVMRelocPIC;
|
reloc_mode = LLVMRelocPIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (build_context.reloc_mode) {
|
||||||
|
case RelocMode_Default:
|
||||||
|
break;
|
||||||
|
case RelocMode_Static:
|
||||||
|
reloc_mode = LLVMRelocStatic;
|
||||||
|
break;
|
||||||
|
case RelocMode_PIC:
|
||||||
|
reloc_mode = LLVMRelocPIC;
|
||||||
|
break;
|
||||||
|
case RelocMode_DynamicNoPIC:
|
||||||
|
reloc_mode = LLVMRelocDynamicNoPic;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
for_array(i, gen->modules.entries) {
|
for_array(i, gen->modules.entries) {
|
||||||
target_machines[i] = LLVMCreateTargetMachine(
|
target_machines[i] = LLVMCreateTargetMachine(
|
||||||
target, target_triple, llvm_cpu,
|
target, target_triple, llvm_cpu,
|
||||||
|
|||||||
@@ -625,6 +625,8 @@ enum BuildFlagKind {
|
|||||||
BuildFlag_ExtraAssemblerFlags,
|
BuildFlag_ExtraAssemblerFlags,
|
||||||
BuildFlag_Microarch,
|
BuildFlag_Microarch,
|
||||||
|
|
||||||
|
BuildFlag_RelocMode,
|
||||||
|
|
||||||
BuildFlag_TestName,
|
BuildFlag_TestName,
|
||||||
|
|
||||||
BuildFlag_DisallowDo,
|
BuildFlag_DisallowDo,
|
||||||
@@ -779,6 +781,8 @@ bool parse_build_flags(Array<String> args) {
|
|||||||
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_RelocMode, str_lit("reloc-mode"), BuildFlagParam_String, Command__does_build);
|
||||||
|
|
||||||
add_flag(&build_flags, BuildFlag_TestName, str_lit("test-name"), BuildFlagParam_String, Command_test);
|
add_flag(&build_flags, BuildFlag_TestName, str_lit("test-name"), BuildFlagParam_String, Command_test);
|
||||||
|
|
||||||
add_flag(&build_flags, BuildFlag_DisallowDo, str_lit("disallow-do"), BuildFlagParam_None, Command__does_check);
|
add_flag(&build_flags, BuildFlag_DisallowDo, str_lit("disallow-do"), BuildFlagParam_None, Command__does_check);
|
||||||
@@ -1339,6 +1343,28 @@ bool parse_build_flags(Array<String> args) {
|
|||||||
string_to_lower(&build_context.microarch);
|
string_to_lower(&build_context.microarch);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case BuildFlag_RelocMode: {
|
||||||
|
GB_ASSERT(value.kind == ExactValue_String);
|
||||||
|
String v = value.value_string;
|
||||||
|
if (v == "default") {
|
||||||
|
build_context.reloc_mode = RelocMode_Default;
|
||||||
|
} else if (v == "static") {
|
||||||
|
build_context.reloc_mode = RelocMode_Static;
|
||||||
|
} else if (v == "pic") {
|
||||||
|
build_context.reloc_mode = RelocMode_PIC;
|
||||||
|
} else if (v == "dynamic-no-pic") {
|
||||||
|
build_context.reloc_mode = RelocMode_DynamicNoPIC;
|
||||||
|
} else {
|
||||||
|
gb_printf_err("-reloc-mode flag expected one of the following\n");
|
||||||
|
gb_printf_err("\tdefault\n");
|
||||||
|
gb_printf_err("\tstatic\n");
|
||||||
|
gb_printf_err("\tpic\n");
|
||||||
|
gb_printf_err("\tdynamic-no-pic\n");
|
||||||
|
bad_flags = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
case BuildFlag_TestName: {
|
case BuildFlag_TestName: {
|
||||||
GB_ASSERT(value.kind == ExactValue_String);
|
GB_ASSERT(value.kind == ExactValue_String);
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user