139 lines
8.0 KiB
Docker
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
|