This is a notice that the next release of GJS will depend on SpiderMonkey 102 (corresponding with Firefox’s extended support release, ESR102) for the upcoming GNOME 43.
Mozilla has not worked out an automatic release process for SpiderMonkey tarballs yet. The official recommendation is to use the Firefox ESR102 source tarball. More information can be found here, at Building SpiderMonkey (this documentation hasn’t yet been updated for ESR102, but the build process is the same).
All patches required for GNOME will have been backported as of ESR 102.2.0. This version won’t be released until late August 2022, so for the time being you will need to patch the 102.1.0 sources with the fixes for these bugs:
- 1776254 - Cannot build library for SM embedding examples, missing ProfilingCategoryList.h
- 1780857 - Embedder build broken in js/public/Debug.h if DEBUG not defined
You can find the set of patches that I build with in Commits · ptomato/mozjs · GitHub
This is the recommended set of configure options with which to build SpiderMonkey 102:
--disable-jemalloc: This one is strictly required, as the jemalloc allocator is incompatible with standalone SpiderMonkey.
--with-intl-api: This one is also strictly required, as core functionality of GJS will not work without it.
--with-system-zlib: This one is strongly recommended. Without it, you’ll build SpiderMonkey’s internal copy of zlib, which shouldn’t be necessary as most if not all systems include a suitable shared library.
--with-system-icu: This one is recommended, but at least ICU 71.1 is required. If that’s not possible on your platform, then you can use
--without-system-icuto build SpiderMonkey’s internal copy instead.
--host: This is set to the host triplet name. I’m not entirely sure if this is strictly necessary.
AUTOCONF: If you make downstream changes to SpiderMonkey’s configure scripts, you will need to have a build-dependency on autoconf 2.13 (any more recent version will not work) to regenerate them. You may need to set the
AUTOCONFvariable on the configure command line, since different systems have different program-suffixes for autoconf 2.13. If you didn’t make changes but the build is checking for autoconf 2.13 anyway, you can bypass this check by configuring with
You may also want to consider:
--enable-ctypes: This is not considered core GJS functionality, so no GNOME software should use it, but it could be interesting for developers. However, I don’t test builds with this option and it’s been broken in the past.
--enable-debug: Never, ever ship a libmozjs with this option in production, as the performance is severely degraded. However, if your platform allows for such a thing, then you might consider shipping a separate debug-enabled package that conflicts with the main package, since the debug option makes it significantly easier to develop with SpiderMonkey and diagnose crashes that might happen on user machines. (A complication is that SpiderMonkey’s ABI is different between debug and non-debug, so a separate GJS package would also be required. GJS’s ABI is the same in both cases.)
For reference, here is how SpiderMonkey 102 is configured in the GNOME SDK: https://gitlab.gnome.org/GNOME/gnome-build-meta/-/merge_requests/1708
If you run into build problems with SpiderMonkey on your platform, please open a bug on bugzilla.mozilla.org and CC me. If you can provide a patch that would be great. Mozilla has a review and backport process that’s a bit mystifying for outsiders, and I can help move your patches through it.