More meson.build adjustments; decouple C++ and python wrapper code#122
More meson.build adjustments; decouple C++ and python wrapper code#122woodtp wants to merge 6 commits into
Conversation
- tabs -> 2 spaces per style guide - foreach loop for the extension modules - clean up cpp_args - migrate c++ standard specification to project() - global project argument for `-DUSE_MPI` - Removed `-fPIC`. Meson handles this for us. - set default buildtype to 'release' in project() - can be overridden with `meson setup ... -Dbuildtype=debug` - Add `-march=native` global project argument, conditionally. - Since we don't distribute binaries and expect users to compile pyo3 for themselves, I don't see a reason not to include this flag as it can only help performance. At worst, it does nothing.
|
Accidentally closed somehow |
|
Working to extend this PR to add support for 1st-party extensions, e.g., https://github.com/PyORBIT-Collaboration/laser-stripping for @tvgorlov. |
Overall restructuring so we don't ship more than necessary.
…er implementation. Previously, we were compiling one, monolithic shared library. In the revised meson.build, I've separated out compilation of the core from python extension modules and removed unnecessary interdependence. Bunch and Grid<N>D were reliant on the pyORBIT_MPI_Comm wrapper over MPI_Comm, which coupled C++ core behavior and python wrapper handling thereby preventing separation. Factored out common utility functions to ascertain Python types of pyorbit objects at runtime under src/core/type_accessors.cc. Renamed all instances of "Python.h" -> <Python.h>. This is probably better for Python.h, because the header typically exists at system lib paths, not in the project dir.
Switch to #include <...> in parity with Python.h
|
Fixed. All CI checks are passing. So, it looks like I'm touching lots of files, but majority of the file diffs are just renaming instances of There are some actual changes to core, though. My goal was to create separation between C++ backend and python wrapper logic in the Creating that separation opens up the possibility to create bindings for other languages if desired (Julia?), or use another library like pybind/nanobind. In the end, we now have a shared library for the pyorbit core, which does not link against |
Migrating some modfications I've been carrying around locally:
cpp_argsproject(). Can now be overridden from the CLI with:meson setup ... -Dcpp_std=<version>-DUSE_MPI-fPIC. Meson handles this for us.buildtypeto 'release' in project()meson setup ... -Dbuildtype=debug-march=nativeglobal project argument, conditionally.Development Headers and Shared Library
meson.build has been configured to produce metadata for pkgconfig that will be installed under your chosen prefix:
<prefix>/lib/pkgconfig/pyorbit3.pc. This can be discovered by pkgconfig for external projects to properly find development headers and link against libpyorbit3.To install pyorbit in a conda environment:
meson setup build --prefix=$CONDA_PREFIX meson compile -C build meson install -C buildTo uninstall
cd build ninja uninstallAfter installation, headers can be found under
<prefix>/include/pyorbit3.TODO