Upgrade SpiderMonkey to ESR 102

This commit is contained in:
Itms
2024-10-13 22:13:45 +02:00
parent 2e32636a53
commit 6a5488832e
13 changed files with 159 additions and 268 deletions
+25 -21
View File
@@ -4,10 +4,10 @@ set -e
cd "$(dirname "$0")"
# This should match the version in config/milestone.txt
FOLDER="mozjs-91.13.1"
FOLDER="mozjs-102.15.1"
# If same-version changes are needed, increment this.
LIB_VERSION="91.13.1+2"
LIB_NAME="mozjs91"
LIB_VERSION="102.15.1+0"
LIB_NAME="mozjs102"
if [ -e .already-built ] && [ "$(cat .already-built)" = "${LIB_VERSION}" ]; then
echo "Spidermonkey is already up to date."
@@ -17,9 +17,11 @@ fi
OS="${OS:=$(uname -s)}"
# fetch
# This tarball is built from https://ftp.mozilla.org/pub/firefox/releases/102.15.1esr/source
# by running js/src/make-source-package.py
if [ ! -e "${FOLDER}.tar.xz" ]; then
curl -fLo "${FOLDER}.tar.xz" \
"https://svn.wildfiregames.com/public/source-libs/trunk/spidermonkey/${FOLDER}.tar.xz"
"https://releases.wildfiregames.com/libs/${FOLDER}.tar.xz"
fi
# unpack
@@ -46,18 +48,16 @@ tar xfJ "${FOLDER}.tar.xz"
(
cd "${FOLDER}"
# Prevent the SpiderMonkey build system from reading dependencies from
# user-installed python packages.
PYTHONNOUSERSITE=true
# Silence notifications and warnings from the Mozilla build system
export MOZ_NOSPAM=1
export CFLAGS="${CFLAGS} -w"
export CXXFLAGS="${CXXFLAGS} -w"
# Standalone SpiderMonkey can not use jemalloc (see https://bugzilla.mozilla.org/show_bug.cgi?id=1465038)
# Jitspew doesn't compile on VS17 in the zydis disassembler - since we don't use it, deactivate it.
# Trace-logging doesn't compile for now.
CONF_OPTS="--disable-tests
--disable-jemalloc
--disable-js-shell
--without-intl-api
--enable-shared-js"
# Do not let mach fetch python and rust packages online: use vendored content
export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE="none"
# Do not let mach install tools in the user's home, create a disposable folder
export MOZBUILD_STATE_PATH="${MOZBUILD_STATE_PATH:=$(pwd)/mozbuild-state}"
if [ -n "$PROFILE" ]; then
CONF_OPTS="$CONF_OPTS --enable-profiling
@@ -105,23 +105,21 @@ tar xfJ "${FOLDER}.tar.xz"
${CTARGET:+--target=${CTARGET}}"
# Build
./mach create-mach-environment
# Debug (broken on FreeBSD)
if [ "${OS}" != "FreeBSD" ]; then
MOZCONFIG="$(pwd)/../mozconfig" \
OPTIONS="${CONF_OPTS} \
MOZCONFIG_OPTIONS="${CONF_OPTS} \
--enable-debug \
--disable-optimize \
--enable-gczeal" \
BUILD_DIR="build-debug" \
BUILD_DIR="build-debug" \
./mach build "${JOBS}"
fi
# Release
MOZCONFIG="$(pwd)/../mozconfig" \
OPTIONS="${CONF_OPTS} \
MOZCONFIG_OPTIONS="${CONF_OPTS} \
--enable-optimize" \
BUILD_DIR="build-release" \
BUILD_DIR="build-release" \
./mach build "${JOBS}"
)
@@ -157,6 +155,12 @@ if [ "${OS}" = "Windows_NT" ]; then
cd "${FOLDER}"/build-release/dist/include
rm -f mozzconf.h zconf.h zlib.h
)
# SpiderMonkey can be linked/included in projects built with MSVC, however, since clang is now the only
# supported compiler on Windows, the codebase has accumulated some divergences with MSVC.
# Upstream tries on a best-effort basis to keep the SM headers MSVC-compatible.
patch -d "${FOLDER}"/build-debug/dist/include -p1 <patches/FixHeadersForMSVC.diff
patch -d "${FOLDER}"/build-release/dist/include -p1 <patches/FixHeadersForMSVC.diff
fi
# js-config.h is different for debug and release builds, so we need different include directories for both
+14 -2
View File
@@ -1,5 +1,17 @@
# Pass options to configure
for option in ${OPTIONS}; do
# Build only the JS shell
ac_add_options --enable-project=js
ac_add_options --enable-shared-js
# Standalone SpiderMonkey can not use jemalloc (see https://bugzilla.mozilla.org/show_bug.cgi?id=1465038)
ac_add_options --disable-jemalloc
# Disable unneeded build parts
ac_add_options --without-intl-api
ac_add_options --disable-js-shell
ac_add_options --disable-tests
# Pass extra options from build.sh
for option in ${MOZCONFIG_OPTIONS}; do
ac_add_options "$option"
done
@@ -1,24 +0,0 @@
From 8dd2ad66811d2d5c72599bd87a77345c254af23c Mon Sep 17 00:00:00 2001
From: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Date: Mon, 15 May 2023 22:02:52 +0200
Subject: [PATCH 1/1] Use default pass manager for clang
---
build/moz.configure/flags.configure | 1 +
1 file changed, 1 insertion(+)
diff --git a/build/moz.configure/flags.configure b/build/moz.configure/flags.configure
index cc8ca1e6aada..40f4c7d905ec 100644
--- a/build/moz.configure/flags.configure
+++ b/build/moz.configure/flags.configure
@@ -36,6 +36,7 @@ option(
ubsan,
)
def new_pass_manager_flags(enabled, compiler, host, target, pgo, enable_fuzzing, ubsan):
+ return None
if host.os == "OSX":
# Some native Mac builds hang with the new pass manager. Given the
# inability to test in CI, don't take the risk of further breakage.
--
2.39.3
@@ -0,0 +1,35 @@
# HG changeset patch
# User Mike Hommey <mh+mozilla@glandium.org>
# Date 1684789421 0
# Node ID 888d869b7f7534934ec2d0f63beeb4cb55860661
# Parent b15de32be05d9c1ef2e783b468e6e0c3601217ff
Bug 1751561 - Don't include DllMain when mozglue is linked statically. r=jandem
mozglue has its own DllMain, which conflicts with this one.
Differential Revision: https://phabricator.services.mozilla.com/D178410
diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
--- a/js/src/jsapi.cpp
+++ b/js/src/jsapi.cpp
@@ -4224,17 +4224,17 @@ #else
*valueOut = 0;
#endif
return true;
}
/************************************************************************/
#if !defined(STATIC_EXPORTABLE_JS_API) && !defined(STATIC_JS_API) && \
- defined(XP_WIN)
+ defined(XP_WIN) && (defined(MOZ_MEMORY) || !defined(JS_STANDALONE))
# include "util/WindowsWrapper.h"
/*
* Initialization routine for the JS DLL.
*/
BOOL WINAPI DllMain(HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved) {
return TRUE;
@@ -1,15 +0,0 @@
--- a/third_party/python/virtualenv/virtualenv/discovery/py_info.py
+++ b/third_party/python/virtualenv/virtualenv/discovery/py_info.py
@@ -177,7 +177,11 @@
)
if not os.path.exists(path): # some broken packaging don't respect the sysconfig, fallback to distutils path
# the pattern include the distribution name too at the end, remove that via the parent call
- fallback = os.path.join(self.prefix, os.path.dirname(self.distutils_install["headers"]))
+ # A hack for https://github.com/pypa/virtualenv/issues/2208
+ distutils_path = self.distutils_install["headers"]
+ if distutils_path.startswith(u"local/"):
+ distutils_path = distutils_path[6:]
+ fallback = os.path.join(self.prefix, os.path.dirname(distutils_path))
if os.path.exists(fallback):
path = fallback
return path
@@ -0,0 +1,38 @@
diff --git a/jspubtd.h b/jspubtd.h
index 97de470db..1507b6b6b 100644
--- a/jspubtd.h
+++ b/jspubtd.h
@@ -51,6 +51,11 @@ enum JSType {
enum JSProtoKey {
#define PROTOKEY_AND_INITIALIZER(name, clasp) JSProto_##name,
JS_FOR_EACH_PROTOTYPE(PROTOKEY_AND_INITIALIZER)
+// Workaround MSVC's __VA_ARGS__ quirk, until bug 1768634 is solved
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1768634
+#ifdef _MSC_VER
+ ,
+#endif
#undef PROTOKEY_AND_INITIALIZER
JSProto_LIMIT
};
diff --git a/mozilla/Result.h b/mozilla/Result.h
index cc4f87826..0e763a300 100644
--- a/mozilla/Result.h
+++ b/mozilla/Result.h
@@ -212,10 +212,16 @@ using UnsignedIntType = std::conditional_t<
*/
template <typename V, typename E>
class ResultImplementation<V, E, PackingStrategy::LowBitTagIsError> {
+// These assertions fail with MSVC 14.1. Similar bugs:
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1778246
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1778247
+// TODO: test with recent MSVC before reporting a bug
+#ifndef _MSC_VER
static_assert(std::is_trivially_copyable_v<V> &&
std::is_trivially_destructible_v<V>);
static_assert(std::is_trivially_copyable_v<E> &&
std::is_trivially_destructible_v<E>);
+#endif
static constexpr size_t kRequiredSize = std::max(sizeof(V), sizeof(E));
@@ -1,26 +0,0 @@
--- a/python/mozbuild/mozbuild/virutalenv.py
+++ b/python/mozbuild/mozbuild/virtualenv.py
@@ -587,18 +587,11 @@
"""
- # Defer "distutils" import until this function is called so that
- # "mach bootstrap" doesn't fail due to Linux distro python-distutils
- # package not being installed.
- # By the time this function is called, "distutils" must be installed
- # because it's needed by the "virtualenv" package.
- from distutils import dist
+ import sysconfig
- distribution = dist.Distribution({"script_args": "--no-user-cfg"})
- installer = distribution.get_command_obj("install")
- installer.prefix = os.path.normpath(self.virtualenv_root)
- installer.finalize_options()
-
# Path to virtualenv's "site-packages" directory
- site_packages = installer.install_purelib
+ site_packages = sysconfig.get_path(
+ 'purelib',
+ scheme='posix_prefix',
+ vars={ 'base': os.path.normpath(self.virtualenv_root) })
pip_dist_info = next(
@@ -1,6 +1,6 @@
--- a/js/src/old-configure
+++ b/js/src/old-configure
@@ -7035,10 +7035,10 @@
@@ -5081,10 +5081,10 @@
@@ -0,0 +1,36 @@
# HG changeset patch
# User Mike Hommey <mh+mozilla@glandium.org>
# Date 1663730995 0
# Node ID 8e4ceab106b12c3816163829494ac5e7938a6be6
# Parent ef44d7041454440fdd144b79c115c8d6439ec31a
Bug 1790540 - Gracefully handle when topobjdir is not set in MozbuildObject.mozconfig. r=firefox-build-system-reviewers,nalexander
This is a condition that happens when going through the js/src code path
in build/moz.configure/init.configure:mozconfig.
Differential Revision: https://phabricator.services.mozilla.com/D157769
diff --git a/python/mozbuild/mozbuild/base.py b/python/mozbuild/mozbuild/base.py
--- a/python/mozbuild/mozbuild/base.py
+++ b/python/mozbuild/mozbuild/base.py
@@ -193,17 +193,17 @@ class MozbuildObject(ProcessExecutionMix
# If we can't resolve topobjdir, oh well. We'll figure out when we need
# one.
return cls(
topsrcdir, None, None, topobjdir=topobjdir, mozconfig=mozconfig, **kwargs
)
def resolve_mozconfig_topobjdir(self, default=None):
- topobjdir = self.mozconfig["topobjdir"] or default
+ topobjdir = self.mozconfig.get("topobjdir") or default
if not topobjdir:
return None
if "@CONFIG_GUESS@" in topobjdir:
topobjdir = topobjdir.replace("@CONFIG_GUESS@", self.resolve_config_guess())
if not os.path.isabs(topobjdir):
topobjdir = os.path.abspath(os.path.join(self.topsrcdir, topobjdir))
@@ -1,130 +0,0 @@
From c6c6300e8698ba1d3db96591b9c150c49b8e6d76 Mon Sep 17 00:00:00 2001
From: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Date: Fri, 13 Jan 2023 13:13:47 +0100
Subject: [PATCH] Fix use of removed 'U' support in python 3.11
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Form https://docs.python.org/3.11/whatsnew/3.11.html:
open(), io.open(), codecs.open() and fileinput.FileInput no longer
accept 'U' (“universal newline”) in the file mode. In Python 3,
“universal newline” mode is used by default whenever a file is opened in
text mode, and the 'U' flag has been deprecated since Python 3.3. The
newline parameter to these functions controls how universal newlines
work. (Contributed by Victor Stinner in bpo-37330.)
https://github.com/python/cpython/issues/81511
---
python/mozbuild/mozbuild/action/process_define_files.py | 2 +-
python/mozbuild/mozbuild/backend/base.py | 2 +-
python/mozbuild/mozbuild/preprocessor.py | 6 +++---
python/mozbuild/mozbuild/util.py | 4 ++--
python/mozbuild/mozpack/files.py | 4 ++--
5 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/python/mozbuild/mozbuild/action/process_define_files.py b/python/mozbuild/mozbuild/action/process_define_files.py
index f1d401ac2600..aca59d0f0517 100644
--- a/python/mozbuild/mozbuild/action/process_define_files.py
+++ b/python/mozbuild/mozbuild/action/process_define_files.py
@@ -36,7 +36,7 @@ def process_define_file(output, input):
) and not config.substs.get("JS_STANDALONE"):
config = PartialConfigEnvironment(mozpath.join(topobjdir, "js", "src"))
- with open(path, "rU") as input:
+ with open(path, "r") as input:
r = re.compile(
"^\s*#\s*(?P<cmd>[a-z]+)(?:\s+(?P<name>\S+)(?:\s+(?P<value>\S+))?)?", re.U
)
diff --git a/python/mozbuild/mozbuild/backend/base.py b/python/mozbuild/mozbuild/backend/base.py
index 7bc1986d863b..b64a70946863 100644
--- a/python/mozbuild/mozbuild/backend/base.py
+++ b/python/mozbuild/mozbuild/backend/base.py
@@ -272,7 +272,7 @@ class BuildBackend(LoggingMixin):
return status
@contextmanager
- def _write_file(self, path=None, fh=None, readmode="rU"):
+ def _write_file(self, path=None, fh=None, readmode="r"):
"""Context manager to write a file.
This is a glorified wrapper around FileAvoidWrite with integration to
diff --git a/python/mozbuild/mozbuild/preprocessor.py b/python/mozbuild/mozbuild/preprocessor.py
index f7820b9c9147..857f1a6c9bfd 100644
--- a/python/mozbuild/mozbuild/preprocessor.py
+++ b/python/mozbuild/mozbuild/preprocessor.py
@@ -531,7 +531,7 @@ class Preprocessor:
if args:
for f in args:
- with io.open(f, "rU", encoding="utf-8") as input:
+ with io.open(f, "r", encoding="utf-8") as input:
self.processFile(input=input, output=out)
if depfile:
mk = Makefile()
@@ -860,7 +860,7 @@ class Preprocessor:
args = self.applyFilters(args)
if not os.path.isabs(args):
args = os.path.join(self.curdir, args)
- args = io.open(args, "rU", encoding="utf-8")
+ args = io.open(args, "r", encoding="utf-8")
except Preprocessor.Error:
raise
except Exception:
@@ -914,7 +914,7 @@ class Preprocessor:
def preprocess(includes=[sys.stdin], defines={}, output=sys.stdout, marker="#"):
pp = Preprocessor(defines=defines, marker=marker)
for f in includes:
- with io.open(f, "rU", encoding="utf-8") as input:
+ with io.open(f, "r", encoding="utf-8") as input:
pp.processFile(input=input, output=output)
return pp.includes
diff --git a/python/mozbuild/mozbuild/util.py b/python/mozbuild/mozbuild/util.py
index 071daecc397b..b59aabbea61b 100644
--- a/python/mozbuild/mozbuild/util.py
+++ b/python/mozbuild/mozbuild/util.py
@@ -225,7 +225,7 @@ class FileAvoidWrite(BytesIO):
still occur, as well as diff capture if requested.
"""
- def __init__(self, filename, capture_diff=False, dry_run=False, readmode="rU"):
+ def __init__(self, filename, capture_diff=False, dry_run=False, readmode="r"):
BytesIO.__init__(self)
self.name = filename
assert type(capture_diff) == bool
@@ -1447,7 +1447,7 @@ def patch_main():
def my_get_command_line():
with open(
- os.path.join(os.path.dirname(__file__), "fork_interpose.py"), "rU"
+ os.path.join(os.path.dirname(__file__), "fork_interpose.py"), "r"
) as fork_file:
fork_code = fork_file.read()
# Add our relevant globals.
diff --git a/python/mozbuild/mozpack/files.py b/python/mozbuild/mozpack/files.py
index 8150e72d6fa2..001c497b2796 100644
--- a/python/mozbuild/mozpack/files.py
+++ b/python/mozbuild/mozpack/files.py
@@ -574,7 +574,7 @@ class PreprocessedFile(BaseFile):
pp = Preprocessor(defines=self.defines, marker=self.marker)
pp.setSilenceDirectiveWarnings(self.silence_missing_directive_warnings)
- with _open(self.path, "rU") as input:
+ with _open(self.path, "r") as input:
with _open(os.devnull, "w") as output:
pp.processFile(input=input, output=output)
@@ -631,7 +631,7 @@ class PreprocessedFile(BaseFile):
pp = Preprocessor(defines=self.defines, marker=self.marker)
pp.setSilenceDirectiveWarnings(self.silence_missing_directive_warnings)
- with _open(self.path, "rU") as input:
+ with _open(self.path, "r") as input:
pp.processFile(input=input, output=dest, depfile=deps_out)
dest.close()
--
2.38.2
@@ -1,16 +0,0 @@
--- a/python/mozbuild/mozbuild/virtualenv.py
+++ b/python/mozbuild/mozbuild/virtualenv.py
@@ -246,11 +246,12 @@
if os.path.exists(self.virtualenv_root):
shutil.rmtree(self.virtualenv_root)
args = [
python,
- self.virtualenv_script_path,
+ "-m",
+ "virtualenv",
# Without this, virtualenv.py may attempt to contact the outside
# world and search for or download a newer version of pip,
# setuptools, or wheel. This is bad for security, reproducibility,
# and speed.
"--no-download",
@@ -33,9 +33,9 @@ diff --git a/memory/mozalloc/moz.build b/memory/mozalloc/moz.build
UNIFIED_SOURCES += [
"mozalloc.cpp",
"mozalloc_abort.cpp",
"mozalloc_oom.cpp",
]
SOURCES += [
"mozalloc_abort.cpp",
if CONFIG["MOZ_MEMORY"]:
+8 -31
View File
@@ -14,10 +14,18 @@ patch -p1 <"${PATCHES}"/FixRustLinkage.diff
# Differentiate debug/release library names.
patch -p1 <"${PATCHES}"/FixLibNames.diff
# Fix Windows build environment under MozillaBuild 4, fixed in ESR 115
# https://bugzilla.mozilla.org/show_bug.cgi?id=1790540
patch -p1 <"${PATCHES}"/FixMozillaBuild4.diff
# Fix Windows build, fixed in ESR 115
# https://bugzilla.mozilla.org/show_bug.cgi?id=1802675
patch -p1 <"${PATCHES}"/FixWinHeap.diff
# Fix linking on Windows with mozglue, fixed in ESR 115
# https://bugzilla.mozilla.org/show_bug.cgi?id=1751561
patch -p1 <"${PATCHES}"/FixDllMain.diff
# There is an issue on 32-bit linux builds sometimes.
# NB: the patch here is Comment 21 modified by Comment 25
# but that seems to imperfectly fix the issue with GCC.
@@ -26,34 +34,3 @@ patch -p1 <"${PATCHES}"/FixWinHeap.diff
if [ "$(uname -m)" = "i686" ] && [ "${OS}" != "Windows_NT" ]; then
patch -p1 <"${PATCHES}"/FixFpNormIssue.diff
fi
if [ "$OS" = "Darwin" ]; then
# The bundled virtualenv version is not working on MacOS
# with recent homebrew and needs to be upgraded.
# Install it locally to not pollute anything.
pip3 install --upgrade -t virtualenv virtualenv
export PYTHONPATH="$(pwd)/virtualenv:$PYTHONPATH"
patch -p1 <"${PATCHES}"/FixVirtualEnv.diff
fi
if [ "$OS" = "Linux" ]; then
# Use sysconfig instead of distutils with the bundled virtualenv
# This fixes an issue with install schemes on recent Debian and Fedora
# Furthermore, distutils is going to be deprecated and is replaced
# by sysconfig in ESR102
patch -p1 <"${PATCHES}"/FixInstallScheme.diff
# Extend the previous fix with a portion of the following commit
# https://phabricator.services.mozilla.com/D130410
# This will prevent bug 1739486 from happening on Fedora
patch -p1 <"${PATCHES}"/FixFedoraVirtualEnv.diff
fi
# Python >= 3.11 support
PYTHON_MINOR_VERSION="$(python3 -c 'import sys; print(sys.version_info.minor)')"
if [ "$PYTHON_MINOR_VERSION" -ge 11 ]; then
patch -p1 <"${PATCHES}"/FixUnicodePython311.diff
fi
# fixed in SM102
patch -p1 <"${PATCHES}"/FixClang16Build.diff