From 59ed18e54da8cd0d896db234a82a62404c9c6fd3 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 13 Feb 2025 14:03:47 -0500 Subject: Utilities/Release: Add base images to build sunos-{i386,sparc} binaries --- Utilities/Release/README.rst | 6 +++ Utilities/Release/sunos/docker/Dockerfile | 53 +++++++++++++++++++++++ Utilities/Release/sunos/docker/base.bash | 31 ++++++++++++++ Utilities/Release/sunos/docker/base.lst | 3 ++ Utilities/Release/sunos/docker/docker-clean | 0 Utilities/Release/sunos/docker/openssl.bash | 62 +++++++++++++++++++++++++++ Utilities/Release/sunos/docker/openssl.lst | 4 ++ Utilities/Release/sunos/docker/openssl.patch | 22 ++++++++++ Utilities/Release/sunos/docker/sysroot.bash | 53 +++++++++++++++++++++++ Utilities/Release/sunos/i386/cache.txt | 25 +++++++++++ Utilities/Release/sunos/i386/toolchain.cmake | 6 +++ Utilities/Release/sunos/sparc/cache.txt | 26 +++++++++++ Utilities/Release/sunos/sparc/toolchain.cmake | 6 +++ 13 files changed, 297 insertions(+) create mode 100644 Utilities/Release/sunos/docker/Dockerfile create mode 100755 Utilities/Release/sunos/docker/base.bash create mode 100644 Utilities/Release/sunos/docker/base.lst create mode 100644 Utilities/Release/sunos/docker/docker-clean create mode 100755 Utilities/Release/sunos/docker/openssl.bash create mode 100644 Utilities/Release/sunos/docker/openssl.lst create mode 100644 Utilities/Release/sunos/docker/openssl.patch create mode 100755 Utilities/Release/sunos/docker/sysroot.bash create mode 100644 Utilities/Release/sunos/i386/cache.txt create mode 100644 Utilities/Release/sunos/i386/toolchain.cmake create mode 100644 Utilities/Release/sunos/sparc/cache.txt create mode 100644 Utilities/Release/sunos/sparc/toolchain.cmake diff --git a/Utilities/Release/README.rst b/Utilities/Release/README.rst index d5bbd2b..ac671c0 100644 --- a/Utilities/Release/README.rst +++ b/Utilities/Release/README.rst @@ -79,6 +79,12 @@ Each ``//`` directory contains the following: .. _`kitware/cmake Docker Hub Repository`: https://hub.docker.com/r/kitware/cmake +SunOS +----- + +The ``sunos/`` directory contains infrastructure to cross-compile +CMake binaries to SunOS from Linux hosts. + macOS ----- diff --git a/Utilities/Release/sunos/docker/Dockerfile b/Utilities/Release/sunos/docker/Dockerfile new file mode 100644 index 0000000..626dff4 --- /dev/null +++ b/Utilities/Release/sunos/docker/Dockerfile @@ -0,0 +1,53 @@ +# syntax=docker/dockerfile:1 + +ARG BASE_IMAGE=debian:12 + +FROM ${BASE_IMAGE} AS apt-cache +# Populate APT cache w/ the fresh metadata and prefetch packages. +# Use an empty `docker-clean` file to "hide" the image-provided +# file to disallow removing packages after `apt-get` operations. +RUN --mount=type=tmpfs,target=/var/log \ + --mount=type=bind,source=docker-clean,target=/etc/apt/apt.conf.d/docker-clean \ + --mount=type=bind,source=base.lst,target=/root/base.lst \ + --mount=type=bind,source=openssl.lst,target=/root/openssl.lst \ + apt-get update \ + && apt-get --download-only -y install $(grep -h '^[^#]\+$' /root/*.lst) + +FROM ${BASE_IMAGE} AS base +ARG ARCH=sparc +RUN --mount=type=bind,source=base.lst,target=/root/base.lst \ + --mount=type=bind,source=docker-clean,target=/etc/apt/apt.conf.d/docker-clean \ + --mount=type=cache,from=apt-cache,source=/var/lib/apt/lists,target=/var/lib/apt/lists \ + --mount=type=cache,from=apt-cache,source=/var/cache/apt,target=/var/cache/apt,sharing=private \ + --mount=type=tmpfs,target=/var/log \ + --mount=type=tmpfs,target=/tmp \ + apt-get install -y $(grep '^[^#]\+$' /root/base.lst) +RUN --mount=type=bind,source=base.bash,target=/root/base.bash \ + --mount=type=tmpfs,target=/tmp \ + /root/base.bash $ARCH + +FROM base AS sysroot +ARG SYSROOT_URL +ARG SYSROOT_SHA256SUM +RUN --mount=type=bind,source=sysroot.bash,target=/root/sysroot.bash \ + --mount=type=tmpfs,target=/tmp \ + /root/sysroot.bash $ARCH + +FROM sysroot AS openssl +RUN --mount=type=bind,source=openssl.lst,target=/root/openssl.lst \ + --mount=type=bind,source=docker-clean,target=/etc/apt/apt.conf.d/docker-clean \ + --mount=type=cache,from=apt-cache,source=/var/lib/apt/lists,target=/var/lib/apt/lists \ + --mount=type=cache,from=apt-cache,source=/var/cache/apt,target=/var/cache/apt,sharing=private \ + --mount=type=tmpfs,target=/var/log \ + --mount=type=tmpfs,target=/tmp \ + apt-get install -y $(grep '^[^#]\+$' /root/openssl.lst) +RUN --mount=type=bind,source=openssl.bash,target=/root/openssl.bash \ + --mount=type=bind,source=openssl.patch,target=/root/openssl.patch \ + --mount=type=bind,from=sysroot,source=/opt/cross/sysroot,target=/opt/cross/sysroot \ + --mount=type=tmpfs,target=/tmp \ + /root/openssl.bash $ARCH + +FROM base +LABEL maintainer="Brad King " +RUN --mount=type=bind,from=openssl,source=/root,target=/root \ + tar xzf /root/openssl.tar.gz -C / diff --git a/Utilities/Release/sunos/docker/base.bash b/Utilities/Release/sunos/docker/base.bash new file mode 100755 index 0000000..0c707d0 --- /dev/null +++ b/Utilities/Release/sunos/docker/base.bash @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +set -e + +arch="$1" +readonly arch + +case "$arch" in + i386) + tarball="gcc-9.5.0-linux-x86_64-cross-sunos-i386.tar.xz" + sha256sum="3cd3c989483051e741dd9f39170842d22e5c43cd25628d2b0c57890a3f235883" + ;; + sparc) + tarball="gcc-9.5.0-linux-x86_64-cross-sunos-sparc.tar.xz" + sha256sum="853454ef4e787895786fdb21e56a3ba9c121ffe6116467a75f2c3eb09f3c88b4" + ;; + *) + echo >&2 "Unknown architecture: $arch" + exit 1 + ;; +esac +readonly tarball +readonly sha256sum + +cd /tmp + +curl -OL "https://gitlab.kitware.com/api/v4/projects/6955/packages/generic/gcc-solaris/v9.5.0-20250212.0/$tarball" +echo "$sha256sum $tarball" > gcc.sha256sum +sha256sum --check gcc.sha256sum + +tar xJf "$tarball" -C / diff --git a/Utilities/Release/sunos/docker/base.lst b/Utilities/Release/sunos/docker/base.lst new file mode 100644 index 0000000..6a9a3ec --- /dev/null +++ b/Utilities/Release/sunos/docker/base.lst @@ -0,0 +1,3 @@ +curl +git +xz-utils diff --git a/Utilities/Release/sunos/docker/docker-clean b/Utilities/Release/sunos/docker/docker-clean new file mode 100644 index 0000000..e69de29 diff --git a/Utilities/Release/sunos/docker/openssl.bash b/Utilities/Release/sunos/docker/openssl.bash new file mode 100755 index 0000000..86f9ad8 --- /dev/null +++ b/Utilities/Release/sunos/docker/openssl.bash @@ -0,0 +1,62 @@ +#!/usr/bin/env bash + +set -e + +arch="$1" +readonly arch + +case "$arch" in + i386) + target=i386-pc-solaris2.10 + openssl_target=solaris-x86-gcc + ldlibs= + ;; + sparc) + target=sparc-sun-solaris2.10 + openssl_target=solaris-sparcv8-gcc + ldlibs=-latomic + ;; + *) + echo >&2 "Unknown architecture: $arch" + exit 1 + ;; +esac +readonly target +readonly openssl_target +readonly ldlibs + +readonly sha256sum="e15dda82fe2fe8139dc2ac21a36d4ca01d5313c75f99f46c4e8a27709b7294bf" +readonly filename="openssl-3.4.0" +readonly tarball="$filename.tar.gz" + +cd /tmp + +curl -OL "https://github.com/openssl/openssl/releases/download/$filename/$tarball" +echo "$sha256sum $tarball" > openssl.sha256sum +sha256sum --check openssl.sha256sum + +tar xzf "$tarball" + +prefix="/opt/cross/openssl/$target" +cd "$filename" +patch -p0 < "${BASH_SOURCE%/*}/openssl.patch" +env \ + LDLIBS="$ldlibs" \ + LDFLAGS="-Wl,-z,noexecstack" \ + ./Configure \ + --prefix="$prefix" \ + --cross-compile-prefix="/opt/cross/bin/$target-" \ + --api=1.1.1 \ + "$openssl_target" \ + no-deprecated \ + no-shared +if ! make -j $(nproc) >make.log 2>&1; then + tail -1000 make.log + exit 1 +fi +if ! make install_sw >>make.log 2>&1; then + tail -1000 make.log + exit 1 +fi + +tar czf /root/openssl.tar.gz -C / "$prefix" diff --git a/Utilities/Release/sunos/docker/openssl.lst b/Utilities/Release/sunos/docker/openssl.lst new file mode 100644 index 0000000..96fd60f --- /dev/null +++ b/Utilities/Release/sunos/docker/openssl.lst @@ -0,0 +1,4 @@ +m4 +make +patch +perl diff --git a/Utilities/Release/sunos/docker/openssl.patch b/Utilities/Release/sunos/docker/openssl.patch new file mode 100644 index 0000000..98f8362 --- /dev/null +++ b/Utilities/Release/sunos/docker/openssl.patch @@ -0,0 +1,22 @@ +--- crypto/sleep.orig ++++ crypto/sleep.c +@@ -10,6 +10,8 @@ + #include + #include "internal/e_os.h" + ++#define OPENSSL_USE_USLEEP ++ + /* system-specific variants defining OSSL_sleep() */ + #if defined(OPENSSL_SYS_UNIX) || defined(__DJGPP__) + +--- providers/implementations/rands/seeding/rand_unix.c.orig ++++ providers/implementations/rands/seeding/rand_unix.c +@@ -84,8 +84,6 @@ + # define OSSL_POSIX_TIMER_OKAY + # endif + # endif +-# else +-# define OSSL_POSIX_TIMER_OKAY + # endif + # endif + #endif /* (defined(OPENSSL_SYS_UNIX) && !defined(OPENSSL_SYS_VXWORKS)) diff --git a/Utilities/Release/sunos/docker/sysroot.bash b/Utilities/Release/sunos/docker/sysroot.bash new file mode 100755 index 0000000..87ec01e --- /dev/null +++ b/Utilities/Release/sunos/docker/sysroot.bash @@ -0,0 +1,53 @@ +#!/usr/bin/env bash + +set -e + +arch="$1" +readonly arch + +case "$arch" in + i386) + tarball="sysroot-i386-pc-solaris2.10-sunos5.10-1.tar.xz" + sha256sum="1b9251699f4e412ba5b0fde9c0fb96ceef6b8a1f47f0c1f2146ba0ba9da458b8" + ;; + sparc) + tarball="sysroot-sparc-sun-solaris2.10-sunos5.10-1.tar.xz" + sha256sum="e6c668a63dc00de443d07cbe2be779335642ffe1b818ba85d23ab543982aaf23" + ;; + *) + echo >&2 "Unknown architecture: $arch" + exit 1 + ;; +esac +# To build externally, provide a Solaris sysroot tarball: +# --build-arg SYSROOT_URL=... +# --build-arg SYSROOT_SHA256SUM=... +# The tarball must contain one of: +# sysroot/i386-pc-solaris2.10/{lib,usr/lib,usr/include} +# sysroot/sparc-sun-solaris2.10/{lib,usr/lib,usr/include} +# The content may be retrieved from a real Solaris host. +if test -n "$SYSROOT_URL"; then + url="$SYSROOT_URL" + if test -n "$SYSROOT_SHA256SUM"; then + sha256sum="$SYSROOT_SHA256SUM" + else + sha256sum="" + fi + tarball=$(basename "$url") +else + # This URL is only visible inside of Kitware's network. + url="https://cmake.org/files/dependencies/internal/sunos/$tarball" +fi +readonly url +readonly tarball +readonly sha256sum + +cd /tmp + +curl -OL "$url" +if test -n "$sha256sum"; then + echo "$sha256sum $tarball" > sysroot.sha256sum + sha256sum --check sysroot.sha256sum +fi + +tar xf "$tarball" -C /opt/cross diff --git a/Utilities/Release/sunos/i386/cache.txt b/Utilities/Release/sunos/i386/cache.txt new file mode 100644 index 0000000..6bb2c27 --- /dev/null +++ b/Utilities/Release/sunos/i386/cache.txt @@ -0,0 +1,25 @@ +CMAKE_BUILD_TYPE:STRING=Release + +# Link C++ library statically. +CMAKE_EXE_LINKER_FLAGS:STRING=-static-libstdc++ -static-libgcc -Wl,-z,noexecstack + +# Enable ssl support in curl +CMAKE_USE_OPENSSL:BOOL=ON +OPENSSL_USE_STATIC_LIBS:BOOL=ON +OpenSSL_ROOT:PATH=/opt/cross/openssl/i386-pc-solaris2.10 + +# Enable ccmake +BUILD_CursesDialog:BOOL=ON + +# Disable cmake-gui +BUILD_QtDialog:BOOL=OFF + +# Disable tests. +BUILD_TESTING:BOOL=OFF +CMake_TEST_INSTALL:BOOL=OFF + +# Disable unnecessary dependency. +CMAKE_SKIP_INSTALL_ALL_DEPENDENCY:BOOL=ON + +# CPack package file name component for this platform. +CPACK_SYSTEM_NAME:STRING=sunos-i386 diff --git a/Utilities/Release/sunos/i386/toolchain.cmake b/Utilities/Release/sunos/i386/toolchain.cmake new file mode 100644 index 0000000..59ce6b5 --- /dev/null +++ b/Utilities/Release/sunos/i386/toolchain.cmake @@ -0,0 +1,6 @@ +set(CMAKE_SYSTEM_NAME SunOS) +set(CMAKE_SYSTEM_VERSION 5.10) +set(CMAKE_SYSTEM_PROCESSOR i386) +set(CMAKE_SYSROOT /opt/cross/sysroot/i386-pc-solaris2.10) +set(CMAKE_C_COMPILER /opt/cross/bin/i386-pc-solaris2.10-gcc) +set(CMAKE_CXX_COMPILER /opt/cross/bin/i386-pc-solaris2.10-g++) diff --git a/Utilities/Release/sunos/sparc/cache.txt b/Utilities/Release/sunos/sparc/cache.txt new file mode 100644 index 0000000..eb12c14 --- /dev/null +++ b/Utilities/Release/sunos/sparc/cache.txt @@ -0,0 +1,26 @@ +CMAKE_BUILD_TYPE:STRING=Release + +# Link C++ library statically. +CMAKE_EXE_LINKER_FLAGS:STRING=-static-libstdc++ -static-libgcc -Wl,-z,noexecstack + +# Enable ssl support in curl +CMAKE_USE_OPENSSL:BOOL=ON +OPENSSL_USE_STATIC_LIBS:BOOL=ON +OpenSSL_ROOT:PATH=/opt/cross/openssl/sparc-sun-solaris2.10 +_OPENSSL_STATIC_LIBRARIES:STRING=/opt/cross/sparc-sun-solaris2.10/lib/libatomic.a + +# Enable ccmake +BUILD_CursesDialog:BOOL=ON + +# Disable cmake-gui +BUILD_QtDialog:BOOL=OFF + +# Disable tests. +BUILD_TESTING:BOOL=OFF +CMake_TEST_INSTALL:BOOL=OFF + +# Disable unnecessary dependency. +CMAKE_SKIP_INSTALL_ALL_DEPENDENCY:BOOL=ON + +# CPack package file name component for this platform. +CPACK_SYSTEM_NAME:STRING=sunos-sparc diff --git a/Utilities/Release/sunos/sparc/toolchain.cmake b/Utilities/Release/sunos/sparc/toolchain.cmake new file mode 100644 index 0000000..789df8d --- /dev/null +++ b/Utilities/Release/sunos/sparc/toolchain.cmake @@ -0,0 +1,6 @@ +set(CMAKE_SYSTEM_NAME SunOS) +set(CMAKE_SYSTEM_VERSION 5.10) +set(CMAKE_SYSTEM_PROCESSOR sparc) +set(CMAKE_SYSROOT /opt/cross/sysroot/sparc-sun-solaris2.10) +set(CMAKE_C_COMPILER /opt/cross/bin/sparc-sun-solaris2.10-gcc) +set(CMAKE_CXX_COMPILER /opt/cross/bin/sparc-sun-solaris2.10-g++) -- cgit v0.12