0
0
mirror of https://github.com/termux/termux-packages.git synced 2025-09-21 05:49:36 +00:00
Files
termux-packages/packages/ghc/build.sh
Fredrik Fornwall f3fc47393c fix(main/ghc): Rebuild
Rebuild package to get correct version in apt (#26261).
2025-09-12 04:42:03 +02:00

114 lines
3.7 KiB
Bash

TERMUX_PKG_HOMEPAGE=https://www.haskell.org/ghc/
TERMUX_PKG_DESCRIPTION="The Glasgow Haskell Compiler"
TERMUX_PKG_LICENSE="custom"
TERMUX_PKG_MAINTAINER="Aditya Alok <alok@termux.dev>"
TERMUX_PKG_VERSION=9.12.2
TERMUX_PKG_REVISION=2
TERMUX_PKG_SRCURL="https://downloads.haskell.org/~ghc/$TERMUX_PKG_VERSION/ghc-$TERMUX_PKG_VERSION-src.tar.xz"
TERMUX_PKG_SHA256=0e49cd5dde43f348c5716e5de9a5d7a0f8d68d945dc41cf75dfdefe65084f933
TERMUX_PKG_DEPENDS="libiconv, libffi, libgmp, libandroid-posix-semaphore, ncurses"
TERMUX_PKG_BUILD_IN_SRC=true
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="
--host=$TERMUX_BUILD_TUPLE
--with-system-libffi
--disable-ld-override"
TERMUX_PKG_NO_STATICSPLIT=true
TERMUX_PKG_LICENSE_FILE="LICENSE"
TERMUX_PKG_REPLACES="ghc-libs-static, ghc-libs"
TERMUX_PKG_PROVIDES="ghc-libs, ghc-libs-static"
__setup_bootstrap_compiler() {
local version=9.10.1
local temp_folder="$TERMUX_PKG_CACHEDIR/ghc-bootstrap-$version"
local tarball="$temp_folder.tar.xz"
local runtime_folder="$temp_folder-runtime"
export PATH="$runtime_folder/bin:$PATH"
[[ -d "$runtime_folder" ]] && return
termux_download "https://downloads.haskell.org/~ghc/$version/ghc-$version-x86_64-ubuntu20_04-linux.tar.xz" \
"$tarball" \
ae3be406fdb73bd2b0c22baada77a8ff2f8cde6220dd591dc24541cfe9d895eb
mkdir -p "$temp_folder" "$runtime_folder"
tar xf "$tarball" --strip-components=1 -C "$temp_folder"
(
set -e
unset CC CXX CFLAGS CXXFLAGS CPPFLAGS LDFLAGS AR AS CPP LD RANLIB READELF STRIP
cd "$temp_folder"
./configure --prefix="$runtime_folder"
make install
) &>/dev/null
rm -Rf "$temp_folder" "$tarball"
}
termux_step_pre_configure() {
__setup_bootstrap_compiler && termux_setup_cabal
export CONF_CC_OPTS_STAGE2="$CFLAGS $CPPFLAGS"
export CONF_GCC_LINKER_OPTS_STAGE2="$LDFLAGS"
export CONF_CXX_OPTS_STAGE2="$CXXFLAGS"
export target="$TERMUX_HOST_PLATFORM"
export no_profiled_libs=""
if [[ "$TERMUX_ARCH" == "arm" ]]; then
target="armv7a-linux-androideabi"
# NOTE: We do not build profiled libs for arm. It exceeds the 6 hours usage
# limit of github CI.
no_profiled_libs="+no_profiled_libs"
fi
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="$TERMUX_PKG_EXTRA_CONFIGURE_ARGS --target=$target"
./boot.source
}
termux_step_make() {
(
unset CFLAGS LDFLAGS CPPFLAGS # For hadrian compilation
./hadrian/build binary-dist-dir \
-j"$TERMUX_PKG_MAKE_PROCESSES" \
--flavour="release$no_profiled_libs" --docs=none \
"stage1.unix.ghc.link.opts += -optl-landroid-posix-semaphore"
)
}
termux_step_make_install() {
cd _build/bindist/ghc-"$TERMUX_PKG_VERSION"-"$target" || exit 1
# Remove unnecessary flags. They would get written to settings file otherwise:
unset CONF_CC_OPTS_STAGE2 CONF_GCC_LINKER_OPTS_STAGE2 CONF_CXX_OPTS_STAGE2
# We need to re-run configure:
# See: https://gitlab.haskell.org/ghc/ghc/-/issues/22058
./configure \
--prefix="$TERMUX_PREFIX" \
--host="$target"
HOST_GHC_PKG="$(realpath ../../stage0/bin/ghc-pkg)" make install
}
termux_step_post_massage() {
local ghclibs_dir="lib/ghc-$TERMUX_PKG_VERSION"
if ! [[ -d "$ghclibs_dir" ]]; then
echo "ERROR: GHC lib directory is not at expected place. Please verify before continuing."
exit 1
fi
# Remove version suffix from `llc` and `opt`:
sed -i -E 's|("LLVM llc command",) "llc.*"|\1 "llc"|' "$ghclibs_dir"/lib/settings
sed -i -E 's|("LLVM opt command",) "opt.*"|\1 "opt"|' "$ghclibs_dir"/lib/settings
# Remove cross-prefix from tools:
sed -i "s|$CC|${CC/${target}-/}|g" "$ghclibs_dir"/lib/settings
sed -i "s|$CXX|${CXX/${target}-/}|g" "$ghclibs_dir"/lib/settings
# Strip unneeded symbols:
find . -type f \( -name "*.so" -o -name "*.a" \) -exec "$STRIP" --strip-unneeded {} \;
find "$ghclibs_dir"/bin -type f -exec "$STRIP" {} \;
}