1- #! /usr/bin/env sh
1+ #! /usr/bin/env bash
2+
3+ set -e
24
35# This file is using docker to run commands
4- SPC_DOCKER_VERSION=v3
6+ SPC_DOCKER_VERSION=v4
57
68# Detect docker can run
79if ! which docker > /dev/null; then
8- echo " Docker is not installed, please install docker first !"
9- exit 1
10+ echo " Docker is not installed, please install docker first !"
11+ exit 1
1012fi
1113DOCKER_EXECUTABLE=" docker"
1214# shellcheck disable=SC2046
@@ -22,27 +24,48 @@ if [ $(id -u) -ne 0 ]; then
2224 fi
2325fi
2426
25-
26-
27- # to check if qemu-docker run
28- if [ " $SPC_USE_ARCH " = " " ]; then
29- SPC_USE_ARCH=x86_64
27+ # Convert uname to gnu arch
28+ CURRENT_ARCH=$( uname -m)
29+ if [ " $CURRENT_ARCH " = " arm64" ]; then
30+ CURRENT_ARCH=aarch64
31+ fi
32+ if [ -z " $SPC_USE_ARCH " ]; then
33+ SPC_USE_ARCH=$CURRENT_ARCH
3034fi
35+ # parse SPC_USE_ARCH
3136case $SPC_USE_ARCH in
32- x86_64)
33- ALPINE_FROM=alpine:edge
37+ x86_64|amd64)
38+ SPC_USE_ARCH=x86_64
39+ if [ " $CURRENT_ARCH " != " x86_64" ]; then
40+ PLATFORM_ARG=" --platform linux/amd64"
41+ ALPINE_FROM=multiarch/alpine:x86_64-edge
42+ fi
3443 ;;
35- aarch64)
36- ALPINE_FROM=multiarch/alpine:aarch64-edge
37- # shellcheck disable=SC2039
38- echo -e " \e[033m* Using different arch needs to setup qemu-static for docker !\e[0m"
39- $DOCKER_EXECUTABLE run --rm --privileged multiarch/qemu-user-static:register --reset > /dev/null
44+ aarch64|arm64)
45+ SPC_USE_ARCH=aarch64
46+ if [ " $CURRENT_ARCH " != " aarch64" ]; then
47+ PLATFORM_ARG=" --platform linux/arm64"
48+ ALPINE_FROM=multiarch/alpine:aarch64-edge
49+ fi
4050 ;;
4151* )
4252 echo " Current arch is not supported to run in docker: $SPC_USE_ARCH "
4353 exit 1
4454 ;;
4555esac
56+ # if ALPINE_FROM is not set, use alpine:edge
57+ if [ -z " $ALPINE_FROM " ]; then
58+ ALPINE_FROM=alpine:edge
59+ fi
60+ if [ " $SPC_USE_ARCH " != " $CURRENT_ARCH " ]; then
61+ echo " * Using different arch needs to setup qemu-static for docker !"
62+ ALPINE_FROM=multiarch/alpine:$SPC_USE_ARCH -edge
63+ if [ " $( uname -s) " = " Linux" ]; then
64+ $DOCKER_EXECUTABLE run --rm --privileged multiarch/qemu-user-static:register --reset > /dev/null
65+ fi
66+ else
67+ ALPINE_FROM=alpine:edge
68+ fi
4669
4770if [ " $SPC_USE_MIRROR " = " yes" ]; then
4871 SPC_USE_MIRROR=" RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories"
5376# Detect docker env is setup
5477if ! $DOCKER_EXECUTABLE images | grep -q cwcc-spc-$SPC_USE_ARCH -$SPC_DOCKER_VERSION ; then
5578 echo " Docker container does not exist. Building docker image ..."
56- $DOCKER_EXECUTABLE build -t cwcc-spc-$SPC_USE_ARCH -$SPC_DOCKER_VERSION -f- . << EOF
79+ $DOCKER_EXECUTABLE build $PLATFORM_ARG -t cwcc-spc-$SPC_USE_ARCH -$SPC_DOCKER_VERSION -f- . << EOF
5780FROM $ALPINE_FROM
5881$SPC_USE_MIRROR
5982RUN apk update; \
@@ -148,7 +171,7 @@ if [ "$SPC_DOCKER_DEBUG" = "yes" ]; then
148171 echo " * ./pkgroot: $( pwd) /pkgroot"
149172 echo " *"
150173 set -ex
151- $DOCKER_EXECUTABLE run --rm $INTERACT $ENV_LIST $MOUNT_LIST cwcc-spc-$SPC_USE_ARCH -$SPC_DOCKER_VERSION
174+ $DOCKER_EXECUTABLE run $PLATFORM_ARG --rm $INTERACT $ENV_LIST $MOUNT_LIST cwcc-spc-$SPC_USE_ARCH -$SPC_DOCKER_VERSION /bin/bash
152175else
153- $DOCKER_EXECUTABLE run --rm $INTERACT $ENV_LIST $MOUNT_LIST cwcc-spc-$SPC_USE_ARCH -$SPC_DOCKER_VERSION bin/spc $@
176+ $DOCKER_EXECUTABLE run $PLATFORM_ARG --rm $INTERACT $ENV_LIST $MOUNT_LIST cwcc-spc-$SPC_USE_ARCH -$SPC_DOCKER_VERSION bin/spc $@
154177fi
0 commit comments