Developer tips ============== Over time, we've collected a number of tips and best practices for working with robotpy-build projects which will save you lots of time -- particularly when dealing with very large projects. Build using develop mode ------------------------ For rapid iteration development, we highly recommend using ``python3 setup.py develop`` to build your project. This allows in-tree editing of python files and leads to faster results if you're disciplined. Use parallel builds ------------------- While setuptools does not support parallel builds, robotpy-build will compile things in parallel if you define the environment variable ``RPYBUILD_PARALLEL=1``. .. code-block:: sh $ RPYBUILD_PARALLEL=1 python3 setup.py develop Partial code generation ----------------------- When developing wrappers of very large projects, the wrapper regeneration step can take a very long time. Often you find that you only want to modify a single file. You can define a YAML file and tell robotpy-build to only regenerate the output for that single file, instead of scanning all files and regenerating everything. Create a filter.yml: .. code-block:: yaml # the names in this list correspond to the keys in your 'generate' section only_generate: - SendableChooser Then run your build like so: .. code-block:: bash $ RPYBUILD_GEN_FILTER=filter.yml python setup.py develop Use ccache ---------- If you create a large robotpy-build based project, you'll notice that your build times can be *really* long. This occurs because robotpy-build uses pybind11 for connecting C++ and Python code, and pybind11 relies heaviliy on C++ templates and other modern C++ techniques which cause build times to take a really long time. From ccache's website: Ccache (or “ccache”) is a compiler cache. It speeds up recompilation by caching previous compilations and detecting when the same compilation is being done again. This can dramatically improve your compile times if you're just changing a small portions of your project. Once you install ccache, define these environment variables: .. code-block:: bash export RPYBUILD_PARALLEL=1 export RPYBUILD_CC_LAUNCHER=ccache export GCC_COLORS=1 The first one will make robotpy-build compile in parallel. The second tells robotpy-build to use ccache, and the third makes error output nice when using ccache.