builder-debian/Dockerfile.oldstable

245 lines
15 KiB
Docker

# SPDX-FileCopyrightText: 2023 - 2024 Daniel Wolf <nephatrine@gmail.com>
#
# SPDX-License-Identifier: ISC
FROM debian:bullseye-slim AS debbase
ARG DEBIAN_FRONTEND=noninteractive
# hadolint ignore=DL3005,DL3008
RUN apt-get update \
&& apt-get -o Dpkg::Options::="--force-confnew" dist-upgrade -y \
&& apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends \
apt-utils bash ca-certificates curl file gawk git git-lfs jq libarchive-tools \
lsb-release npm p7zip-full subversion unzip wget zip \
&& update-ca-certificates \
&& rm -rf /tmp/* /var/tmp/*
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# hadolint ignore=DL3008
RUN apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends \
autoconf automake binutils bison build-essential cmake debsigs dpkg-dev flex \
libtool nasm ninja-build pkgconf texinfo \
&& apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends \
libcurl4-openssl-dev libicu-dev libssl-dev libxml2-dev libzstd-dev \
zlib1g-dev \
&& apt-get autoremove -y && apt-get clean \
&& rm -rf /tmp/* /var/tmp/*
# hadolint ignore=DL3008,DL3013
RUN apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends \
python3-pip \
&& apt-get autoremove -y && apt-get clean \
&& pip3 install --no-cache-dir cmakelang \
&& pip3 install --no-cache-dir reuse \
&& rm -rf /tmp/* /var/tmp/*
ENV CGO_ENABLED=1 CGO_CFLAGS="-D_LARGEFILE64_SOURCE" GOPATH=/go GO111MODULE=on
# hadolint ignore=DL3008
RUN apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends \
golang \
&& apt-get autoremove -y && apt-get clean \
&& go get github.com/mdomke/git-semver/v5@latest \
&& rm -rf /tmp/* /var/tmp/*
ENV PATH ${GOPATH}/bin:$PATH
# hadolint ignore=DL3008
RUN apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends \
doxygen-latex graphviz imagemagick librsvg2-bin mscgen python3-jinja2 \
python3-pygments \
&& apt-get autoremove -y && apt-get clean \
&& git -C "${HOME}" clone --single-branch --depth=1 https://github.com/mosra/m.css \
&& rm -rf "${HOME}"/m.css/documentation/test* \
&& mkdir /opt/m.css \
&& mv "${HOME}/m.css/documentation" /opt/m.css/bin && mv "${HOME}/m.css/COPYING" /opt/m.css/ \
&& mv "${HOME}/m.css/css" /opt/m.css/css && mv "${HOME}/m.css/plugins" /opt/m.css/plugins \
&& rm -rf /tmp/* /var/tmp/* "${HOME}/m.css"
ENV PATH=/opt/m.css/bin:$PATH
RUN DEBIAN_CODENAME="$(lsb_release -c | awk '{print $2}')" \
&& export DEBIAN_CODENAME \
&& if curl --output /dev/null --silent --fail -r 0-0 "https://code.nephatrine.net/api/packages/NephNET/debian/pool/${DEBIAN_CODENAME}/dists/Release"; then echo "Installing NephNET" \
&& curl https://code.nephatrine.net/api/packages/NephNET/debian/repository.key -o /etc/apt/keyrings/gitea-NephNET.asc \
&& echo "deb [signed-by=/etc/apt/keyrings/gitea-NephNET.asc] https://code.nephatrine.net/api/packages/NephNET/debian ${DEBIAN_CODENAME} main" >/etc/apt/sources.list.d/NephNET.list \
&& apt-get update; fi \
&& rm -rf /tmp/* /var/tmp/*
FROM debbase AS llvm
LABEL maintainer="Daniel Wolf <nephatrine@gmail.com>"
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
ENV LLVM_MAJOR=11
# hadolint ignore=DL3008
RUN DEBIAN_CODENAME="$(lsb_release -c | awk '{print $2}')" \
&& export DEBIAN_CODENAME \
&& if curl --output /dev/null --silent --fail -r 0-0 "https://apt.llvm.org/${DEBIAN_CODENAME}/dists/llvm-toolchain-${DEBIAN_CODENAME}-${LLVM_MAJOR}/Release"; then echo "Installing LLVM" \
&& curl https://apt.llvm.org/llvm-snapshot.gpg.key -o /etc/apt/trusted.gpg.d/apt.llvm.org.asc \
&& echo "deb http://apt.llvm.org/${DEBIAN_CODENAME}/ llvm-toolchain-${DEBIAN_CODENAME}-${LLVM_MAJOR} main" >/etc/apt/sources.list.d/LLVM.list \
&& apt-get update; fi \
&& apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends \
"llvm-${LLVM_MAJOR}-dev" "clang-${LLVM_MAJOR}" "clang-tools-${LLVM_MAJOR}" \
"libclang-common-${LLVM_MAJOR}-dev" "libclang-${LLVM_MAJOR}-dev" \
"clang-format-${LLVM_MAJOR}" "clang-tidy-${LLVM_MAJOR}" \
"libfuzzer-${LLVM_MAJOR}-dev" "lld-${LLVM_MAJOR}" "libc++-${LLVM_MAJOR}-dev" \
"libc++abi-${LLVM_MAJOR}-dev" "libomp-${LLVM_MAJOR}-dev" \
&& if [ ${LLVM_MAJOR} -gt 11 ]; then apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends \
"libclc-${LLVM_MAJOR}-dev" "libunwind-${LLVM_MAJOR}-dev"; fi \
&& if [ ${LLVM_MAJOR} -eq 14 ]; then apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends \
"libclang-rt-${LLVM_MAJOR}-dev" || true; fi \
&& if [ ${LLVM_MAJOR} -eq 14 ]; then apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends \
"libclang-rt-${LLVM_MAJOR}-dev" "libpolly-${LLVM_MAJOR}-dev" || true; fi \
&& if [ ${LLVM_MAJOR} -gt 14 ]; then apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends \
"libclang-rt-${LLVM_MAJOR}-dev" "libpolly-${LLVM_MAJOR}-dev"; fi \
&& apt-get autoremove -y && apt-get clean \
&& ls "/usr/lib/clang/${LLVM_MAJOR}" \
&& update-alternatives \
--install /usr/bin/llvm-config llvm-config "/usr/bin/llvm-config-${LLVM_MAJOR}" 100 \
--slave /usr/bin/bugpoint bugpoint "/usr/bin/bugpoint-${LLVM_MAJOR}" \
--slave /usr/bin/dsymutil dsymutil "/usr/bin/dsymutil-${LLVM_MAJOR}" \
--slave /usr/bin/llc llc "/usr/bin/llc-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-PerfectShuffle llvm-PerfectShuffle "/usr/bin/llvm-PerfectShuffle-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-addr2line llvm-addr2line "/usr/bin/llvm-addr2line-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-ar llvm-ar "/usr/bin/llvm-ar-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-as llvm-as "/usr/bin/llvm-as-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-bcanalyzer llvm-bcanalyzer "/usr/bin/llvm-bcanalyzer-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-bitcode-strip llvm-bitcode-strip "/usr/bin/llvm-bitcode-strip-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-c-test llvm-c-test "/usr/bin/llvm-c-test-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-cat llvm-cat "/usr/bin/llvm-cat-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-cfi-verify llvm-cfi-verify "/usr/bin/llvm-cfi-verify-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-cov llvm-cov "/usr/bin/llvm-cov-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-cvtres llvm-cvtres "/usr/bin/llvm-cvtres-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-cxxdump llvm-cxxdump "/usr/bin/llvm-cxxdump-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-cxxfilt llvm-cxxfilt "/usr/bin/llvm-cxxfilt-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-cxxmap llvm-cxxmap "/usr/bin/llvm-cxxmap-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-debuginfo-analyzer llvm-debuginfo-analyzer "/usr/bin/llvm-debuginfo-analyzer-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-debuginfod llvm-debuginfod "/usr/bin/llvm-debuginfod-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-debuginfod-find llvm-debuginfod-find "/usr/bin/llvm-debuginfod-find-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-diff llvm-diff "/usr/bin/llvm-diff-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-dis llvm-dis "/usr/bin/llvm-dis-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-dlltool llvm-dlltool "/usr/bin/llvm-dlltool-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-dwarfdump llvm-dwarfdump "/usr/bin/llvm-dwarfdump-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-dwarfutil llvm-dwarfutil "/usr/bin/llvm-dwarfutil-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-dwp llvm-dwp "/usr/bin/llvm-dwp-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-exegesis llvm-exegesis "/usr/bin/llvm-exegesis-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-extract llvm-extract "/usr/bin/llvm-extract-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-gsymutil llvm-gsymutil "/usr/bin/llvm-gsymutil-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-ifs llvm-ifs "/usr/bin/llvm-ifs-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-install-name-tool llvm-install-name-tool "/usr/bin/llvm-install-name-tool-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-jitlink llvm-jitlink "/usr/bin/llvm-jitlink-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-jitlink-executor llvm-jitlink-executor "/usr/bin/llvm-jitlink-executor-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-lib llvm-lib "/usr/bin/llvm-lib-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-libtool-darwin llvm-libtool-darwin "/usr/bin/llvm-libtool-darwin-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-link llvm-link "/usr/bin/llvm-link-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-lipo llvm-lipo "/usr/bin/llvm-lipo-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-lto llvm-lto "/usr/bin/llvm-lto-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-lto2 llvm-lto2 "/usr/bin/llvm-lto2-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-mc llvm-mc "/usr/bin/llvm-mc-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-mca llvm-mca "/usr/bin/llvm-mca-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-ml llvm-ml "/usr/bin/llvm-ml-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-modextract llvm-modextract "/usr/bin/llvm-modextract-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-mt llvm-mt "/usr/bin/llvm-mt-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-nm llvm-nm "/usr/bin/llvm-nm-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-objcopy llvm-objcopy "/usr/bin/llvm-objcopy-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-objdump llvm-objdump "/usr/bin/llvm-objdump-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-opt-report llvm-opt-report "/usr/bin/llvm-opt-report-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-otool llvm-otool "/usr/bin/llvm-otool-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-pdbutil llvm-pdbutil "/usr/bin/llvm-pdbutil-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-profdata llvm-profdata "/usr/bin/llvm-profdata-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-profgen llvm-profgen "/usr/bin/llvm-profgen-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-ranlib llvm-ranlib "/usr/bin/llvm-ranlib-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-rc llvm-rc "/usr/bin/llvm-rc-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-readelf llvm-readelf "/usr/bin/llvm-readelf-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-readobj llvm-readobj "/usr/bin/llvm-readobj-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-reduce llvm-reduce "/usr/bin/llvm-reduce-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-remark-size-diff llvm-remark-size-diff "/usr/bin/llvm-remark-size-diff-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-remarkutil llvm-remarkutil "/usr/bin/llvm-remarkutil-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-rtdyld llvm-rtdyld "/usr/bin/llvm-rtdyld-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-sim llvm-sim "/usr/bin/llvm-sim-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-size llvm-size "/usr/bin/llvm-size-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-split llvm-split "/usr/bin/llvm-split-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-stress llvm-stress "/usr/bin/llvm-stress-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-strings llvm-strings "/usr/bin/llvm-strings-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-strip llvm-strip "/usr/bin/llvm-strip-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-symbolizer llvm-symbolizer "/usr/bin/llvm-symbolizer-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-tapi-diff llvm-tapi-diff "/usr/bin/llvm-tapi-diff-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-tblgen llvm-tblgen "/usr/bin/llvm-tblgen-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-tli-checker llvm-tli-checker "/usr/bin/llvm-tli-checker-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-undname llvm-undname "/usr/bin/llvm-undname-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-windres llvm-windres "/usr/bin/llvm-windres-${LLVM_MAJOR}" \
--slave /usr/bin/llvm-xray llvm-xray "/usr/bin/llvm-xray-${LLVM_MAJOR}" \
--slave /usr/bin/obj2yaml obj2yaml "/usr/bin/obj2yaml-${LLVM_MAJOR}" \
--slave /usr/bin/opt opt "/usr/bin/opt-${LLVM_MAJOR}" \
--slave /usr/bin/sanstats sanstats "/usr/bin/sanstats-${LLVM_MAJOR}" \
--slave /usr/bin/verify-uselistorder verify-uselistorder "/usr/bin/verify-uselistorder-${LLVM_MAJOR}" \
--slave /usr/bin/yaml2obj yaml2obj "/usr/bin/yaml2obj-${LLVM_MAJOR}" \
&& update-alternatives \
--install /usr/bin/clang clang "/usr/bin/clang-${LLVM_MAJOR}" 100 \
--slave /usr/bin/clang++ clang++ "/usr/bin/clang++-${LLVM_MAJOR}" \
--slave /usr/bin/asan_symbolize asan_symbolize "/usr/bin/asan_symbolize-${LLVM_MAJOR}" \
--slave /usr/bin/clang-cpp clang-cpp "/usr/bin/clang-cpp-${LLVM_MAJOR}" \
&& update-alternatives \
--install /usr/bin/clang-format clang-format "/usr/bin/clang-format-${LLVM_MAJOR}" 100 \
--slave /usr/bin/clang-format-diff clang-format-diff "/usr/bin/clang-format-diff-${LLVM_MAJOR}" \
--slave /usr/bin/git-clang-format git-clang-format "/usr/bin/git-clang-format-${LLVM_MAJOR}" \
&& update-alternatives \
--install /usr/bin/clang-tidy clang-tidy "/usr/bin/clang-tidy-${LLVM_MAJOR}" 100 \
--slave /usr/bin/run-clang-tidy run-clang-tidy "/usr/bin/run-clang-tidy-${LLVM_MAJOR}" \
&& update-alternatives \
--install /usr/bin/lld lld "/usr/bin/lld-${LLVM_MAJOR}" 100 \
--slave /usr/bin/ld.lld ld.lld "/usr/bin/ld.lld-${LLVM_MAJOR}" \
--slave /usr/bin/ld64.lld ld64.lld "/usr/bin/ld64.lld-${LLVM_MAJOR}" \
--slave /usr/bin/lld-link lld-link "/usr/bin/lld-link-${LLVM_MAJOR}" \
--slave /usr/bin/wasm-ld wasm-ld "/usr/bin/wasm-ld-${LLVM_MAJOR}" \
&& rm -rf /tmp/* /var/tmp/*
COPY override /
# hadolint ignore=DL3003
RUN git -C "${HOME}" clone --single-branch --depth=1 https://code.nephatrine.net/nephatrine/hello-test.git \
&& mkdir "/tmp/build-$(uname -m)-clang" && cd "/tmp/build-$(uname -m)-clang" \
&& "nxbuild-linux-$(uname -m)" -GNinja "${HOME}/hello-test" \
&& ninja && ninja test \
&& cd .. && rm -rf /tmp/* /var/tmp/* "${HOME}/hello-test"
FROM debbase
LABEL maintainer="Daniel Wolf <nephatrine@gmail.com>"
COPY override/usr/local/bin/uname /usr/local/bin/uname
# hadolint ignore=DL3008
RUN apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends \
clang-format clang-tidy \
&& if [ "$(uname -m)" = "x86_64" ]; then dpkg --add-architecture i386 \
&& apt-get update \
&& apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends \
gcc-multilib g++-multilib \
&& mv /usr/bin/curl-config "${HOME}/" \
&& apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends \
libcurl4-openssl-dev:i386 libicu-dev:i386 libssl-dev:i386 libxml2-dev:i386 \
libzstd-dev:i386 zlib1g-dev:i386 \
&& mv /usr/bin/curl-config /usr/bin/curl-config32 \
&& mv "${HOME}/curl-config" /usr/bin/; fi \
&& if [ "$(uname -m)" = "aarch64" ]; then dpkg --add-architecture armhf \
&& apt-get update \
&& apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends \
crossbuild-essential-armhf \
&& mv /usr/bin/curl-config "${HOME}/" \
&& apt-get -o Dpkg::Options::="--force-confnew" install -y --no-install-recommends \
libcurl4-openssl-dev:armhf libicu-dev:armhf libssl-dev:armhf libxml2-dev:armhf \
libzstd-dev:armhf zlib1g-dev:armhf \
&& mv /usr/bin/curl-config /usr/bin/curl-config32 \
&& mv "${HOME}/curl-config" /usr/bin/; fi \
&& apt-get autoremove -y && apt-get clean \
&& rm -rf /tmp/* /var/tmp/*
COPY override /
# hadolint ignore=DL3003
RUN git -C "${HOME}" clone --single-branch --depth=1 https://code.nephatrine.net/nephatrine/hello-test.git \
&& mkdir "/tmp/build-$(uname -m)" && cd "/tmp/build-$(uname -m)" \
&& "nxbuild-linux-$(uname -m)" -GNinja "${HOME}/hello-test" \
&& ninja && ninja test \
&& if [ "$(uname -m)" = "x86_64" ]; then mkdir /tmp/build-i686 && cd /tmp/build-i686 \
&& nxbuild-linux-i686 -GNinja "${HOME}/hello-test" \
&& ninja && ninja test; fi \
&& if [ "$(uname -m)" = "aarch64" ]; then mkdir /tmp/build-armv7l && cd /tmp/build-armv7l \
&& nxbuild-linux-armv7l -GNinja "${HOME}/hello-test" \
&& ninja && ninja test; fi \
&& cd .. && rm -rf /tmp/* /var/tmp/* "${HOME}/hello-test"