From 5115fa9bc0caaac7d838ed688b3b30e7fd368700 Mon Sep 17 00:00:00 2001 From: Quinton Miller Date: Sat, 15 Jul 2023 12:17:34 +0800 Subject: [PATCH] addpkg(main/crystal): Crystal 1.9.0 (#17428) --- build-package.sh | 4 ++ packages/crystal/build.sh | 49 +++++++++++++++++++++ scripts/build/setup/termux_setup_crystal.sh | 36 +++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 packages/crystal/build.sh create mode 100644 scripts/build/setup/termux_setup_crystal.sh diff --git a/build-package.sh b/build-package.sh index 236b7bdfe1..c2fe31edc3 100755 --- a/build-package.sh +++ b/build-package.sh @@ -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" diff --git a/packages/crystal/build.sh b/packages/crystal/build.sh new file mode 100644 index 0000000000..1bd56e2acf --- /dev/null +++ b/packages/crystal/build.sh @@ -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" +} diff --git a/scripts/build/setup/termux_setup_crystal.sh b/scripts/build/setup/termux_setup_crystal.sh new file mode 100644 index 0000000000..0c938c1f50 --- /dev/null +++ b/scripts/build/setup/termux_setup_crystal.sh @@ -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 +}