# --- Configuration --- # Uses a single Dockerfile with flatpak-builder inside IMAGE_NAME := aseprite-flatpak-builder DOCKERFILE := Dockerfile TARGET_DIR := ${PWD}/target OUTPUT_FILE := ${TARGET_DIR}/aseprite.flatpak BUILD_DIR := ${PWD}/build SRC_DIR := ${PWD}/src FLATPAK_STATE_DIR := ${PWD}/flatpak-state FLATPAK_CACHE_DIR := ${PWD}/flatpak-cache # --- Main Targets --- # Default target all: build # Prepare source files by running the script # Use .PHONY to ensure it always runs if called directly .PHONY: prepare-sources prepare-sources: @echo "--- Preparing sources using prepare_sources.sh ---" @./prepare_sources.sh # Build the Docker image which runs flatpak-builder inside # Implicitly depends on sources being ready after prepare-sources runs .PHONY: build-image build-image: @echo "--- Building Aseprite Flatpak builder image (${IMAGE_NAME}) ---" @docker build -t ${IMAGE_NAME} -f ${DOCKERFILE} . # Run flatpak-builder inside a privileged container # Create persistent cache directories to improve caching .PHONY: run-flatpak-builder run-flatpak-builder: @echo "--- Running flatpak-builder inside container ---" @mkdir -p ${BUILD_DIR} ${FLATPAK_STATE_DIR} ${FLATPAK_CACHE_DIR} @docker run \ --rm \ --privileged \ --device /dev/fuse \ -v ${SRC_DIR}:/sources:ro \ -v ${BUILD_DIR}:/build \ -v ${FLATPAK_STATE_DIR}:/root/.local/share/flatpak-builder \ -v ${FLATPAK_CACHE_DIR}:/root/.cache/flatpak-builder \ -v ${PWD}/com.aseprite.Aseprite.yaml:/build/com.aseprite.Aseprite.yaml:ro \ -w /build \ ${IMAGE_NAME} \ sh -c "flatpak-builder --disable-rofiles-fuse --state-dir=/root/.local/share/flatpak-builder --ccache --force-clean build-dir com.aseprite.Aseprite.yaml --repo=repo" # Create the Flatpak bundle from the repo built in the previous step .PHONY: create-bundle create-bundle: run-flatpak-builder @echo "--- Creating Flatpak bundle ---" @docker run \ --rm \ --privileged \ --device /dev/fuse \ -v ${BUILD_DIR}:/build \ -w /build \ ${IMAGE_NAME} \ sh -c "flatpak build-bundle repo aseprite.flatpak com.aseprite.Aseprite" # Copy the final bundle from the intermediate directory to the output directory .PHONY: extract-flatpak extract-flatpak: create-bundle @echo "--- Copying Flatpak bundle to target directory ---" @mkdir -p ${TARGET_DIR} @cp ${BUILD_DIR}/aseprite.flatpak ${OUTPUT_FILE} @echo "Aseprite Flatpak bundle is in ${OUTPUT_FILE}" # Prepare build target: Prepare sources, build Docker image .PHONY: prepare prepare: prepare-sources build-image @echo "--- Prepare complete ---" # Main build target: Run builder, create bundle, extract .PHONY: build build: run-flatpak-builder create-bundle extract-flatpak @echo "--- Build complete ---" # --- Utility Targets --- # Clean up the output and intermediate build directories .PHONY: clean clean: @echo "--- Cleaning up ---" @rm -rf ${TARGET_DIR} @rm -rf ${BUILD_DIR} @echo "Cleanup complete." # Deep clean - removes all caches as well .PHONY: deep-clean deep-clean: clean @echo "--- Deep cleaning (including caches) ---" @rm -rf ${FLATPAK_STATE_DIR} @rm -rf ${FLATPAK_CACHE_DIR} @echo "Deep cleanup complete."