| --- | |
| title: Cython | |
| short-description: Support for Cython in Meson | |
| ... | |
| # Cython | |
| Meson provides native support for cython programs starting with version 0.59.0. | |
| This means that you can include it as a normal language, and create targets like | |
| any other supported language: | |
| ```meson | |
| lib = static_library( | |
| 'foo', | |
| 'foo.pyx', | |
| ) | |
| ``` | |
| Generally Cython is most useful when combined with the python module's | |
| extension_module method: | |
| ```meson | |
| project('my project', 'cython') | |
| py = import('python').find_installation(pure: false) | |
| py.extension_module( | |
| 'foo', | |
| 'foo.pyx', | |
| ) | |
| ``` | |
| You can pass arguments accepted by the `cython` CLI script with the | |
| `cython_args` argument: | |
| ```meson | |
| py.extension_module( | |
| 'foo-bounds' | |
| 'foo.pyx', | |
| cython_args : ['-Xboundscheck=False'], | |
| ) | |
| ``` | |
| ## C++ intermediate support | |
| *(New in 0.60.0)* | |
| An option has been added to control this, called `cython_language`. This can be | |
| either `'c'` or `'cpp'`. | |
| For those coming from setuptools/distutils, note that meson ignores | |
| `# distutils: ` inline directives in Cython source files, hence | |
| `# distutils: language = c++` has no effect. The `override_options` keyword | |
| should be used instead: | |
| ```meson | |
| project('my project', 'cython') | |
| py.extension_module( | |
| 'foo', | |
| 'foo_cpp.pyx', # will be transpiled to C++ | |
| override_options : ['cython_language=cpp'], | |
| ) | |
| ``` |