95 lines
2.0 KiB
Bash
95 lines
2.0 KiB
Bash
|
|
#!/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 "$@"
|