diff --git a/.github/workflows/build-depends.yml b/.github/workflows/build-depends.yml index e942a59776f8a..5eafd46f9ca56 100644 --- a/.github/workflows/build-depends.yml +++ b/.github/workflows/build-depends.yml @@ -51,9 +51,18 @@ jobs: depends/sources key: depends-sources-${{ hashFiles('depends/packages/*') }} restore-keys: | - depends-sources-${{ hashFiles('depends/packages/*') }} depends-sources- + - name: Cache SDKs + uses: actions/cache@v4 + if: inputs.build-target == 'mac' + with: + path: | + depends/SDKs + key: depends-sdks-${{ hashFiles('depends/hosts/darwin.mk') }} + restore-keys: | + depends-sdks- + - name: Restore cached depends uses: actions/cache/restore@v4 id: restore @@ -61,13 +70,18 @@ jobs: path: | depends/built depends/${{ steps.setup.outputs.HOST }} - key: ${{ runner.os }}-depends-${{ inputs.build-target }}-${{ steps.setup.outputs.DEP_HASH }}-${{ hashFiles('depends/packages/*') }} + key: depends-${{ hashFiles('contrib/containers/ci/Dockerfile') }}-${{ inputs.build-target }}-${{ steps.setup.outputs.DEP_HASH }}-${{ hashFiles('depends/packages/*') }} restore-keys: | - ${{ runner.os }}-depends-${{ inputs.build-target }}-${{ hashFiles('depends/packages/*') }} - ${{ runner.os }}-depends-${{ inputs.build-target }} + depends-${{ hashFiles('contrib/containers/ci/Dockerfile') }}-${{ inputs.build-target }}-${{ steps.setup.outputs.DEP_HASH }}- + depends-${{ hashFiles('contrib/containers/ci/Dockerfile') }}-${{ inputs.build-target }}- - name: Build depends - run: env ${{ steps.setup.outputs.DEP_OPTS }} HOST=${{ steps.setup.outputs.HOST }} make -j$(nproc) -C depends + run: | + export HOST="${{ steps.setup.outputs.HOST }}" + if [ "${HOST}" = "x86_64-apple-darwin" ]; then + ./contrib/containers/guix/scripts/setup-sdk + fi + env ${{ steps.setup.outputs.DEP_OPTS }} make -j$(nproc) -C depends - name: Save depends cache uses: actions/cache/save@v4 diff --git a/.github/workflows/build-src.yml b/.github/workflows/build-src.yml index 45411eaa51f5c..88f91811f1188 100644 --- a/.github/workflows/build-src.yml +++ b/.github/workflows/build-src.yml @@ -44,6 +44,15 @@ jobs: echo "PR_BASE_SHA=${{ github.event.pull_request.base.sha || '' }}" >> $GITHUB_OUTPUT shell: bash + - name: Restore SDKs cache + uses: actions/cache/restore@v4 + if: inputs.build-target == 'mac' + with: + path: | + depends/SDKs + key: depends-sdks-${{ hashFiles('depends/hosts/darwin.mk') }} + fail-on-cache-miss: true + - name: Restore depends cache uses: actions/cache/restore@v4 with: @@ -58,11 +67,9 @@ jobs: with: path: | /cache - key: ${{ runner.os }}-${{ inputs.build-target }}-${{ github.sha }} + key: ccache-${{ hashFiles('contrib/containers/ci/Dockerfile', 'depends/packages/*') }}-${{ inputs.build-target }}-${{ github.sha }} restore-keys: | - ${{ runner.os }}-${{ inputs.build-target }}-${{ github.sha }} - ${{ runner.os }}-${{ inputs.build-target }}-${{ steps.setup.outputs.HOST }} - ${{ runner.os }}-${{ inputs.build-target }} + ccache-${{ hashFiles('contrib/containers/ci/Dockerfile', 'depends/packages/*') }}-${{ inputs.build-target }}- - name: Build source and run unit tests run: | diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 424e47e43665e..6b14bf2dfa1ee 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -49,6 +49,14 @@ jobs: build-target: linux64_nowallet container-path: ${{ needs.container.outputs.path }} + depends-mac: + name: x86_64-apple-darwin + uses: ./.github/workflows/build-depends.yml + needs: [container] + with: + build-target: mac + container-path: ${{ needs.container.outputs.path }} + depends-win64: name: x86_64-w64-mingw32 uses: ./.github/workflows/build-depends.yml @@ -129,6 +137,15 @@ jobs: container-path: ${{ needs.container.outputs.path }} depends-key: ${{ needs.depends-linux64.outputs.key }} + src-mac: + name: mac-build + uses: ./.github/workflows/build-src.yml + needs: [container, depends-mac] + with: + build-target: mac + container-path: ${{ needs.container.outputs.path }} + depends-key: ${{ needs.depends-mac.outputs.key }} + src-win64: name: win64-build uses: ./.github/workflows/build-src.yml diff --git a/contrib/guix/libexec/build.sh b/contrib/guix/libexec/build.sh index ea1d5079ee3d7..b44eff598e22f 100755 --- a/contrib/guix/libexec/build.sh +++ b/contrib/guix/libexec/build.sh @@ -73,11 +73,9 @@ unset OBJCPLUS_INCLUDE_PATH export C_INCLUDE_PATH="${NATIVE_GCC}/include" export CPLUS_INCLUDE_PATH="${NATIVE_GCC}/include/c++:${NATIVE_GCC}/include" -export OBJC_INCLUDE_PATH="${NATIVE_GCC}/include" -export OBJCPLUS_INCLUDE_PATH="${NATIVE_GCC}/include/c++:${NATIVE_GCC}/include" case "$HOST" in - *darwin*) export LIBRARY_PATH="${NATIVE_GCC}/lib" ;; + *darwin*) export LIBRARY_PATH="${NATIVE_GCC}/lib" ;; # Required for qt/qmake *mingw*) export LIBRARY_PATH="${NATIVE_GCC}/lib" ;; *) NATIVE_GCC_STATIC="$(store_path gcc-toolchain static)" @@ -182,6 +180,14 @@ make -C depends --jobs="$JOBS" HOST="$HOST" \ x86_64_linux_NM=x86_64-linux-gnu-gcc-nm \ x86_64_linux_STRIP=x86_64-linux-gnu-strip +case "$HOST" in + *darwin*) + # Unset now that Qt is built + unset C_INCLUDE_PATH + unset CPLUS_INCLUDE_PATH + unset LIBRARY_PATH + ;; +esac ########################### # Source Tarball Building # diff --git a/depends/hosts/darwin.mk b/depends/hosts/darwin.mk index 564381d1e9308..a50e36110dc02 100644 --- a/depends/hosts/darwin.mk +++ b/depends/hosts/darwin.mk @@ -50,17 +50,11 @@ darwin_STRIP=$(shell $(SHELL) $(.SHELLFLAGS) "command -v llvm-strip") # Disable adhoc codesigning (for now) when using LLVM tooling, to avoid # non-determinism issues with the Identifier field. -darwin_CC=env -u C_INCLUDE_PATH -u CPLUS_INCLUDE_PATH \ - -u OBJC_INCLUDE_PATH -u OBJCPLUS_INCLUDE_PATH -u CPATH \ - -u LIBRARY_PATH \ - $(clang_prog) --target=$(host) \ +darwin_CC=$(clang_prog) --target=$(host) \ -isysroot$(OSX_SDK) -nostdlibinc \ -iwithsysroot/usr/include -iframeworkwithsysroot/System/Library/Frameworks -darwin_CXX=env -u C_INCLUDE_PATH -u CPLUS_INCLUDE_PATH \ - -u OBJC_INCLUDE_PATH -u OBJCPLUS_INCLUDE_PATH -u CPATH \ - -u LIBRARY_PATH \ - $(clangxx_prog) --target=$(host) \ +darwin_CXX=$(clangxx_prog) --target=$(host) \ -isysroot$(OSX_SDK) -nostdlibinc \ -iwithsysroot/usr/include/c++/v1 \ -iwithsysroot/usr/include -iframeworkwithsysroot/System/Library/Frameworks diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk index 18c01e7cf0631..575a0e76f49e3 100644 --- a/depends/packages/qt.mk +++ b/depends/packages/qt.mk @@ -25,6 +25,7 @@ $(package)_patches += memory_resource.patch $(package)_patches += clang_18_libpng.patch $(package)_patches += utc_from_string_no_optimize.patch $(package)_patches += windows_lto.patch +$(package)_patches += darwin_no_libm.patch $(package)_patches += zlib-timebits64.patch $(package)_qttranslations_file_name=qttranslations-$($(package)_suffix) @@ -258,6 +259,7 @@ define $(package)_preprocess_cmds patch -p1 -i $($(package)_patch_dir)/fast_fixed_dtoa_no_optimize.patch && \ patch -p1 -i $($(package)_patch_dir)/guix_cross_lib_path.patch && \ patch -p1 -i $($(package)_patch_dir)/windows_lto.patch && \ + patch -p1 -i $($(package)_patch_dir)/darwin_no_libm.patch && \ patch -p1 -i $($(package)_patch_dir)/zlib-timebits64.patch && \ mkdir -p qtbase/mkspecs/macx-clang-linux &&\ cp -f qtbase/mkspecs/macx-clang/qplatformdefs.h qtbase/mkspecs/macx-clang-linux/ &&\ diff --git a/depends/patches/qt/darwin_no_libm.patch b/depends/patches/qt/darwin_no_libm.patch new file mode 100644 index 0000000000000..38a94beeb7a69 --- /dev/null +++ b/depends/patches/qt/darwin_no_libm.patch @@ -0,0 +1,17 @@ +build: remove explicit -lm link from qttools + +This causes issues with at least the macOS cross build, and shouldn't +actually be required anywhere else. GCC with libstdc++ will already get libm. + +--- a/qtbase/src/corelib/tools/tools.pri ++++ b/qtbase/src/corelib/tools/tools.pri +@@ -111,9 +111,6 @@ qtConfig(easingcurve) { + tools/qtimeline.cpp + } + +-# Note: libm should be present by default becaue this is C++ +-unix:!macx-icc:!vxworks:!haiku:!integrity:!wasm: LIBS_PRIVATE += -lm +- + TR_EXCLUDE += ../3rdparty/* + + # MIPS DSP