diff options
| author | quarrel07 <quarrel-07atolls@icloud.com> | 2026-07-17 15:28:29 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-07-18 00:28:29 +0200 |
| commit | 6ed9a8ad288aebd6438af924e2de9f4061f99fb9 (patch) | |
| tree | 74a082445dfd300a12e43301e317490898af55ae /cmake/TorchExternalFixes.cmake | |
| parent | d1dec0f6f437cf5342a8514f23741da9ded95485 (diff) | |
Fix macOS arm64 build: fmt consteval error in the TorchExternal sub-build (#712)
* Fix macOS arm64 build: fmt consteval error in the TorchExternal sub-build
Torch's pinned spdlog bundles an fmt whose consteval format-string
checking fails to compile under newer AppleClang (Xcode 16+), breaking
the build-macos-arm64 CI job (the intel runner's older Xcode doesn't hit
it):
error: call to consteval function 'fmt::basic_format_string<...>' is
not a constant expression
Define FMT_CONSTEVAL as empty inside the Torch sub-build, falling back to
fmt's pre-C++20 constexpr checking. Injected via CMAKE_PROJECT_INCLUDE
because Torch's CMakeLists overwrites CMAKE_CXX_FLAGS, so plain flag
injection through CMAKE_ARGS is discarded. Scoped to AppleClang; no other
platform or compiler is affected, and the Torch pin is unchanged.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Also neutralize FMT_CONSTEVAL for the game build (vcpkg spdlog/fmt)
With the TorchExternal fix in place, CI reaches the game build and hits
the same consteval error again, this time from the vcpkg-provided
spdlog/fmt headers (SPDLOG_FMT_EXTERNAL) under the runner's Xcode 26.5.
Apply the same AppleClang-scoped FMT_CONSTEVAL= define at the project
level so both layers compile.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Pin vcpkg fmt to 10.2.1 (+ spdlog 1.14.1): fmt 11.0.2 can't compile on new AppleClang
The baseline's fmt 11.0.2 both fails to compile under newer AppleClang
(consteval format-string checking) and removed the #ifndef guard around
FMT_CONSTEVAL, so the AppleClang-scoped define from the previous commit
lands on the compile line but gets clobbered by fmt's own definition
(FMT_USE_CONSTEVAL is likewise unguarded in that version). No newer fmt
exists in the pinned baseline.
Override fmt to 10.2.1, which keeps the #ifndef guard, making the
existing define effective; spdlog moves to the matching 1.14.1 (1.15.x
requires fmt >= 11 headers).
Verified locally against the exact CI setup (vcpkg at baseline
2e58bb35ff, vcpkg toolchain file, Ninja): the previous failure reproduces
without this change and the full game builds cleanly with it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Add TODO markers for removing the fmt consteval workarounds
Requested in PR #712 review: mark all three workaround sites (project-level
define, Torch sub-build include, vcpkg fmt/spdlog pins) so they can be found
and removed together once the Torch pin is bumped past its spdlog/fmt update.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: siliconports <aguthmann10@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Diffstat (limited to 'cmake/TorchExternalFixes.cmake')
| -rw-r--r-- | cmake/TorchExternalFixes.cmake | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/cmake/TorchExternalFixes.cmake b/cmake/TorchExternalFixes.cmake new file mode 100644 index 000000000..9dd5bf9e3 --- /dev/null +++ b/cmake/TorchExternalFixes.cmake @@ -0,0 +1,18 @@ +# Included in the TorchExternal sub-build via CMAKE_PROJECT_INCLUDE (runs right +# after Torch's project() call). +# +# Torch's pinned spdlog bundles an fmt whose consteval format-string checking +# fails to compile under newer AppleClang (Xcode 16+): +# error: call to consteval function 'fmt::basic_format_string<...>' is not a +# constant expression +# Defining FMT_CONSTEVAL to empty falls back to fmt's pre-C++20 constexpr +# checking, which compiles cleanly. Scoped to AppleClang so other platforms and +# compilers are untouched. add_compile_definitions (rather than CMAKE_CXX_FLAGS) +# because Torch's CMakeLists overwrites the latter. +# TODO: Temporary hack. Delete this file (plus the CMAKE_PROJECT_INCLUDE line +# in CMakeLists.txt and the vcpkg.json fmt/spdlog pins) once the Torch pin is +# bumped past Torch's spdlog/fmt update. Note the bump also needs matching +# MK64 loader changes, see the discussion on PR #712. +if(APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_definitions("FMT_CONSTEVAL=") +endif() |
