void-packages/srcpkgs/nodejs-lts/template
Jake Hamby a76713cfbe nodejs-lts: update to 12.22.10, add ppc64 fixes for older CPUs
This patch defines the correct optional Power ISA features that the
PPC code generator needs in order to run without crashing on v2.01
and older CPUs such as PPC 970 (G5) or NXP e6500, and to run more
efficiently on CPUs with features that weren't being used before.

PowerPC ISA v2.01 and older CPUs don't have FP round to int instructions,
and PowerPC ISA v2.06 and older are missing support for unsigned 64-bit
to/from double, as well as integer to/from single-precision float.

Add a new FP_ROUND_TO_INT CPU feature to determine whether to generate
FP round to int, and add a new PPC_7_PLUS feature to determine whether
to use the v2.06 FPR conversion instructions or generate an alternate
sequence to handle large 64-bit unsigned ints, and single-precision
using the v2.01 instructions with handling for large uint64_t values
as well as rounding results from double to single-precision.

Also add a new POP_COUNT feature for the popcnt opcodes added in v2.06,
which are also present in the NXP e5500 and e6500 cores, which are
otherwise missing many of the features added since v2.01.

By defining an ICACHE_SNOOP feature bit to replace the poorly-named
"LWSYNC", the meaning of the instruction cache flushing fast path,
and the CPUs that can use it, are more clearly defined. In addition,
for the other PowerPC chips, the loop to flush the data and instruction
cache blocks has been split into two loops, with a single "sync" and
"isync" after each loop, which should be more efficient, and also handles
the few CPUs with differing data and instruction cache line sizes.

In the macro assembler methods, in addition to providing an alternate
path for FP conversion opcodes added in POWER7 (ISA v2.06), unnecessary
instructions to move sp down and then immediately back up were replaced
with negative offsets from the current sp. This should be faster, and also
sp is supposed to point to a back chain at all times (V8 may not do this).

This patch also fixes ppc64 big-endian ELFv1 builds (not needed for Void).

Closes https://github.com/void-ppc/void-packages/pull/61
2022-03-01 00:25:20 +01:00

110 lines
3.4 KiB
Bash

# Template file for 'nodejs-lts'
pkgname=nodejs-lts
version=12.22.10
revision=1
wrksrc="node-v${version}"
# Need these for host v8 for torque, see https://github.com/nodejs/node/pull/21079
hostmakedepends="pkg-config python libatomic-devel zlib-devel which
$(vopt_if icu icu-devel) $(vopt_if ssl openssl-devel) $(vopt_if libuv libuv-devel)
$(vopt_if http_parser http-parser-devel) $(vopt_if nghttp2 nghttp2-devel)
$(vopt_if cares c-ares-devel) $(vopt_if http_parser llhttp-devel)"
makedepends="libatomic-devel zlib-devel python-devel $(vopt_if icu icu-devel)
$(vopt_if ssl openssl-devel) $(vopt_if libuv libuv-devel)
$(vopt_if http_parser http-parser-devel) $(vopt_if nghttp2 nghttp2-devel)
$(vopt_if cares c-ares-devel) $(vopt_if http_parser llhttp-devel)"
checkdepends="procps-ng"
short_desc="Evented I/O for V8 javascript"
maintainer="Enno Boland <gottox@voidlinux.org>"
license="MIT"
homepage="https://nodejs.org/"
distfiles="${homepage}/dist/v${version}/node-v${version}.tar.gz"
checksum=1eeec68b530da4aced730e2af9e07a1ced8148337708f37fc8b4eddc3b6dc9e9
python_version=3
build_options="ssl libuv http_parser icu nghttp2 cares"
desc_option_ssl="Enable shared openssl"
desc_option_libuv="Enable shared libuv"
desc_option_http_parser="Enable shared http-parser and llhttp"
desc_option_icu="Enable shared icu"
desc_option_nghttp2="Enable shared nghttp2"
desc_option_cares="Enable shared c-ares"
build_options_default="ssl libuv http_parser icu nghttp2 cares"
replaces="iojs>=0"
conflicts="nodejs nodejs-lts-10"
provides="nodejs-runtime-0_1"
if [ "$XBPS_WORDSIZE" -ne "$XBPS_TARGET_WORDSIZE" ]; then
nocross="host and target must have the same pointer size"
fi
case "$XBPS_TARGET_MACHINE" in
ppc64*) ;;
ppc*) broken="Node 12.x does not support 32-bit ppc" ;;
esac
CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
CXXFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
post_patch() {
# XXX Drop after c-ares 1.17.3 has been released.
vsed -i -e 's:<ares_nameser.h>:<arpa/nameser.h>:g' src/cares_wrap.cc
}
do_configure() {
local _args
export LD="$CXX"
if [ "$CROSS_BUILD" ]; then
case "$XBPS_TARGET_MACHINE" in
arm*) _args="--dest-cpu=arm" ;;
aarch64*) _args="--dest-cpu=arm64" ;;
ppc64*) _args="--dest-cpu=ppc64" ;;
ppc*) _args="--dest-cpu=ppc" ;;
mipsel*) _args="--dest-cpu=mipsel" ;;
mips*) _args="--dest-cpu=mips" ;;
i686*) _args="--dest-cpu=x86" ;;
x86_64*) _args="--dest-cpu=x86_64" ;;
*) msg_error "$pkgver: cannot be cross compiled for ${XBPS_TARGET_MACHINE}.\n" ;;
esac
_args+=" --cross-compiling"
fi
./configure --prefix=/usr --shared-zlib \
$(vopt_if icu --with-intl=system-icu) \
$(vopt_if http_parser --shared-http-parser) \
$(vopt_if ssl --shared-openssl) \
$(vopt_if libuv --shared-libuv) \
$(vopt_if nghttp2 --shared-nghttp2) \
$(vopt_if cares --shared-cares) ${_args}
}
post_configure() {
# Fix linking against llhttp
sed 's/-lhttp_parser/& -lllhttp/' -i out/*.target.mk
}
do_build() {
if [ "$CROSS_BUILD" ]; then
make LD="$CXX" LDFLAGS+=-ldl ${makejobs} PORTABLE=1 V=1
else
make LD="$CXX" LDFLAGS+=-ldl ${makejobs} V=1
fi
}
do_check() {
make LD="$CXX" LDFLAGS+=-ldl ${makejobs} V=1 test-only
}
do_install() {
make LD="$CXX" LDFLAGS+=-ldl DESTDIR="$DESTDIR" install
rm $DESTDIR/usr/include/node/openssl -rf
vlicense LICENSE
}
nodejs-lts-devel_package() {
short_desc+=" (development files)"
conflicts="nodejs-devel nodejs-lts-10-devel"
pkg_install() {
vmove usr/include
}
}