Merge pull request #747 from joshuaswarren/add-mil-hwx-compiler

Add mil-hwx-compiler, the Apple Neural Engine compiler
This commit is contained in:
Marcelo Alcantara authored and GitHub committed 2026-10-03 09:31:49 +10:00
commit 282bc1c43e
2 files changed
+121

No files matched your search

@@ -0,0 +1,11 @@
{
"source": "local",
"channels": ["edge"],
"min_release_age": "24h",
"upstream": {
"watch": {
"github": "joshuaswarren/mil-hwx-compiler",
"pattern": "v(?P<version>[0-9]+(?:\\.[0-9]+)*)"
}
}
}
+110
View File
@@ -0,0 +1,110 @@
# Maintainer: Joshua Warren <816217+joshuaswarren@users.noreply.github.com>
pkgname=mil-hwx-compiler
pkgver=0.1.0
pkgrel=1
pkgdesc='MIL-to-HWX compiler for the Apple Neural Engine (mil-hwxc)'
arch=('aarch64')
groups=('omarchy-platform-apple-silicon')
url='https://github.com/joshuaswarren/mil-hwx-compiler'
license=('MIT' 'LGPL-2.1-or-later')
depends=('gcc-libs' 'glibc' 'icu' 'libffi' 'libxml2' 'zlib')
makedepends=('clang' 'cmake' 'git' 'lld' 'ninja' 'robin-map')
checkdepends=('python')
# The compiler is Objective-C++ with ARC, so it needs the libobjc2 runtime and a
# gnustep-base built for it. Arch's gnustep-base uses gcc's libobjc. This
# package builds its own copy for $_prefix, from the commits that the
# release's scripts/bootstrap-linux-toolchain.sh pins.
_prefix=/usr/lib/mil-hwx-compiler
_objc_commit=a1faad66cee79f29c4ca268b004111edc33a2ae2
_make_commit=d0349cc83a23367acdc53df364f73504c281b26c
_base_commit=3d7013e144b153abcd6c088dc8d6c64ebd43bc4b
source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz"
"libobjc2::git+https://github.com/gnustep/libobjc2.git#commit=$_objc_commit"
"tools-make::git+https://github.com/gnustep/tools-make.git#commit=$_make_commit"
"libs-base::git+https://github.com/gnustep/libs-base.git#commit=$_base_commit")
sha256sums=('9aa579212b5fddfc43c3438619ba7a41663459d26f1442a6105de6c7f1ba1772'
'8b791f7e39275d74e98caa4436e859fbc89cbbaa5818fa2f63d301c71234d6e7'
'dcc01f3da5b4c63bb841bae49d420c82342f667a88ec6e460206c1c991678277'
'1b4a16e2148d4ca0e3985cbde0f898529bba1c7c85862eeffc8e122ab6e6adf4')
prepare() {
# A release that moves the toolchain pins must move them here too.
local bootstrap="$pkgname-$pkgver/scripts/bootstrap-linux-toolchain.sh"
grep -qx "objc_commit=$_objc_commit" "$bootstrap"
grep -qx "make_commit=$_make_commit" "$bootstrap"
grep -qx "base_commit=$_base_commit" "$bootstrap"
}
# The toolchain builds into $srcdir/gnustep, the way the bootstrap script does.
# Only the runtime libraries ship, in $_prefix/lib.
_toolchain_env() {
_gnustep="$srcdir/gnustep"
export CC=clang CXX=clang++ OBJC=clang OBJCXX=clang++
export CPPFLAGS="$CPPFLAGS -I$_gnustep/include"
export LDFLAGS="$LDFLAGS -L$_gnustep/lib -Wl,-rpath,$_prefix/lib -fuse-ld=lld"
export LD_LIBRARY_PATH="$_gnustep/lib" PATH="$_gnustep/bin:$PATH"
}
build() {
_toolchain_env
cmake -S libobjc2 -B build-libobjc2 -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$_gnustep" \
-DTESTS=OFF
cmake --build build-libobjc2
cmake --install build-libobjc2
(
cd tools-make
./configure --prefix="$_gnustep" --with-layout=fhs \
--with-library-combo=ng-gnu-gnu --with-runtime-abi=gnustep-2.0 \
--enable-objc-arc --enable-native-objc-exceptions
make
make install
)
# gnustep-base compiles in the paths of a GNUstep.conf for when it finds no
# config file at run time. Give it the installed paths. The package ships no
# GNUstep.conf.
sed "s|$_gnustep|$_prefix|g" "$_gnustep/etc/GNUstep/GNUstep.conf" >GNUstep-installed.conf
(
export GNUSTEP_CONFIG_FILE="$_gnustep/etc/GNUstep/GNUstep.conf"
. "$_gnustep/share/GNUstep/Makefiles/GNUstep.sh"
cd libs-base
./configure --prefix="$_gnustep" \
--with-config-file="$_prefix/etc/GNUstep/GNUstep.conf" \
--with-default-config="$srcdir/GNUstep-installed.conf" \
--disable-tls --disable-xslt --disable-zeroconf --disable-libdispatch \
--disable-nsurlsession
make
make install
)
make -C "$pkgname-$pkgver" build/mil-hwxc \
CXX="clang++ -Wl,-rpath,$_prefix/lib" \
GNUSTEP_PREFIX="$_gnustep" GNUSTEP_CONFIG="$_gnustep/bin/gnustep-config"
}
check() {
_toolchain_env
cd "$pkgname-$pkgver"
local mode
for mode in software-tests emit hygiene; do
GNUSTEP_PREFIX="$_gnustep" scripts/verify-linux-compiler.sh "$mode"
done
}
package() {
local lib="$srcdir/gnustep/lib"
install -d "$pkgdir$_prefix/lib"
cp -P "$lib"/libobjc.so* "$lib"/libgnustep-base.so* "$pkgdir$_prefix/lib/"
# gnustep-base's resources: languages, time zones, DTDs.
cp -r --no-preserve=ownership "$lib/GNUstep" "$pkgdir$_prefix/lib/"
install -Dm755 "$pkgname-$pkgver/build/mil-hwxc" "$pkgdir/usr/bin/mil-hwxc"
install -Dm644 "$pkgname-$pkgver/LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
install -Dm644 libobjc2/COPYING "$pkgdir/usr/share/licenses/$pkgname/libobjc2-COPYING"
install -Dm644 libs-base/COPYING.LIB "$pkgdir/usr/share/licenses/$pkgname/libs-base-COPYING.LIB"
}