| """ |
| XERV CRAYON SETUP v5.2.6 - WITH C++ EXTENSIONS |
| ============================================== |
| Builds native extensions for maximum performance |
| """ |
|
|
| import os |
| import sys |
| import platform |
| from pathlib import Path |
| from setuptools import setup, find_packages, Extension |
| from setuptools.command.build_ext import build_ext |
|
|
| VERSION = "5.2.6" |
|
|
| class CustomBuildExt(build_ext): |
| """Custom build extension to handle platform-specific compilation""" |
| |
| def build_extension(self, ext): |
| try: |
| super().build_extension(ext) |
| except Exception as e: |
| print(f"Warning: Failed to build {ext.name}: {e}") |
| print("Falling back to pure Python implementation...") |
| |
|
|
| def get_extensions(): |
| """Get list of extensions to build""" |
| extensions = [] |
| |
| |
| script_dir = Path(__file__).parent |
| c_ext_dir = script_dir / "src" / "crayon" / "c_ext" |
| |
| |
| cpu_sources = [ |
| str(c_ext_dir / "crayon_module.c"), |
| str(c_ext_dir / "simd_ops.c"), |
| str(c_ext_dir / "cpu_engine.cpp"), |
| ] |
| |
| cpu_ext = Extension( |
| 'crayon.c_ext.crayon_cpu', |
| sources=cpu_sources, |
| include_dirs=[str(c_ext_dir)], |
| extra_compile_args=['-O3', '-march=native'] if platform.system() != 'Windows' else ['/O2'], |
| language='c++' |
| ) |
| extensions.append(cpu_ext) |
| |
| |
| if os.environ.get('CUDA_HOME') or shutil.which('nvcc'): |
| cuda_sources = [ |
| str(c_ext_dir / "gpu_engine_cuda.cu"), |
| ] |
| |
| cuda_ext = Extension( |
| 'crayon.c_ext.crayon_cuda', |
| sources=cuda_sources, |
| include_dirs=[str(c_ext_dir)], |
| extra_compile_args=['-O3'], |
| language='c++' |
| ) |
| extensions.append(cuda_ext) |
| |
| return extensions |
|
|
| |
| build_extensions = '--no-extensions' not in sys.argv |
|
|
| if build_extensions: |
| try: |
| extensions = get_extensions() |
| print(f"Building {len(extensions)} extension(s)...") |
| except Exception as e: |
| print(f"Warning: Extension setup failed: {e}") |
| print("Falling back to pure Python...") |
| extensions = [] |
| else: |
| extensions = [] |
| print("Skipping extension build (using pure Python)") |
|
|
| setup( |
| name="xerv-crayon", |
| version=VERSION, |
| packages=find_packages("src"), |
| package_dir={"": "src"}, |
| python_requires=">=3.8,<3.14", |
| install_requires=[ |
| "numpy>=1.21.0", |
| ], |
| ext_modules=extensions if build_extensions else [], |
| cmdclass={'build_ext': CustomBuildExt} if build_extensions else {}, |
| package_data={ |
| "crayon": [ |
| "resources/dat/vocab_lite.dat", |
| "resources/dat/vocab_lite.json", |
| "resources/dat/vocab_standard.dat", |
| "resources/dat/vocab_standard.json", |
| "resources/*.txt", |
| "resources/*.csv", |
| "c_ext/*.h", |
| "c_ext/*.c", |
| "c_ext/*.cpp", |
| "c_ext/*.cu", |
| "c_ext/*.hip", |
| "c_ext/*.pyd", |
| "c_ext/*.so" |
| ] |
| }, |
| ) |
|
|