Description
Edit: PR at: #2445
Hello!
TL;DR: a split into declarations/definitions would save a lot of time/money for the gem5 project which I work on. I already have a prototype which reduces build time by 40% from 25 minutes to 15 minutes.
If I were to send a patch that does this split, in an opt-in way that does not affect existing users at all, would you consider merging it?
I would like to know if this is reasonable before I sink time into something that won't get reviewed.
The proposed implementation is: I would just check if a macro if defined before inclusion of pybind11.hpp, say PYBIND11_HPP
.
If the macro is defined, only declarations will be enabled, and therefore you won't get object redefinitions. So usage would be in a project that wants to opt-in would be like this.
In one single file of the project which gets linked at the end:
pybind11.cpp
#include <pybind11/pybind11.h>
This will be the only file to contain definitions of non-templated stuff that does not need to be defined in headers.
Then, on every other file of the project, include as:
#define PYBIND11_HPP 1
#include <pybind11/pybind11.h>
which will only expose declarations and not definitions, therefore preventing a ton of object redefinitions.
More details about the gem5 project can be found at: #708 (comment) maybe this issue is a duplicate of that one, but I'm not sure, feel free to close if you think yes. I'm just waiting for another long build and decided to annoy you a bit :-) If you promise to review, I will send a patch.