[gjs/mozjs91: 134/135] README.MSVC.md: Update SpiderMonkey build instructions
- From: Philip Chimento <pchimento src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gjs/mozjs91: 134/135] README.MSVC.md: Update SpiderMonkey build instructions
- Date: Sat, 9 Oct 2021 22:09:03 +0000 (UTC)
commit 254cf83034be315581ac9388af0491827ca9da60
Author: Chun-wei Fan <fanchunwei src gnome org>
Date: Thu Aug 12 14:37:10 2021 +0800
README.MSVC.md: Update SpiderMonkey build instructions
SpiderMonkey 91.x changed its build system significantly, so update the
instructions accordingly so that people will know how to build
SpiderMonkey 91.x.
README.MSVC.md | 125 +++++++++++++++++++++++++++++++--------------------------
1 file changed, 67 insertions(+), 58 deletions(-)
---
diff --git a/README.MSVC.md b/README.MSVC.md
index 79fa9a8f..9cf51a87 100644
--- a/README.MSVC.md
+++ b/README.MSVC.md
@@ -50,42 +50,70 @@ FireFox (ESR) or Thunderbird 91.x sources, in $(srcroot)/js.
Please do note that the build must be done carefully, in addition to the
official instructions that are posted on the Mozilla website:
-https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Build_Documentation
+https://firefox-source-docs.mozilla.org/js/build.html
+
+You will need to create a .mozconfig file that will describe your build
+options for the build in the root directory of the Firefox/ThunderBird 91.x
+sources. A sample content of the .mozconfig file can be added as follows:
+
+```
+ac_add_options --enable-application=js
+mk_add_options MOZ_MAKE_FLAGS=-j12
+mk_add_options JS_STANDALONE=1
+ac_add_options --target=x86_64-pc-mingw32
+ac_add_options --host=x86_64-pc-mingw32
+ac_add_options --disable-tests
+ac_add_options --enable-optimize
+ac_add_options --disable-debug
+ac_add_options --disable-jemalloc
+ac_add_options --prefix=c:/software.b/mozjs91.bin
+```
+
+An explanation of the lines above:
+* `ac_add_options --enable-application=js`: This line is absolutely required, to build SpiderMonkey
standalone
+* `mk_add_options MOZ_MAKE_FLAGS=-j12`: MOZ_MAKE_FLAGS=-jX means X number of parallel processes for the
build
+* `mk_add_options JS_STANDALONE=1`: Enforce building SpiderMonkey standalone (could be optional)
+* `ac_add_options --target=x86_64-pc-mingw32`: Target architecture, replace `x86_64` with `aarch64` for
ARM64 builds, and with `i686` for 32-bit x86 builds.
+* `ac_add_options --host=x86_64-pc-mingw32`: Use this as-is, unless building on a 32-bit compiler (replace
`x86_64` with `i686`; not recommended)
+* `ac_add_options --disable-tests`: Save some build time
+* `ac_add_options --enable-optimize`: Use for release builds of SpiderMonkey. Use `--disable-optimize`
instead if building with `--enable-debug`
+* `ac_add_options --enable-debug`: Include debugging functions, for debug builds. Use `--disable-debug`
instead if building with `--enable-optimize`
+* `ac_add_options --disable-jemalloc`: This is absolutely needed, otherwise GJS will not build and run
correctly
+* `ac_add_options --prefix=c:/software.b/mozjs91.bin`: Some installation path, change as needed
+
+If your GJS build crashes upon launch, use Dependency Walker to ensure that
+mozjs-91.dll does not depend on mozglue.dll! If it does, or if GJS fails to
+link with missing arena_malloc() and friends symbols, you have built SpiderMoney
+incorrectly and will need to rebuild SpiderMonkey (with the build options as
+noted above) and retry the build.
+
+Please also check that `--enable-optimize` is *not* used with `--enable-debug`.
+You should explicitly enable one and disable the other, as `--enable-debug`
+will make the resulting build depend on the debug CRT, and mixing between
+the release and debug CRT in the same DLL is often a sign of trouble when using
+with GJS, meaning that you will need to rebuild SpiderMonkey with the appropriate
+options set in your `.mozconfig` file. Please note that for SpiderMonkey builds,
+PDB files are generated even if `--disable-debug` is used.
+
+You will need to check that `js-config.h` has the correct entries that correspond
+to your SpiderMonkey build, especially the following items:
+
+* `JS_64BIT`, `JS_PUNBOX64`: Should be defined for 64-bit builds, not 32-bit builds
+* `JS_NUNBOX32`: Should be defined for 32-bit builds, not 64-bit builds
+* `JS_DEBUG`, `JS_GC_ZEAL`: Should only be defined if `--enable-debug` is used
-For the configuration step, you will need to run the following:
-
-(64-bit/x64 builds)
-JS_STANDALONE=1 $(mozjs_srcroot)/js/src/configure --enable-nspr-build --host=x86_64-pc-mingw32
--target=x86_64-pc-mingw32 --prefix=<some_prefix> --disable-jemalloc
--with-libclang-path=<full_path_to_directory_containing_libclang_dll>
--with-clang-path=<full_path_to_directory_containing_clang_exe>
-
-(32-bit builds)
-JS_STANDALONE=1 $(mozjs_srcroot)/js/src/configure --enable-nspr-build --host=i686-pc-mingw32
--target=i686-pc-mingw32 --prefix=<some_prefix> --disable-jemalloc
--with-libclang-path=<full_path_to_directory_containing_libclang_dll>
--with-clang-path=<full_path_to_directory_containing_clang_exe>
-
-Notice that "JS_STANDALONE=1" and "--disable-jemalloc" are absolutely required,
-otherwise GJS will not build/run correctly. If your GJS build crashes upon
-launch, use Dependency Walker to ensure that mozjs-91.dll does not depend on
-mozglue.dll! If it does, or if GJS fails to link with missing arena_malloc() and
-friends symbols, you have built SpiderMoney incorrectly and will need to rebuild
-SpiderMonkey (with the build options as noted above) and retry the build.
Note in particular that a mozglue.dll should *not* be in $(builddir)/dist/bin,
although there will be a mozglue.lib somewhere in the build tree (which, you can
safely delete after building SpiderMonkey). The --host=... and --target=...
are absolutely required for all builds, as per the Mozilla's SpiderMonkey build
instructions, as Rust is being involved here.
-You may want to pass in --disable-js-shell to not build the JS
-shell that comes with SpiderMonkey to save time, and perhaps
-use --with-system-nspr (instead of the --enable-nspr-build as
-above), --with-system-zlib and --with-system-icu if you know
-what you are doing and that their pkg-config files
-(or headers/LIB's) can be found directly or using configuration
-options, to further save time.
-
-After the configuration finishes successfully, you may run 'mozmake' and
-'mozmake install' as you would for a standard SpiderMonkey build. If
-'mozmake install' does not work for you for some reason, the DLLs you
-need and js.exe (if you did not pass in --disable-js-shell) can be
-found in $(buildroot)/dist/bin (you need *all* the DLLs, make sure
-that there is no mozglue.dll, otherwise you will need to redo your
+Run `./mach build` to carry out the build, and then `./mach build install` to copy
+the completed build to the directory specified by `ac_add_options --prefix=xxx`.
+
+If `./mach build install` does not work for you for some reason, the DLLs you
+need and js.exe can be found in $(buildroot)/dist/bin (you need *all* the DLLs,
+make sure that there is no mozglue.dll, otherwise you will need to redo your
build as noted above), and the required headers are found in
$(buildroot)/dist/include. Note that for PDB files and .lib files,
you will need to search for them in $(buildroot),
@@ -93,9 +121,6 @@ where the PDB file names match the filenames for the DLLs/EXEs in
$(buildroot)/dist/bin, and you will need to look for the following .lib files:
-mozjs-91.lib
-js_static.lib (optional)
--nspr4.lib (optional, recommended for future use, if --enable-nspr-build is used)
--plc4.lib (optional, recommended for future use, if --enable-nspr-build is used)
--plds4.lib (optional, recommended for future use, if --enable-nspr-build is used)
You may want to put the .lib's and DLLs/EXEs into $(PREFIX)\lib and
$(PREFIX)\bin respectively, and put the headers into
@@ -104,31 +129,13 @@ $(PREFIX)\include\mozjs-91 for convenience.
You will need to place the generated mozjs-91.pc pkg-config file into
$(PREFIX)\lib\pkgconfig and ensure that pkg-config can find it by
setting PKG_CONFIG_PATH. Ensure that the 'includedir' and 'libdir'
-in there is correct, and remove the 'nspr' entry from the
-'Requires.private:' line so that the
-mozjs-91.pc can be used correctly in Visual Studio/clang-cl builds. You
-will also need to ensure that the existing GObject-Introspection
-installation (if used) is on the same drive where the GJS sources
-are (and therefore where the GJS build is being carried out).
-
-Since Mozilla insisted that clang-cl is to be used to build SpiderMonkey,
-note that some SpideMonkey headers might need be updated as follows, if intending
-to build without clang-cl, since there are some GCC-ish assumptions here:
+in there is correct so that the mozjs-91.pc can be used correctly in
+Visual Studio/clang-cl builds, and replace the `-isystem` with `-I` if
+building GJS with Visual Studio. You will also need to ensure that the
+existing GObject-Introspection installation (if used) is on the same
+drive where the GJS sources are (and therefore where the GJS build
+is being carried out).
--Update $(includedir)/mozjs-91/js/AllocPolicy.h (after the build):
-
-Get rid of the 'JS_FRIEND_API' macro from the class
-'TempAllocPolicy : public AllocPolicyBase' (ca. lines 112 and 178),
-for the member method definitions of onOutOfMemory() and reportAllocOverflow()
-
--Update $(includedir)/mozjs-91/js/BigInt.h (after the build):
-
-Remove the 'JS_PUBLIC_API' macro from the definition of
-'template <typename NumericT>
-extern BigInt* NumberToBigInt(JSContext* cx, NumericT val)' (ca lines 72-73), as
-it should not be there.
-
-======================
To carry out the build
======================
If using clang-cl, you will need to set *both* the environment variables CC
@@ -138,12 +145,14 @@ can be defined, which is used if using the cross-compilation capabilities of CLa
In this case, you need to ensure that 'clang-cl.exe' and 'lld-link.exe' (i.e. your
LLVM bindir) are present in your PATH.
-You need to install Python 3.5.x or later, as well as the
+You need to install Python 3.6.x or later, as well as the
pkg-config tool, Meson (via pip) and Ninja. Perform a build by doing the
following, in an appropriate Visual Studio command prompt
in an empty build directory:
-meson <path_to_gjs_sources> --buildtype=... --prefix=<some_prefix> -Dskip_dbus_tests=true
+```
+meson <path_to_gjs_sources> --buildtype=... --prefix=<some_prefix> -Dskip_dbus_tests=true -Dprofiler=disabled
+```
(Note that -Dskip_dbus_tests=true is required for MSVC/clang-cl builds; please
see the Meson documentation for the values accepted by buildtype)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]