#!/usr/bin/env bash set -euxo pipefail IMAGE="tilelang-builder:manylinux" HOST_UNAME=$(uname -m) case "$HOST_UNAME" in x86_64) TARGETARCH=amd64 ;; aarch64|arm64) TARGETARCH=arm64 ;; *) echo "Unsupported architecture: $HOST_UNAME" >&2; exit 1 ;; esac if docker buildx version >/dev/null 2>&1; then if docker info >/dev/null 2>&1; then docker run --rm --privileged tonistiigi/binfmt --install amd64,arm64 >/dev/null 2>&1 || true fi if ! docker buildx inspect multi >/dev/null 2>&1; then docker buildx create --name multi --driver docker-container --use >/dev/null 2>&1 || true else docker buildx use multi >/dev/null 2>&1 || true fi docker buildx inspect --bootstrap >/dev/null 2>&1 || true for ARCH in amd64 arm64; do TAG_PLATFORM="linux/${ARCH}" TAG_IMAGE="${IMAGE}-${ARCH}" docker buildx build \ --platform "${TAG_PLATFORM}" \ --build-arg TARGETARCH="${ARCH}" \ -f "$(dirname "${BASH_SOURCE[0]}")/pypi.manylinux.Dockerfile" \ -t "${TAG_IMAGE}" \ --load \ . script="sh maint/scripts/local_distribution.sh" docker run --rm \ --platform "${TAG_PLATFORM}" \ -v "$(pwd):/tilelang" \ "${TAG_IMAGE}" \ /bin/bash -lc "$script" if [ -d dist ]; then mv -f dist "dist-local-${ARCH}" fi done else echo "docker buildx not found; building only host arch: ${TARGETARCH}" >&2 TAG_IMAGE="${IMAGE}-${TARGETARCH}" TAG_PLATFORM="linux/${TARGETARCH}" docker build \ --build-arg TARGETARCH="$TARGETARCH" \ -f "$(dirname "${BASH_SOURCE[0]}")/pypi.manylinux.Dockerfile" \ -t "${TAG_IMAGE}" \ . script="sh maint/scripts/local_distribution.sh" docker run --rm \ --platform "${TAG_PLATFORM}" \ -v "$(pwd):/tilelang" \ "${TAG_IMAGE}" \ /bin/bash -lc "$script" if [ -d dist ]; then mv -f dist "dist-local-${TARGETARCH}" fi fi