Andrew Geissler | 595f630 | 2022-01-24 19:11:47 +0000 | [diff] [blame] | 1 | SUMMARY = "SpiderMonkey is Mozilla's JavaScript engine written in C/C++" |
| 2 | HOMEPAGE = "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey" |
| 3 | LICENSE = "MPL-2.0" |
| 4 | LIC_FILES_CHKSUM = "file://LICENSE;md5=dc9b6ecd19a14a54a628edaaf23733bf" |
| 5 | |
| 6 | SRC_URI = " \ |
| 7 | https://archive.mozilla.org/pub/firefox/releases/${PV}esr/source/firefox-${PV}esr.source.tar.xz \ |
| 8 | file://0001-rust.configure-Skip-all-target-manipulations.patch \ |
| 9 | file://0002-build-do-not-use-autoconf-s-config.sub-to-canonicali.patch \ |
| 10 | file://0003-Do-not-check-binaries-after-build.patch \ |
| 11 | file://0004-Cargo.toml-do-not-abort-on-panic.patch \ |
| 12 | file://0005-Fixup-compatibility-of-mozbuild-with-Python-3.10.patch \ |
| 13 | file://0006-use-asm-sgidefs.h.patch \ |
| 14 | file://0007-fix-musl-build.patch \ |
| 15 | file://0008-riscv.patch \ |
| 16 | file://0009-riscv-Disable-atomic-operations.patch \ |
| 17 | file://0010-riscv-Set-march-correctly.patch \ |
| 18 | file://0011-replace-include-by-code-to-fix-arm-build.patch \ |
| 19 | file://0012-Add-SharedArrayRawBufferRefs-to-public-API.patch \ |
| 20 | file://0013-util.configure-fix-one-occasionally-reproduced-confi.patch \ |
| 21 | file://0014-rewrite-cargo-host-linker-in-python3.patch \ |
| 22 | " |
| 23 | |
| 24 | SRC_URI[sha256sum] = "a4438d84d95171a6d4fea9c9f02c2edbf0475a9c614d968ebe2eedc25a672151" |
| 25 | S = "${WORKDIR}/firefox-${@d.getVar("PV").replace("esr", "")}" |
| 26 | |
| 27 | DEPENDS = " \ |
| 28 | autoconf-2.13-native \ |
| 29 | icu-native \ |
Patrick Williams | 03907ee | 2022-05-01 06:28:52 -0500 | [diff] [blame] | 30 | icu \ |
Andrew Geissler | 595f630 | 2022-01-24 19:11:47 +0000 | [diff] [blame] | 31 | cargo-native \ |
| 32 | zlib \ |
| 33 | python3-six \ |
| 34 | python3-six-native \ |
| 35 | " |
| 36 | |
| 37 | inherit autotools pkgconfig rust python3native siteinfo |
| 38 | |
| 39 | JIT ?= "" |
| 40 | JIT:mipsarch = "--disable-jit" |
| 41 | |
| 42 | EXTRA_OECONF = " \ |
Patrick Williams | 92b42cb | 2022-09-03 06:53:57 -0500 | [diff] [blame^] | 43 | --target=${RUST_TARGET_SYS} \ |
Andrew Geissler | 595f630 | 2022-01-24 19:11:47 +0000 | [diff] [blame] | 44 | --host=${BUILD_SYS} \ |
| 45 | --prefix=${prefix} \ |
| 46 | --libdir=${libdir} \ |
| 47 | --x-includes=${STAGING_INCDIR} \ |
| 48 | --x-libraries=${STAGING_LIBDIR} \ |
| 49 | --without-system-icu \ |
| 50 | --disable-tests --disable-strip --disable-optimize \ |
| 51 | --disable-jemalloc \ |
Patrick Williams | 03907ee | 2022-05-01 06:28:52 -0500 | [diff] [blame] | 52 | --with-system-icu \ |
Andrew Geissler | 595f630 | 2022-01-24 19:11:47 +0000 | [diff] [blame] | 53 | ${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', "--enable-gold", '--disable-gold', d)} \ |
| 54 | ${JIT} \ |
| 55 | " |
| 56 | # Note: Python with mozilla build is a mess: E.g: python-six: to get an error |
| 57 | # free configure we need: |
| 58 | # * python3-six-native in DEPENDS |
| 59 | # * python3-six in DEPENDS |
| 60 | # * path to python-six shipped by mozilla in PYTHONPATH |
| 61 | prepare_python_and_rust() { |
| 62 | if [ ! -f ${B}/PYTHONPATH ]; then |
| 63 | oldpath=`pwd` |
| 64 | cd ${S} |
| 65 | # Add mozjs python-modules necessary |
| 66 | PYTHONPATH="${S}/build:${S}/config" |
| 67 | PYTHONPATH="$PYTHONPATH:${S}/third_party/python/distro:${S}/third_party/python/jsmin" |
| 68 | PYTHONPATH="$PYTHONPATH:${S}/third_party/python/pytoml:${S}/third_party/python/six" |
| 69 | PYTHONPATH="$PYTHONPATH:${S}/third_party/python/pyyaml/lib3:${S}/third_party/python/which" |
| 70 | for sub_dir in python testing/mozbase; do |
| 71 | for module_dir in `ls $sub_dir -1`;do |
| 72 | [ $module_dir = "virtualenv" ] && continue |
| 73 | if [ -d "${S}/$sub_dir/$module_dir" ];then |
| 74 | PYTHONPATH="$PYTHONPATH:${S}/$sub_dir/$module_dir" |
| 75 | fi |
| 76 | done |
| 77 | done |
| 78 | # looks odd but it's huge and we want to see what's in there |
| 79 | echo "$PYTHONPATH" > ${B}/PYTHONPATH |
| 80 | cd "$oldpath" |
| 81 | fi |
| 82 | |
| 83 | export PYTHONPATH=`cat ${B}/PYTHONPATH` |
| 84 | |
| 85 | export RUST_TARGET_PATH="${RUST_TARGET_PATH}" |
| 86 | export RUST_TARGET="${TARGET_SYS}" |
| 87 | export RUSTFLAGS="${RUSTFLAGS}" |
| 88 | } |
| 89 | |
| 90 | export HOST_CC = "${BUILD_CC}" |
| 91 | export HOST_CXX = "${BUILD_CXX}" |
| 92 | export HOST_CFLAGS = "${BUILD_CFLAGS}" |
| 93 | export HOST_CPPFLAGS = "${BUILD_CPPFLAGS}" |
| 94 | export HOST_CXXFLAGS = "${BUILD_CXXFLAGS}" |
| 95 | # otherwise we are asked for yasm... |
| 96 | export AS = "${CC}" |
| 97 | |
| 98 | CPPFLAGS:append:mips:toolchain-clang = " -fpie" |
| 99 | CPPFLAGS:append:mipsel:toolchain-clang = " -fpie" |
| 100 | |
| 101 | do_configure() { |
| 102 | prepare_python_and_rust |
| 103 | |
| 104 | cd ${S}/js/src |
| 105 | autoconf213 --macrodir=${STAGING_DATADIR_NATIVE}/autoconf213 old-configure.in > old-configure |
| 106 | |
| 107 | cd ${B} |
| 108 | # * use of /tmp can causes problems on heavily loaded hosts |
| 109 | # * with mozjs-78 we get without: |
| 110 | # | Path specified in LOCAL_INCLUDES (..) resolves to the topsrcdir or topobjdir (<tmpdir>/oe-core-glibc/work/cortexa72-mortsgna-linux/mozjs-78/78.15.0-r0/firefox-78.15.0/js/src), which is not allowed |
| 111 | mkdir -p "${B}/lcl_tmp" |
| 112 | TMPDIR="${B}/lcl_tmp" CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" ${S}/js/src/configure ${EXTRA_OECONF} |
| 113 | |
| 114 | # inspired by what fedora [1] does: for big endian rebuild icu dat |
| 115 | # this avoids gjs qemu crash on mips at gir creation |
| 116 | # [1] https://src.fedoraproject.org/rpms/mozjs78/blob/rawhide/f/mozjs78.spec |
| 117 | if [ ${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'le', 'little', 'big', d)} = "big" -a ! -e ${S}/config/external/icu/data/icudt67b.dat ]; then |
| 118 | echo "Do big endian icu dat-convert..." |
| 119 | icupkg -tb ${S}/config/external/icu/data/icudt67l.dat ${S}/config/external/icu/data/icudt67b.dat |
| 120 | rm -f ${S}/config/external/icu/data/icudt*l.dat |
| 121 | fi |
| 122 | } |
| 123 | |
| 124 | do_compile:prepend() { |
| 125 | prepare_python_and_rust |
| 126 | } |
| 127 | |
| 128 | do_install:prepend() { |
| 129 | prepare_python_and_rust |
| 130 | } |
| 131 | |
| 132 | do_install:append() { |
| 133 | # tidy up installation |
| 134 | chmod -x ${D}${libdir}/pkgconfig/*.pc |
| 135 | sed -i 's:\x24{includedir}/mozjs-78/js/RequiredDefines.h:js/RequiredDefines.h:g' ${D}${libdir}/pkgconfig/*.pc |
| 136 | |
| 137 | rm -f ${D}${libdir}/libjs_static.ajs |
| 138 | } |
| 139 | |
| 140 | ARM_INSTRUCTION_SET:armv5 = "arm" |
| 141 | ARM_INSTRUCTION_SET:armv4 = "arm" |
| 142 | |
| 143 | DISABLE_STATIC = "" |
| 144 | |
| 145 | PACKAGES =+ "lib${BPN}" |
| 146 | FILES:lib${BPN} += "${libdir}/lib*" |