mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 14:02:21 -04:00
87 lines
2.9 KiB
Bash
Executable file
87 lines
2.9 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# This script currently only supports universal builds on x86_64.
|
|
#
|
|
|
|
set -e
|
|
|
|
# Add Linux cross-compilation target
|
|
rustup target add aarch64-unknown-linux-gnu
|
|
# Detect host architecture
|
|
HOST_ARCH=$(uname -m)
|
|
|
|
|
|
# Define output paths
|
|
OUTPUT_DIR="../../../out/launcher"
|
|
LAUNCHER_DIR="$OUTPUT_DIR/anki-launcher"
|
|
|
|
# Clean existing output directory
|
|
rm -rf "$LAUNCHER_DIR"
|
|
|
|
# Build binaries based on host architecture
|
|
if [ "$HOST_ARCH" = "aarch64" ]; then
|
|
# On aarch64 host, only build for aarch64
|
|
cargo build -p launcher --release --target aarch64-unknown-linux-gnu
|
|
else
|
|
# On other hosts, build for both architectures
|
|
cargo build -p launcher --release --target x86_64-unknown-linux-gnu
|
|
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc \
|
|
cargo build -p launcher --release --target aarch64-unknown-linux-gnu
|
|
# Extract uv_lin_arm for cross-compilation
|
|
(cd ../../.. && ./ninja extract:uv_lin_arm)
|
|
fi
|
|
|
|
# Create output directory
|
|
mkdir -p "$LAUNCHER_DIR"
|
|
|
|
# Copy binaries and support files
|
|
TARGET_DIR=${CARGO_TARGET_DIR:-../../../target}
|
|
|
|
# Copy binaries with architecture suffixes
|
|
if [ "$HOST_ARCH" = "aarch64" ]; then
|
|
# On aarch64 host, copy arm64 binary to both locations
|
|
cp "$TARGET_DIR/aarch64-unknown-linux-gnu/release/launcher" "$LAUNCHER_DIR/launcher.amd64"
|
|
cp "$TARGET_DIR/aarch64-unknown-linux-gnu/release/launcher" "$LAUNCHER_DIR/launcher.arm64"
|
|
# Copy uv binary to both locations
|
|
cp "../../../out/extracted/uv/uv" "$LAUNCHER_DIR/uv.amd64"
|
|
cp "../../../out/extracted/uv/uv" "$LAUNCHER_DIR/uv.arm64"
|
|
else
|
|
# On other hosts, copy architecture-specific binaries
|
|
cp "$TARGET_DIR/x86_64-unknown-linux-gnu/release/launcher" "$LAUNCHER_DIR/launcher.amd64"
|
|
cp "$TARGET_DIR/aarch64-unknown-linux-gnu/release/launcher" "$LAUNCHER_DIR/launcher.arm64"
|
|
cp "../../../out/extracted/uv/uv" "$LAUNCHER_DIR/uv.amd64"
|
|
cp "../../../out/extracted/uv_lin_arm/uv" "$LAUNCHER_DIR/uv.arm64"
|
|
fi
|
|
|
|
# Copy support files from lin directory
|
|
for file in README.md anki.1 anki.desktop anki.png anki.xml anki.xpm install.sh uninstall.sh anki; do
|
|
cp "$file" "$LAUNCHER_DIR/"
|
|
done
|
|
|
|
# Copy additional files from parent directory
|
|
cp ../pyproject.toml "$LAUNCHER_DIR/"
|
|
cp ../../../.python-version "$LAUNCHER_DIR/"
|
|
|
|
# Set executable permissions
|
|
chmod +x \
|
|
"$LAUNCHER_DIR/anki" \
|
|
"$LAUNCHER_DIR/launcher.amd64" \
|
|
"$LAUNCHER_DIR/launcher.arm64" \
|
|
"$LAUNCHER_DIR/uv.amd64" \
|
|
"$LAUNCHER_DIR/uv.arm64" \
|
|
"$LAUNCHER_DIR/install.sh" \
|
|
"$LAUNCHER_DIR/uninstall.sh"
|
|
|
|
# Set proper permissions and create tarball
|
|
chmod -R a+r "$LAUNCHER_DIR"
|
|
|
|
# Create tarball using the same options as the Rust template
|
|
ZSTD="zstd -c --long -T0 -18"
|
|
TRANSFORM="s%^.%anki-launcher%S"
|
|
TARBALL="$OUTPUT_DIR/anki-launcher.tar.zst"
|
|
|
|
tar -I "$ZSTD" --transform "$TRANSFORM" -cf "$TARBALL" -C "$LAUNCHER_DIR" .
|
|
|
|
echo "Build complete:"
|
|
echo "Universal launcher: $LAUNCHER_DIR"
|
|
echo "Tarball: $TARBALL"
|