Supporting alternative toolchains on Windows
Magnus Ihse Bursie
magnus.ihse.bursie at oracle.com
Fri Mar 11 20:32:30 UTC 2022
On 2022-03-11 20:02, Julian Waters wrote:
> I understand the concerns, seems like I grossly underestimated the
> complexity such a task would entail. Though I would say the following
> can only really be known if it's already been implemented:
>
> Most likely there will be strange bugs with anything that
> requires OS interaction (like dll loading and whatsnot)
>
> To my knowledge the versions of said compilers that link against the
> universal CRT utilize exactly the same Windows APIs (And corresponding
> dlls) for OS related stuff that Visual C++ itself uses (Minus
> vcruntime, which is specific to MSVC), without any POSIX compatibility
> layers on top. I've tried rewiring the build system incrementally in
> the meantime on my end to see what areas would be of interest and it's
> now failing when hitting POSIX specific includes during make, hinting
> that (At least for gcc) compatibility has been traded for full native
> support for Windows APIs within the compiler, which may mitigate any
> issues slightly (That's also why I suggested initially to only allow
> for versions that link against the ucrt without any compatibility
> layers- Cygwin's toolchains which link against newlib and old MinGW
> binaries which link against msvcrt would just be an unnecessary
> headache). That said, whether aforementioned bugs will actually
> surface should the attempt be successful I don't really know yet
>
> Actually, I would seriously assume that any other compiler
> than VS on Windows will give much worse results.
> The VS compiler is battle-hardened. gcc and clang are only
> used by a very small enthusiastic hobbyist minority.
>
> The Windows ports of both compilers do keep the same optimizations and
> code generation quality as they do on other platforms from what I know
> though, it's mainly the linkers that have been modified to generate
> the PE format instead of the ELF on Linux. I digress, I don't have any
> results to show for this yet
>
> I'm not sure I get the part about macOS strictly mapping to clang.
> Isn't there the option to swap to using gcc for macOS?
No, Apple removed that option years ago.
/Magnus
>
> best regards,
> Julian
>
> On Sat, Mar 12, 2022 at 1:50 AM Magnus Ihse Bursie
> <magnus.ihse.bursie at oracle.com> wrote:
>
>
>
> On 2022-03-11 14:34, Julian Waters wrote:
>> Darn, seems like it'll be much harder than I expected. Since
>> multiple toolchains are supported for macOS and Linux, I assumed
>> a slight patch would help get it to work on Windows. Looking
>> through the stuff in make though, it appears a lot of the build
>> system implicitly expects the compiler for Windows to always be
>> Visual C++, which doesn't really help that much (Though the fact
>> that we can exclude many versions of gcc, such as Cygwin's and
>> old MinGW binaries helps a lot). The build process for the newer
>> Windows ports of gcc are surprisingly similar to Visual C++
>> though (Eg rc can be swapped out for windres) so this might
>> hopefully be something I can try exploring in the future (Gonna
>> look a bit harder at make and write what I can find back to this
>> mailing list in the meantime). It'd be interesting if benchmarks
>> of the JVM compiled with different compilers on Windows can be
>> compared side by side on the off chance this becomes a reality though
>
> In theory OS and compiler toolchain are separate things. In
> practice, in the JDK, they are not. There is basically a 1-to-1
> mapping between toolchain and OS:
> Windows <-> Visual Studio
> macOS <-> XCode/clang
> linux <-> gcc
>
> (The one possible exception is that clang on linux is probably
> feasible.)
>
> After years and years on this, all kinds of assumptions has been
> hard-coded, even if people try to do the right thing. But
> sometimes it is not clear if you are checking for toolchain or os;
> perhaps when linking with a specific library, or setting some define.
>
> Any attempt to change this is, as I said, a *huge* undertaking.
> *And* there will be tons of negative consequences for the code
> base as a whole, when trying to differentiate between toolchain
> and OS. So this will need to be seriously considered.
>
> /Magnus
>
>>
>> best regards,
>> Julian
>>
>> On Fri, Mar 11, 2022 at 9:16 PM Magnus Ihse Bursie
>> <magnus.ihse.bursie at oracle.com> wrote:
>>
>> On 2022-03-11 12:55, Julian Waters wrote:
>>
>> > Hi all,
>> >
>> > How feasible would it be/much effort would it require to
>> support compiling
>> > with alternate toolchains on Windows besides Visual C++
>> (like the Windows
>> > ports of clang and gcc) if we restrict the allowed
>> toolchains to only those
>> > that link against the ucrt? (Toolchains linking against the
>> dated msvcrt
>> > would present too many issues to work with)
>>
>> That'd be a huge undertaking. And any such patch would only
>> be accepted
>> into the code base if the organization behinded appeared
>> trustworthy in
>> their long-term commitment to keeping it working.
>>
>> /Magnus
>>
>>
>
More information about the build-dev
mailing list