skiffer-git 8ff5c89001 mage
2024-04-09 15:09:51 +08:00

71 lines
1.8 KiB
Bash

#!/bin/bash
# 获取当前目录的绝对路径
ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd)
# 定义输出目录的基础部分
OUTPUT_BASE="${ROOT_DIR}/_output/bin/platforms"
compile_for_platform() {
local platform=$1
local os=${platform%_*}
local arch=${platform#*_}
# 最终输出目录
OUTPUT_DIR="${OUTPUT_BASE}/${os}/${arch}"
# 创建输出目录(如果不存在)
mkdir -p "$OUTPUT_DIR"
compile_dir() {
for dir in $1/*; do
if [ -d "$dir" ] && [ -f "$dir/main.go" ]; then
# 获取目录名
DIR_NAME=$(basename "$dir")
echo "Compiling $DIR_NAME for $platform..."
# 编译生成二进制文件
GOOS=$os GOARCH=$arch go build -o "${OUTPUT_DIR}/${DIR_NAME}" "$dir/main.go"
if [ $? -ne 0 ]; then
echo "Failed to compile $DIR_NAME for $platform"
exit 1
fi
fi
done
}
echo "Compiling cmd for $platform..."
compile_dir "${ROOT_DIR}/cmd"
echo "Compiling tools for $platform..."
compile_dir "${ROOT_DIR}/tools"
}
# 检测并编译指定的平台
if [ -z "$PLATFORMS" ]; then
# 默认使用当前系统的平台
OS=$(uname | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)
case $ARCH in
x86_64)
ARCH="amd64"
;;
aarch64)
ARCH="arm64"
;;
*)
echo "Unsupported architecture: $ARCH"
exit 1
;;
esac
compile_for_platform "${OS}_${ARCH}"
else
# 遍历并编译每个指定的平台
IFS=' ' read -ra ADDR <<< "$PLATFORMS"
for platform in "${ADDR[@]}"; do
compile_for_platform $platform
done
fi
echo "Compilation complete. Binaries are located in ${OUTPUT_BASE}"