SpaghettiKart/script/build-release.sh

57 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
set -e
# Script to build SpaghettiKart using Docker
# Usage: ./docker/build.sh [Release|Debug]
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
BUILD_TYPE="${1:-Release}"
BUILD_DIR="build-docker"
IMAGE_NAME="spaghettikart-builder"
USER_ID=$(id -u)
GROUP_ID=$(id -g)
cd "$PROJECT_DIR"
# Build Docker image
echo "Building Docker image..."
docker build -t "${IMAGE_NAME}" -f script/Dockerfile .
# Clean build directory if it contains incompatible cache
if [[ -f "${BUILD_DIR}/CMakeCache.txt" ]] && grep -q "/home/coco" "${BUILD_DIR}/CMakeCache.txt" 2>/dev/null; then
echo "Cleaning incompatible build cache..."
rm -rf "${BUILD_DIR}"
fi
# Run build in Docker
echo "Building in Docker container..."
docker run --rm \
-v "$(pwd):/project" \
-e BUILD_TYPE="${BUILD_TYPE}" \
-e USER_ID="${USER_ID}" \
-e GROUP_ID="${GROUP_ID}" \
"${IMAGE_NAME}" \
bash -c "
# Copy vcpkg.json and install dependencies
cp vcpkg.json /tmp/vcpkg.json && \
cd /tmp && \
\${VCPKG_ROOT}/vcpkg install --triplet x64-linux && \
cd /project && \
cmake -B ${BUILD_DIR} -G Ninja \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
-DCMAKE_TOOLCHAIN_FILE=/opt/vcpkg/scripts/buildsystems/vcpkg.cmake \
-DVCPKG_TARGET_TRIPLET=x64-linux && \
cmake --build ${BUILD_DIR} --parallel && \
cp -f spaghetti.o2r ${BUILD_DIR}/ 2>/dev/null || true && \
cp -f mk64.o2r ${BUILD_DIR}/ 2>/dev/null || true && \
cd ${BUILD_DIR} && cpack -G External && \
chown -R ${USER_ID}:${GROUP_ID} /project/${BUILD_DIR} /project/logs 2>/dev/null || true
"
echo ""
echo "Build complete!"
echo "Executable: ${BUILD_DIR}/Spaghettify"
ls -1 "${BUILD_DIR}"/*.appimage 2>/dev/null && echo "AppImage generated successfully!" || echo "Note: AppImage generation may have failed"