diff --git a/building/build_macos_sysroot.sh b/building/build_macos_sysroot.sh new file mode 100644 index 0000000..be5d6db --- /dev/null +++ b/building/build_macos_sysroot.sh @@ -0,0 +1,191 @@ +#!/bin/bash +# Exit on any error +set -e + +# OSSP macOS Sysroot Build Automation +# Goldenkrew / Hojuix 2026 +# GNU General Public License 3 + +# Settings +export OSSP_NPROC=4 +export OSSP_SYSROOT=/opt/ossp +export OSSP_BUILDDIR=/opt/ossp_build + +# Make directories +echo Sudo is required to make Sysroot and Build folder in /opt, and to set correct permissions +sudo mkdir ${OSSP_SYSROOT} +sudo mkdir ${OSSP_BUILDDIR} +sudo chown -R $(whoami) ${OSSP_SYSROOT} +sudo chown -R $(whoami) ${OSSP_BUILDDIR} + +# Fetch PCRE2 +cd ${OSSP_BUILDDIR} +mkdir pcre2 && cd pcre2 +wget https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.47/pcre2-10.47.tar.gz +tar -xvf pcre2-10.47.tar.gz +cd pcre2-10.47 +mkdir build && cd build +cmake -DCMAKE_INSTALL_PREFIX=${OSSP_SYSROOT} .. +make -j${OSSP_NPROC} +make install + +# Set PkgConfig Path +export PKG_CONFIG_PATH=${OSSP_SYSROOT}/lib/pkgconfig + +# Fetch Glib +cd ${OSSP_BUILDDIR} +mkdir glib && cd glib +wget https://download.gnome.org/sources/glib/2.87/glib-2.87.3.tar.xz +tar -xvf glib-2.87.3.tar.xz +cd glib-2.87.3 +meson setup --prefix=${OSSP_SYSROOT} --wipe build +cd build +ninja +ninja install + +# GStreamer requires glib-mkenums in path, otherwise it builds its own Glib, which causes a duplicate conflict +export PATH=$PATH:${OSSP_SYSROOT}/bin + +# Fetch Lzo +cd ${OSSP_BUILDDIR} +mkdir lzo && cd lzo +wget https://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz +tar -xvf lzo-2.10.tar.gz +cd lzo-2.10 +mkdir build && cd build +cmake -DCMAKE_INSTALL_PREFIX=${OSSP_SYSROOT} -DCMAKE_POLICY_VERSION_MINIMUM=3.5 .. +make -j${OSSP_NPROC} +make install + +# Patch LZO PkgConfig for Cairo +# Cairo uses both and includes, but LZO's PkgConfig only allows the use of the latter. +# For an upstream patch, you would patch Cairo instead, but this is an enclosed build system, and this is easier +# lzo2.pc: 'Cflags: -I${includedir}/lzo' -> 'Cflags: -I${includedir}/lzo -I${includedir}' +gsed -i '/^Cflags/c Cflags: -I${includedir}/lzo -I${includedir}' ${OSSP_SYSROOT}/lib/pkgconfig/lzo2.pc + +# Fetch Cairo +cd ${OSSP_BUILDDIR} +mkdir cairo && cd cairo +wget https://cairographics.org/releases/cairo-1.18.4.tar.xz +tar -xvf cairo-1.18.4.tar.xz +cd cairo-1.18.4 +meson setup --prefix=${OSSP_SYSROOT} -Dxlib=disabled -Dxcb=disabled --wipe build +cd build +ninja +ninja install + +# Fetch OpenSSL +cd ${OSSP_BUILDDIR} +mkdir openssl && cd openssl +wget https://github.com/openssl/openssl/releases/download/openssl-3.6.1/openssl-3.6.1.tar.gz +tar -xvf openssl-3.6.1.tar.gz +cd openssl-3.6.1 +./config --prefix=${OSSP_SYSROOT} +make -j${OSSP_NPROC} +make install + +# Fetch Soundtouch +cd ${OSSP_BUILDDIR} +mkdir soundtouch && cd soundtouch +wget https://www.surina.net/soundtouch/soundtouch-2.4.0.tar.gz +tar -xvf soundtouch-2.4.0.tar.gz +cd soundtouch +mkdir build && cd build +cmake -DCMAKE_INSTALL_PREFIX=${OSSP_SYSROOT} .. +make -j${OSSP_NPROC} +make install + +# Build LSP Plugins +cd ${OSSP_BUILDDIR} +mkdir lsp && cd lsp +wget https://github.com/lsp-plugins/lsp-plugins/releases/download/1.2.26/lsp-plugins-src-1.2.26.tar.gz +tar -xvf lsp-plugins-src-1.2.26.tar.gz +cd lsp-plugins +gmake clean +gmake config PREFIX=${OSSP_SYSROOT} FEATURES='lv2' +gmake -j${OSSP_NPROC} +gmake install + +# Build Zix +cd ${OSSP_BUILDDIR} +mkdir zix && cd zix +git clone --depth=1 https://github.com/drobilla/zix +cd zix +meson setup --prefix=${OSSP_SYSROOT} --wipe build +cd build +ninja +ninja install + +# Build Serd +cd ${OSSP_BUILDDIR} +mkdir serd && cd serd +git clone --depth=1 https://github.com/drobilla/serd +cd serd +meson setup --prefix=${OSSP_SYSROOT} --wipe build +cd build +ninja +ninja install + +# Build Sord +cd ${OSSP_BUILDDIR} +mkdir sord && cd sord +git clone --depth=1 https://github.com/drobilla/sord +cd sord +meson setup --prefix=${OSSP_SYSROOT} --wipe build +cd build +ninja +ninja install + +# Build LV2 +cd ${OSSP_BUILDDIR} +mkdir lv2 && cd lv2 +git clone --depth=1 https://github.com/lv2/lv2 +cd lv2 +meson setup --prefix=${OSSP_SYSROOT} --wipe build +cd build +ninja +ninja install + +# Build Sratom +cd ${OSSP_BUILDDIR} +mkdir sratom && cd sratom +git clone --depth=1 https://gitlab.com/lv2/sratom +cd sratom +meson setup --prefix=${OSSP_SYSROOT} --wipe build +cd build +ninja +ninja install + +# Build Lilv +cd ${OSSP_BUILDDIR} +mkdir lilv && cd lilv +wget https://github.com/lv2/lilv/archive/refs/tags/v0.26.4.tar.gz +tar -xvf v0.26.4.tar.gz +cd lilv-0.26.4 +meson setup --prefix=${OSSP_SYSROOT} --wipe build +cd build +ninja +ninja install + +# Build Bzip2 +cd ${OSSP_BUILDDIR} +mkdir bzip2 && cd bzip2 +git clone --depth=1 https://gitlab.com/federicomenaquintero/bzip2 +cd bzip2 +mkdir build && cd build +cmake -DCMAKE_INSTALL_PREFIX=${OSSP_SYSROOT} .. +make -j${OSSP_NPROC} +make install + +# Build GStreamer +cd ${OSSP_BUILDDIR} +mkdir gstreamer && cd gstreamer +wget https://gitlab.freedesktop.org/gstreamer/gstreamer/-/archive/1.28.1/gstreamer-1.28.1.tar.gz +tar -xvf gstreamer-1.28.1.tar.gz +cd gstreamer-1.28.1 +meson setup --prefix=${OSSP_SYSROOT} --wipe build +cd build +ninja +ninja install + +echo Please remove /opt/ossp_build manually to remove build objects