[Development] [RFCs] Migrate from GCC MinGW to LLVM MinGW
Martin Storsjö
martin at martin.st
Thu Jul 20 21:52:42 CEST 2023
On Thu, 20 Jul 2023, Thiago Macieira wrote:
> On Thursday, 20 July 2023 06:14:24 PDT Martin Storsjö wrote:
>> So are you saying that you're building your app with a non-default CRT
>> selected with the -mcrtdll option?
>
> Yes.
>
>> If you use the GCC -mcrtdll option for picking a non-default CRT, it would
>> work unless you're also linking, even statically, a toolchain-provided
>> libstdc++ though. I'm pretty sure that at least some parts of libstdc++
>> touch things that have a differing ABI, even if most things might seem to
>> work.
>
> We build our own GCC (after applying that patch), but I haven't checked
> whether it used UCRT for cross-building libstdc++. Ideally we wouldn't need a
> -mcrtdll option, but enforce it directly in the compiler.
Right - if you're already building GCC, you're actually in a great
position to set things up properly. If you build a new sysroot for this
GCC at the same time, it should be fairly straightforward to switch the
CRT for this.
After building the compiler part of the new GCC (make install-gcc) you can
set up the mingw-w64 headers/crt for this new toolchain - here you can
configure both with --with-default-msvcrt=ucrt; after this you can finish
building the rest of GCC's runtimes with this new sysroot, and everything
will be built consistently with the new CRT. GCC itself will be linked
against the CRT choice of your original toolchain, but whatever it
produces will use the new one.
At https://martin.st/temp/gcc-mingw.docker I've got an example of such a
bootstrap procedure. That's for starting out on Linux, building a cross
compiler, and then using that to cross compile GCC for Windows. But if
you're already on windows, it should be enough with the gcc/install-gcc +
mingw-w64-headers + mingw-w64-crt + gcc/install steps.
// Martin
More information about the Development
mailing list