diff --git a/ffi/targets.cpp b/ffi/targets.cpp index 98de259fc..1ce472c20 100644 --- a/ffi/targets.cpp +++ b/ffi/targets.cpp @@ -182,7 +182,8 @@ LLVMPY_CreateTargetMachine(LLVMTargetRef T, const char *RelocModel, const char *CodeModel, int PrintMC, - int JIT) + int JIT, + const char *ABIName) { using namespace llvm; CodeGenOpt::Level cgol; @@ -233,6 +234,7 @@ LLVMPY_CreateTargetMachine(LLVMTargetRef T, TargetOptions opt; opt.PrintMachineCode = PrintMC; + opt.MCOptions.ABIName = ABIName; bool jit = JIT; diff --git a/llvmlite/binding/targets.py b/llvmlite/binding/targets.py index eb53f09f2..a7e6ffdc3 100644 --- a/llvmlite/binding/targets.py +++ b/llvmlite/binding/targets.py @@ -218,7 +218,7 @@ def __str__(self): def create_target_machine(self, cpu='', features='', opt=2, reloc='default', codemodel='jitdefault', - printmc=False, jit=False): + printmc=False, jit=False, abiname=''): """ Create a new TargetMachine for this target and the given options. @@ -230,6 +230,9 @@ def create_target_machine(self, cpu='', features='', The `jit` option should be set when the target-machine is to be used in a JIT engine. + + The `abiname` option specifies the ABI. RISC-V targets with hard-float + needs to pass the ABI name to LLVM. """ assert 0 <= opt <= 3 assert reloc in RELOC @@ -249,6 +252,7 @@ def create_target_machine(self, cpu='', features='', _encode_string(codemodel), int(printmc), int(jit), + _encode_string(abiname), ) if tm: return TargetMachine(tm) @@ -403,6 +407,8 @@ def has_svml(): c_int, # JIT c_int, + # ABIName + c_char_p, ] ffi.lib.LLVMPY_CreateTargetMachine.restype = ffi.LLVMTargetMachineRef