# ============================================================================== # Base Setup & Package Dependencies # ============================================================================== FROM ubuntu:26.04 RUN apt-get update -qq && \ DEBIAN_FRONTEND="noninteractive" apt-get install -qqy --no-install-recommends \ automake \ autopoint \ build-essential \ bzip2 \ ca-certificates \ cmake \ curl \ file \ gettext \ git \ less \ libtool \ meson \ nasm \ ninja-build \ pkg-config \ python3 \ qt6-base-dev \ sudo \ unzip \ vim-tiny \ wget \ zip && \ apt-get clean -y && \ rm -rf /var/lib/apt/lists/* RUN echo "ubuntu ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ubuntu && \ chmod 0440 /etc/sudoers.d/ubuntu RUN git config --global user.name "LLVM MinGW" && \ git config --global user.email root@localhost # ============================================================================== # LLVM-MinGW Core Toolchain Build # ============================================================================== WORKDIR /build ENV TOOLCHAIN_PREFIX=/opt/llvm-mingw \ TARGET_TRIPLETS="aarch64-w64-mingw32 armv7-w64-mingw32 i686-w64-mingw32 x86_64-w64-mingw32" ARG TOOLCHAIN_ARCHS="i686 x86_64 armv7 aarch64" ARG DEFAULT_CRT="ucrt" ARG CFGUARD_ARGS="--enable-cfguard" COPY build-llvm.sh \ build-lldb-mi.sh \ strip-llvm.sh \ install-wrappers.sh \ build-mingw-w64.sh \ build-mingw-w64-tools.sh \ build-compiler-rt.sh \ build-libcxx.sh \ build-mingw-w64-libraries.sh \ build-openmp.sh \ ./ COPY wrappers/*.sh wrappers/*.c wrappers/*.h wrappers/*.cfg ./wrappers/ RUN ./build-llvm.sh "$TOOLCHAIN_PREFIX" && \ ./build-lldb-mi.sh "$TOOLCHAIN_PREFIX" && \ ./strip-llvm.sh "$TOOLCHAIN_PREFIX" && \ ./install-wrappers.sh "$TOOLCHAIN_PREFIX" && \ ./build-mingw-w64.sh "$TOOLCHAIN_PREFIX" --with-default-msvcrt=$DEFAULT_CRT $CFGUARD_ARGS && \ ./build-mingw-w64-tools.sh "$TOOLCHAIN_PREFIX" && \ ./build-compiler-rt.sh "$TOOLCHAIN_PREFIX" $CFGUARD_ARGS && \ ./build-libcxx.sh "$TOOLCHAIN_PREFIX" $CFGUARD_ARGS && \ ./build-mingw-w64-libraries.sh "$TOOLCHAIN_PREFIX" $CFGUARD_ARGS && \ ./build-compiler-rt.sh "$TOOLCHAIN_PREFIX" --build-sanitizers && \ ./build-openmp.sh "$TOOLCHAIN_PREFIX" $CFGUARD_ARGS && \ rm -rf /build/* # ============================================================================== # Environment & Cross-Toolchain Wrappers Setup # ============================================================================== ENV PATH="/opt/llvm-mingw/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" WORKDIR /src COPY --chmod=0644 cmake/aarch64-w64-mingw32.cmake /opt/llvm-mingw/aarch64-w64-mingw32/llvm-mingw.cmake COPY --chmod=0644 cmake/armv7-w64-mingw32.cmake /opt/llvm-mingw/armv7-w64-mingw32/llvm-mingw.cmake COPY --chmod=0644 cmake/i686-w64-mingw32.cmake /opt/llvm-mingw/i686-w64-mingw32/llvm-mingw.cmake COPY --chmod=0644 cmake/x86_64-w64-mingw32.cmake /opt/llvm-mingw/x86_64-w64-mingw32/llvm-mingw.cmake COPY --chmod=0755 custom/wrapper.sh /opt/llvm-mingw/wrapper.sh COPY --chmod=0644 custom/bzip2.pc /src/bzip2.pc COPY --chmod=0644 patches/bzip2.patch /src/bzip2.patch # ============================================================================== # Third-Party Libraries (MinGW Target Builds) # ============================================================================== # --- bzip2 --- ENV BZIP2_VERSION=1.0.8 RUN wget "https://github.com/libarchive/bzip2/archive/refs/tags/bzip2-${BZIP2_VERSION}.tar.gz" -O "bzip2-${BZIP2_VERSION}.tar.gz" && \ tar -zxf "bzip2-${BZIP2_VERSION}.tar.gz" && \ rm -f "bzip2-${BZIP2_VERSION}.tar.gz" && \ mv "bzip2-bzip2-${BZIP2_VERSION}" "bzip2-${BZIP2_VERSION}" && \ cd "bzip2-${BZIP2_VERSION}" && \ patch -p1 < /src/bzip2.patch && \ for t in $TARGET_TRIPLETS; do \ mkdir -p "${TOOLCHAIN_PREFIX}/${t}/lib/pkgconfig" && \ make clean && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target "${t}" make libbz2.a -j$(nproc) && \ cp -fv libbz2.a "${TOOLCHAIN_PREFIX}/${t}/lib/" && \ chmod a+r "${TOOLCHAIN_PREFIX}/${t}/lib/libbz2.a" && \ cp -fv /src/bzip2.pc "${TOOLCHAIN_PREFIX}/${t}/lib/pkgconfig/" && \ sed -i "s|/opt/mingw32-xp/i686-w64-mingw32|${TOOLCHAIN_PREFIX}/${t}|" "${TOOLCHAIN_PREFIX}/${t}/lib/pkgconfig/bzip2.pc"; \ done && \ cd /src && \ rm -f bzip2.pc bzip2.patch && \ rm -rf "bzip2-${BZIP2_VERSION}" && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- zlib --- ENV ZLIB_VERSION=1.3.2 RUN wget "https://zlib.net/zlib-${ZLIB_VERSION}.tar.gz" && \ tar -zxf "zlib-${ZLIB_VERSION}.tar.gz" && \ rm -f "zlib-${ZLIB_VERSION}.tar.gz" && \ cd "zlib-${ZLIB_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh -DZLIB_BUILD_TESTING=OFF && \ cd /src && \ rm -rf "zlib-${ZLIB_VERSION}" && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- openssl --- COPY patches/openssl4.patch /src/openssl4.patch ENV OPENSSL_VERSION=4.0.3 RUN wget "https://github.com/openssl/openssl/releases/download/openssl-${OPENSSL_VERSION}/openssl-${OPENSSL_VERSION}.tar.gz" -O "openssl-${OPENSSL_VERSION}.tar.gz" && \ tar -zxf "openssl-${OPENSSL_VERSION}.tar.gz" && \ rm -f "openssl-${OPENSSL_VERSION}.tar.gz" && \ cd "openssl-${OPENSSL_VERSION}" && \ patch -p1 < /src/openssl4.patch && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target armv7-w64-mingw32 ./Configure --prefix="${TOOLCHAIN_PREFIX}/armv7-w64-mingw32" -static mingwarm no-asm -march=armv7-a -D__ARM_MAX_ARCH__=8 && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target armv7-w64-mingw32 make -j$(nproc) && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target armv7-w64-mingw32 make install_sw install_dev && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target armv7-w64-mingw32 make clean && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target aarch64-w64-mingw32 ./Configure --prefix="${TOOLCHAIN_PREFIX}/aarch64-w64-mingw32" -static mingwarm64 && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target aarch64-w64-mingw32 make -j$(nproc) && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target aarch64-w64-mingw32 make install_sw install_dev && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target aarch64-w64-mingw32 make clean && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target i686-w64-mingw32 ./Configure --prefix="${TOOLCHAIN_PREFIX}/i686-w64-mingw32" -static no-asm mingw && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target i686-w64-mingw32 make -j$(nproc) && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target i686-w64-mingw32 make install_sw install_dev && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target i686-w64-mingw32 make clean && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target x86_64-w64-mingw32 ./Configure --prefix="${TOOLCHAIN_PREFIX}/x86_64-w64-mingw32" -static mingw64 && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target x86_64-w64-mingw32 make -j$(nproc) && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target x86_64-w64-mingw32 make install_sw install_dev && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target x86_64-w64-mingw32 make clean && \ cd /src && \ rm -rf "openssl-${OPENSSL_VERSION}" openssl4.patch && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- ncurses --- ENV NCURSES_VERSION=6.6 ENV NCURSES_SNAPSHOT_COMMIT=26ceb3cbd343d2e503ca21d90077143a12727c22 RUN git clone --depth=1 --revision "${NCURSES_SNAPSHOT_COMMIT}" "https://github.com/ThomasDickey/ncurses-snapshots.git" "ncurses-${NCURSES_VERSION}" && \ cd "ncurses-${NCURSES_VERSION}" && \ sed -i '1i #include ' ncurses/build.priv.h && \ ${TOOLCHAIN_PREFIX}/wrapper.sh \ --with-fallbacks=ansi,xterm,xterm-256color \ --disable-database \ --enable-term-driver \ --with-term-driver=win32con \ --enable-widec \ --enable-termcap \ --disable-ext-colors \ --disable-ext-mouse \ --disable-reentrant \ --disable-manpages \ --without-ada \ --without-cxx \ --without-cxx-binding \ --without-progs \ --without-tests \ --disable-stripping \ --disable-db-install \ --disable-shared \ --enable-static \ --with-normal \ --without-manpages \ CFLAGS="-DNCURSES_STATIC" && \ cd /src && \ rm -rf "ncurses-${NCURSES_VERSION}" && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- libpng --- ENV LIBPNG_VERSION=1.6.58 RUN wget "https://sourceforge.net/projects/libpng/files/libpng16/${LIBPNG_VERSION}/libpng-${LIBPNG_VERSION}.tar.xz/download" -O "libpng-${LIBPNG_VERSION}.tar.xz" && \ tar -Jxf "libpng-${LIBPNG_VERSION}.tar.xz" && \ rm -f "libpng-${LIBPNG_VERSION}.tar.xz" && \ cd "libpng-${LIBPNG_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --autotools --enable-static --disable-shared && \ cd /src && \ rm -rf "libpng-${LIBPNG_VERSION}" && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- brotli --- ENV BROTLI_VERSION=1.2.1 RUN wget "https://github.com/google/brotli/archive/refs/tags/v${BROTLI_VERSION}.tar.gz" && \ tar -zxf "v${BROTLI_VERSION}.tar.gz" && \ rm -f "v${BROTLI_VERSION}.tar.gz" && \ cd "brotli-${BROTLI_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --cmake -DBUILD_SHARED_LIBS=OFF && \ cd /src && \ rm -rf "brotli-${BROTLI_VERSION}" && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- freetype --- ENV FREETYPE_VERSION=2.15.0 RUN wget "https://sourceforge.net/projects/freetype/files/freetype2/${FREETYPE_VERSION}/freetype-${FREETYPE_VERSION}.tar.xz/download" -O "freetype-${FREETYPE_VERSION}.tar.xz" && \ tar -Jxf "freetype-${FREETYPE_VERSION}.tar.xz" && \ rm -f "freetype-${FREETYPE_VERSION}.tar.xz" && \ cd "freetype-${FREETYPE_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --cmake && \ cd /src && \ rm -rf "freetype-${FREETYPE_VERSION}" build-freetype && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- harfbuzz --- ENV HB_VERSION=15.0.0 RUN wget "https://github.com/harfbuzz/harfbuzz/releases/download/${HB_VERSION}/harfbuzz-${HB_VERSION}.tar.xz" && \ tar -Jxf "harfbuzz-${HB_VERSION}.tar.xz" && \ rm -f "harfbuzz-${HB_VERSION}.tar.xz" && \ cd "harfbuzz-${HB_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh \ -Dfreetype=enabled \ -Ddefault_library=static \ -Dcpp_std=c++17 \ -Dtests=disabled \ -Ddocs=disabled \ -Dutilities=disabled && \ cd /src && \ rm -rf "harfbuzz-${HB_VERSION}" build-hb hb.patch && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- rebuild freetype (with harfbuzz support enabled) --- RUN wget "https://sourceforge.net/projects/freetype/files/freetype2/${FREETYPE_VERSION}/freetype-${FREETYPE_VERSION}.tar.xz/download" -O "freetype-${FREETYPE_VERSION}.tar.xz" && \ tar -Jxf "freetype-${FREETYPE_VERSION}.tar.xz" && \ rm -f "freetype-${FREETYPE_VERSION}.tar.xz" && \ cd "freetype-${FREETYPE_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --cmake && \ cd /src && \ rm -rf "freetype-${FREETYPE_VERSION}" build-freetype && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- SDL3 --- ENV SDL_VERSION=3.4.20 RUN wget "https://github.com/libsdl-org/SDL/releases/download/release-${SDL_VERSION}/SDL3-${SDL_VERSION}.tar.gz" && \ tar -zxf "SDL3-${SDL_VERSION}.tar.gz" && \ rm -f "SDL3-${SDL_VERSION}.tar.gz" && \ cd "SDL3-${SDL_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --cmake \ -DSDL_TESTS=OFF \ -DSDL_EXAMPLES=OFF \ -DBUILD_SHARED_LIBS=OFF && \ cd /src && \ rm -rf "SDL3-${SDL_VERSION}" build-sdl && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- SDL3_ttf --- ENV SDL_TTF_VERSION=3.2.2 RUN wget "https://github.com/libsdl-org/SDL_ttf/releases/download/release-${SDL_TTF_VERSION}/SDL3_ttf-${SDL_TTF_VERSION}.tar.gz" && \ tar -zxf "SDL3_ttf-${SDL_TTF_VERSION}.tar.gz" && \ rm -f "SDL3_ttf-${SDL_TTF_VERSION}.tar.gz" && \ cd "SDL3_ttf-${SDL_TTF_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --cmake \ -DBUILD_SHARED_LIBS=OFF \ -DSDLTTF_SAMPLES=OFF && \ cd /src && \ rm -rf "SDL3_ttf-${SDL_TTF_VERSION}" build-sdl_ttf && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- libogg --- ENV LIBOGG_VERSION=1.3.6 RUN wget "https://downloads.xiph.org/releases/ogg/libogg-${LIBOGG_VERSION}.tar.xz" && \ tar -Jxf "libogg-${LIBOGG_VERSION}.tar.xz" && \ rm -f "libogg-${LIBOGG_VERSION}.tar.xz" && \ cd "libogg-${LIBOGG_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --cmake -DBUILD_SHARED_LIBS=OFF && \ cd /src && \ rm -rf "libogg-${LIBOGG_VERSION}" build-libogg && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- libvorbis --- ENV LIBVORBIS_VERSION=1.3.7 RUN wget "https://downloads.xiph.org/releases/vorbis/libvorbis-${LIBVORBIS_VERSION}.tar.xz" && \ tar -Jxf "libvorbis-${LIBVORBIS_VERSION}.tar.xz" && \ rm -f "libvorbis-${LIBVORBIS_VERSION}.tar.xz" && \ cd "libvorbis-${LIBVORBIS_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_POLICY_VERSION_MINIMUM=3.5 && \ cd /src && \ rm -rf "libvorbis-${LIBVORBIS_VERSION}" build-libvorbis && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- mpg123 --- ENV MPG123_VERSION=1.33.7 RUN wget "https://www.mpg123.de/download/mpg123-${MPG123_VERSION}.tar.bz2" && \ tar -jxf "mpg123-${MPG123_VERSION}.tar.bz2" && \ rm -f "mpg123-${MPG123_VERSION}.tar.bz2" && \ cd "mpg123-${MPG123_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --enable-static --with-audio=dummy,win32 && \ cd /src && \ rm -rf "mpg123-${MPG123_VERSION}" build-mpg123 && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- lame --- COPY patches/lame-3.100.patch /src/lame.patch ENV LAME_VERSION=3.100 RUN wget "https://sourceforge.net/projects/lame/files/lame/${LAME_VERSION}/lame-${LAME_VERSION}.tar.gz/download" -O "lame-${LAME_VERSION}.tar.gz" && \ tar -zxf "lame-${LAME_VERSION}.tar.gz" && \ rm -f "lame-${LAME_VERSION}.tar.gz" && \ cd "lame-${LAME_VERSION}" && \ patch -p1 < /src/lame.patch && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --enable-static && \ cd /src && \ rm -rf "lame-${LAME_VERSION}" build-lame /src/lame.patch && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- opus --- ENV OPUS_VERSION=1.6.1 RUN wget "https://downloads.xiph.org/releases/opus/opus-${OPUS_VERSION}.tar.gz" && \ tar -zxf "opus-${OPUS_VERSION}.tar.gz" && \ rm -f "opus-${OPUS_VERSION}.tar.gz" && \ cd "opus-${OPUS_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target armv7-w64-mingw32 build_cmake -DOPUS_DISABLE_INTRINSICS=1 -DBUILD_SHARED_LIBS=OFF && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target aarch64-w64-mingw32 build_cmake -DOPUS_DISABLE_INTRINSICS=1 -DBUILD_SHARED_LIBS=OFF && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target i686-w64-mingw32 build_cmake -DBUILD_SHARED_LIBS=OFF && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target x86_64-w64-mingw32 build_cmake -DBUILD_SHARED_LIBS=OFF && \ cd /src && \ rm -rf "opus-${OPUS_VERSION}" build-opus && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- opusfile --- COPY patches/opusfile.patch /src/opusfile.patch ENV OPUSFILE_PACKAGE_VERSION=master RUN git clone --depth=1 --branch="${OPUSFILE_PACKAGE_VERSION}" https://github.com/xiph/opusfile.git && \ cd opusfile && \ patch -p1 < /src/opusfile.patch && \ for t in $TARGET_TRIPLETS; do \ ${TOOLCHAIN_PREFIX}/wrapper.sh --target "${t}" build_cmake \ -DBUILD_SHARED_LIBS=OFF \ -DOP_DISABLE_EXAMPLES=ON \ -DOP_DISABLE_DOCS=ON \ -DOP_DISABLE_HTTP=ON; \ done && \ cd /src && \ rm -rf opusfile build-opusfile /src/opusfile.patch && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- flac --- ENV FLAC_VERSION=1.5.0 RUN wget "https://github.com/xiph/flac/releases/download/${FLAC_VERSION}/flac-${FLAC_VERSION}.tar.xz" && \ tar -Jxf "flac-${FLAC_VERSION}.tar.xz" && \ rm -f "flac-${FLAC_VERSION}.tar.xz" && \ cd "flac-${FLAC_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --cmake \ -DBUILD_SHARED_LIBS=OFF \ -DINSTALL_MANPAGES=OFF \ -DBUILD_TESTING=OFF \ -DBUILD_EXAMPLES=OFF \ -DCMAKE_C_FLAGS="-DFLAC__NO_DLL=1" && \ cd /src && \ rm -rf "flac-${FLAC_VERSION}" build-flac && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- libsndfile --- ENV LIBSNDFILE_VERSION=1.2.2 RUN wget "https://github.com/libsndfile/libsndfile/releases/download/${LIBSNDFILE_VERSION}/libsndfile-${LIBSNDFILE_VERSION}.tar.xz" && \ tar -Jxf "libsndfile-${LIBSNDFILE_VERSION}.tar.xz" && \ rm -f "libsndfile-${LIBSNDFILE_VERSION}.tar.xz" && \ cd "libsndfile-${LIBSNDFILE_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --cmake \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_TESTING=OFF \ -DBUILD_PROGRAMS=OFF \ -DBUILD_EXAMPLES=OFF \ -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ -DCMAKE_C_FLAGS="-DFLAC__NO_DLL=1" && \ cd /src && \ rm -rf "libsndfile-${LIBSNDFILE_VERSION}" build-sndfile && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- libsamplerate --- ENV LIBSAMPLERATE_VERSION=0.2.2 RUN wget "https://github.com/libsndfile/libsamplerate/releases/download/${LIBSAMPLERATE_VERSION}/libsamplerate-${LIBSAMPLERATE_VERSION}.tar.xz" && \ tar -Jxf "libsamplerate-${LIBSAMPLERATE_VERSION}.tar.xz" && \ rm -f "libsamplerate-${LIBSAMPLERATE_VERSION}.tar.xz" && \ cd "libsamplerate-${LIBSAMPLERATE_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --cmake \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_TESTING=OFF \ -DLIBSAMPLERATE_EXAMPLES=OFF \ -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ -DCMAKE_C_FLAGS="-DFLAC__NO_DLL=1" && \ cd /src && \ rm -rf "libsamplerate-${LIBSAMPLERATE_VERSION}" build-samplerate && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- wxWidgets --- ENV WXWIDGETS_VERSION=3.3.4 RUN wget "https://github.com/wxWidgets/wxWidgets/releases/download/v${WXWIDGETS_VERSION}/wxWidgets-${WXWIDGETS_VERSION}.tar.bz2" && \ tar -jxf "wxWidgets-${WXWIDGETS_VERSION}.tar.bz2" && \ rm -f "wxWidgets-${WXWIDGETS_VERSION}.tar.bz2" && \ cd "wxWidgets-${WXWIDGETS_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --cmake \ -DBUILD_SHARED_LIBS=OFF \ -DwxUSE_DYNLIB_CLASS=OFF \ -DwxBUILD_OPTIMISE=ON \ -DwxBUILD_USE_STATIC_RUNTIME=ON \ -DwxBUILD_MONOLITHIC=ON && \ cd /src && \ rm -rf "wxWidgets-${WXWIDGETS_VERSION}" build-wxwidgets && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- raylib --- ENV RAYLIB_VERSION=6.0 RUN wget "https://github.com/raysan5/raylib/archive/refs/tags/${RAYLIB_VERSION}.zip" -O "raylib-${RAYLIB_VERSION}.zip" && \ unzip "raylib-${RAYLIB_VERSION}.zip" && \ rm -f "raylib-${RAYLIB_VERSION}.zip" && \ cd "raylib-${RAYLIB_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --cmake -DBUILD_SHARED_LIBS=OFF && \ cd /src && \ rm -rf "raylib-${RAYLIB_VERSION}" && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- SDL2 --- ENV SDL2_VERSION=2.32.10 RUN wget "https://github.com/libsdl-org/SDL/releases/download/release-${SDL2_VERSION}/SDL2-${SDL2_VERSION}.tar.gz" && \ tar -zxf "SDL2-${SDL2_VERSION}.tar.gz" && \ rm -f "SDL2-${SDL2_VERSION}.tar.gz" && \ cd "SDL2-${SDL2_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --cmake \ -DSDL_TESTS=OFF \ -DSDL_EXAMPLES=OFF \ -DBUILD_SHARED_LIBS=OFF && \ cd /src && \ rm -rf "SDL2-${SDL2_VERSION}" build-sdl && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- SDL2_ttf --- ENV SDL2_TTF_VERSION=2.24.0 RUN wget "https://github.com/libsdl-org/SDL_ttf/releases/download/release-${SDL2_TTF_VERSION}/SDL2_ttf-${SDL2_TTF_VERSION}.tar.gz" && \ tar -zxf "SDL2_ttf-${SDL2_TTF_VERSION}.tar.gz" && \ rm -f "SDL2_ttf-${SDL2_TTF_VERSION}.tar.gz" && \ cd "SDL2_ttf-${SDL2_TTF_VERSION}" && \ echo "target_link_libraries(SDL2_ttf PRIVATE brotlidec brotlicommon brotlienc png z)" >> CMakeLists.txt && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --cmake \ -DBUILD_SHARED_LIBS=OFF \ -DSDL2TTF_SAMPLES=OFF && \ cd /src && \ rm -rf "SDL2_ttf-${SDL2_TTF_VERSION}" build-sdl_ttf && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # --- freeglut --- ENV FREEGLUT_VERSION=3.8.0 RUN wget "https://sourceforge.net/projects/freeglut/files/freeglut/${FREEGLUT_VERSION}/freeglut-${FREEGLUT_VERSION}.tar.gz/download" -O "freeglut-${FREEGLUT_VERSION}.tar.gz" && \ tar -zxf "freeglut-${FREEGLUT_VERSION}.tar.gz" && \ rm -f "freeglut-${FREEGLUT_VERSION}.tar.gz" && \ cd "freeglut-${FREEGLUT_VERSION}" && \ ${TOOLCHAIN_PREFIX}/wrapper.sh --cmake -DBUILD_SHARED_LIBS=OFF && \ cd /src && \ rm -rf "freeglut-${FREEGLUT_VERSION}" build-freeglut && \ for f in $TARGET_TRIPLETS; do rm -rf "${TOOLCHAIN_PREFIX}/${f}/share/"{doc,man,info,examples}; done # ============================================================================== # Final Runtime Configuration # ============================================================================== USER ubuntu WORKDIR /src CMD ["/bin/bash"]