# Nintendo 3DS Development Container # Based on official devkitPro devkitARM image # Contains ALL available 3DS portlibs for complete development environment FROM devkitpro/devkitarm:20251231 LABEL maintainer="nextcloud-share contributors" LABEL description="Complete Nintendo 3DS development environment with all available portlibs" LABEL org.opencontainers.image.base.name="devkitpro/devkitarm:20251231" LABEL org.opencontainers.image.title="Nintendo 3DS Development Container" LABEL platform="3ds" LABEL toolchain="devkitARM" # Update package database RUN dkp-pacman -Sy --noconfirm # Install 3DS development group (includes devkitARM, libctru, citro3d, citro2d, tools) RUN dkp-pacman -S --needed --noconfirm 3ds-dev # Install ALL available 3DS portlibs (alphabetical for clarity) # List verified from devkitpro/devkitarm:20251231 on 2026-01-27 RUN dkp-pacman -S --needed --noconfirm \ 3ds-box2d \ 3ds-bulletphysics \ 3ds-bzip2 \ 3ds-curl \ 3ds-flac \ 3ds-flite \ 3ds-freetype \ 3ds-giflib \ 3ds-jansson \ 3ds-libarchive \ 3ds-libconfig \ 3ds-libfribidi \ 3ds-libiconv \ 3ds-libid3tag \ 3ds-libjpeg-turbo \ 3ds-libjson-c \ 3ds-liblua51 \ 3ds-liblzma \ 3ds-libmad \ 3ds-libmodplug \ 3ds-libogg \ 3ds-libopus \ 3ds-libpng \ 3ds-libsidplay \ 3ds-libtheora \ 3ds-libvorbisidec \ 3ds-libxmp \ 3ds-libzstd \ 3ds-lz4 \ 3ds-mbedtls \ 3ds-mikmod \ 3ds-mpg123 \ 3ds-opusfile \ 3ds-physfs \ 3ds-sdl \ 3ds-sdl_gfx \ 3ds-sdl_image \ 3ds-sdl_mixer \ 3ds-sdl_ttf \ 3ds-tinyxml2 \ 3ds-wildmidi \ 3ds-wslay \ 3ds-yaml_cpp \ 3ds-zlib && \ dkp-pacman -Scc --noconfirm # Install system build tools for development # Note: devkitarm-cmake is already installed as part of 3ds-dev group RUN apt-get update && apt-get install -y --no-install-recommends \ ccache \ ninja-build \ python3 \ python3-pip \ curl \ wget \ jq \ git \ zip \ unzip && \ rm -rf /var/lib/apt/lists/* # Configure ccache for faster rebuilds ENV CCACHE_DIR=/project/.ccache ENV CCACHE_MAXSIZE=2G # Add devkitARM compiler to PATH ENV PATH="${DEVKITARM}/bin:/usr/lib/ccache:${PATH}" # Build and install bannertool for CIA file creation RUN git clone --recursive https://github.com/diasurgical/bannertool.git /tmp/bannertool && \ cd /tmp/bannertool && \ make && \ cp output/linux-x86_64/bannertool /opt/devkitpro/tools/bin/ && \ chmod +x /opt/devkitpro/tools/bin/bannertool && \ cd / && \ rm -rf /tmp/bannertool # Build and install makerom and ctrtool for CIA file creation RUN git clone https://github.com/3DSGuy/Project_CTR.git /tmp/Project_CTR && \ cd /tmp/Project_CTR/makerom && \ make deps && make && \ cp bin/makerom /opt/devkitpro/tools/bin/ && \ chmod +x /opt/devkitpro/tools/bin/makerom && \ cd /tmp/Project_CTR/ctrtool && \ make deps && make && \ cp bin/ctrtool /opt/devkitpro/tools/bin/ && \ chmod +x /opt/devkitpro/tools/bin/ctrtool && \ cd / && \ rm -rf /tmp/Project_CTR # Set working directory WORKDIR /project # Verify installation RUN arm-none-eabi-gcc --version && \ make --version && \ cmake --version # Show installed 3DS packages on container startup CMD ["bash", "-c", "echo 'Nintendo 3DS Development Container Ready' && echo 'devkitARM:' && arm-none-eabi-gcc --version | head -n1 && echo '' && echo '3DS packages installed:' && dkp-pacman -Qq | grep '^3ds-' | wc -l && echo 'packages' && bash"]