ddd51127af
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. Use the current PPC_5_PLUS CPU feature to determine whether to generate FP round to int, and use the PPC_7_PLUS feature to determine whether to use the v2.06 ISA instructions or whether to generate an alternate generic PPC sequence to handle the cases of 64-bit unsigned integer to/from floating point, integers to single-precision floating point, and loading and storing 64-bit integers with byte reversal. Add a new PPC_7_PLUS_NXP feature for the popcnt and ldbrx/stdbrx opcodes added in Power ISA 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. This enables NXP cores to use a few more features. Additionally, bring back the ISELECT feature flag, which is also supported by NXP cores, including older ones, and has its own AT_HWCAP2 feature flag in Linux. By defining a new ICACHE_SNOOP feature bit to replace the use of PPC_6_PLUS, the meaning of the instruction cache flushing fast path, and the CPUs that can use it, is 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). Closes https://github.com/void-ppc/void-packages/pull/62
113 lines
3.6 KiB
Bash
113 lines
3.6 KiB
Bash
# Template file for 'nodejs'
|
|
pkgname=nodejs
|
|
version=16.14.0
|
|
revision=1
|
|
wrksrc="node-v${version}"
|
|
# Need these for host v8 for torque, see https://github.com/nodejs/node/pull/21079
|
|
hostmakedepends="which pkg-config python3 libatomic-devel zlib-devel
|
|
$(vopt_if icu icu-devel) $(vopt_if ssl openssl-devel) $(vopt_if libuv libuv-devel)
|
|
$(vopt_if nghttp2 nghttp2-devel) $(vopt_if cares c-ares-devel)"
|
|
makedepends="libatomic-devel zlib-devel $(vopt_if icu icu-devel)
|
|
$(vopt_if ssl openssl-devel) $(vopt_if libuv libuv-devel)
|
|
$(vopt_if nghttp2 nghttp2-devel) $(vopt_if cares c-ares-devel)"
|
|
checkdepends="procps-ng iana-etc"
|
|
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=29dfce13650f063ff009d18349636333fa4305468b6a8965d442c2e88b1dd60f
|
|
python_version=3
|
|
|
|
build_options="ssl libuv icu nghttp2 cares"
|
|
desc_option_ssl="Enable shared openssl"
|
|
desc_option_libuv="Enable shared libuv"
|
|
desc_option_icu="Enable shared icu"
|
|
desc_option_nghttp2="Enable shared nghttp2"
|
|
desc_option_cares="Enable shared c-ares"
|
|
build_options_default="ssl libuv icu nghttp2 cares"
|
|
|
|
replaces="iojs>=0"
|
|
conflicts="nodejs-lts nodejs-lts-10"
|
|
provides="nodejs-runtime-0_1"
|
|
|
|
# https://build.voidlinux.org/builders/i686_builder/builds/27325/steps/shell_3/logs/stdio
|
|
if [ "$XBPS_WORDSIZE" = 32 ]; then
|
|
LDFLAGS="-Wl,--no-keep-memory"
|
|
fi
|
|
|
|
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.h
|
|
}
|
|
|
|
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
|
|
# this is necessary - for example, normally compiling from ppc64le
|
|
# to ppc64 or from glibc to musl is considered non-cross-compiling
|
|
# by the build system, because it's technically the same architecture
|
|
#
|
|
# that results in the toolset built for target only, and attempting
|
|
# to execute it within the build system fails
|
|
_args+=" --cross-compiling"
|
|
fi
|
|
./configure --prefix=/usr --shared-zlib \
|
|
$(vopt_if icu --with-intl=system-icu) \
|
|
$(vopt_if ssl --shared-openssl) \
|
|
$(vopt_if libuv --shared-libuv) \
|
|
$(vopt_if nghttp2 --shared-nghttp2) \
|
|
$(vopt_if cares --shared-cares) ${_args}
|
|
}
|
|
|
|
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() {
|
|
local CI_SKIP_TESTS="test-cluster-primary-error.js,test-cluster-primary-kill.js"
|
|
make CI_SKIP_TESTS="$CI_SKIP_TESTS" 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-devel_package() {
|
|
short_desc+=" (development files)"
|
|
conflicts="nodejs-lts-devel nodejs-lts-10-devel"
|
|
pkg_install() {
|
|
vmove usr/include
|
|
}
|
|
}
|