Re: Transitioning libgomp from C to C++ implementation: Windows ('*-*-mingw32*')
Jonathan Yong via Gcc <[email protected]> Fri, 3 Jul 2026 00:53:31 +0000
| Newsgroups | gmane.comp.gcc.devel |
|---|---|
| Message-ID | <[email protected]> |
On 7/2/26 22:38, Thomas Schwinge wrote: > Hi Jonathan! > > The GCC 'MAINTAINERS' file lists you as maintainer for cygwin, mingw-w64. > +LH, NS and Cygwin developers. > On 2026-05-07T13:16:59+0200, I wrote: >> [...] >> >> The idea of transitioning libgomp from C to C++ implementation has come >> up a number of times, [...] >> >> I'm now working on this. >> >> For a start, I've assessed that all GCC configurations that support >> libgomp also are able to build the GCC/C++ front end, as far as I can >> easily tell. >> >> I'll try to be mindful about handling all of libgomp's implementation >> files, but may reach out to individual GCC target maintainers for >> 'libgomp/config/' files, for example, that I can't easily test myself. >> >> [...] > > Per my understanding, for GCC/MinGW, libgomp is not enabled by default in > GCC 'configure.ac' (needs explicit '--enable-libgomp'), but it appears to > be supported: 'mingw32' (only explicitly '32', though?) is mentioned in > 'libgomp/configure.tgt', and has 'libgomp/config/mingw32/' files. > > What about the original MinGW vs. MinGW-w64 vs. Cygwin variants; does the > '*-*-mingw32*' triplet (as used in 'libgomp/configure.tgt') apply to all > these, or just some? > > Please let me know in case libgomp/MinGW is in fact not supported > (anymore). > It should really be mingw* for consistency. *-*-mingw32* applies to both the original mingw and mingw-w64 while cygwin has its own triplet. mingw-w64 is identified by the w64 vendor part. As of now, libgomp depends on a pthread implementation being available, either the classic pthread-win32 or winpthreads or mcfgthread, which is not a default for mingw* target. Cygwin is a POSIX emulation layer on top of win32, so pthread is always available and libgomp should be enabled by default. > Assuming it is supported, I shall try to not break it. > > During ongoing development, I'll need to run a number of GCC/libgomp > builds for the supported MinGW variants over the next few weeks/months > (tentatively); therefore would like to do it myself instead of asking you > each time. > > I need GCC 'configure'd with '--enable-languages=c,c++,fortran', > '--enable-libgomp', and then 'make', and 'make check-target-libgomp' if > feasible. > > Ideally, easiest, I'd do native builds. Otherwise, cross builds with > testing option, or without testing, in case that's not feasible. (I > assume that, as for other configurations, my C -> C++ baseline conversion > changes are good to go also for MinGW, once they compile without error.) > > In particular, I'd like to test the following libgomp configuration > variants, which are specific to MinGW: > > Per 'libgomp/configure.tgt': > > *-*-mingw32*) > config_path="mingw32 posix" > > ..., that is 'libgomp/config/mingw32/' files. As far as I can easily > tell, there aren't any architecture-specific compile-time conditionals in > these files, so I assume I don't really care about the specific CPU > architecture. > i686 and x86_64 mingw-w64 is most tested. There is also arm and aarch64 mingw-w64 that is less tested. > Additionally, MinGW-specific things in 'libgomp/config/posix/' and core > libgomp files. > > > I don't see any Windows systems listed on > <https://portal.cfarm.net/machines/list/>. Are there any such systems > that I could log in remotely, and do my builds? > > Otherwise, is cross-compiling GCC an option, and could you provide > pointers how to do that? > I don't know any available Windows machine for native testing, but cross-compilation should be the minimum. My own personal cross compiler configuration has --enable-host-shared --enable-fully-dynamic-string --enable-libstdcxx-threads --disable-multilib --enable-libgomp --enable-libssp, one build for each architecture. --enable-sjlj-exceptions is needed for i686 mingw* while no specific exception argument is set for x86_64 so SEH exception is used. multilib is also a supported but setup is more complicated. Cygwin configuration details is available at https://www.cygwin.com/cgit/cygwin-packages/gcc/tree/gcc.cygport, only x86_64 cygwin is supported currently, i686 is no longer maintained. There is a known race condition when enabling libgomp and C++ at the same time where libgomp depends on target/bits headers from libstdc++ being generated while libstdc++.la depends on libgomp.la being generated. It might be a mingw* specific issue, one that I'm not sure how to resolve.