B. Wilson ed6f318200 j: add support for armv[67]* and i686* archs
The primary change here is to remove the previous restrictions on `arch`.
To accomplish this, several tweaks were needed to coax the upstream
build scripts to behave more reasonably.

These changes also uncovered the fact that the scripts were not
respecting the CFLAGS and LDFLAGS of the environment. This commit also
fixes that.

For details about the specific changes to upstream we introduce, see the
accompanying comments in the template.
2020-03-16 18:21:48 +01:00

140 lines
3.9 KiB
Bash

# Template file for 'j'
pkgname=j
_vmaj=901
_vmin=e
_vrel=${_vmaj}-release${_vmin:+-}${_vmin}
version=${_vmaj}.${_vmin}
revision=4
archs="aarch64* armv[67]* i686* x86_64*"
wrksrc="jsource-j${_vrel}"
makedepends="libedit-devel libgomp-devel libomp-devel"
short_desc="Modern, high-performance, ASCII-based successor to APL"
maintainer="B. Wilson <x@wilsonb.com>"
license="GPL-3.0-or-later"
homepage="https://jsoftware.com/"
distfiles="https://github.com/jsoftware/jsource/archive/j${_vrel}.tar.gz"
checksum=23d1cac75ae8426d4e301b178fac1f29e85d7a0c80cefe4740c104d9c1eeab7a
_jsz="j${XBPS_TARGET_WORDSIZE}"
_jtype="release"
_jbuilder="voidlinux.org"
_jlib="/usr/lib/j"
_jshare="/usr/share/j"
_jetc="/etc/j"
_juser=".j"
case "${XBPS_TARGET_MACHINE}" in
aarch64*|arm*) _jpl="raspberry";;
*) _jpl="linux";;
esac
case "${XBPS_TARGET_MACHINE}" in
*-musl) makedepends+=" musl-fts-devel";;
esac
do_configure() {
cp jsrc/jversion-x.h jsrc/jversion.h
vsed -i "/jplatform/s@unknown@${_jpl}@;
/jtype/s@beta@${_jtype}-${_vmin}@;
/jbuilder/s@unknown@${_jbuilder}@" \
jsrc/jversion.h
# Remove version directory component from "~install" and "~user" paths
cp jlibrary/bin/profile.ijs jlibrary/bin/profile.ijs.new
vsed -i "/^install=./s@/usr/share/j/[0-9.]\+@${_jshare}@;
/^user=./s@home,userx@home,'/${_juser}'@" \
jlibrary/bin/profile.ijs.new
# Munge the build scripts into reason:
# 1) Short-circut their fragile compiler detection to directly use gcc;
# 2) Make sure they pick up our CFLAGS and LDFLAGS; and
# 3) Ensure they propogate errors to do_build()
vsed -i '/^compiler/s/=.*/=gcc/;
/^common="\$common/n;
/^common/s/="/&$CFLAGS /;
/^LDFLAGS/s/="/&$LDFLAGS /;
/^#!/a\set -o errexit' \
make2/build_jconsole.sh make2/build_libj.sh
}
##
# Crossbuilds do not distinguish between AVX- and non-AVX targets, so instead
# we build all applicable binaries and install a wrapper script that executes
# the correct one on the target machine.
do_build() {
cd make2 # The build scripts assume this is $PWD
jplatform=${_jpl} j64x=${_jsz} ./build_jconsole.sh
jplatform=${_jpl} j64x=${_jsz} ./build_libj.sh
if [ "${_jsz}" = 'j64' ]; then
jplatform=${_jpl} j64x=${_jsz}avx ./build_jconsole.sh
jplatform=${_jpl} j64x=${_jsz}avx ./build_libj.sh
jplatform=${_jpl} j64x=${_jsz}avx2 ./build_jconsole.sh
jplatform=${_jpl} j64x=${_jsz}avx2 ./build_libj.sh
fi
}
do_check() {
if [ -d "${_jlib}/j64avx2" ] \
&& sed -n '/^flags/{s/\<avx2\>//;t;q1}' /proc/cpuinfo; then
javx='avx2'
elif [ -d "${_jlib}/j64avx" ] \
&& sed -n '/^flags/{s/\<avx\>//;t;q1}' /proc/cpuinfo; then
javx='avx'
else
javx=''
fi
mkdir -p test/bin
cp -r jlibrary/addons test/bin
cp -r jlibrary/system test/bin
cp -r jlibrary/tools test/bin
cp -r "bin/${_jpl}/${_jsz}${javx}" test/bin
cp jlibrary/bin/profile.ijs "test/bin/${_jsz}${javx}"
echo 'RECHO ddall' | "test/bin/${_jsz}${javx}/jconsole" test/tsu.ijs
}
##
# Script to detect AVX/AVX2 support and launch appropriate jconsole binary
_jconsole_wrapper_script() {
cat <<JC
#!/usr/bin/env sh
cpu_has_avx() { sed -n '/^flags/{s/\<avx\>//;t;q1}' /proc/cpuinfo; }
cpu_has_avx2() { sed -n '/^flags/{s/\<avx2\>//;t;q1}' /proc/cpuinfo; }
if [ -d "${_jlib}/j64avx2" ] && cpu_has_avx2; then
javx='avx2'
elif [ -d "${_jlib}/j64avx" ] && cpu_has_avx; then
javx='avx'
elif [ -d "${_jlib}/j64" ]; then
javx=''
else
>&2 echo "\${0}: Cannot find jconsole executable"
exit 1
fi
exec ${_jlib}/${_jsz}\${javx}/jconsole -jprofile "${_jetc}/profile.ijs" "\${@}"
JC
}
do_install() {
vmkdir "${_jshare}" 0755
vcopy jlibrary/system "${_jshare}"
vcopy jlibrary/tools "${_jshare}"
vmkdir "${_jlib}" 0755
vcopy "bin/${_jpl}/*" "${_jlib}"
vmkdir "${_jetc}" 0755
vinstall "${FILESDIR}/profilex_template.ijs" 644 "${_jetc}"
vinstall "jlibrary/bin/profile.ijs.new" 644 "${_jetc}" profile.ijs
_jconsole_wrapper_script >bin/jc.sh
vbin "bin/jc.sh" jc
}