# Use Fedora 41 as the base image FROM fedora:41 # Install necessary dependencies using dnf # Includes build tools (make, gcc-c++), git, python, cmake, ninja, curl, unzip, # and development libraries for X11, GL, fontconfig, and Skia dependencies. RUN dnf install -y \ make \ gcc-c++ \ cmake \ ninja-build \ git \ curl \ unzip \ python3 \ libX11-devel \ libXcursor-devel \ libXi-devel \ mesa-libGL-devel \ fontconfig-devel \ expat-devel \ libicu-devel \ libjpeg-turbo-devel \ libpng-devel \ libwebp-devel \ zlib-devel \ freetype-devel \ harfbuzz-devel \ # Clean up dnf cache && dnf clean all # 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 dnf # Generate Skia build files using Fedora'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/lib64/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