builder-cross-dos32/Dockerfile

139 lines
8.0 KiB
Docker

# SPDX-FileCopyrightText: 2023 - 2024 Daniel Wolf <nephatrine@gmail.com>
#
# SPDX-License-Identifier: ISC
FROM code.nephatrine.net/nephnet/nxb-debian:latest
LABEL maintainer="Daniel Wolf <nephatrine@gmail.com>"
ARG DEBIAN_FRONTEND=noninteractive
RUN echo "====== INSTALL BUILD PACKAGES ======" \
&& apt-get update \
&& apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends autoconf2.69 automake1.11 \
&& apt-get autoremove -y && apt-get clean \
&& update-alternatives --set automake /usr/bin/automake-1.11 \
&& ln -s /usr/bin/autoconf2.69 /usr/local/bin/autoconf \
&& ln -s /usr/bin/autoheader2.69 /usr/local/bin/autoheader \
&& ln -s /usr/bin/autom4te2.69 /usr/local/bin/autom4te \
&& ln -s /usr/bin/autoreconf2.69 /usr/local/bin/autoreconf \
&& ln -s /usr/bin/autoscan2.69 /usr/local/bin/autoscan \
&& ln -s /usr/bin/autoupdate2.69 /usr/local/bin/autoupdate \
&& ln -s /usr/bin/ifnames2.69 /usr/local/bin/ifnames
ENV DJGPP_TOOLCHAIN=/opt/djgpp
ENV DJDIR=${DJGPP_TOOLCHAIN}/i586-pc-msdosdjgpp DJGPP_PREFIX=${DJGPP_TOOLCHAIN}
ARG GCC_GNU_VERSION=12.2.0
ARG GCC_DJGPP_VERSION=12.20
ARG BINTUILS_GNU_VERISON=2.35.1
ARG BINTUILS_DJGPP_VERSION=2351
RUN echo "====== BUILD DJGPP ======" \
&& echo "=== DOWNLOAD PACKAGES ===" \
&& apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends groff libgmp3-dev libisl-dev libmpc-dev libmpfr-dev \
&& git -C ${HOME} clone --single-branch --depth=1 https://github.com/jwt27/djgpp-cvs.git \
&& wget -qO /tmp/djcross-gcc-${GCC_GNU_VERSION}.tar.bz2 http://delorie.com/pub/djgpp/rpms/djcross-gcc-${GCC_GNU_VERSION}/djcross-gcc-${GCC_GNU_VERSION}.tar.bz2 \
&& wget -qO /tmp/gcc-${GCC_GNU_VERSION}.tar.xz http://ftpmirror.gnu.org/gcc/gcc-${GCC_GNU_VERSION}/gcc-${GCC_GNU_VERSION}.tar.xz \
&& wget -qO /tmp/bnu${BINTUILS_DJGPP_VERSION}s.zip http://delorie.com/pub/djgpp/current/v2gnu/bnu${BINTUILS_DJGPP_VERSION}s.zip \
&& cd ${HOME} && tar -xf /tmp/djcross-gcc-${GCC_GNU_VERSION}.tar.bz2 \
&& echo "=== BUILD BINUTILS ===" \
&& cd ${HOME}/djcross-gcc-${GCC_GNU_VERSION} \
&& unzip -oq /tmp/bnu${BINTUILS_DJGPP_VERSION}s.zip \
&& chmod +x ./gnu/binutils-${BINTUILS_GNU_VERISON}/install-sh ./gnu/binutils-${BINTUILS_GNU_VERISON}/missing ./gnu/binutils-${BINTUILS_GNU_VERISON}/configure \
&& mkdir /tmp/build-binutils && cd /tmp/build-binutils \
&& ${HOME}/djcross-gcc-${GCC_GNU_VERSION}/gnu/binutils-${BINTUILS_GNU_VERISON}/configure \
--target=i586-pc-msdosdjgpp \
--prefix=${DJGPP_TOOLCHAIN} \
--disable-werror \
--disable-nls \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) configure-bfd \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -C bfd stmp-lcoff-h \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -s check \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) install \
&& echo "=== BUILD STUBIFY ===" \
&& cd ${HOME}/djgpp-cvs/src \
&& make misc.exe ../hostbin makemake.exe \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -C djasm native \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -C stub native \
&& mkdir -p ${DJGPP_TOOLCHAIN}/bin ${DJDIR}/sys-include \
&& cp -nrv ../include/. ${DJDIR}/sys-include/ \
&& cp -pv ../hostbin/djasm.exe ${DJGPP_TOOLCHAIN}/bin/i586-pc-msdosdjgpp-djasm && ln -s i586-pc-msdosdjgpp-djasm ${DJGPP_TOOLCHAIN}/bin/djasm \
&& cp -pv ../hostbin/stubedit.exe ${DJGPP_TOOLCHAIN}/bin/i586-pc-msdosdjgpp-stubedit && ln -s i586-pc-msdosdjgpp-stubedit ${DJGPP_TOOLCHAIN}/bin/stubedit \
&& cp -pv ../hostbin/stubify.exe ${DJGPP_TOOLCHAIN}/bin/i586-pc-msdosdjgpp-stubify && ln -s i586-pc-msdosdjgpp-stubify ${DJGPP_TOOLCHAIN}/bin/stubify \
&& export PATH=${DJGPP_TOOLCHAIN}/bin:$PATH \
&& echo "=== BUILD GCC (Stage 1) ===" \
&& cd ${HOME}/djcross-gcc-${GCC_GNU_VERSION} \
&& mv /tmp/gcc-${GCC_GNU_VERSION}.tar.xz ./ \
&& sh ./unpack-gcc.sh --no-djgpp-source gcc-${GCC_GNU_VERSION}.tar.xz \
&& mkdir /tmp/build-gcc && cd /tmp/build-gcc \
&& ${HOME}/djcross-gcc-${GCC_GNU_VERSION}/gnu/gcc-${GCC_DJGPP_VERSION}/configure \
--target=i586-pc-msdosdjgpp \
--prefix=${DJGPP_TOOLCHAIN} \
--disable-nls \
--enable-libquadmath-support \
--enable-version-specific-runtime-libs \
--enable-fat \
--enable-lto \
--enable-libstdcxx-filesystem-ts \
--enable-languages=c,c++ \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) all-gcc \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) install-gcc \
&& echo "=== BUILD LIBC ===" \
&& cd ${HOME}/djgpp-cvs/src \
&& sed -i 's/Werror/Wno-error/g' makefile.cfg \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) config \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -C mkdoc \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -C libc \
&& mkdir -p ${DJDIR}/lib \
&& cp -nrv ../lib/. ${DJDIR}/lib/ \
&& cp -pv ../hostbin/mkdoc.exe ${DJGPP_TOOLCHAIN}/bin/i586-pc-msdosdjgpp-mkdoc && ln -s i586-pc-msdosdjgpp-mkdoc ${DJGPP_TOOLCHAIN}/bin/mkdoc \
&& echo "=== BUILD GCC (Stage 2) ===" \
&& cd /tmp/build-gcc \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -s check-gcc \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) install-strip \
&& echo "=== BUILD DJGPP ===" \
&& cd ${HOME}/djgpp-cvs/src \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -C utils native \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -C dxe native \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -C dxe -f makefile.dxe \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -C debug \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -C libemu \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -C libm \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -C docs \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -C ../zoneinfo/src \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -f makempty \
&& sed -i 's~#include <io.h>~//#include <io.h>~g' stub/exe2coff.c \
&& sed -i 's/O_BINARY/0/g' stub/exe2coff.c \
&& gcc -o ../hostbin/exe2coff.exe stub/exe2coff.c \
&& mkdir -p ${DJDIR}/share/info ${DJDIR}/share/zoneinfo \
&& cp -nrv ../lib/. ${DJDIR}/lib/ \
&& cp -nrv ../info/. ${DJDIR}/share/info/ \
&& cp -nrv ../zoneinfo/. ${DJDIR}/share/zoneinfo/ \
&& rm -rf ${DJDIR}/share/zoneinfo/src \
&& cp -pv ../hostbin/bin2h.exe ${DJGPP_TOOLCHAIN}/bin/i586-pc-msdosdjgpp-bin2h && ln -s i586-pc-msdosdjgpp-bin2h ${DJGPP_TOOLCHAIN}/bin/bin2h \
&& cp -pv ../hostbin/exe2coff.exe ${DJGPP_TOOLCHAIN}/bin/i586-pc-msdosdjgpp-exe2coff && ln -s i586-pc-msdosdjgpp-exe2coff ${DJGPP_TOOLCHAIN}/bin/exe2coff \
&& cp -pv ../hostbin/dxegen.exe ${DJGPP_TOOLCHAIN}/bin/i586-pc-msdosdjgpp-dxegen && ln -s i586-pc-msdosdjgpp-dxegen ${DJGPP_TOOLCHAIN}/bin/dxegen \
&& cp -pv ../hostbin/zic.exe ${DJGPP_TOOLCHAIN}/bin/i586-pc-msdosdjgpp-zic && ln -s i586-pc-msdosdjgpp-zic ${DJGPP_TOOLCHAIN}/bin/zic \
&& cp -pv dxe/dxe3gen ${DJGPP_TOOLCHAIN}/bin/i586-pc-msdosdjgpp-dxe3gen && ln -s i586-pc-msdosdjgpp-dxe3gen ${DJGPP_TOOLCHAIN}/bin/dxe3gen \
&& cp -pv dxe/dxe3res ${DJGPP_TOOLCHAIN}/bin/i586-pc-msdosdjgpp-dxe3res && ln -s i586-pc-msdosdjgpp-dxe3res ${DJGPP_TOOLCHAIN}/bin/dxe3res \
&& echo "=== PERFORM CLEANUP ===" \
&& apt-get remove -y groff libgmp3-dev libisl-dev libmpc-dev libmpfr-dev \
&& apt-get autoremove -y && apt-get clean \
&& cd /tmp && rm -rf /tmp/* /var/tmp/* ${HOME}/djgpp-cvs ${HOME}/djcross-gcc-${GCC_GNU_VERSION}
ENV PATH=${DJGPP_TOOLCHAIN}/bin:$PATH
RUN echo "====== UNZIP CWSDPMI ======" \
&& wget -qO /tmp/csdpmi7b.zip http://delorie.com/pub/djgpp/current/v2misc/csdpmi7b.zip \
&& cd ${DJGPP_TOOLCHAIN} && unzip /tmp/csdpmi7b.zip && rm -rf /tmp/* /var/tmp/*
COPY override /
RUN echo "====== TEST TOOLCHAIN ======" \
&& cp -nrvs ${DJGPP_TOOLCHAIN}/share/cmake/Modules/Platform/. /usr/share/cmake-*/Modules/Platform/ \
&& git -C ${HOME} clone --single-branch --depth=1 https://code.nephatrine.net/nephatrine/hello-test.git \
&& mkdir /tmp/build-i686 && cd /tmp/build-i686 \
&& nxbuild-dos-i686 -GNinja ${HOME}/hello-test \
&& ninja && file HelloTest.exe \
&& cd /tmp && rm -rf /tmp/* /var/tmp/* ${HOME}/hello-test