|
|
|
@ -9,22 +9,17 @@
|
|
|
|
# 见 README.md「交叉编译 arm64」或本脚本 check_arm64_pkgconfig 失败时的提示。
|
|
|
|
# 见 README.md「交叉编译 arm64」或本脚本 check_arm64_pkgconfig 失败时的提示。
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# 用法:
|
|
|
|
# 用法:
|
|
|
|
# ./scripts/build-linux-deb-all.sh # 构建 PROJECTS 中全部项目
|
|
|
|
# ./scripts/build-linux-deb-all.sh # 构建自动发现的全部项目(amd64 + arm64)
|
|
|
|
# ./scripts/build-linux-deb-all.sh call-client # 仅构建指定项目(可多个)
|
|
|
|
# ./scripts/build-linux-deb-all.sh --arch amd64 # 仅构建 amd64
|
|
|
|
|
|
|
|
# ./scripts/build-linux-deb-all.sh --arch arm64 call-client # 仅构建指定项目的 arm64
|
|
|
|
|
|
|
|
# ./scripts/build-linux-deb-all.sh --list-projects # 打印可构建项目列表
|
|
|
|
#
|
|
|
|
#
|
|
|
|
set -euo pipefail
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
|
|
|
|
BUILD_ARCH="all"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
LIST_PROJECTS=0
|
|
|
|
# 同框架项目列表(相对 REPO_ROOT 的目录名)。后续新增项目在此追加一行即可。
|
|
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
PROJECTS=(
|
|
|
|
|
|
|
|
"call-client"
|
|
|
|
|
|
|
|
"broadcast-client"
|
|
|
|
|
|
|
|
# "another-tauri-app"
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 统一收集 .deb 的根目录(相对 REPO_ROOT)
|
|
|
|
# 统一收集 .deb 的根目录(相对 REPO_ROOT)
|
|
|
|
OUTPUT_ROOT="$REPO_ROOT/dist/linux-deb"
|
|
|
|
OUTPUT_ROOT="$REPO_ROOT/dist/linux-deb"
|
|
|
|
@ -32,6 +27,82 @@ OUTPUT_ROOT="$REPO_ROOT/dist/linux-deb"
|
|
|
|
# aarch64 交叉编译时 pkg-config 查找路径(与下方 export 一致)
|
|
|
|
# aarch64 交叉编译时 pkg-config 查找路径(与下方 export 一致)
|
|
|
|
ARM64_PKGCONFIG_DIR="/usr/lib/aarch64-linux-gnu/pkgconfig"
|
|
|
|
ARM64_PKGCONFIG_DIR="/usr/lib/aarch64-linux-gnu/pkgconfig"
|
|
|
|
X64_PKGCONFIG_DIR="/usr/lib/x86_64-linux-gnu/pkgconfig"
|
|
|
|
X64_PKGCONFIG_DIR="/usr/lib/x86_64-linux-gnu/pkgconfig"
|
|
|
|
|
|
|
|
AVAILABLE_PROJECTS=()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
usage() {
|
|
|
|
|
|
|
|
cat <<EOF
|
|
|
|
|
|
|
|
用法:
|
|
|
|
|
|
|
|
$(basename "$0") [--arch all|amd64|arm64] [项目名...]
|
|
|
|
|
|
|
|
$(basename "$0") --list-projects
|
|
|
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
discover_projects() {
|
|
|
|
|
|
|
|
local pkg_file project_dir
|
|
|
|
|
|
|
|
shopt -s nullglob
|
|
|
|
|
|
|
|
for pkg_file in "$REPO_ROOT"/*/package.json; do
|
|
|
|
|
|
|
|
project_dir="${pkg_file#$REPO_ROOT/}"
|
|
|
|
|
|
|
|
project_dir="${project_dir%/package.json}"
|
|
|
|
|
|
|
|
if node -e '
|
|
|
|
|
|
|
|
const fs = require("fs");
|
|
|
|
|
|
|
|
const pkg = JSON.parse(fs.readFileSync(process.argv[1], "utf8"));
|
|
|
|
|
|
|
|
const scripts = pkg.scripts || {};
|
|
|
|
|
|
|
|
process.exit(scripts["build:deb:x64"] && scripts["build:deb:arm64"] ? 0 : 1);
|
|
|
|
|
|
|
|
' "$pkg_file" >/dev/null 2>&1; then
|
|
|
|
|
|
|
|
echo "$project_dir"
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
done
|
|
|
|
|
|
|
|
shopt -u nullglob
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
parse_args() {
|
|
|
|
|
|
|
|
while (($# > 0)); do
|
|
|
|
|
|
|
|
case "$1" in
|
|
|
|
|
|
|
|
--arch)
|
|
|
|
|
|
|
|
BUILD_ARCH="${2:-}"
|
|
|
|
|
|
|
|
if [[ -z "$BUILD_ARCH" ]]; then
|
|
|
|
|
|
|
|
echo "错误: --arch 需要参数(all|amd64|arm64)" >&2
|
|
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
shift 2
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
--arch=*)
|
|
|
|
|
|
|
|
BUILD_ARCH="${1#*=}"
|
|
|
|
|
|
|
|
shift
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
--list-projects)
|
|
|
|
|
|
|
|
LIST_PROJECTS=1
|
|
|
|
|
|
|
|
shift
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
--help|-h)
|
|
|
|
|
|
|
|
usage
|
|
|
|
|
|
|
|
exit 0
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
--)
|
|
|
|
|
|
|
|
shift
|
|
|
|
|
|
|
|
break
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
-*)
|
|
|
|
|
|
|
|
echo "错误: 未知参数 $1" >&2
|
|
|
|
|
|
|
|
usage >&2
|
|
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
*)
|
|
|
|
|
|
|
|
break
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
esac
|
|
|
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case "$BUILD_ARCH" in
|
|
|
|
|
|
|
|
all|amd64|arm64) ;;
|
|
|
|
|
|
|
|
*)
|
|
|
|
|
|
|
|
echo "错误: --arch 仅支持 all|amd64|arm64,当前为 \"$BUILD_ARCH\"" >&2
|
|
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
printf '%s\n' "$@"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
check_x64_pkgconfig() {
|
|
|
|
check_x64_pkgconfig() {
|
|
|
|
local missing=()
|
|
|
|
local missing=()
|
|
|
|
@ -142,44 +213,50 @@ collect_debs() {
|
|
|
|
|
|
|
|
|
|
|
|
build_project() {
|
|
|
|
build_project() {
|
|
|
|
local project_dir="$1"
|
|
|
|
local project_dir="$1"
|
|
|
|
echo ""
|
|
|
|
if [[ "$BUILD_ARCH" == "all" || "$BUILD_ARCH" == "amd64" ]]; then
|
|
|
|
echo "######## $project_dir: amd64 ########"
|
|
|
|
echo ""
|
|
|
|
unset PKG_CONFIG_PATH PKG_CONFIG_LIBDIR PKG_CONFIG_SYSROOT_DIR PKG_CONFIG_ALLOW_CROSS 2>/dev/null || true
|
|
|
|
echo "######## $project_dir: amd64 ########"
|
|
|
|
check_x64_pkgconfig
|
|
|
|
unset PKG_CONFIG_PATH PKG_CONFIG_LIBDIR PKG_CONFIG_SYSROOT_DIR PKG_CONFIG_ALLOW_CROSS 2>/dev/null || true
|
|
|
|
export PKG_CONFIG_PATH="$X64_PKGCONFIG_DIR"
|
|
|
|
check_x64_pkgconfig
|
|
|
|
export PKG_CONFIG_LIBDIR="$X64_PKGCONFIG_DIR:/usr/share/pkgconfig"
|
|
|
|
export PKG_CONFIG_PATH="$X64_PKGCONFIG_DIR"
|
|
|
|
build_one_target "$project_dir" "build:deb:x64"
|
|
|
|
export PKG_CONFIG_LIBDIR="$X64_PKGCONFIG_DIR:/usr/share/pkgconfig"
|
|
|
|
collect_debs "$project_dir" "amd64" "x86_64-unknown-linux-gnu"
|
|
|
|
build_one_target "$project_dir" "build:deb:x64"
|
|
|
|
unset PKG_CONFIG_PATH PKG_CONFIG_LIBDIR
|
|
|
|
collect_debs "$project_dir" "amd64" "x86_64-unknown-linux-gnu"
|
|
|
|
|
|
|
|
unset PKG_CONFIG_PATH PKG_CONFIG_LIBDIR
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
if [[ "$BUILD_ARCH" == "all" || "$BUILD_ARCH" == "arm64" ]]; then
|
|
|
|
echo "######## $project_dir: arm64 (cross) ########"
|
|
|
|
echo ""
|
|
|
|
check_arm64_pkgconfig
|
|
|
|
echo "######## $project_dir: arm64 (cross) ########"
|
|
|
|
export PKG_CONFIG_ALLOW_CROSS=1
|
|
|
|
check_arm64_pkgconfig
|
|
|
|
export PKG_CONFIG_SYSROOT_DIR=/
|
|
|
|
export PKG_CONFIG_ALLOW_CROSS=1
|
|
|
|
export PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig
|
|
|
|
export PKG_CONFIG_SYSROOT_DIR=/
|
|
|
|
export PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig
|
|
|
|
export PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig
|
|
|
|
build_one_target "$project_dir" "build:deb:arm64"
|
|
|
|
export PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig
|
|
|
|
collect_debs "$project_dir" "arm64" "aarch64-unknown-linux-gnu"
|
|
|
|
build_one_target "$project_dir" "build:deb:arm64"
|
|
|
|
unset PKG_CONFIG_ALLOW_CROSS PKG_CONFIG_SYSROOT_DIR PKG_CONFIG_PATH PKG_CONFIG_LIBDIR
|
|
|
|
collect_debs "$project_dir" "arm64" "aarch64-unknown-linux-gnu"
|
|
|
|
|
|
|
|
unset PKG_CONFIG_ALLOW_CROSS PKG_CONFIG_SYSROOT_DIR PKG_CONFIG_PATH PKG_CONFIG_LIBDIR
|
|
|
|
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
select_projects() {
|
|
|
|
select_projects() {
|
|
|
|
|
|
|
|
local available=("${AVAILABLE_PROJECTS[@]}")
|
|
|
|
|
|
|
|
|
|
|
|
if (($# == 0)); then
|
|
|
|
if (($# == 0)); then
|
|
|
|
printf '%s\n' "${PROJECTS[@]}"
|
|
|
|
printf '%s\n' "${available[@]}"
|
|
|
|
return
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
local name ok
|
|
|
|
local name ok p
|
|
|
|
for name in "$@"; do
|
|
|
|
for name in "$@"; do
|
|
|
|
ok=0
|
|
|
|
ok=0
|
|
|
|
for p in "${PROJECTS[@]}"; do
|
|
|
|
for p in "${available[@]}"; do
|
|
|
|
if [[ "$p" == "$name" ]]; then
|
|
|
|
if [[ "$p" == "$name" ]]; then
|
|
|
|
ok=1
|
|
|
|
ok=1
|
|
|
|
break
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
done
|
|
|
|
if [[ "$ok" -eq 0 ]]; then
|
|
|
|
if [[ "$ok" -eq 0 ]]; then
|
|
|
|
echo "错误: 未知项目 \"$name\"(请加入 scripts/build-linux-deb-all.sh 的 PROJECTS 数组)" >&2
|
|
|
|
echo "错误: 未知项目 \"$name\"(可用项目见 --list-projects)" >&2
|
|
|
|
exit 1
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
echo "$name"
|
|
|
|
echo "$name"
|
|
|
|
@ -187,7 +264,20 @@ select_projects() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
main() {
|
|
|
|
main() {
|
|
|
|
mapfile -t to_build < <(select_projects "$@")
|
|
|
|
local -a positional to_build
|
|
|
|
|
|
|
|
mapfile -t positional < <(parse_args "$@")
|
|
|
|
|
|
|
|
mapfile -t AVAILABLE_PROJECTS < <(discover_projects)
|
|
|
|
|
|
|
|
if (( ${#AVAILABLE_PROJECTS[@]} == 0 )); then
|
|
|
|
|
|
|
|
echo "错误: 未发现可构建项目(需包含 build:deb:x64 与 build:deb:arm64 脚本)" >&2
|
|
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [[ "$LIST_PROJECTS" -eq 1 ]]; then
|
|
|
|
|
|
|
|
printf '%s\n' "${AVAILABLE_PROJECTS[@]}"
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mapfile -t to_build < <(select_projects "${positional[@]}")
|
|
|
|
mkdir -p "$OUTPUT_ROOT"
|
|
|
|
mkdir -p "$OUTPUT_ROOT"
|
|
|
|
|
|
|
|
|
|
|
|
for p in "${to_build[@]}"; do
|
|
|
|
for p in "${to_build[@]}"; do
|
|
|
|
@ -196,6 +286,7 @@ main() {
|
|
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
echo ""
|
|
|
|
echo "==> 全部完成"
|
|
|
|
echo "==> 全部完成"
|
|
|
|
|
|
|
|
echo " 构建架构: $BUILD_ARCH"
|
|
|
|
echo " 统一输出目录: $OUTPUT_ROOT"
|
|
|
|
echo " 统一输出目录: $OUTPUT_ROOT"
|
|
|
|
echo " 每项目下: <项目名>/amd64/*.deb 与 <项目名>/arm64/*.deb"
|
|
|
|
echo " 每项目下: <项目名>/amd64/*.deb 与 <项目名>/arm64/*.deb"
|
|
|
|
echo " Tauri 原始路径仍在各项目:"
|
|
|
|
echo " Tauri 原始路径仍在各项目:"
|
|
|
|
|