[QGIS-Developer] Progress on SIP incremental build grant
David Koňařík
dvdkon at konarici.cz
Thu Oct 9 01:29:10 PDT 2025
Hi all,
I'd like to share with you a report of the work I did on QEP 338 (SIP
incremental builds):
My original plan was to build each header file as a separate binding,
then use SIP from a Python script, overriding a few methods to allow
building just one binding out of a project.
After a lot of effort, this plan sadly doesn't seem workable. PyQt's
bindings aren't modularised enough, so building a single binding still
needs to parse almost all of PyQt. Furthermore, SIP has a multi-stage
parse-resolve-generate design, but the "parser" does more than just
parse the code into an AST, not all references are resolved in the
resolve phase, and imports are currently basically done by textual
inclusion.
I've tried making the necessary changes to SIP [1] and QGIS [2], but for
the above reasons, I don't think the performance benefits for
single-file builds are worth the added complexity and performance
penalty for clean builds (which look to be over an hour currently).
The good news is that with the knowledge from working on SIP, I've been
able to improve the performance of regular clean builds, and those
improvements might soon be merged into SIP itself [3]. I've also made
some changes on the QGIS side to not rebuild unchanged code generated by
SIP [4]. With code compilation now taking longer than SIP code
generation, this effectively gives us incremental builds, just at a
larger granularity.
David Koňařík
[1]: https://github.com/dvdkon/sip/tree/qgis-gb
[2]: https://github.com/dvdkon/QGIS/tree/sip-incremental-build
[3]: https://github.com/Python-SIP/sip/pull/87
[4]: https://github.com/qgis/QGIS/pull/63160
More information about the QGIS-Developer
mailing list