Fix ABI incompatibilities (#119)

* Fix ABI incompatibilities

* Fix codon-jit on macOS
pull/121/head^2
Ibrahim Numanagić 2022-12-18 10:12:32 -08:00 committed by GitHub
parent d49212373c
commit ac68e1e6f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 24 additions and 11 deletions

View File

@ -4,6 +4,7 @@ project(
VERSION "0.15.2"
HOMEPAGE_URL "https://github.com/exaloop/codon"
DESCRIPTION "high-performance, extensible Python compiler")
set(CODON_JIT_PYTHON_VERSION "0.1.1")
configure_file("${PROJECT_SOURCE_DIR}/cmake/config.h.in"
"${PROJECT_SOURCE_DIR}/codon/config/config.h")
configure_file("${PROJECT_SOURCE_DIR}/cmake/config.py.in"
@ -216,7 +217,7 @@ set(CODON_HPPFILES
codon/sir/var.h
codon/util/common.h
extra/jupyter/jupyter.h
extra/python/codon/jit.h)
codon/compiler/jit_extern.h)
set(CODON_CPPFILES
codon/compiler/compiler.cpp
codon/compiler/debug_listener.cpp

View File

@ -1,5 +1,4 @@
__version__ = "0.1"
__version__ = "@CODON_JIT_PYTHON_VERSION@"
CODON_VERSION = "@PROJECT_VERSION@"
CODON_VERSION_MAJOR = @PROJECT_VERSION_MAJOR@
CODON_VERSION_MINOR = @PROJECT_VERSION_MINOR@

View File

@ -16,7 +16,7 @@
#include "codon/sir/transform/manager.h"
#include "codon/sir/var.h"
#include "extra/python/codon/jit.h"
#include "codon/compiler/jit_extern.h"
namespace codon {
namespace jit {

View File

@ -1 +0,0 @@
include codon/jit.h

View File

@ -3,7 +3,7 @@
from libcpp.string cimport string
from libcpp.vector cimport vector
cdef extern from "jit.h" namespace "codon::jit":
cdef extern from "codon/compiler/jit_extern.h" namespace "codon::jit":
cdef cppclass JIT
cdef cppclass JITResult:
void *result

View File

@ -3,6 +3,7 @@
import os
import sys
import shutil
import subprocess
from pathlib import Path
from Cython.Distutils import build_ext
from setuptools import setup
@ -45,18 +46,31 @@ print("Codon: " + str(codon_path))
if sys.platform == "darwin":
linker_args = "-Wl,-rpath," + str(codon_path / "lib" / "codon")
libraries=["codonrt", "codonc"]
linker_args = ["-Wl,-rpath," + str(codon_path / "lib" / "codon")]
else:
linker_args = "-Wl,-rpath=" + str(codon_path / "lib" / "codon")
libraries=["codonrt"]
linker_args = [
"-Wl,-rpath=" + str(codon_path / "lib" / "codon"),
"-Wl,--no-as-needed",
"-lcodonc",
]
# TODO: handle ABI changes better
out = subprocess.check_output(["nm", "-g", str(codon_path / "lib" / "codon" / "libcodonc.so")])
out = [i for i in out.decode(sys.stdout.encoding).split("\n") if "jitExecuteSafe" in i]
if out and "cxx11" not in out[0]:
print("CXX11 ABI not detected")
os.environ["CFLAGS"] = os.environ.get("CFLAGS", "") + " -D_GLIBCXX_USE_CXX11_ABI=0"
jit_extension = Extension(
"codon.codon_jit",
sources=["codon/jit.pyx", "codon/jit.pxd"],
libraries=["codonc", "codonrt"],
libraries=libraries,
language="c++",
extra_compile_args=["-w", "-std=c++17"],
extra_link_args=[linker_args],
extra_compile_args=["-w"],
extra_link_args=linker_args,
include_dirs=[str(codon_path / "include")],
library_dirs=[str(codon_path / "lib" / "codon")],
)