1
0

103 lines
3.4 KiB
Makefile

# --- 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
# Whether to use a clean build each time (set to empty to disable)
# CLEAN_BUILD := --force-clean
# --- 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 ${CLEAN_BUILD} build-dir com.aseprite.Aseprite.yaml --repo=repo && if [ -d 'build-dir/files/third_party/externals/emsdk' ]; then rm -rf build-dir/files/third_party/externals/emsdk; fi"
# 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."
# Force clean build by setting CLEAN_BUILD variable
.PHONY: force-clean-build
force-clean-build:
@$(MAKE) CLEAN_BUILD="--force-clean" build