From 0cbbe1923750460b8297acb6f9f977dd1a001224 Mon Sep 17 00:00:00 2001 From: Ankith Date: Mon, 9 Oct 2023 12:35:18 +0530 Subject: [PATCH 1/3] Install ninja+meson --- buildconfig/macdependencies/build_mac_deps.sh | 14 ++++++++++ buildconfig/macdependencies/macos_arm64.ini | 28 +++++++++++++++++++ buildconfig/macdependencies/macos_x86_64.ini | 21 ++++++++++++++ .../docker_base/Dockerfile-aarch64 | 12 ++++++-- .../docker_base/Dockerfile-i686 | 12 ++++++-- .../docker_base/Dockerfile-x86_64 | 12 ++++++-- .../docker_base/buildtools/install.sh | 22 +++++++++++++++ .../docker_base/cmake/build-cmake.sh | 23 --------------- .../docker_base/cmake/cmake.sha512 | 1 - 9 files changed, 115 insertions(+), 30 deletions(-) create mode 100644 buildconfig/macdependencies/macos_arm64.ini create mode 100644 buildconfig/macdependencies/macos_x86_64.ini create mode 100644 buildconfig/manylinux-build/docker_base/buildtools/install.sh delete mode 100644 buildconfig/manylinux-build/docker_base/cmake/build-cmake.sh delete mode 100644 buildconfig/manylinux-build/docker_base/cmake/cmake.sha512 diff --git a/buildconfig/macdependencies/build_mac_deps.sh b/buildconfig/macdependencies/build_mac_deps.sh index 4cfae19fb1..104fd7ee72 100644 --- a/buildconfig/macdependencies/build_mac_deps.sh +++ b/buildconfig/macdependencies/build_mac_deps.sh @@ -34,6 +34,11 @@ export PG_BASE_CMAKE_FLAGS="-DCMAKE_INSTALL_PREFIX=$PG_DEP_PREFIX \ export PG_BASE_CONFIGURE_FLAGS="--prefix=$PG_DEP_PREFIX" +export PG_BASE_MESON_FLAGS="--prefix=$PG_DEP_PREFIX \ + -Dlibdir=lib \ + -Dbuildtype=release \ + -Ddefault_library=shared" + if [[ "$MAC_ARCH" == "arm64" ]]; then # for scripts using ./configure to make arm64 binaries export CC="clang -target arm64-apple-macos11.0" @@ -45,6 +50,9 @@ if [[ "$MAC_ARCH" == "arm64" ]]; then # configure cmake to cross-compile export PG_BASE_CMAKE_FLAGS="$PG_BASE_CMAKE_FLAGS -DCMAKE_OSX_ARCHITECTURES=arm64" + # configure meson to cross-compile + export PG_BASE_MESON_FLAGS="$PG_BASE_MESON_FLAGS --cross-file $(pwd)/macos_arm64.ini" + # we don't need mac 10.9 support while compiling for apple M1 macs export MACOSX_DEPLOYMENT_TARGET=11.0 else @@ -54,6 +62,9 @@ else # SDL 2.26.5 new minimum macos is 10.11, so we build our x86 mac deps # for 10.11 as well. export MACOSX_DEPLOYMENT_TARGET=10.11 + + # needs native-file that has correct macosx deployment target + export PG_BASE_MESON_FLAGS="$PG_BASE_MESON_FLAGS --native-file $(pwd)/macos_x86_64.ini" fi cd ../manylinux-build/docker_base @@ -61,6 +72,9 @@ cd ../manylinux-build/docker_base # Now start installing dependencies # --------------------------------- +# install some buildtools +bash buildtools/install.sh + # sdl_image deps bash zlib-ng/build-zlib-ng.sh bash libpng/build-png.sh # depends on zlib diff --git a/buildconfig/macdependencies/macos_arm64.ini b/buildconfig/macdependencies/macos_arm64.ini new file mode 100644 index 0000000000..6f301da286 --- /dev/null +++ b/buildconfig/macdependencies/macos_arm64.ini @@ -0,0 +1,28 @@ +[constants] +macos_ver = ['-mmacosx-version-min=11.0'] +macos_arch = ['-arch', 'arm64'] + +[host_machine] +system = 'darwin' +cpu_family = 'aarch64' +cpu = 'arm64' +endian = 'little' + +[binaries] +c = ['clang'] +cpp = ['clang++'] +objc = ['clang'] +objcpp = ['clang++'] +ar = ['ar'] +strip = ['strip'] +pkgconfig = ['pkg-config'] + +[built-in options] +c_args = macos_arch + macos_ver +cpp_args = macos_arch + macos_ver + ['-stdlib=libc++'] +objc_args = macos_arch + macos_ver +objcpp_args = macos_arch + macos_ver + ['-stdlib=libc++'] +c_link_args = macos_arch + macos_ver +cpp_link_args = macos_arch + macos_ver +objc_link_args = macos_arch + macos_ver +objcpp_link_args = macos_arch + macos_ver diff --git a/buildconfig/macdependencies/macos_x86_64.ini b/buildconfig/macdependencies/macos_x86_64.ini new file mode 100644 index 0000000000..607eb8d742 --- /dev/null +++ b/buildconfig/macdependencies/macos_x86_64.ini @@ -0,0 +1,21 @@ +[constants] +macos_ver = ['-mmacosx-version-min=10.11'] + +[binaries] +c = ['clang'] +cpp = ['clang++'] +objc = ['clang'] +objcpp = ['clang++'] +ar = ['ar'] +strip = ['strip'] +pkgconfig = ['pkg-config'] + +[built-in options] +c_args = macos_ver +cpp_args = macos_ver + ['-stdlib=libc++'] +objc_args = macos_ver +objcpp_args = macos_ver + ['-stdlib=libc++'] +c_link_args = macos_ver +cpp_link_args = macos_ver +objc_link_args = macos_ver +objcpp_link_args = macos_ver diff --git a/buildconfig/manylinux-build/docker_base/Dockerfile-aarch64 b/buildconfig/manylinux-build/docker_base/Dockerfile-aarch64 index 9a708f4ea8..6ad225e718 100644 --- a/buildconfig/manylinux-build/docker_base/Dockerfile-aarch64 +++ b/buildconfig/manylinux-build/docker_base/Dockerfile-aarch64 @@ -30,11 +30,19 @@ ENV PG_BASE_CMAKE_FLAGS="-DCMAKE_INSTALL_PREFIX=$PG_DEP_PREFIX \ ENV PG_BASE_CONFIGURE_FLAGS="--prefix=$PG_DEP_PREFIX" +ENV PG_BASE_MESON_FLAGS="--prefix=$PG_DEP_PREFIX \ + -Dlibdir=lib \ + -Dbuildtype=release \ + -Ddefault_library=shared" + +# remember to keep this updated when we drop 3.11 support +ENV PATH="/opt/python/cp311-cp311/bin:$PATH" + ADD pkg-config /pkg-config_build/ RUN ["bash", "/pkg-config_build/build-pkg-config.sh"] -ADD cmake /cmake_build/ -RUN ["bash", "/cmake_build/build-cmake.sh"] +ADD buildtools /buildtools/ +RUN ["bash", "/buildtools/install.sh"] #ADD zlib-ng /zlib-ng_build/ #RUN ["bash", "/zlib-ng_build/build-zlib-ng.sh"] diff --git a/buildconfig/manylinux-build/docker_base/Dockerfile-i686 b/buildconfig/manylinux-build/docker_base/Dockerfile-i686 index 7d91c449d1..085cdfd23b 100644 --- a/buildconfig/manylinux-build/docker_base/Dockerfile-i686 +++ b/buildconfig/manylinux-build/docker_base/Dockerfile-i686 @@ -30,11 +30,19 @@ ENV PG_BASE_CMAKE_FLAGS="-DCMAKE_INSTALL_PREFIX=$PG_DEP_PREFIX \ ENV PG_BASE_CONFIGURE_FLAGS="--prefix=$PG_DEP_PREFIX" +ENV PG_BASE_MESON_FLAGS="--prefix=$PG_DEP_PREFIX \ + -Dlibdir=lib \ + -Dbuildtype=release \ + -Ddefault_library=shared" + +# remember to keep this updated when we drop 3.11 support +ENV PATH="/opt/python/cp311-cp311/bin:$PATH" + ADD pkg-config /pkg-config_build/ RUN ["linux32", "bash", "/pkg-config_build/build-pkg-config.sh"] -ADD cmake /cmake_build/ -RUN ["linux32", "bash", "/cmake_build/build-cmake.sh"] +ADD buildtools /buildtools/ +RUN ["linux32", "bash", "/buildtools/install.sh"] #ADD zlib-ng /zlib-ng_build/ #RUN ["linux32", "bash", "/zlib-ng_build/build-zlib-ng.sh"] diff --git a/buildconfig/manylinux-build/docker_base/Dockerfile-x86_64 b/buildconfig/manylinux-build/docker_base/Dockerfile-x86_64 index 07e22e9ab0..dcf3c8cd50 100644 --- a/buildconfig/manylinux-build/docker_base/Dockerfile-x86_64 +++ b/buildconfig/manylinux-build/docker_base/Dockerfile-x86_64 @@ -30,11 +30,19 @@ ENV PG_BASE_CMAKE_FLAGS="-DCMAKE_INSTALL_PREFIX=$PG_DEP_PREFIX \ ENV PG_BASE_CONFIGURE_FLAGS="--prefix=$PG_DEP_PREFIX" +ENV PG_BASE_MESON_FLAGS="--prefix=$PG_DEP_PREFIX \ + -Dlibdir=lib \ + -Dbuildtype=release \ + -Ddefault_library=shared" + +# remember to keep this updated when we drop 3.11 support +ENV PATH="/opt/python/cp311-cp311/bin:$PATH" + ADD pkg-config /pkg-config_build/ RUN ["bash", "/pkg-config_build/build-pkg-config.sh"] -ADD cmake /cmake_build/ -RUN ["bash", "/cmake_build/build-cmake.sh"] +ADD buildtools /buildtools/ +RUN ["bash", "/buildtools/install.sh"] #ADD zlib-ng /zlib-ng_build/ #RUN ["bash", "/zlib-ng_build/build-zlib-ng.sh"] diff --git a/buildconfig/manylinux-build/docker_base/buildtools/install.sh b/buildconfig/manylinux-build/docker_base/buildtools/install.sh new file mode 100644 index 0000000000..687a242574 --- /dev/null +++ b/buildconfig/manylinux-build/docker_base/buildtools/install.sh @@ -0,0 +1,22 @@ +#!/bin/bash +set -e -x + +cd $(dirname `readlink -f "$0"`) + +# This file installs tools (cmake and meson+ninja) needed to build dependencies +# Also installs setuptools to make sure distutils is available (on newer python +# versions) because some builds may need it. +# cmake is also installed via pip because it is easier than maintaining a +# separate build script for it + +if [[ "$OSTYPE" == "linux-gnu"* ]]; then + export PG_LINUX_EXTRA_FLAGS="--user" +fi + +# pin versions for stability (remember to keep updated) +python3 -m pip install $PG_LINUX_EXTRA_FLAGS \ + setuptools==68.2.2 cmake==3.27.6 meson==1.2.2 ninja==1.11.1 + +if [[ "$OSTYPE" == "linux-gnu"* ]]; then + cp /root/.local/bin/* /usr/bin +fi diff --git a/buildconfig/manylinux-build/docker_base/cmake/build-cmake.sh b/buildconfig/manylinux-build/docker_base/cmake/build-cmake.sh deleted file mode 100644 index ca73547f4b..0000000000 --- a/buildconfig/manylinux-build/docker_base/cmake/build-cmake.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -set -e -x - -cd $(dirname `readlink -f "$0"`) - -# The latest cmake doesn't easily compile from source on centos 5 -# So cmake is installed with pip -# This way we save compile time, reduce maintenance+scripting efforts and also -# get the right binaries of the latest cmake version that will work on centos 5 -# and above (the pip cmake package provides manylinux1 i686/x86_64 and -# manylinux2014 i686/x86_64/aarch64 wheels) - -# this file is only intended to work in our manylinux build system and not on -# macOS, which has a modern enough cmake already - -# any cpython version can be used here -# (this must be updated when we drop 3.10 support after a few years) -PYTHON_VER=cp310-cp310 -PYTHON_BIN=/opt/python/${PYTHON_VER}/bin - -# this installs cmake in python bin dir, copy it to /usr/bin once installed -${PYTHON_BIN}/pip install cmake -cp ${PYTHON_BIN}/cmake /usr/bin diff --git a/buildconfig/manylinux-build/docker_base/cmake/cmake.sha512 b/buildconfig/manylinux-build/docker_base/cmake/cmake.sha512 deleted file mode 100644 index f3d171c801..0000000000 --- a/buildconfig/manylinux-build/docker_base/cmake/cmake.sha512 +++ /dev/null @@ -1 +0,0 @@ -c3449d3cb0a89679e3de703313362881e796c89e36a4861c8a62222a08c17450ed4531577ceee25dc8f3b0c46af10443eca97eee3bf69d2b6e091f19784575c1 cmake-3.12.4.tar.gz From 217009d84e8516bdeb6bd84b3516857b17b73299 Mon Sep 17 00:00:00 2001 From: Ankith Date: Mon, 6 Nov 2023 11:59:19 +0530 Subject: [PATCH 2/3] Bump glib to latest version (and build with meson) --- buildconfig/macdependencies/build_mac_deps.sh | 4 ++-- .../macdependencies/clean_usr_local.sh | 2 +- .../docker_base/Dockerfile-aarch64 | 5 +++-- .../docker_base/Dockerfile-i686 | 5 +++-- .../docker_base/Dockerfile-x86_64 | 5 +++-- .../docker_base/glib/build-glib.sh | 20 +++++++++---------- .../docker_base/glib/glib.sha512 | 2 +- .../docker_base/glib/macos_arm64.cache | 16 --------------- 8 files changed, 23 insertions(+), 36 deletions(-) delete mode 100644 buildconfig/manylinux-build/docker_base/glib/macos_arm64.cache diff --git a/buildconfig/macdependencies/build_mac_deps.sh b/buildconfig/macdependencies/build_mac_deps.sh index 104fd7ee72..d733307b32 100644 --- a/buildconfig/macdependencies/build_mac_deps.sh +++ b/buildconfig/macdependencies/build_mac_deps.sh @@ -95,8 +95,8 @@ bash mpg123/build-mpg123.sh bash opus/build-opus.sh # needs libogg (which is a container format) # fluidsynth (for sdl_mixer) -bash gettext/build-gettext.sh -bash glib/build-glib.sh # depends on gettext +# bash gettext/build-gettext.sh +bash glib/build-glib.sh bash sndfile/build-sndfile.sh bash fluidsynth/build-fluidsynth.sh diff --git a/buildconfig/macdependencies/clean_usr_local.sh b/buildconfig/macdependencies/clean_usr_local.sh index 28ea6ff4ec..ad92f45aad 100644 --- a/buildconfig/macdependencies/clean_usr_local.sh +++ b/buildconfig/macdependencies/clean_usr_local.sh @@ -29,7 +29,7 @@ rm -rf /usr/local/Cellar/libtiff rm -rf /usr/local/Cellar/libsndfile rm -rf /usr/local/Cellar/glib rm -rf /usr/local/Cellar/brotli -rm -rf /usr/local/Cellar/pcre +rm -rf /usr/local/Cellar/pcre* rm -rf /usr/local/Cellar/opusfile rm -rf /usr/local/Cellar/opus rm -rf /usr/local/Cellar/freetype diff --git a/buildconfig/manylinux-build/docker_base/Dockerfile-aarch64 b/buildconfig/manylinux-build/docker_base/Dockerfile-aarch64 index 6ad225e718..007e9f864f 100644 --- a/buildconfig/manylinux-build/docker_base/Dockerfile-aarch64 +++ b/buildconfig/manylinux-build/docker_base/Dockerfile-aarch64 @@ -97,8 +97,9 @@ RUN ["bash", "/libmodplug_build/build-libmodplug.sh"] ADD libffi /libffi_build/ RUN ["bash", "/libffi_build/build-libffi.sh"] -ADD gettext /gettext_build/ -RUN ["bash", "/gettext_build/build-gettext.sh"] +# explicit install not needed anymore +# ADD gettext /gettext_build/ +# RUN ["bash", "/gettext_build/build-gettext.sh"] ADD glib /glib_build/ RUN ["bash", "/glib_build/build-glib.sh"] diff --git a/buildconfig/manylinux-build/docker_base/Dockerfile-i686 b/buildconfig/manylinux-build/docker_base/Dockerfile-i686 index 085cdfd23b..a1e632d8b6 100644 --- a/buildconfig/manylinux-build/docker_base/Dockerfile-i686 +++ b/buildconfig/manylinux-build/docker_base/Dockerfile-i686 @@ -97,8 +97,9 @@ RUN ["linux32", "bash", "/libmodplug_build/build-libmodplug.sh"] ADD libffi /libffi_build/ RUN ["bash", "/libffi_build/build-libffi.sh"] -ADD gettext /gettext_build/ -RUN ["bash", "/gettext_build/build-gettext.sh"] +# explicit install not needed anymore +# ADD gettext /gettext_build/ +# RUN ["bash", "/gettext_build/build-gettext.sh"] ADD glib /glib_build/ RUN ["bash", "/glib_build/build-glib.sh"] diff --git a/buildconfig/manylinux-build/docker_base/Dockerfile-x86_64 b/buildconfig/manylinux-build/docker_base/Dockerfile-x86_64 index dcf3c8cd50..4217eea750 100644 --- a/buildconfig/manylinux-build/docker_base/Dockerfile-x86_64 +++ b/buildconfig/manylinux-build/docker_base/Dockerfile-x86_64 @@ -97,8 +97,9 @@ RUN ["bash", "/libmodplug_build/build-libmodplug.sh"] ADD libffi /libffi_build/ RUN ["bash", "/libffi_build/build-libffi.sh"] -ADD gettext /gettext_build/ -RUN ["bash", "/gettext_build/build-gettext.sh"] +# explicit install not needed anymore +# ADD gettext /gettext_build/ +# RUN ["bash", "/gettext_build/build-gettext.sh"] ADD glib /glib_build/ RUN ["bash", "/glib_build/build-glib.sh"] diff --git a/buildconfig/manylinux-build/docker_base/glib/build-glib.sh b/buildconfig/manylinux-build/docker_base/glib/build-glib.sh index b7571bbea8..6549ad1e6d 100644 --- a/buildconfig/manylinux-build/docker_base/glib/build-glib.sh +++ b/buildconfig/manylinux-build/docker_base/glib/build-glib.sh @@ -3,21 +3,21 @@ set -e -x cd $(dirname `readlink -f "$0"`) -GLIB=glib-2.56.4 +GLIB_VER="2.78" +GLIB_PATCH="1" +GLIB="glib-${GLIB_VER}.${GLIB_PATCH}" -curl -sL --retry 10 https://download.gnome.org/sources/glib/2.56/${GLIB}.tar.xz > ${GLIB}.tar.xz +curl -sL --retry 10 https://download.gnome.org/sources/glib/${GLIB_VER}/${GLIB}.tar.xz > ${GLIB}.tar.xz sha512sum -c glib.sha512 unxz ${GLIB}.tar.xz tar xf ${GLIB}.tar cd $GLIB -if [[ "$MAC_ARCH" == "arm64" ]]; then - # pass a 'cache' file while cross compiling to arm64 for glib. This is - # needed for glib to determine some info about the target architecture - export GLIB_COMPILE_EXTRA_FLAGS="--cache-file=../macos_arm64.cache" -fi +# a minimal glib install will do for us +meson _build $PG_BASE_MESON_FLAGS -Dtests=false \ + -Dselinux=disabled -Dlibmount=disabled -Ddtrace=false -Dsystemtap=false -Dnls=disabled + +ninja -C _build +ninja -C _build install -CFLAGS=-Wno-error ./configure $PG_BASE_CONFIGURE_FLAGS --with-pcre=internal $GLIB_COMPILE_EXTRA_FLAGS --disable-libmount --disable-dbus -make -make install diff --git a/buildconfig/manylinux-build/docker_base/glib/glib.sha512 b/buildconfig/manylinux-build/docker_base/glib/glib.sha512 index ce5aca768b..a1365d9df6 100644 --- a/buildconfig/manylinux-build/docker_base/glib/glib.sha512 +++ b/buildconfig/manylinux-build/docker_base/glib/glib.sha512 @@ -1 +1 @@ -280a46c2af13283a08c15ff0b4f5492659c2884521930600ad45310ed181c44a878ad8f9b36bae68ed6e7d92db6f1630f7bf015148c513dc317d25807f13abb0 glib-2.56.4.tar.xz +aa9ed9195951b00ac8221e958ea337fbda82621a862ef8f29dc2ea396a6253ce51c2a0a498dfa4e12642f1836f85f9564f09991979ae85c5ed4368355d857376 glib-2.78.1.tar.xz diff --git a/buildconfig/manylinux-build/docker_base/glib/macos_arm64.cache b/buildconfig/manylinux-build/docker_base/glib/macos_arm64.cache deleted file mode 100644 index ef5bb82bdb..0000000000 --- a/buildconfig/manylinux-build/docker_base/glib/macos_arm64.cache +++ /dev/null @@ -1,16 +0,0 @@ -glib_cv_stack_grows=no -glib_cv_uscore=no -ac_cv_func_posix_getpwuid_r=yes -ac_cv_func_posix_getgrgid_r=yes -ac_cv_alignof_guint32=4 -ac_cv_alignof_guint64=8 -ac_cv_alignof_unsigned_long=8 -glib_cv_long_long_format=ll -glib_cv_sane_realloc=yes -glib_cv_have_strlcpy=no -glib_cv_va_val_copy=yes -glib_cv_rtldglobal_broken=no -glib_cv_monotonic_clock=no -ac_cv_func_nonposix_getpwuid_r=no -ac_cv_func_printf_unix98=no -ac_cv_func_vsnprintf_c99=yes From d825ef134dbfb6f5a44b5d647c0c27146eb026b9 Mon Sep 17 00:00:00 2001 From: Ankith Date: Fri, 24 Nov 2023 15:05:19 +0530 Subject: [PATCH 3/3] Use meson compile/install instead of ninja --- buildconfig/manylinux-build/docker_base/glib/build-glib.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/buildconfig/manylinux-build/docker_base/glib/build-glib.sh b/buildconfig/manylinux-build/docker_base/glib/build-glib.sh index 6549ad1e6d..e990c3486e 100644 --- a/buildconfig/manylinux-build/docker_base/glib/build-glib.sh +++ b/buildconfig/manylinux-build/docker_base/glib/build-glib.sh @@ -15,9 +15,9 @@ tar xf ${GLIB}.tar cd $GLIB # a minimal glib install will do for us -meson _build $PG_BASE_MESON_FLAGS -Dtests=false \ +meson setup _build $PG_BASE_MESON_FLAGS -Dtests=false \ -Dselinux=disabled -Dlibmount=disabled -Ddtrace=false -Dsystemtap=false -Dnls=disabled -ninja -C _build -ninja -C _build install +meson compile -C _build +meson install -C _build