# Contributor: Isaac Dunham <ibid.ag@gmail.com>
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Maintainer: Isaac Dunham <ibid.ag@gmail.com>
setvar pkgname = 'openblas'
setvar _pkgname = 'OpenBLAS'
setvar pkgver = '0.2.19'
setvar pkgrel = '3'
setvar pkgdesc = ""A fast BSD-licensed BLAS based on gotoBLAS2, with LAPACK""
setvar url = ""http://www.openblas.net""
# does not build yet on s390x
setvar arch = ""all !s390x""
setvar license = ""BSD""
setvar depends = """"
setvar depends_dev = ""gfortran""
setvar makedepends = ""$depends_dev perl linux-headers""
setvar subpackages = ""$pkgname-dev $pkgname-doc""
setvar source = ""$pkgname-$pkgver.tar.gz::http://github.com/xianyi/$_pkgname/archive/v$pkgver.tar.gz""
setvar builddir = ""$srcdir/$_pkgname-$pkgver""

setvar _builddir64 = ""$builddir-64""

# ILP64 is not supported on aarch64 (https://github.com/xianyi/OpenBLAS/issues/956)
setvar _ilp64 = 'false'
if test $CARCH = "x86_64" {
	setvar subpackages = ""$subpackages $pkgname-ilp64""
	setvar _ilp64 = 'true'
}

# USE_OPENMP=0: see GCC bug 60035
# NO_AFFINITY: don't expect to work on musl, also breaks R and not
#              recommended for Julia
setvar _flags = ""USE_OPENMP=0
	NO_LAPACK=0
	MAJOR_VERSION=3
	NO_AFFINITY=1""
case (CARCH) {
ppc64le { setvar _flags = ""$_flags NUM_THREADS=64""}  # POWER machines are big
*64 { setvar _flags = ""$_flags NUM_THREADS=32""}  # match kernel's CONFIG_NR_CPUS
* { setvar _flags = ""$_flags NUM_THREADS=8""}  # 32bit machines usually have less cores
}

# DYNAMIC_ARCH is supported on x86* only, see https://github.com/xianyi/OpenBLAS/issues/709
case (CARCH) {
x86* { setvar _flags = ""$_flags TARGET=core2 DYNAMIC_ARCH=1""}
armhf { setvar _flags = ""$_flags TARGET=ARMV7 DYNAMIC_ARCH=0""}
aarch64 { setvar _flags = ""$_flags TARGET=ARMV8 DYNAMIC_ARCH=0""}
ppc64le { setvar _flags = ""$_flags TARGET=POWER8 DYNAMIC_ARCH=0""}
* { setvar _flags = ""$_flags DYNAMIC_ARCH=0""}
}

# Flags for ILP64 variant.
setvar _flags64 = ""$_flags
	INTERFACE64=1
	SYMBOLSUFFIX=64_""

proc prepare {
	default_prepare || return 1

	if test $CARCH = "ppc64le"  {
		# Skip test level 3 on ppc64le for a while
		sed 's/level2 level3/level2/g' -i "$builddir"/test/Makefile
		sed 's/all2 all3/all2/g' -i "$builddir"/ctest/Makefile
	}
	cp -ar $builddir $_builddir64
}

proc build ''{
	CFLAGS= make -C $builddir \
		$_flags CFLAGS="$CFLAGS" PREFIX=/usr || return 1

	if $_ilp64 {
		msg "Building with ILP64...''"
		CFLAGS= make -C $_builddir64 \
			$_flags64 CFLAGS="$CFLAGS" PREFIX=/usr || return 1
	}
}

proc package {
	if $_ilp64 {
		make -C $_builddir64 $_flags64 \
			PREFIX="$pkgdir/usr" install || return 1
	}

	cd $builddir

	make $_flags PREFIX="$pkgdir/usr" install || return 1

	# Remove reference to $pkgdir.
	sed -i "s|$pkgdir||" "$pkgdir"/usr/lib/cmake/$pkgname/OpenBLASConfig.cmake

	mkdir -p "$pkgdir"/usr/share/doc/$pkgname
	install -m 0644 Changelog.txt TargetList.txt USAGE.md \
		"$pkgdir"/usr/share/doc/$pkgname/ || return 1

	install -Dm 0644 LICENSE \
		"$pkgdir"/usr/share/licenses/$pkgname/LICENSE
}

proc ilp64 {
	setvar pkgdesc = ""$pkgdesc (ILP64)""

	mkdir -p "$subpkgdir"/usr/lib
	mv "$pkgdir"/usr/lib/libopenblas64_* "$subpkgdir"/usr/lib/
}

setvar sha512sums = ""7081a8540b8037c0d4d6db0ec4b51277856c0e0f4e2575671984e5deb3482102da8936c43691087c8475d67070f89ac6925e4867ead60802aa2a29e8517e7495  openblas-0.2.19.tar.gz""