diff options
author | Brad King <brad.king@kitware.com> | 2020-12-10 14:50:47 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2020-12-10 15:03:52 (GMT) |
commit | b201dc0d4239aa0f2babf572b1ce75de3e7a05e6 (patch) | |
tree | 49109724e1e03dbb27cd658e98ca9c4c93df03bf /Utilities | |
parent | 020e1e2031ae05844144b64b9ade649479946082 (diff) | |
download | CMake-b201dc0d4239aa0f2babf572b1ce75de3e7a05e6.zip CMake-b201dc0d4239aa0f2babf572b1ce75de3e7a05e6.tar.gz CMake-b201dc0d4239aa0f2babf572b1ce75de3e7a05e6.tar.bz2 |
Utilities/Release: Add script to build Qt 5.9.9 macOS universal binaries
These may be used to build a CMake universal binary for macOS that supports
both architectures on Apple Silicon and is compatible with OS X 10.10.
Diffstat (limited to 'Utilities')
-rw-r--r-- | Utilities/Release/README.rst | 6 | ||||
-rwxr-xr-x | Utilities/Release/macos/qt-5.9.9-macosx10.10-x86_64-arm64.bash | 132 |
2 files changed, 138 insertions, 0 deletions
diff --git a/Utilities/Release/README.rst b/Utilities/Release/README.rst index 2d3525d..6e55dff 100644 --- a/Utilities/Release/README.rst +++ b/Utilities/Release/README.rst @@ -74,3 +74,9 @@ Each ``<os>/<arch>/`` directory contains the following: argument specifying either ``x86_64`` or ``i386``. .. _`kitware/cmake Docker Hub Repository`: https://hub.docker.com/r/kitware/cmake + +macOS +----- + +The ``macos/`` directory contains scripts used to produce dependencies +for building CMake binaries on macOS. diff --git a/Utilities/Release/macos/qt-5.9.9-macosx10.10-x86_64-arm64.bash b/Utilities/Release/macos/qt-5.9.9-macosx10.10-x86_64-arm64.bash new file mode 100755 index 0000000..b0973f4 --- /dev/null +++ b/Utilities/Release/macos/qt-5.9.9-macosx10.10-x86_64-arm64.bash @@ -0,0 +1,132 @@ +#!/usr/bin/env bash + +# Run this script on a macOS x86_64 host to generate Qt universal binaries. +# +# This script requires the 'makeuniversal' tool from: +# +# https://github.com/fizzyade/makeuniversal +# +# Build it with an existing local Qt installation first. +# +# Set the PATH environment variable to contain the location of 'makeuniversal'. + +set -e +set -x + +# Verify that 'makeuniversal' is available in the PATH. +type -p makeuniversal >/dev/null + +# Download, verify, and extract sources. +curl -OL https://download.qt.io/archive/qt/5.9/5.9.9/single/qt-everywhere-opensource-src-5.9.9.tar.xz +shasum -a 256 qt-everywhere-opensource-src-5.9.9.tar.xz | grep -q 5ce285209290a157d7f42ec8eb22bf3f1d76f2e03a95fc0b99b553391be01642 +tar xjf qt-everywhere-opensource-src-5.9.9.tar.xz + +# Build the x86_64 variant. +mkdir qt-5.9.9-x86_64 +cd qt-5.9.9-x86_64 +../qt-everywhere-opensource-src-5.9.9/configure \ + --prefix=/ \ + -platform macx-clang \ + -device-option QMAKE_APPLE_DEVICE_ARCHS=x86_64 \ + -device-option QMAKE_MACOSX_DEPLOYMENT_TARGET=10.10 \ + -release \ + -opensource -confirm-license \ + -gui \ + -widgets \ + -no-gif \ + -no-icu \ + -no-pch \ + -no-angle \ + -no-opengl \ + -no-dbus \ + -no-harfbuzz \ + -skip declarative \ + -skip multimedia \ + -skip qtcanvas3d \ + -skip qtcharts \ + -skip qtconnectivity \ + -skip qtdeclarative \ + -skip qtgamepad \ + -skip qtlocation \ + -skip qtmultimedia \ + -skip qtnetworkauth \ + -skip qtpurchasing \ + -skip qtremoteobjects \ + -skip qtscript \ + -skip qtsensors \ + -skip qtserialbus \ + -skip qtserialport \ + -skip qtsvg \ + -skip qtwebchannel \ + -skip qtwebengine \ + -skip qtwebsockets \ + -skip qtxmlpatterns \ + -nomake examples \ + -nomake tests \ + -nomake tools +make -j 8 +cd .. + +# Build the arm64 variant. +mkdir qt-5.9.9-arm64 +cd qt-5.9.9-arm64 +../qt-everywhere-opensource-src-5.9.9/configure \ + --prefix=/ \ + -platform macx-clang \ + -device-option QMAKE_APPLE_DEVICE_ARCHS=arm64 \ + -device-option QMAKE_MACOSX_DEPLOYMENT_TARGET=10.10 \ + -release \ + -opensource -confirm-license \ + -gui \ + -widgets \ + -no-gif \ + -no-icu \ + -no-pch \ + -no-angle \ + -no-opengl \ + -no-dbus \ + -no-harfbuzz \ + -skip declarative \ + -skip multimedia \ + -skip qtcanvas3d \ + -skip qtcharts \ + -skip qtconnectivity \ + -skip qtdeclarative \ + -skip qtgamepad \ + -skip qtlocation \ + -skip qtmultimedia \ + -skip qtnetworkauth \ + -skip qtpurchasing \ + -skip qtremoteobjects \ + -skip qtscript \ + -skip qtsensors \ + -skip qtserialbus \ + -skip qtserialport \ + -skip qtsvg \ + -skip qtwebchannel \ + -skip qtwebengine \ + -skip qtwebsockets \ + -skip qtxmlpatterns \ + -nomake examples \ + -nomake tests \ + -nomake tools +# Some executables fail to link due to architecture mismatch. +# Build what we can first. +make -j 8 -k || true +# Provide needed executables using the x86_64 variants. +cp ../qt-5.9.9-x86_64/qtbase/bin/uic qtbase/bin/uic +install_name_tool -add_rpath @executable_path/../../../qt-5.9.9-x86_64/qtbase/lib qtbase/bin/uic +cp ../qt-5.9.9-x86_64/qtbase/bin/qlalr qtbase/bin/qlalr +install_name_tool -add_rpath @executable_path/../../../qt-5.9.9-x86_64/qtbase/lib qtbase/bin/qlalr +# Some parts still fail to build, but the parts we need can finish. +make -j 8 -k || true +cd .. + +# Combine the two builds into universal binaries. +makeuniversal qt-5.9.9-univ qt-5.9.9-x86_64 qt-5.9.9-arm64 +cd qt-5.9.9-univ +make install -j 8 INSTALL_ROOT=/tmp/qt-5.9.9-macosx10.10-x86_64-arm64 +cd .. + +# Create the final tarball containing universal binaries. +tar cjf qt-5.9.9-macosx10.10-x86_64-arm64.tar.xz -C /tmp qt-5.9.9-macosx10.10-x86_64-arm64 |