Files
llvm-mingw/Dockerfile.zefie
T

479 lines
22 KiB
Docker

# ==============================================================================
# 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 <wchar.h>' 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"]