import os
import pybind11
try:
    from pybind11.setup_helpers import Pybind11Extension
    from pybind11.setup_helpers import Pybind11Extension, build_ext, ParallelCompile, naive_recompile
    # Optional multithreaded build
    ParallelCompile("NPY_NUM_BUILD_JOBS", needs_recompile=naive_recompile).install()
except ImportError:
    from setuptools import Extension as Pybind11Extension
    
from setuptools import setup

os.environ["CXX"] = "ninja"

ext_modules = [
    Pybind11Extension(
        "qosm_core",
        include_dirs=["include/", pybind11.get_include(), 
                      "3rdparty/include/",
                      "3rdparty/"],
        libraries=["3rdparty/lib/libopenblas"],
        sources=[
            "src/py_wrapper.cpp",  "src/classes/Grid.cpp",  "src/classes/Domain.cpp",  "src/classes/Frame.cpp",  "src/classes/Source.cpp", 
            "src/classes/VSRC.cpp", "src/classes/Beam.cpp",  "src/classes/Aperture.cpp",  "src/classes/Horn.cpp",  "src/classes/Triangle.cpp", 
            "src/classes/BVH.cpp",  "src/functions/Propagation.cpp", 
        ],
        language="c++",
        extra_compile_args= [
            "/W0", "/O2", "/DPYBIND11_DETAILED_ERROR_MESSAGES", "/openmp"
        ],
    ),
]

setup(
    version='0.1',
    author='Gregory Gaudin',
    author_email='g.gaudin@terakalis.com',
    description='Quasi-Optical System Modelling - C++',
    name="qosm_core",
    cmdclass={"build_ext": build_ext},
    ext_modules=ext_modules,
    zip_safe=False,
    python_requires=">=3.11",
)

# USAGE:
#   install with: python .\setup.py install