diff --git a/PartnerCtl/Dockerfile.native-arm64 b/PartnerCtl/Dockerfile.native-arm64
new file mode 100644
index 00000000..2a70c116
--- /dev/null
+++ b/PartnerCtl/Dockerfile.native-arm64
@@ -0,0 +1,12 @@
+FROM --platform=linux/arm64 ghcr.io/graalvm/native-image-community:21
+
+RUN microdnf install -y \
+ maven \
+ findutils \
+ gzip \
+ tar \
+ which \
+ file \
+ && microdnf clean all
+
+WORKDIR /workspace
diff --git a/PartnerCtl/pom.xml b/PartnerCtl/pom.xml
index dbe49f79..6aceab70 100644
--- a/PartnerCtl/pom.xml
+++ b/PartnerCtl/pom.xml
@@ -15,8 +15,10 @@
21
21
UTF-8
+ 4.7.7
+
org.jline
@@ -26,8 +28,78 @@
info.picocli
picocli
- 4.7.7
+ ${picocli.version}
+
+
+ info.picocli
+ picocli-codegen
+ ${picocli.version}
+ provided
+
+
+
+ org.jetbrains.kotlin
+ kotlin-maven-plugin
+ ${kotlin.version}
+
+
+
+ kapt
+
+ kapt
+
+
+
+ src/main/java
+
+
+
+ info.picocli
+ picocli-codegen
+ ${picocli.version}
+
+
+
+ partnerctl
+
+
+
+
+
+ compile
+
+ compile
+
+
+
+ src/main/java
+
+ 21
+
+
+
+
+
+ org.graalvm.buildtools
+ native-maven-plugin
+ 1.0.0
+ true
+
+ partnerctl
+ work.slhaf.partner.ctl.PartnerCtlKt
+
+ false
+
+
+ --no-fallback
+ -H:+ReportExceptionStackTraces
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PartnerCtl/scripts/build-native-arm64.sh b/PartnerCtl/scripts/build-native-arm64.sh
new file mode 100644
index 00000000..053762ee
--- /dev/null
+++ b/PartnerCtl/scripts/build-native-arm64.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+MODULE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+REPO_DIR="$(cd "${MODULE_DIR}/.." && pwd)"
+IMAGE_NAME="${PARTNERCTL_ARM64_BUILDER_IMAGE:-partnerctl-native-arm64-builder:21}"
+DOCKERFILE="${MODULE_DIR}/Dockerfile.native-arm64"
+
+if ! docker image inspect "${IMAGE_NAME}" >/dev/null 2>&1; then
+ echo "[partnerctl] building reusable arm64 native builder image: ${IMAGE_NAME}"
+ docker buildx build \
+ --platform linux/arm64 \
+ -f "${DOCKERFILE}" \
+ -t "${IMAGE_NAME}" \
+ --load \
+ "${MODULE_DIR}"
+fi
+
+echo "[partnerctl] building linux-aarch64 native executable"
+docker run --rm \
+ --platform linux/arm64 \
+ --entrypoint /bin/bash \
+ -v "${REPO_DIR}":/workspace \
+ -v "${HOME}/.m2":/root/.m2 \
+ -w /workspace/PartnerCtl \
+ "${IMAGE_NAME}" \
+ -lc 'mvn -Pnative native:compile && file target/partnerctl'