mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-11-05 03:42:08 +08:00
71 lines
1.8 KiB
Bash
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}"
|