# Use Arch Linux as the base image FROM archlinux:latest # Update system and install necessary dependencies using pacman # Includes base-devel (common build tools), git, python, cmake, ninja, curl, unzip, # and development libraries for X11, GL, fontconfig, and Skia dependencies. RUN pacman -Syu --noconfirm \ base-devel \ git \ python \ cmake \ ninja \ curl \ unzip \ libx11 \ libxcursor \ libxi \ mesa \ fontconfig \ expat \ icu \ libjpeg-turbo \ libpng \ libwebp \ zlib \ freetype2 \ harfbuzz \ & yes | pacman -Scc # Set the working directory WORKDIR /app # Copy the pre-downloaded source code into the image # This assumes prepare_sources.sh has been run locally first COPY ./src /src # Set PATH for depot_tools ENV PATH="/src/depot_tools:${PATH}" # Initialize depot_tools within the container environment # This ensures gn and other tools are correctly set up RUN update_depot_tools # --- Compile Skia --- WORKDIR /src/skia # Skia dependencies (including gn) are now synced locally by prepare_sources.sh # Skia system dependencies are handled by system packages installed via pacman # Generate Skia build files using Arch's system libraries # Note: Changed skia_use_system_* flags to true and enabled AVX RUN /src/depot_tools/gn gen out/Release-x64 --args='is_debug=false is_official_build=true skia_use_system_expat=true skia_use_system_icu=true skia_use_system_libjpeg_turbo=true skia_use_system_libpng=true skia_use_system_libwebp=true skia_use_system_zlib=true skia_use_sfntly=false skia_use_freetype=true skia_use_harfbuzz=true skia_pdf_subset_harfbuzz=true skia_use_system_freetype2=true skia_use_system_harfbuzz=true extra_cflags=["-mavx"] extra_cxxflags=["-mavx"]' # Compile Skia RUN ninja -C out/Release-x64 skia modules # --- Compile Aseprite --- WORKDIR /src/aseprite RUN mkdir -p build WORKDIR /src/aseprite/build # Generate Aseprite build files # Pointing to the Skia build output within the image and enabling AVX RUN cmake \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_CXX_FLAGS="-mavx" \ -DLAF_BACKEND=skia \ -DSKIA_DIR=/src/skia \ -DSKIA_LIBRARY_DIR=/src/skia/out/Release-x64 \ -DSKIA_LIBRARY=/src/skia/out/Release-x64/libskia.a \ -DLIBJPEG_TURBO_LIBRARY=/usr/lib/libjpeg.so \ -DCMAKE_EXE_LINKER_FLAGS="-lfreetype" \ -G Ninja \ .. # Compile Aseprite RUN ninja aseprite # --- Prepare Output --- # Create a target directory and copy the final binaries/assets RUN mkdir -p /target/aseprite/build/bin RUN cp /src/aseprite/build/bin/aseprite /target/aseprite/build/bin/ # Ensure data directory exists before copying into it RUN mkdir -p /target/aseprite/build/bin/data RUN cp /src/aseprite/build/bin/data/* /target/aseprite/build/bin/data/ # Expose a volume for the output (optional, as Makefile will copy) VOLUME /target # Set final working directory (optional) WORKDIR /target