Skip to content

Retarget windows CRT to MultiThreaded(Debug) for compat with future plugin brokers#331

Merged
RyeMutt merged 1 commit into
developfrom
rye/static-crt
Jun 27, 2026
Merged

Retarget windows CRT to MultiThreaded(Debug) for compat with future plugin brokers#331
RyeMutt merged 1 commit into
developfrom
rye/static-crt

Conversation

@RyeMutt

@RyeMutt RyeMutt commented Jun 27, 2026

Copy link
Copy Markdown
Member

Description

Retarget windows CRT to MultiThreaded(Debug) for compat with future plugin brokers
Bump GHA xcode version to 26.6
Bump macos min deploy target to 14.0
Update various vcpkg override ports

Related Issues

  • Please link to a relevant GitHub issue for additional context.
    • Bug Fix: Link to an issue that includes reproduction steps and testing guidance.
    • Feature/Enhancement: Link to an issue with a write-up, rationale, and requirements.

Issue Link:


Checklist

Please ensure the following before requesting review:

  • I have provided a clear title and detailed description for this pull request.
  • If useful, I have included media such as screenshots and video to show off my changes.
  • I have tested the changes locally and verified they work as intended.
  • All new and existing tests pass.
  • Code follows the project's style guidelines.
  • Documentation has been updated if needed.
  • Any dependent changes have been merged and published in downstream modules
  • I have reviewed the contributing guidelines.

Additional Notes

@coderabbitai

coderabbitai Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@RyeMutt, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 18 minutes and 1 second. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: a4ee8ac8-2e54-4176-99e4-bf33982c1007

📥 Commits

Reviewing files that changed from the base of the PR and between 531e06c and ac2e1dc.

📒 Files selected for processing (29)
  • .github/workflows/build.yaml
  • indra/CMakeLists.txt
  • indra/cmake/00-Common.cmake
  • indra/cmake/BootstrapVcpkg.cmake
  • indra/cmake/CURL.cmake
  • indra/cmake/Collada-Dom.cmake
  • indra/cmake/Copy3rdPartyLibs.cmake
  • indra/newview/llvoiceclient.cpp
  • indra/vcpkg.json
  • indra/vcpkg/ports/apr/vcpkg.json
  • indra/vcpkg/ports/cef-bin/portfile.cmake
  • indra/vcpkg/ports/faudio/portfile.cmake
  • indra/vcpkg/ports/faudio/vcpkg.json
  • indra/vcpkg/ports/freetype/portfile.cmake
  • indra/vcpkg/ports/tracy/portfile.cmake
  • indra/vcpkg/ports/webrtc-bin/portfile.cmake
  • indra/vcpkg/ports/webrtc-bin/vcpkg.json
  • indra/vcpkg/ports/zlib/portfile.cmake
  • indra/vcpkg/ports/zlib/vcpkg-cmake-wrapper.cmake
  • indra/vcpkg/ports/zlib/vcpkg.json
  • indra/vcpkg/triplets/arm64-osx-alchemy-release.cmake
  • indra/vcpkg/triplets/arm64-osx-alchemy.cmake
  • indra/vcpkg/triplets/x64-linux-alchemy-release.cmake
  • indra/vcpkg/triplets/x64-linux-alchemy.cmake
  • indra/vcpkg/triplets/x64-osx-alchemy-release.cmake
  • indra/vcpkg/triplets/x64-osx-alchemy.cmake
  • indra/vcpkg/triplets/x64-windows-alchemy-release.cmake
  • indra/vcpkg/triplets/x64-windows-alchemy.cmake
  • vcpkg
📝 Walkthrough

Walkthrough

The PR refreshes the Alchemy viewer's build infrastructure: renames all vcpkg triplets from *-secondlife* to *-alchemy*, switches Windows to static CRT/library linkage, raises macOS deployment target to 14.0, updates the vcpkg submodule and baseline, bumps FAudio to 26.6 and WebRTC-bin to r11, fixes several port recipes for static builds, and gates WebRTC voice logic behind DISABLE_WEBRTC.

Changes

Build and dependency refresh

Layer / File(s) Summary
Build runtime and staging
.github/workflows/build.yaml, indra/cmake/00-Common.cmake, indra/cmake/CURL.cmake, indra/cmake/Collada-Dom.cmake, indra/cmake/Copy3rdPartyLibs.cmake
Xcode 26.6 selected; Windows MSVC runtime switches to non-DLL static; LIBCMT/LIBCMTD nodefaultlib logic updated per build config; nghttp2 linked unconditionally; DOM_DYNAMIC=1 removed; Windows runtime DLL staging block commented out.
WebRTC gating
indra/cmake/00-Common.cmake, indra/newview/llvoiceclient.cpp
DISABLE_WEBRTC is now driven by the CMake variable instead of a Debug-only generator expression; voice-server fallback and mismatch override in llvoiceclient.cpp are wrapped in #ifndef DISABLE_WEBRTC.
Bootstrap triplets and pins
indra/cmake/BootstrapVcpkg.cmake, .github/workflows/build.yaml, indra/vcpkg/triplets/*, indra/vcpkg.json, vcpkg
All triplet names renamed from *-secondlife* to *-alchemy*; macOS deployment target raised to 14.0; Windows default linkage switched to static with openal-soft kept dynamic; vcpkg baseline and submodule updated.
CEF, FAudio, and WebRTC-Bin recipes
indra/vcpkg/ports/apr/vcpkg.json, indra/vcpkg/ports/cef-bin/portfile.cmake, indra/vcpkg/ports/faudio/..., indra/vcpkg/ports/webrtc-bin/...
APR gains port-version: 1; CEF conditionally passes /MD only for dynamic CRT; FAudio bumped to 26.6 with new SHA512; WebRTC-Bin advances from r10 to r11 on all platforms.
FreeType, Tracy, and Zlib recipes
indra/vcpkg/ports/freetype/portfile.cmake, indra/vcpkg/ports/tracy/portfile.cmake, indra/vcpkg/ports/zlib/...
FreeType drops harffbuzzwin.patch and unconditionally disables HarfBuzz; Tracy debug output copy branches on static vs dynamic linkage; Zlib renames static libs to zs/zsd and expands CMake wrapper lookup names.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • AlchemyViewer/Alchemy#321: Also updates indra/vcpkg.json's builtin-baseline and advances the vcpkg submodule commit in the same manner.

Poem

🐇 Hop, hop — the triplets changed their name,
From secondlife to alchemy they came!
Static libs now rule the land,
macOS 14 close at hand,
WebRTC gated, Zlib renamed with glee —
A fresher build for all to see! 🌿

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: Windows CRT retargeting for future plugin broker compatibility.
Description check ✅ Passed The description follows the required template and gives a concise summary, though the issue link and checklist items are not filled in.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
indra/cmake/00-Common.cmake (1)

163-169: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

The new option still cannot control Windows Debug builds.

Lines 163-165 already force DISABLE_WEBRTC=1 for every Windows Debug build, so the new if(DISABLE_WEBRTC) block below never becomes the single source of truth for that configuration. That keeps the llvoiceclient.cpp fallback paths compiled out in Debug even when the cache option is off. Fold both paths into one policy.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@indra/cmake/00-Common.cmake` around lines 163 - 169, The Windows Debug build
is still being forced to define DISABLE_WEBRTC=1, so the new cache option cannot
override that configuration. Update the compile-definition logic in the Common
CMake block so that llvoiceclient.cpp sees a single source of truth: make the
Debug behavior and the DISABLE_WEBRTC option flow through the same conditional,
instead of unconditionally adding the Debug definition separately. Use the
existing DISABLE_WEBRTC option check and the Windows Debug compile definition
section together so Debug builds only disable WebRTC when the option says so.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@indra/cmake/Copy3rdPartyLibs.cmake`:
- Around line 44-77: Do not remove the Windows VC runtime staging in
Copy3rdPartyLibs.cmake; the commented-out InstallRequiredSystemLibraries /
to_staging_dirs / to_viewer_staging_dirs logic is still needed for /MD-based
packages. Keep the existing system runtime copy flow intact so cef-bin,
webrtc-bin, vlc-bin, and the llplugin staging path continue to receive the
required MSVC DLLs on clean machines.

In `@indra/newview/llvoiceclient.cpp`:
- Around line 190-195: The current DISABLE_WEBRTC guard leaves an empty
VoiceServerType unresolved and lets getOutgoingCallInterface() silently fall
back to the local module, so update llvoiceclient.cpp to compute one effective
server type up front and use it consistently in both the startup path and
getOutgoingCallInterface(). If WEBRTC is unavailable and no non-WebRTC fallback
exists, reject the unsupported type immediately instead of allowing the empty
value to propagate; otherwise, route the resolved type through the same
selection logic everywhere voiceServerType is used.

In `@indra/vcpkg/ports/tracy/portfile.cmake`:
- Around line 49-53: The Tracy portfile is branching on VCPKG_CRT_LINKAGE for
copying the debug artifact, but this decision should be based on
VCPKG_LIBRARY_LINKAGE instead. Update the conditional in the portfile logic
around the TracyClient copy step so the .lib path is used for static library
linkage and the .dll path is used for dynamic library linkage, keeping the
existing file copy behavior otherwise.

In `@indra/vcpkg/ports/webrtc-bin/vcpkg.json`:
- Line 3: The WebRTC port manifest version is out of sync with the artifacts
fetched by the portfile, so update the version metadata in vcpkg.json and the
download references in portfile.cmake to the same upstream build identifier. Use
the webrtc-bin manifest and the download URLs in portfile.cmake as the source of
truth, and make sure the version-string matches the binaries being installed.

In `@indra/vcpkg/ports/zlib/portfile.cmake`:
- Around line 26-33: Exclude MinGW from the Windows static rename logic in the
zlib portfile so only the MSVC path is renamed. Update the conditional around
the file(RENAME) calls in portfile.cmake to also check VCPKG_TARGET_IS_MINGW,
keeping the existing VCPKG_TARGET_IS_WINDOWS and VCPKG_LIBRARY_LINKAGE STREQUAL
static guards intact. This should ensure the rename block only runs for the
zlibstatic library names produced by the MSVC toolchain and not for MinGW
builds.

---

Outside diff comments:
In `@indra/cmake/00-Common.cmake`:
- Around line 163-169: The Windows Debug build is still being forced to define
DISABLE_WEBRTC=1, so the new cache option cannot override that configuration.
Update the compile-definition logic in the Common CMake block so that
llvoiceclient.cpp sees a single source of truth: make the Debug behavior and the
DISABLE_WEBRTC option flow through the same conditional, instead of
unconditionally adding the Debug definition separately. Use the existing
DISABLE_WEBRTC option check and the Windows Debug compile definition section
together so Debug builds only disable WebRTC when the option says so.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: c72fb95c-38fe-453b-9f5e-8bd6fb9fdcc3

📥 Commits

Reviewing files that changed from the base of the PR and between 325137c and 80e8bff.

📒 Files selected for processing (29)
  • .github/workflows/build.yaml
  • indra/cmake/00-Common.cmake
  • indra/cmake/BootstrapVcpkg.cmake
  • indra/cmake/CURL.cmake
  • indra/cmake/Collada-Dom.cmake
  • indra/cmake/Copy3rdPartyLibs.cmake
  • indra/newview/llvoiceclient.cpp
  • indra/vcpkg.json
  • indra/vcpkg/ports/apr/portfile.cmake
  • indra/vcpkg/ports/apr/vcpkg.json
  • indra/vcpkg/ports/cef-bin/portfile.cmake
  • indra/vcpkg/ports/faudio/portfile.cmake
  • indra/vcpkg/ports/faudio/vcpkg.json
  • indra/vcpkg/ports/freetype/portfile.cmake
  • indra/vcpkg/ports/tracy/portfile.cmake
  • indra/vcpkg/ports/webrtc-bin/portfile.cmake
  • indra/vcpkg/ports/webrtc-bin/vcpkg.json
  • indra/vcpkg/ports/zlib/portfile.cmake
  • indra/vcpkg/ports/zlib/vcpkg-cmake-wrapper.cmake
  • indra/vcpkg/ports/zlib/vcpkg.json
  • indra/vcpkg/triplets/arm64-osx-alchemy-release.cmake
  • indra/vcpkg/triplets/arm64-osx-alchemy.cmake
  • indra/vcpkg/triplets/x64-linux-alchemy-release.cmake
  • indra/vcpkg/triplets/x64-linux-alchemy.cmake
  • indra/vcpkg/triplets/x64-osx-alchemy-release.cmake
  • indra/vcpkg/triplets/x64-osx-alchemy.cmake
  • indra/vcpkg/triplets/x64-windows-alchemy-release.cmake
  • indra/vcpkg/triplets/x64-windows-alchemy.cmake
  • vcpkg
💤 Files with no reviewable changes (1)
  • indra/cmake/Collada-Dom.cmake

Comment thread indra/cmake/Copy3rdPartyLibs.cmake
Comment thread indra/newview/llvoiceclient.cpp
Comment thread indra/vcpkg/ports/tracy/portfile.cmake Outdated
Comment thread indra/vcpkg/ports/webrtc-bin/vcpkg.json
Comment thread indra/vcpkg/ports/zlib/portfile.cmake
@RyeMutt RyeMutt force-pushed the rye/static-crt branch 3 times, most recently from 22dc7d6 to 531e06c Compare June 27, 2026 19:15
…aemon

Bump GHA xcode version to 26.6
Bump macos min deploy target to 14.0
Update various vcpkg override ports
@RyeMutt RyeMutt merged commit 8e76795 into develop Jun 27, 2026
17 checks passed
@RyeMutt RyeMutt deleted the rye/static-crt branch June 27, 2026 21:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant