Search code examples
pythoncythonsetuptoolsconditional-compilation

Cython conditional compilation based on external value given via `setuptools`


I try to conditionally generate C code from a Cython pyx file. I found in the Cython documentation that I can use DEF to define a value and IF to conditionally generate code based on a defined value, but how can I set the value from the setup.py via Extension from setuptools.

Thank You


Solution

  • Thank you for the link.

    The interesting flag in the setup.py is cython_compile_time_env. And to import the Extension from Cython.

    from setuptools import setup
    from Cython.Distutils.extension import Extension
    
    ext = Extension(
        name,
        include_dirs=include_dirs,
        cython_compile_time_env=dict(OPENMP=True),
        sources=['test.pyx'])
    
    setup(name=name,
          cmdclass=dict(build_ext=build_ext),
          ext_modules=[ext])
    

    And in the test.pyx:

    ...
    IF OPENMP:
    #Do openmp
    ELSE:
    #No openmp
    ...
    

    Cython conditional statements (IF...ELSE above) are documented here.