TypeDialog/scripts/build_cross.sh

95 lines
2.0 KiB
Bash
Raw Normal View History

#!/bin/bash
set -euo pipefail
# Description: Cross-compile for multiple platforms using cargo-cross
# Arguments: [target] - specific target (default: all targets)
# Returns: 0 on success, 1 on failure
# Output: Cross-compilation progress
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly WORKSPACE_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
readonly TARGET="${1:-}"
# Supported targets for cross-compilation
declare -a TARGETS=(
"x86_64-unknown-linux-gnu"
"x86_64-apple-darwin"
"aarch64-apple-darwin"
"x86_64-pc-windows-gnu"
)
# Function: Print info message
log_info() {
echo "[INFO] $*" >&2
}
# Function: Print error message
log_error() {
echo "[ERROR] $*" >&2
}
# Function: Check for cross tool
check_cross() {
command -v cross >/dev/null || {
log_error "cross not found. Install: cargo install cross"
return 1
}
}
# Function: Validate target
is_valid_target() {
local target="$1"
for t in "${TARGETS[@]}"; do
[[ "$t" == "$target" ]] && return 0
done
return 1
}
# Function: Build single target
build_target() {
local target="$1"
log_info "Building target: $target"
cd "$WORKSPACE_ROOT"
cross build --target "$target" --release
}
# Function: Build all targets
build_all_targets() {
local failed=0
for target in "${TARGETS[@]}"; do
if ! build_target "$target"; then
log_error "Failed to build: $target"
((failed++))
fi
done
return $((failed > 0 ? 1 : 0))
}
# Function: Main entry point
main() {
log_info "TypeDialog Cross-Compilation"
log_info "=============================="
check_cross || return 1
if [[ -z "$TARGET" ]]; then
log_info "Building all targets..."
build_all_targets
else
is_valid_target "$TARGET" || {
log_error "Invalid target: $TARGET"
log_error "Supported: ${TARGETS[*]}"
return 1
}
build_target "$TARGET"
fi
log_info "Cross-compilation complete"
return 0
}
main "$@"