builder-cross-haiku/Dockerfile

74 lines
5.1 KiB
Docker

# SPDX-FileCopyrightText: 2023 - 2024 Daniel Wolf <nephatrine@gmail.com>
#
# SPDX-License-Identifier: ISC
# hadolint ignore=DL3007
FROM code.nephatrine.net/nephnet/nxb-debian:latest
LABEL maintainer="Daniel Wolf <nephatrine@gmail.com>"
ENV HAIKU_VERSION="r1beta4"
# hadolint ignore=DL3003
RUN git -C "${HOME}" clone --single-branch --depth=1 --branch="${HAIKU_VERSION}" https://review.haiku-os.org/buildtools.git \
&& cd "${HOME}/buildtools/jam" && make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) \
&& ./jam0 -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -sBINDIR=/usr/local/bin install \
&& cd ../.. && rm -rf /tmp/* /var/tmp/* "${HOME}/buildtools"
ENV HAIKU_TOOLCHAIN=/opt/haiku/toolchain HAIKU_SYSROOT=/opt/haiku/sysroot
ENV PATH=${HAIKU_TOOLCHAIN}/bin:$PATH
COPY override/usr/local/bin/haiku-install /usr/local/bin/haiku-install
WORKDIR /opt/haiku
RUN if [ "$(uname -m)" = "i686" ]; then \
HAIKUARCH_TOOLCHAIN="x86" && HAIKUARCH_SYSROOT="x86_gcc2"; else \
HAIKUARCH_TOOLCHAIN="$(uname -m)" && HAIKUARCH_SYSROOT="$(uname -m)"; fi \
&& export HAIKUARCH_TOOLCHAIN \
&& export HAIKUARCH_SYSROOT \
&& git -C "${HOME}" clone --single-branch --depth=1 --branch="${HAIKU_VERSION}" https://review.haiku-os.org/buildtools.git \
&& git -C "${HOME}" clone --branch="${HAIKU_VERSION}" https://review.haiku-os.org/haiku.git \
&& if [ ! "${HAIKUARCH_TOOLCHAIN}" = "${HAIKUARCH_SYSROOT}" ]; then \
"${HOME}/haiku/configure" --build-cross-tools "${HAIKUARCH_SYSROOT}" --build-cross-tools "${HAIKUARCH_TOOLCHAIN}" --cross-tools-source "${HOME}/buildtools" --distro-compatibility compatible --use-gcc-pipe -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )); else \
"${HOME}/haiku/configure" --build-cross-tools "${HAIKUARCH_TOOLCHAIN}" --cross-tools-source "${HOME}/buildtools" --distro-compatibility compatible --use-gcc-pipe -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )); fi \
&& ln -s "cross-tools-${HAIKUARCH_TOOLCHAIN}" toolchain \
&& jam -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -q @install \
&& jam -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -q haiku.hpkg haiku_devel.hpkg haiku_source.hpkg '<build>package' \
&& if [ ! "${HAIKUARCH_TOOLCHAIN}" = "${HAIKUARCH_SYSROOT}" ]; then jam -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) -q "haiku_${HAIKUARCH_TOOLCHAIN}.hpkg" "haiku_${HAIKUARCH_TOOLCHAIN}_devel.hpkg"; fi \
&& ln -s "cross-tools-${HAIKUARCH_SYSROOT}/sysroot" sysroot \
&& mkdir -p "/usr/local/lib/$(uname -m)-linux-gnu/" \
&& cp -nrv ./objects/linux/lib/*.so "/usr/local/lib/$(uname -m)-linux-gnu/" && ldconfig \
&& cp -nv "./objects/linux/${HAIKUARCH_TOOLCHAIN}/release/tools/package/package" /usr/local/bin/ \
&& cp -nv "./objects/linux/${HAIKUARCH_TOOLCHAIN}/release/tools/package_repo/package_repo" /usr/local/bin/ \
&& mkdir -p "cross-tools-${HAIKUARCH_SYSROOT}/sysroot/boot/system/settings/package-repositories" \
&& cp "./objects/haiku/${HAIKUARCH_SYSROOT}/packaging/repositories/Haiku-info" "${HAIKU_SYSROOT}/boot/system/settings/package-repositories/Haiku" \
&& cp "./objects/haiku/${HAIKUARCH_SYSROOT}/packaging/repositories/HaikuPorts-info" "${HAIKU_SYSROOT}/boot/system/settings/package-repositories/HaikuPorts" \
&& mv ./objects/haiku/"${HAIKUARCH_SYSROOT}"/packaging/packages/*.hpkg ./download/*.hpkg /tmp/ \
&& rm -rf Jamfile attributes build build_packages download objects tmp \
&& haiku-install haiku_devel gcc_syslibs_devel \
&& if [ "$(uname -m)" = "i686" ]; then haiku-install haiku_x86_devel gcc_x86_syslibs_devel; fi \
&& rm -rf /tmp/* /var/tmp/* "${HOME}/buildtools" "${HOME}/haiku"
RUN if [ "$(uname -m)" = "i686" ]; then \
haiku-install curl_x86_devel icu73_x86_devel libxml2_x86_devel openssl_x86_devel zlib_x86_devel zstd_x86_devel && \
haiku-install curl_devel icu_devel libxml2_devel openssl_devel zlib_devel zstd_devel; else \
haiku-install curl_devel icu73_devel libxml2_devel openssl_devel zlib_devel zstd_devel; fi \
&& rm -rf /tmp/* /var/tmp/*
# hadolint ignore=DL3003
RUN if [ "$(uname -m)" = "i686" ]; then cp -nrvs /opt/haiku/cross-tools-x86_gcc2/i586-pc-haiku/lib/. /opt/haiku/cross-tools-x86_gcc2/sysroot/boot/system/develop/lib/ \
&& cd /opt/haiku/cross-tools-x86_gcc2/i586-pc-haiku \
&& rm -rf sys-include && ln -s /opt/haiku/cross-tools-x86_gcc2/sysroot/boot/system/develop/headers sys-include \
&& rm -rf lib && ln -s /opt/haiku/cross-tools-x86_gcc2/sysroot/boot/system/develop/lib lib \
&& cd /opt/haiku/cross-tools-x86_gcc2/include \
&& rm -rf g++ && ln -s /opt/haiku/cross-tools-x86_gcc2/sysroot/boot/system/develop/headers/c++/2.95.3 g++; fi
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-haiku-$(uname -m)" -GNinja "${HOME}/hello-test" \
&& ninja && file HelloTest \
&& if [ "$(uname -m)" = "i686" ]; then sed -i 's~target_compile_features~#target_compile_features~g' "${HOME}/hello-test/CMakeLists.txt" \
&& mkdir /tmp/build-beos && cd /tmp/build-beos \
&& "nxbuild-beos-$(uname -m)" -G"Unix Makefiles" "${HOME}/hello-test" \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) && file HelloTest; fi \
&& cd .. && rm -rf /tmp/* /var/tmp/* "${HOME}/hello-test"