addpkg(main/crystal): Crystal 1.9.0 (#17428)

This commit is contained in:
Quinton Miller 2023-07-15 12:17:34 +08:00 committed by GitHub
parent 358d59da55
commit 5115fa9bc0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 89 additions and 0 deletions

View File

@ -75,6 +75,10 @@ source "$TERMUX_SCRIPTDIR/scripts/build/termux_download.sh"
# shellcheck source=scripts/build/setup/termux_setup_cargo_c.sh
source "$TERMUX_SCRIPTDIR/scripts/build/setup/termux_setup_cargo_c.sh"
# Utility function for setting up Crystal toolchain.
# shellcheck source=scripts/build/setup/termux_setup_crystal.sh
source "$TERMUX_SCRIPTDIR/scripts/build/setup/termux_setup_crystal.sh"
# Utility function for setting up GHC toolchain.
# shellcheck source=scripts/build/setup/termux_setup_ghc.sh
source "$TERMUX_SCRIPTDIR/scripts/build/setup/termux_setup_ghc.sh"

49
packages/crystal/build.sh Normal file
View File

@ -0,0 +1,49 @@
TERMUX_PKG_HOMEPAGE=https://crystal-lang.org
TERMUX_PKG_DESCRIPTION="Fast and statically typed, compiled language with Ruby-like syntax"
TERMUX_PKG_LICENSE="Apache-2.0"
TERMUX_PKG_MAINTAINER="@HertzDevil"
TERMUX_PKG_VERSION=1.9.0
TERMUX_PKG_GIT_BRANCH=$TERMUX_PKG_VERSION
TERMUX_PKG_SRCURL=git+https://github.com/crystal-lang/crystal
TERMUX_PKG_AUTO_UPDATE=true
_LLVM_MAJOR_VERSION=$(. $TERMUX_SCRIPTDIR/packages/libllvm/build.sh; echo $LLVM_MAJOR_VERSION)
_LLVM_MAJOR_VERSION_NEXT=$((_LLVM_MAJOR_VERSION + 1))
TERMUX_PKG_DEPENDS="libc++, libevent, libgc, libgmp, libiconv, libllvm (<< $_LLVM_MAJOR_VERSION_NEXT), libxml2, libyaml, openssl, pcre2, zlib"
TERMUX_PKG_RECOMMENDS="clang, libffi, make, pkg-config"
TERMUX_PKG_BUILD_IN_SRC=true
TERMUX_PKG_BLACKLISTED_ARCHES="arm, i686, x86_64"
termux_step_make() {
local SHARDS_VERSION=0.17.3
local MOLINILLO_VERSION=0.2.0
local MOLINILLO_URL=https://github.com/crystal-lang/crystal-molinillo/archive/v$MOLINILLO_VERSION.tar.gz
local MOLINILLO_TARFILE=$TERMUX_PKG_TMPDIR/crystal-molinillo-$MOLINILLO_VERSION.tar.gz
local MOLINILLO_SHA256=e231cf2411a6a11a1538983c7fb52b19e650acc3338bd3cdf6fdb13d6463861a
termux_setup_crystal
CC="$CC_FOR_BUILD" LLVM_CONFIG="$TERMUX_PREFIX/bin/llvm-config" \
make crystal target=$TERMUX_HOST_PLATFORM release=1 FLAGS=-Dwithout_iconv
$CC .build/crystal.o -o .build/crystal $LDFLAGS -rdynamic src/llvm/ext/llvm_ext.o \
$("$TERMUX_PREFIX/bin/llvm-config" --libs --system-libs --ldflags 2> /dev/null) \
-lstdc++ -lpcre2-8 -lm -lgc -levent -ldl
git clone --depth 1 --single-branch \
--branch v$SHARDS_VERSION \
https://github.com/crystal-lang/shards.git
cd shards
mkdir -p lib/molinillo
termux_download "$MOLINILLO_URL" "$MOLINILLO_TARFILE" "$MOLINILLO_SHA256"
tar xzf "$MOLINILLO_TARFILE" --strip-components=1 -C lib/molinillo
CC="$CC_FOR_BUILD" make SHARDS=false release=1 \
FLAGS="--cross-compile --target aarch64-linux-android -Dwithout_iconv"
$CC bin/shards.o -o bin/shards $LDFLAGS -rdynamic \
-lyaml -lpcre2-8 -lgc -levent -ldl
}
termux_step_make_install() {
make install PREFIX="$TERMUX_PREFIX"
cd shards && make install PREFIX="$TERMUX_PREFIX"
}

View File

@ -0,0 +1,36 @@
termux_setup_crystal() {
local TERMUX_CRYSTAL_VERSION=1.9.0
local TERMUX_CRYSTAL_SHA256=0c5fdc8e1e985553a7603c5e45527ee28045409666f687d9978b3eb71572145b
local TERMUX_CRYSTAL_TARNAME=crystal-${TERMUX_CRYSTAL_VERSION}-1-linux-x86_64-bundled.tar.gz
local TERMUX_CRYSTAL_TARFILE=$TERMUX_PKG_TMPDIR/crystal-$TERMUX_CRYSTAL_VERSION.tar.gz
local TERMUX_CRYSTAL_FOLDER
if [ "${TERMUX_PACKAGES_OFFLINE-false}" = "true" ]; then
TERMUX_CRYSTAL_FOLDER=${TERMUX_SCRIPTDIR}/build-tools/crystal-${TERMUX_CRYSTAL_VERSION}
else
TERMUX_CRYSTAL_FOLDER=${TERMUX_COMMON_CACHEDIR}/crystal-${TERMUX_CRYSTAL_VERSION}
fi
if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then
if [ ! -x "$TERMUX_CRYSTAL_FOLDER" ]; then
mkdir -p "$TERMUX_CRYSTAL_FOLDER"
termux_download "https://github.com/crystal-lang/crystal/releases/download/$TERMUX_CRYSTAL_VERSION/$TERMUX_CRYSTAL_TARNAME" \
"$TERMUX_CRYSTAL_TARFILE" \
"$TERMUX_CRYSTAL_SHA256"
tar xf "$TERMUX_CRYSTAL_TARFILE" --strip-components=2 -C "$TERMUX_CRYSTAL_FOLDER"
fi
export PATH=$TERMUX_CRYSTAL_FOLDER/bin:$PATH
else
if [[ "$TERMUX_APP_PACKAGE_MANAGER" = "apt" && "$(dpkg-query -W -f '${db:Status-Status}\n' crystal 2>/dev/null)" != "installed" ]] ||
[[ "$TERMUX_APP_PACKAGE_MANAGER" = "pacman" && ! "$(pacman -Q crystal 2>/dev/null)" ]]; then
echo "Package 'crystal' is not installed."
echo "You can install it with"
echo
echo " pkg install crystal"
echo
echo " pacman -S crystal"
echo
exit 1
fi
fi
}