63 lines
2.3 KiB
Diff
63 lines
2.3 KiB
Diff
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
|
|
|