After some time I get the PKGBUILD to compile to Arch Linux(arm64v8-aarch64) from master branch:
pkgname=crystal-git-master
pkgver=1.17.0
pkgrel=1
pkgdesc="The Crystal Programming Language"
arch=('x86_64' 'aarch64')
url="http://crystal-lang.org"
license=('Apache')
depends=('gc' 'pcre2' 'libevent')
makedepends=('git' 'libxml2' 'llvm' 'crystal')
checkdepends=('libyaml' 'libxml2' 'gmp' 'git' 'inetutils')
optdepends=('shards: To make the crystal deps command work'
'libyaml: For YAML support'
'gmp: For BigInt support'
'libxml2: For XML support')
conflicts=('crystal')
provides=('crystal')
source=("git+https://github.com/crystal-lang/crystal.git#branch=master")
prepare() {
cd "$srcdir/${pkgname/-git/}"
if [ "$CARCH" = "aarch64" ]; then
export EXPORT_CC="CC=cc" # prevent lld usage, broken on aarch64
fi
}
build() {
cd "$srcdir/${pkgname/-git/}"
make release=1 FLAGS="--no-debug" \
CRYSTAL_PATH="$srcdir/${pkgname/-git/}/src:$srcdir/${pkgname/-git}/lib" \
CRYSTAL_CACHE_DIR="/tmp/crystal"
make docs CRYSTAL_CACHE_DIR="/tmp/crystal"
}
check() {
cd "$srcdir/${pkgname/-git/}"
make -j1 compiler_spec std_spec \
CRYSTAL_PATH="$srcdir/${pkgname/-git/}/src:$srcdir/${pkgname/-git}/lib" \
CRYSTAL_CONFIG_VERSION="$pkgver" \
CRYSTAL_CACHE_DIR="/tmp/crystal"
}
package() {
cd "$srcdir/${pkgname/-git/}"
make install install_docs PREFIX="$pkgdir/usr"
install -Dm644 src/llvm/ext/llvm_ext.o "$pkgdir/usr/share/crystal/src/llvm/ext/llvm_ext.o"
cp -av lib/ "$pkgdir/usr/share/crystal/lib/"
}
sha256sums=('SKIP')
I tested that on Orange PI 5 Max with BredOS(arm64v8):
crystal-git/src/crystal$ bin/crystal -v
Using compiled compiler at .build/crystal
Crystal 1.17.0-dev [f8877f850c] (2025-07-04)
LLVM: 20.1.7
Default target: aarch64-unknown-linux-gnu
Some features is not enabled as interactive interface.