73 lines
1.8 KiB
Python
73 lines
1.8 KiB
Python
"""
|
|
Build script for Cython extensions.
|
|
|
|
Usage:
|
|
python scripts/build_cython.py build_ext --inplace
|
|
|
|
Or via make:
|
|
make build-cython
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
def build_extensions():
|
|
try:
|
|
from Cython.Build import cythonize
|
|
except ImportError:
|
|
print("Cython not installed. Skipping Cython build.")
|
|
print("Install with: pip install cython")
|
|
return False
|
|
|
|
try:
|
|
from setuptools import Extension
|
|
from setuptools.dist import Distribution
|
|
from setuptools.command.build_ext import build_ext
|
|
except ImportError:
|
|
print("setuptools not installed. Skipping Cython build.")
|
|
print("Install with: pip install setuptools")
|
|
return False
|
|
|
|
extensions = [
|
|
Extension(
|
|
"pyserve._path_matcher",
|
|
sources=["pyserve/_path_matcher.pyx"],
|
|
extra_compile_args=["-O3", "-ffast-math"],
|
|
define_macros=[("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION")],
|
|
),
|
|
]
|
|
|
|
ext_modules = cythonize(
|
|
extensions,
|
|
compiler_directives={
|
|
"language_level": "3",
|
|
"boundscheck": False,
|
|
"wraparound": False,
|
|
"cdivision": True,
|
|
"embedsignature": True,
|
|
},
|
|
annotate=True,
|
|
)
|
|
|
|
dist = Distribution({"ext_modules": ext_modules})
|
|
dist.package_dir = {"": "."}
|
|
|
|
cmd = build_ext(dist)
|
|
cmd.ensure_finalized()
|
|
cmd.inplace = True
|
|
cmd.run()
|
|
|
|
print("\nCython extensions built successfully!")
|
|
print(" - pyserve/_path_matcher" + (".pyd" if sys.platform == "win32" else ".so"))
|
|
|
|
return True
|
|
|
|
|
|
if __name__ == "__main__":
|
|
project_root = Path(__file__).parent.parent
|
|
os.chdir(project_root)
|
|
|
|
success = build_extensions()
|
|
sys.exit(0 if success else 1)
|