mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-16 05:13:58 -07:00
This saves a sizeable amount of disk space during the build, by not creating a very large libjs_static.a (~1.5 GB) that contains a copy of all the symbols in the object files generated during the build. Upstream bug: https://bugzilla.mozilla.org/show_bug.cgi?id=2008085 Upstream commit: https://hg.mozilla.org/mozilla-central/rev/a924182c4e55 Note that the upstream commit doesn't apply cleanly to Spidermonkey 128.13.0, it had to be rebased.
257 lines
7.8 KiB
Bash
Executable file
257 lines
7.8 KiB
Bash
Executable file
#!/bin/sh
|
|
set -e
|
|
|
|
: "${TAR:=tar}"
|
|
|
|
cd "$(dirname "$0")"
|
|
|
|
# This should match the version in config/milestone.txt
|
|
PV=128.13.0
|
|
FOLDER="mozjs-${PV}"
|
|
# If same-version changes are needed, increment this.
|
|
LIB_VERSION="${PV}+wfg5"
|
|
LIB_NAME="mozjs128"
|
|
|
|
build_archive()
|
|
{
|
|
if [ ! -e "firefox-${PV}esr.source.tar.xz" ]; then
|
|
curl -fLo "firefox-${PV}esr.source.tar.xz" \
|
|
"https://archive.mozilla.org/pub/firefox/releases/${PV}esr/source/firefox-${PV}esr.source.tar.xz"
|
|
fi
|
|
|
|
rm -Rf firefox-${PV}
|
|
rm -Rf mozjs-${PV}.tar.xz
|
|
${TAR} -xJf firefox-${PV}esr.source.tar.xz
|
|
|
|
DIST="$(realpath .)" STAGING="$(realpath .)/firefox-${PV}/mozjs-src-pkg" firefox-${PV}/js/src/make-source-package.py build
|
|
}
|
|
|
|
fetch()
|
|
{
|
|
curl -fLo "${FOLDER}.tar.xz" \
|
|
"https://releases.wildfiregames.com/libs/${FOLDER}.tar.xz"
|
|
}
|
|
|
|
while [ "$#" -gt 0 ]; do
|
|
case "$1" in
|
|
--build-archive)
|
|
build_archive
|
|
exit
|
|
;;
|
|
--fetch-only)
|
|
fetch
|
|
exit
|
|
;;
|
|
--force-rebuild) rm -f .already-built ;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
echo "Building SpiderMonkey..."
|
|
|
|
if [ -e .already-built ] && [ "$(cat .already-built || true)" = "${LIB_VERSION}" ]; then
|
|
echo "Skipping - already built (use --force-rebuild to override)"
|
|
exit
|
|
fi
|
|
|
|
OS="${OS:=$(uname -s)}"
|
|
|
|
# fetch
|
|
# This tarball is built from https://ftp.mozilla.org/pub/firefox/releases/115.16.1esr/source/
|
|
# by running js/src/make-source-package.py
|
|
if [ ! -e "${FOLDER}.tar.xz" ]; then
|
|
fetch || build_archive
|
|
fi
|
|
|
|
# unpack
|
|
rm -Rf "${FOLDER}"
|
|
"${TAR}" xfJ "${FOLDER}.tar.xz" \
|
|
--exclude=js/src/tests/non262 \
|
|
--exclude=js/src/tests/test262 \
|
|
--exclude=js/src/jit-test \
|
|
--exclude=python/mozperftest \
|
|
--exclude=testing/web-platform \
|
|
--exclude=third_party/rust/mp4parse/link-u-avif-sample-images
|
|
|
|
# patch
|
|
(
|
|
cd "${FOLDER}"
|
|
|
|
# shellcheck disable=SC1091
|
|
. ../patches/patch.sh
|
|
)
|
|
|
|
# build
|
|
(
|
|
cd "${FOLDER}"
|
|
|
|
# Silence notifications and warnings from the Mozilla build system
|
|
export MOZ_NOSPAM=1
|
|
export CFLAGS="${CFLAGS} -w"
|
|
export CXXFLAGS="${CXXFLAGS} -w"
|
|
|
|
# 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 [ "${OS}" != "Darwin" ]; then
|
|
# Make thin archives to save disk space
|
|
# The AR_FLAGS customization point is provided and honored by mach
|
|
export AR_FLAGS="--thin"
|
|
fi
|
|
|
|
if [ -n "$PROFILE" ]; then
|
|
CONF_OPTS="$CONF_OPTS
|
|
--enable-profiling
|
|
--enable-perf
|
|
--enable-jitspew
|
|
--with-jitreport-granularity=3"
|
|
|
|
if [ "${OS}" = "Darwin" ]; then
|
|
CONF_OPTS="$CONF_OPTS
|
|
--enable-instruments"
|
|
fi
|
|
fi
|
|
|
|
if [ "${OS}" = "Windows_NT" ]; then
|
|
CONF_OPTS="${CONF_OPTS} --target=i686"
|
|
elif [ "${OS}" = "Darwin" ]; then
|
|
# Unless we are forcing an architecture, switch between ARM / x86 based on platform.
|
|
if [ -z "${ARCH}" ]; then
|
|
if [ "$(uname -m)" = "arm64" ]; then
|
|
ARCH="aarch64"
|
|
else
|
|
ARCH="x86_64"
|
|
fi
|
|
fi
|
|
CONF_OPTS="${CONF_OPTS} --target=$ARCH-apple-darwin"
|
|
|
|
# This needs PKG_CONFIG_PATH to be exported in build-macos-libs.sh
|
|
CONF_OPTS="${CONF_OPTS} --with-system-zlib"
|
|
# Specify target versions and SDK
|
|
if [ "${MIN_OSX_VERSION}" ] && [ "${MIN_OSX_VERSION-_}" ]; then
|
|
CONF_OPTS="${CONF_OPTS} --enable-macos-target=$MIN_OSX_VERSION"
|
|
fi
|
|
if [ "${SYSROOT}" ] && [ "${SYSROOT-_}" ]; then
|
|
CONF_OPTS="${CONF_OPTS} --with-macos-sdk=${SYSROOT}"
|
|
fi
|
|
fi
|
|
|
|
# If Valgrind looks like it's installed, then set up SM to support it
|
|
# (else the JITs will interact poorly with it)
|
|
if [ -e /usr/include/valgrind/valgrind.h ]; then
|
|
CONF_OPTS="${CONF_OPTS} --enable-valgrind"
|
|
fi
|
|
|
|
# We need to be able to override CHOST in case it is 32bit userland on 64bit kernel
|
|
CONF_OPTS="${CONF_OPTS} \
|
|
${CBUILD:+--build=${CBUILD}} \
|
|
${CHOST:+--host=${CHOST}} \
|
|
${CTARGET:+--target=${CTARGET}}"
|
|
|
|
# Build
|
|
# Debug (broken on FreeBSD)
|
|
if [ "${OS}" != "FreeBSD" ]; then
|
|
# shellcheck disable=SC2086
|
|
MOZCONFIG="$(pwd)/../mozconfig" \
|
|
MOZCONFIG_OPTIONS="${CONF_OPTS} \
|
|
--enable-debug \
|
|
--disable-optimize \
|
|
--enable-gczeal" \
|
|
BUILD_DIR="build-debug" \
|
|
./mach build ${JOBS}
|
|
fi
|
|
# Release
|
|
# shellcheck disable=SC2086
|
|
MOZCONFIG="$(pwd)/../mozconfig" \
|
|
MOZCONFIG_OPTIONS="${CONF_OPTS} \
|
|
--enable-optimize" \
|
|
BUILD_DIR="build-release" \
|
|
./mach build ${JOBS}
|
|
)
|
|
|
|
# install
|
|
rm -Rf bin include-debug include-release lib
|
|
|
|
mkdir bin lib
|
|
|
|
if [ "${OS}" = "Windows_NT" ]; then
|
|
LIB_PREFIX=
|
|
LIB_SUFFIX=.dll
|
|
STATIC_LIB_SUFFIX=.lib
|
|
else
|
|
LIB_PREFIX=lib
|
|
LIB_SUFFIX=.so
|
|
STATIC_LIB_SUFFIX=.a
|
|
if [ "${OS}" = "OpenBSD" ]; then
|
|
LIB_SUFFIX=.so.1.0
|
|
elif [ "${OS}" = "Darwin" ]; then
|
|
LIB_SUFFIX=.a
|
|
fi
|
|
fi
|
|
|
|
if [ "${OS}" = "Windows_NT" ]; then
|
|
# Bug #776126
|
|
# SpiderMonkey uses a tweaked zlib when building, and it wrongly copies its own files to include dirs
|
|
# afterwards, so we have to remove them to not have them conflicting with the regular zlib
|
|
(
|
|
cd "${FOLDER}"/build-debug/dist/include
|
|
rm -f mozzconf.h zconf.h zlib.h
|
|
)
|
|
(
|
|
cd "${FOLDER}"/build-release/dist/include
|
|
rm -f mozzconf.h zconf.h zlib.h
|
|
)
|
|
fi
|
|
|
|
# js-config.h is different for debug and release builds, so we need different include directories for both
|
|
mkdir include-release
|
|
cp -R -L "${FOLDER}"/build-release/dist/include/* include-release/
|
|
|
|
if [ "${OS}" != "FreeBSD" ]; then
|
|
mkdir include-debug
|
|
cp -R -L "${FOLDER}"/build-debug/dist/include/* include-debug/
|
|
fi
|
|
|
|
# These align the ligns below, making it easier to check for mistakes.
|
|
DEB="debug"
|
|
REL="release"
|
|
|
|
# Fetch the jsrust static library. Path is grepped from the build file as it varies by rust toolset.
|
|
rust_path="${FOLDER}/build-release/$(grep jsrust "${FOLDER}/build-release/js/src/build/backend.mk" | cut -d / -f 2-)"
|
|
cp -L "${rust_path}" "lib/${LIB_PREFIX}${LIB_NAME}-rust${STATIC_LIB_SUFFIX}"
|
|
|
|
if [ "${OS}" = "Darwin" ]; then
|
|
# On MacOS, copy the static libraries only.
|
|
cp -L "${FOLDER}/build-${DEB}/js/src/build/${LIB_PREFIX}js_static${LIB_SUFFIX}" "lib/${LIB_PREFIX}${LIB_NAME}-${DEB}${LIB_SUFFIX}"
|
|
cp -L "${FOLDER}/build-${REL}/js/src/build/${LIB_PREFIX}js_static${LIB_SUFFIX}" "lib/${LIB_PREFIX}${LIB_NAME}-${REL}${LIB_SUFFIX}"
|
|
elif [ "${OS}" = "Windows_NT" ]; then
|
|
# Windows needs DLLs to binaries/, static stubs to lib/ and debug symbols
|
|
cp -L "${FOLDER}/build-${DEB}/dist/bin/${LIB_PREFIX}${LIB_NAME}-${DEB}${LIB_SUFFIX}" "bin/${LIB_PREFIX}${LIB_NAME}-${DEB}${LIB_SUFFIX}"
|
|
cp -L "${FOLDER}/build-${REL}/dist/bin/${LIB_PREFIX}${LIB_NAME}-${REL}${LIB_SUFFIX}" "bin/${LIB_PREFIX}${LIB_NAME}-${REL}${LIB_SUFFIX}"
|
|
cp -L "${FOLDER}/build-${DEB}/js/src/build/${LIB_PREFIX}${LIB_NAME}-${DEB}${STATIC_LIB_SUFFIX}" "lib/${LIB_PREFIX}${LIB_NAME}-${DEB}${STATIC_LIB_SUFFIX}"
|
|
cp -L "${FOLDER}/build-${REL}/js/src/build/${LIB_PREFIX}${LIB_NAME}-${REL}${STATIC_LIB_SUFFIX}" "lib/${LIB_PREFIX}${LIB_NAME}-${REL}${STATIC_LIB_SUFFIX}"
|
|
# Copy debug symbols as well.
|
|
cp -L "${FOLDER}/build-${DEB}/js/src/build/${LIB_PREFIX}${LIB_NAME}-${DEB}.pdb" "bin/${LIB_PREFIX}${LIB_NAME}-${DEB}.pdb"
|
|
cp -L "${FOLDER}/build-${REL}/js/src/build/${LIB_PREFIX}${LIB_NAME}-${REL}.pdb" "bin/${LIB_PREFIX}${LIB_NAME}-${REL}.pdb"
|
|
# Copy the debug jsrust library.
|
|
rust_path="${FOLDER}/build-debug/$(grep jsrust "${FOLDER}/build-debug/js/src/build/backend.mk" | cut -d / -f 2-)"
|
|
cp -L "${rust_path}" "lib/${LIB_PREFIX}${LIB_NAME}-rust-debug${STATIC_LIB_SUFFIX}"
|
|
else
|
|
# Copy shared libs to lib/, they will also be copied to binaries/system, so the compiler and executable (resp.) can find them.
|
|
cp -L "${FOLDER}/build-${REL}/dist/bin/${LIB_PREFIX}${LIB_NAME}-${REL}${LIB_SUFFIX}" "lib/${LIB_PREFIX}${LIB_NAME}-${REL}${LIB_SUFFIX}"
|
|
if [ "${OS}" != "FreeBSD" ]; then
|
|
cp -L "${FOLDER}/build-${DEB}/dist/bin/${LIB_PREFIX}${LIB_NAME}-${DEB}${LIB_SUFFIX}" "lib/${LIB_PREFIX}${LIB_NAME}-${DEB}${LIB_SUFFIX}"
|
|
fi
|
|
fi
|
|
|
|
# cleanup
|
|
rm -Rf "$FOLDER"
|
|
|
|
echo "${LIB_VERSION}" >.already-built
|