mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-06-12 12:58:40 +02:00
188 lines
7.6 KiB
Text
188 lines
7.6 KiB
Text
# Contributor: Sören Tempel <soeren+alpine@soeren-tempel.net>
|
|
# Contributor: Mitch Tishmack <mitch.tishmack@gmail.com>
|
|
# Maintainer: Sören Tempel <soeren+alpine@soeren-tempel.net>
|
|
pkgname=ghc
|
|
# XXX: GHC is tightly coupled with community/cabal-stage0.
|
|
# Only update to GHC versions supported by cabal bootstrapping setup.
|
|
pkgver=9.8.2
|
|
pkgrel=2
|
|
# GHC version used to bootstrap the build. This is relevant for the
|
|
# bootstrapping of the Hadrian build system used by GHC these days.
|
|
_bootstrapver=9.8.2
|
|
# Normal non rc candidate
|
|
_urlprefix="$pkgver"
|
|
_pkgprefix="$pkgname-$pkgver"
|
|
_llvmver=15
|
|
pkgdesc="The Glasgow Haskell Compiler"
|
|
url="https://haskell.org/ghc"
|
|
arch="aarch64 x86_64"
|
|
# Note ghc's license is basically BSD-3. If you'd like to know more visit:
|
|
# * https://www.haskell.org/ghc/license
|
|
# * https://ghc.haskell.org/trac/ghc/wiki/Licensing
|
|
license="BSD-3-Clause"
|
|
# Note that ghc is sensitive to the version of llvm used.
|
|
#
|
|
# Ref: https://ghc.haskell.org/trac/ghc/wiki/Status/GHC-8.0.1
|
|
# https://ghc.haskell.org/trac/ghc/wiki/ImprovedLLVMBackend
|
|
#
|
|
# Without libffi-dev in $depends linking of software via ghc(1) fails.
|
|
depends="gmp-dev libffi-dev perl gcc>=6.2.1 llvm$_llvmver"
|
|
# ghc is self-hosted, so we need ghc to build ghc. ghc-bootstrap is provided by
|
|
# this aport (see below).
|
|
makedepends_build="$pkgname-bootstrap~$_bootstrapver
|
|
autoconf automake binutils libffi-dev ncurses-dev xz coreutils grep py3-sphinx"
|
|
makedepends_host="linux-headers musl-dev zlib-dev gmp-dev binutils-dev
|
|
libffi-dev ncurses-dev"
|
|
makedepends="$makedepends_build $makedepends_host"
|
|
checkdepends="python3 diffutils bash"
|
|
# XXX: ghc-bootstrap is a hack to allow this abuild to depend on itself.
|
|
# Adding "ghc" to makedepends would not work, because abuild implicitly removes
|
|
# $pkgname and $subpackages from the abuild's dependencies.
|
|
provides="$pkgname-bootstrap=$pkgver-r$pkgrel"
|
|
subpackages="$pkgname-doc $pkgname-dev"
|
|
install="$pkgname.post-install"
|
|
ldpath="/usr/lib/ghc-$pkgver"
|
|
options="!strip ldpath-recursive" # we strip it manually in build()
|
|
source="https://downloads.haskell.org/~ghc/$_urlprefix/$_pkgprefix-src.tar.xz
|
|
https://downloads.haskell.org/~ghc/$_urlprefix/$_pkgprefix-testsuite.tar.xz
|
|
$pkgname-$pkgver-hadrian-ghc-$_bootstrapver.tar.gz::https://dev.alpinelinux.org/archive/ghc-hadrian/ghc-$pkgver/ghc-$_bootstrapver-hadrian-bootstrap-source.tar.gz
|
|
0001-Fix-IPE-test.patch
|
|
0002-Fix-C-warnings-25237.patch
|
|
0003-testsuite-fix-testwsdeque-with-recent-clang.patch
|
|
0004-Increase-the-default-test-timeout.patch
|
|
|
|
ghc-self-bootstrap.patch
|
|
fix-T21035.patch
|
|
fix-T7060.patch
|
|
"
|
|
|
|
# Adjust path for specific LLVM version target by GHC.
|
|
export PATH="$PATH:/usr/lib/llvm$_llvmver/bin"
|
|
|
|
_hadrian="hadrian/bootstrap/_build/bin/hadrian"
|
|
_hadrian_args="-j${JOBS:-1}"
|
|
|
|
if [ "$CBUILD" != "$CTARGET" ]; then
|
|
_hadrian_args="$_hadrian_args --docs=none --flavour=quickest"
|
|
else
|
|
_hadrian_args="$_hadrian_args --docs=no-sphinx-pdfs --flavour=release"
|
|
fi
|
|
|
|
build() {
|
|
# Build the hadrian build system.
|
|
#
|
|
# See:
|
|
# * https://gitlab.haskell.org/ghc/ghc/-/tree/master/hadrian/bootstrap
|
|
# * https://www.haskell.org/ghc/blog/20220805-make-to-hadrian.html
|
|
cd hadrian/bootstrap/
|
|
./bootstrap.py -w /usr/bin/ghc -s "$srcdir"/$pkgname-$pkgver-hadrian-ghc-$_bootstrapver.tar.gz
|
|
|
|
# NOTE: ghc build system requires host == build, and it ends up
|
|
# compiling the cross-compiler (stage1) and cross-compiling with
|
|
# that the native compiler (stage2)
|
|
cd "$builddir"
|
|
./configure \
|
|
--build=$CBUILD \
|
|
--host=$CBUILD \
|
|
--target=$CTARGET \
|
|
--prefix=/usr \
|
|
--with-system-libffi \
|
|
--disable-ld-override \
|
|
LD=${LD:-ld}
|
|
|
|
# Switch llvm-targets from unknown-linux-gnueabihf->alpine-linux
|
|
# so we can match the llvm vendor string alpine uses
|
|
sed -i -e 's/unknown-linux-gnueabihf/alpine-linux/g' llvm-targets
|
|
sed -i -e 's/unknown-linux-gnueabi/alpine-linux/g' llvm-targets
|
|
sed -i -e 's/unknown-linux-gnu/alpine-linux/g' llvm-targets
|
|
|
|
"$_hadrian" $_hadrian_args
|
|
}
|
|
|
|
check() {
|
|
# Some Makefiles in ./testsuite are not truely compatibile with
|
|
# parallel Make, hence just disable parallel Make entirely here.
|
|
export MAKEFLAGS=-j1
|
|
|
|
# Broken tests are known upstream to be broken on musl.
|
|
# See: https://gitlab.haskell.org/ghc/ghc/-/commit/cdd45a61ecfc34d3610dff4b654f1bca5dcb6829
|
|
"$_hadrian" $_hadrian_args test --skip-perf --test-speed=fast \
|
|
--broken-test=encoding004 --broken-test=T10458 \
|
|
--broken-test=linker_unload_native
|
|
}
|
|
|
|
package() {
|
|
local ghclib="$pkgdir/usr/lib/ghc-$pkgver/lib"
|
|
local newpath path target
|
|
|
|
# Hadrian's install command doesn't support DESTDIR.
|
|
# Hence, we need to install via the bindist.
|
|
"$_hadrian" $_hadrian_args binary-dist-dir
|
|
cd _build/bindist/ghc-*
|
|
# Need to re-run configure.
|
|
# See: https://gitlab.haskell.org/ghc/ghc/-/issues/22058
|
|
./configure --prefix=/usr \
|
|
--with-system-libffi \
|
|
--disable-ld-override \
|
|
LD=${LD:-ld}
|
|
make DESTDIR="$pkgdir" RECACHE_PACKAGE_DB=NO install
|
|
|
|
install -Dm644 "$builddir/LICENSE" \
|
|
"$pkgdir/usr/share/licenses/$pkgname/LICENSE"
|
|
|
|
cd "$pkgdir"
|
|
|
|
# Fixup install tree if needed.
|
|
if [ -d usr/lib/$CTARGET-ghc-$pkgver ]; then
|
|
# different location
|
|
ghclib="usr/lib/$CTARGET-ghc-$pkgver"
|
|
|
|
# Rename binaries and fix links.
|
|
local path; for path in usr/bin/"$CTARGET"-*; do
|
|
newpath="${path//$CTARGET-/}"
|
|
|
|
if [ -h "$path" ]; then
|
|
target="$(readlink $path)"
|
|
ln -sf "${target//$CTARGET-/}" "$newpath"
|
|
rm "$path"
|
|
else
|
|
mv "$path" "$newpath"
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Remove triplet prefix from settings -- the intention is
|
|
# that the native compiler will use native gcc/ld on the target.
|
|
sed -i "s|$CTARGET-||g" "$ghclib"/settings
|
|
|
|
# Can't do a full strip on archives.
|
|
find . -type f \( -name "*.so" -o -name "*.a" \) \
|
|
-exec ${CROSS_COMPILE}strip --strip-unneeded {} \;
|
|
find $ghclib/bin -type f -exec ${CROSS_COMPILE}strip {} \;
|
|
}
|
|
|
|
# Like debian, we split apart the profiled archives/etc...
|
|
# This drastically reduces the install size of the ghc pkg.
|
|
dev() {
|
|
pkgdesc="$pkgdesc (development files)"
|
|
depends="$pkgname=$pkgver-r$pkgrel"
|
|
|
|
cd "$pkgdir"
|
|
|
|
install -dm755 "$subpkgdir"
|
|
|
|
amove $(find . \( -type f -o -type l \) \( -name "*.p_*" -o -name "lib*_p.a" \))
|
|
}
|
|
|
|
sha512sums="
|
|
9b677d5ead5ebb5df7bc960055a76ef00e68ed8102844997b12154bf71bdbfafdfff9ca31edce86b3df759242a7c98f52a464887973b53985f54ecd9fc4b4627 ghc-9.8.2-src.tar.xz
|
|
e7766fcd98b4f70400d94ec33b39e633c2f6ab788f3b3e8431bb75e1f2a62081fc4c77e8d39b624702662168c3b5f7715d9b7866835f78d766dfa244feafe9d1 ghc-9.8.2-testsuite.tar.xz
|
|
e5961b6de84ebe5095ad77c8c94ab328a8ab652b8acf3b832e8ab3beaf11cd7b869da56231206ec7a279e4f511b991a2fab7079e34e9f7bbe0ac66001031597a ghc-9.8.2-hadrian-ghc-9.8.2.tar.gz
|
|
ec2b6a470dc62af789a9071543a406b33d55c293fdf78c551e7615143b66d9c82a89117c625e82c24b2c1bffa49a9aebcd4baec62364ebb6adceaed32f7c898e 0001-Fix-IPE-test.patch
|
|
af7f893fba031dcebd13eaaac46cd537f7bbb376ecc61d90a7fa735f3dc00bb668d07260379195ac110ba5d86fe2afd41b1ba25a847b10a5b0a1d39f00b639f4 0002-Fix-C-warnings-25237.patch
|
|
8dc7f70567f4f140cfa631addbd3619232d88cd6c2944288f5404677136bcf5039fd99d17309edcf32bfe2fb3d974b94e97825f6a4bf8017a88609b48dbf171a 0003-testsuite-fix-testwsdeque-with-recent-clang.patch
|
|
0e4765076fb90a278b44f4448aa6934db90f399a30378bf90188c40fea5c4addcab23d13fbe9c148da75ccd08680ed8e816254efd4040c081009835f1f00aabb 0004-Increase-the-default-test-timeout.patch
|
|
1a97002ec396d532af881e712377d80748fa9f6693931d961634524cab1ef681141b0f69ef007c0c8cd404c4e673c08b254880a581eac34dcfc49daaddb97f9f ghc-self-bootstrap.patch
|
|
be5a8639b151b7828ad50b0f63775d34411d971aae73b0fe5c0226e4c70d1ee8353545b1d04c8de7825730b6d73a2e75f855757348b5ffa2d620d20d7e57f8c6 fix-T21035.patch
|
|
28433f5e86b571ef591ee61153c804eb4a540fda120b7a7aa14f39af46eda6917361d0cd41127356e20f24cf5b9d493ae404023eae31b863c2485fb8cffa0c6a fix-T7060.patch
|
|
"
|