It compiles! It also segfaults when tested! :D
This commit is contained in:
parent
220f59f1e9
commit
13815fd2f3
6 changed files with 923 additions and 159 deletions
37
llvm/_core.c
37
llvm/_core.c
|
|
@ -32,6 +32,11 @@
|
||||||
#include "wrap.h"
|
#include "wrap.h"
|
||||||
#include "extra.h"
|
#include "extra.h"
|
||||||
|
|
||||||
|
/* Project-wide setting */
|
||||||
|
#if (PY_MAJOR_VERSION >= 3)
|
||||||
|
#define LLVM_PY_USE_PYCAPSULE
|
||||||
|
#endif
|
||||||
|
|
||||||
// Python include
|
// Python include
|
||||||
#include "Python.h"
|
#include "Python.h"
|
||||||
|
|
||||||
|
|
@ -1027,12 +1032,10 @@ _wLLVMRemoveModule2(PyObject *self, PyObject *args)
|
||||||
|
|
||||||
#ifdef LLVM_PY_USE_PYCAPSULE
|
#ifdef LLVM_PY_USE_PYCAPSULE
|
||||||
ee = (LLVMExecutionEngineRef) PyCapsule_GetPointer(obj_ee, NULL);
|
ee = (LLVMExecutionEngineRef) PyCapsule_GetPointer(obj_ee, NULL);
|
||||||
fn = (LLVMValueRef) PyCapsule_GetPointer(obj_fn, NULL);
|
mod = (LLVMValueRef) PyCapsule_GetPointer(obj_mod, NULL);
|
||||||
#error "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Using capsule"
|
|
||||||
#else
|
#else
|
||||||
ee = (LLVMExecutionEngineRef) PyCObject_AsVoidPtr(obj_ee);
|
ee = (LLVMExecutionEngineRef) PyCObject_AsVoidPtr(obj_ee);
|
||||||
mod = (LLVMModuleRef) PyCObject_AsVoidPtr(obj_mod);
|
mod = (LLVMModuleRef) PyCObject_AsVoidPtr(obj_mod);
|
||||||
#error "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Using pycobject"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
LLVMRemoveModule(ee, mod, &mod_new, &outmsg);
|
LLVMRemoveModule(ee, mod, &mod_new, &outmsg);
|
||||||
|
|
@ -1749,11 +1752,37 @@ static PyMethodDef core_methods[] = {
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Module main function, hairy because of py3k port
|
||||||
|
|
||||||
|
#if (PY_MAJOR_VERSION >= 3)
|
||||||
|
struct PyModuleDef module_def = {
|
||||||
|
PyModuleDef_HEAD_INIT,
|
||||||
|
"_core",
|
||||||
|
NULL,
|
||||||
|
-1,
|
||||||
|
core_methods,
|
||||||
|
NULL, NULL, NULL, NULL
|
||||||
|
};
|
||||||
|
#define INITERROR return NULL
|
||||||
|
PyObject *
|
||||||
|
PyInit__core(void)
|
||||||
|
#else
|
||||||
|
#define INITERROR return
|
||||||
PyMODINIT_FUNC
|
PyMODINIT_FUNC
|
||||||
init_core(void)
|
init_core(void)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
LLVMLinkInJIT();
|
LLVMLinkInJIT();
|
||||||
LLVMLinkInInterpreter();
|
LLVMLinkInInterpreter();
|
||||||
LLVMInitializeNativeTarget();
|
LLVMInitializeNativeTarget();
|
||||||
Py_InitModule("_core", core_methods);
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
PyObject *module = PyModule_Create( &module_def );
|
||||||
|
#else
|
||||||
|
PyObject *module = Py_InitModule("_core", core_methods);
|
||||||
|
#endif
|
||||||
|
if (module == NULL)
|
||||||
|
INITERROR;
|
||||||
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
return module;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,11 @@
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Project-wide setting */
|
||||||
|
#if (PY_MAJOR_VERSION >= 3)
|
||||||
|
#define LLVM_PY_USE_PYCAPSULE
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* These are some "extra" functions not available in the standard LLVM-C
|
* These are some "extra" functions not available in the standard LLVM-C
|
||||||
* bindings, but are required / good-to-have inorder to implement the
|
* bindings, but are required / good-to-have inorder to implement the
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,11 @@
|
||||||
#ifndef LLVM_PY_EXTRA_H
|
#ifndef LLVM_PY_EXTRA_H
|
||||||
#define LLVM_PY_EXTRA_H
|
#define LLVM_PY_EXTRA_H
|
||||||
|
|
||||||
|
/* Project-wide setting */
|
||||||
|
#if (PY_MAJOR_VERSION >= 3)
|
||||||
|
#define LLVM_PY_USE_PYCAPSULE
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
22
llvm/wrap.c
22
llvm/wrap.c
|
|
@ -30,22 +30,36 @@
|
||||||
|
|
||||||
#include "wrap.h"
|
#include "wrap.h"
|
||||||
|
|
||||||
|
/* Project-wide setting */
|
||||||
|
#if (PY_MAJOR_VERSION >= 3)
|
||||||
|
#define LLVM_PY_USE_PYCAPSULE
|
||||||
|
#endif
|
||||||
|
|
||||||
/*===----------------------------------------------------------------------===*/
|
/*===----------------------------------------------------------------------===*/
|
||||||
/* Helper functions/macros */
|
/* Helper functions/macros */
|
||||||
/*===----------------------------------------------------------------------===*/
|
/*===----------------------------------------------------------------------===*/
|
||||||
|
|
||||||
|
#ifdef LLVM_PY_USE_PYCAPSULE
|
||||||
|
|
||||||
#define _define_std_ctor(typ) \
|
#define _define_std_ctor(typ) \
|
||||||
PyObject * ctor_ ## typ ( typ p) \
|
PyObject * ctor_ ## typ ( typ p) \
|
||||||
{ \
|
{ \
|
||||||
if (p) \
|
if (p) \
|
||||||
#ifdef LLVM_PY_USE_PYCAPSULE \
|
|
||||||
return PyCapsule_New(p, NULL, NULL); \
|
return PyCapsule_New(p, NULL, NULL); \
|
||||||
#else \
|
|
||||||
return PyCObject_FromVoidPtr(p, NULL); \
|
|
||||||
#endif \
|
|
||||||
Py_RETURN_NONE; \
|
Py_RETURN_NONE; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define _define_std_ctor(typ) \
|
||||||
|
PyObject * ctor_ ## typ ( typ p) \
|
||||||
|
{ \
|
||||||
|
if (p) \
|
||||||
|
return PyCObject_FromVoidPtr(p, NULL); \
|
||||||
|
Py_RETURN_NONE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/*===----------------------------------------------------------------------===*/
|
/*===----------------------------------------------------------------------===*/
|
||||||
/* Type ctor/dtor */
|
/* Type ctor/dtor */
|
||||||
|
|
|
||||||
1002
llvm/wrap.h
1002
llvm/wrap.h
File diff suppressed because it is too large
Load diff
5
setup.py
5
setup.py
|
|
@ -85,10 +85,13 @@ def call_setup(llvm_config):
|
||||||
'asmparser', 'linker', 'support'])
|
'asmparser', 'linker', 'support'])
|
||||||
|
|
||||||
std_libs = [ 'pthread', 'm', 'stdc++' ]
|
std_libs = [ 'pthread', 'm', 'stdc++' ]
|
||||||
|
extra_link_args = ["-fPIC"]
|
||||||
if not ("openbsd" in sys.platform or "freebsd" in sys.platform):
|
if not ("openbsd" in sys.platform or "freebsd" in sys.platform):
|
||||||
std_libs.append("dl")
|
std_libs.append("dl")
|
||||||
if "darwin" in sys.platform:
|
if "darwin" in sys.platform:
|
||||||
std_libs.append("ffi")
|
std_libs.append("ffi")
|
||||||
|
extra_link_args += ['-framework', 'Python']
|
||||||
|
|
||||||
|
|
||||||
ext_core = Extension(
|
ext_core = Extension(
|
||||||
'llvm._core',
|
'llvm._core',
|
||||||
|
|
@ -101,7 +104,7 @@ def call_setup(llvm_config):
|
||||||
library_dirs = [libdir],
|
library_dirs = [libdir],
|
||||||
libraries = std_libs + libs_core,
|
libraries = std_libs + libs_core,
|
||||||
extra_objects = objs_core,
|
extra_objects = objs_core,
|
||||||
extra_link_args = ["-fPIC"])
|
extra_link_args = extra_link_args)
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='llvm-py',
|
name='llvm-py',
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue