Skip to content

MSYS2: drop mingw64 (rtaudio no longer built for it); UCRT64 / CLANG64 / CLANGARM64 - #8589

Merged
danoli3 merged 5 commits into
openframeworks:masterfrom
danoli3:msys2-ucrt64-default
Oct 16, 2026
Merged

danoli3 merged 5 commits into
openframeworks:masterfrom
danoli3:msys2-ucrt64-default

Conversation

@danoli3

@danoli3 danoli3 commented Oct 15, 2026

Copy link
Copy Markdown
Member

Problem

build-msys2 (mingw64) fails installing packages:

error: target not found: mingw-w64-x86_64-rtaudio
pacman install failed (attempt 3), retrying...

On 13 Oct MSYS2 stopped building rtaudio for the mingw64 environment: msys2/MINGW-packages#32418, "Drop mingw64 for Allegro and some leaf packages". The PKGBUILD is now mingw_arch=('ucrt64' 'clang64' 'clangarm64'). Retrying can't fix it.

I checked every package openFrameworks installs (CI's pacboy list and install_dependencies.sh) in all four environments; rtaudio on mingw64 is the only one missing. But MSYS2 is retiring mingw64 and recommends UCRT64, so more packages will go.

Change

UCRT64 (recommended) and CLANG64 only:

  • CI: the build-msys2 matrix is ucrt64, clang64.
  • Packages:
    • scripts/ci/package_builds.sh no longer builds an msys2_mingw64 nightly; the ucrt64 and clang64 nightlies were already built.
    • scripts/dev/release.sh builds ucrt64 and clang64 instead of mingw64.
    • In the older nightlybuilds.sh, mingw64 is commented out like mingw32.
  • scripts/msys2/install_dependencies.sh: in a MINGW64 or MINGW32 shell it now stops with a message, instead of failing in pacman: "The MSYS2 MINGW64 environment is no longer supported by openFrameworks. Open an MSYS2 UCRT64 (recommended) or CLANG64 terminal…". It already defaulted to ucrt64.
  • docs/msys2.md: UCRT64 / CLANG64 instead of the old MINGW32 / MINGW64 instructions, including the PATH examples.

Not changed

These still mention mingw64 and could be updated separately:

  • the old Qt Creator helpers (project/qtcreator)
  • the VS Code template's MSYS2 paths
  • MINGW_PREFIX ?= /mingw64 in config.msys2.default.mk. MSYS2 sets MINGW_PREFIX in every shell, so that default isn't used.

MSYS2 stopped building rtaudio for mingw64 (msys2/MINGW-packages#32418,
"Drop mingw64 for Allegro and some leaf packages"), so pacman fails with
"target not found: mingw-w64-x86_64-rtaudio" and the build-msys2 (mingw64)
CI job can't install its packages. MSYS2 is retiring mingw64; UCRT64 is
its recommended environment.

- CI: build-msys2 matrix is ucrt64 and clang64
- packages: no more mingw64 MSYS2 nightly; release.sh builds ucrt64 and
  clang64 instead of mingw64 (nightlies already had both)
- install_dependencies.sh: in a MINGW64 / MINGW32 shell, says the
  environment is no longer supported and to use UCRT64 or CLANG64,
  instead of failing in pacman
- docs/msys2.md: UCRT64 (recommended) / CLANG64 instead of MINGW32 / MINGW64
apothecary already publishes openFrameworksLibs_*_msys2_clangarm64 and all
the MSYS2 packages openFrameworks installs exist for clangarm64.

- CI: build-msys2 runs clangarm64 on the windows-11-arm runner (ucrt64 and
  clang64 stay on windows-latest); the gcc -v check step no longer fails
  where the runner's Git Bash has no gcc
- package_builds.sh / nightlybuilds.sh / release.sh: msys2_clangarm64 package
- docs/msys2.md: CLANGARM64 for Windows on ARM
@danoli3

danoli3 commented Oct 15, 2026

Copy link
Copy Markdown
Member Author

Added clangarm64 (Windows on ARM), since apothecary already publishes openFrameworksLibs_latest_msys2_clangarm64.zip and every MSYS2 package openFrameworks installs exists for clangarm64:

  • CI: build-msys2 now runs clangarm64 on the windows-11-arm runner. ucrt64 and clang64 stay on windows-latest.
  • Packages: nightlies and release.sh now build msys2_ucrt64, msys2_clang64 and msys2_clangarm64.
  • Docs: docs/msys2.md lists CLANGARM64 for Windows on ARM.

This is the first time this CI job runs on ARM, so the clangarm64 job is the one to watch.

@danoli3 danoli3 changed the title MSYS2: drop mingw64 (rtaudio no longer built for it), UCRT64 / CLANG64 only MSYS2: drop mingw64 (rtaudio no longer built for it); UCRT64 / CLANG64 / CLANGARM64 Oct 15, 2026
ofConstants.h included <arm64_neon.h> for every Windows ARM64 build.
That header is MSVC's (clang's copy only #include_next's the MSVC SDK one),
so the MSYS2 clangarm64 build fails:
  arm64_neon.h:12:15: fatal error: 'arm64_neon.h' file not found
Use it with MSVC / clang-cl only, and the standard <arm_neon.h> otherwise.
- ofConstants.h: Windows ARM64 sets OF_NO_FMOD, which selected the Media
  Foundation sound player; MSYS2 doesn't build it, so the link failed with
  undefined ofMediaFoundationSoundPlayer. Media Foundation is Visual Studio
  only; MSYS2 on ARM64 uses OpenAL like x64.
- scripts/msys2/download_libs.sh: the apothecary msys2_clangarm64 package's
  static libraries (tess2, kiss, svgtiny, ...) have no archive symbol index
  (0 entries, x64's libtess2.a has 71), so lld can't resolve anything in
  them (undefined tessNewTess, ...). Run llvm-ranlib on the downloaded libs
  when it's available; it adds the missing index and leaves indexed
  archives as they are.
wglew.h needs the Windows types (BOOL, HDC, HGLRC, ...). ofConstants.h
relied on glew.h to include windows.h, but glew.h only does that when
APIENTRY isn't defined yet; on MSYS2 clangarm64, allAddonsExample includes
the OpenCV headers first and the build fails with
  GL/wglew.h:114:9: error: unknown type name 'BOOL'
Include windows.h first, with WIN32_LEAN_AND_MEAN like glew.h, so builds
get the same headers as before.
@danoli3

danoli3 commented Oct 16, 2026

Copy link
Copy Markdown
Member Author

clangarm64 now passes

All 9 Windows jobs are green: MSYS2 ucrt64 / clang64 / clangarm64, and Visual Studio x64 / ARM64 / ARM64EC (2022 and 2026). Getting the first MSYS2 Windows-on-ARM build through took three more fixes:

  • 68a7b96 ofConstants.h: <arm64_neon.h> is only used with MSVC; other compilers get <arm_neon.h>. arm64_neon.h is MSVC's header, so the core failed with 'arm64_neon.h' file not found.
  • 9da1140 sound player and library indexes:
    • Sound player: on Windows ARM64, OF_NO_FMOD selected the Media Foundation sound player, which MSYS2 doesn't build (undefined symbol: ofMediaFoundationSoundPlayer). MSYS2 now uses OpenAL, as on x64.
    • Library indexes: scripts/msys2/download_libs.sh runs llvm-ranlib on the downloaded libraries when it's available. apothecary's msys2_clangarm64 libraries have no archive symbol index (x64's libtess2.a has 71 entries, the ARM one 0), so lld couldn't resolve tessNewTess and the rest. That package looks like it was built on x64 (it also puts ARM64 libraries in x86_64 folders); building it natively in apothecary would be the proper fix.
  • 4190217 ofConstants.h: includes <windows.h> (with WIN32_LEAN_AND_MEAN, as glew.h does) before glew.h / wglew.h. glew.h only includes it when APIENTRY isn't defined yet. With the OpenCV headers first on ARM64, allAddonsExample failed with wglew.h: unknown type name 'BOOL'.

The Visual Studio jobs pass with these ofConstants.h changes.

@danoli3
danoli3 merged commit f0047fc into openframeworks:master Oct 16, 2026
20 checks passed
danoli3 added a commit to danoli3/openFrameworks that referenced this pull request Oct 16, 2026
MINGW64 is no longer supported (openframeworks#8589); the MSYS2 build task, include
paths and compiler now use UCRT64.
danoli3 added a commit that referenced this pull request Oct 17, 2026
* msys2: clang toolchain for CLANG64/CLANGARM64; fix vscode template Win32 include path

* vscode template: MSYS2 UCRT64 paths and shell instead of MINGW64

MINGW64 is no longer supported (#8589); the MSYS2 build task, include
paths and compiler now use UCRT64.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant