config.sub: Accept LLVM-style $cpu-$vendor-windows-{gnu,msvc}

In older times, MinGW (GCC toolchain with modified windows headers) was
the only free software toolchain for Windows.  But now, LLVM has support
both for MinGW ABI and Microsoft's own.  The distinction matters for C++
more than C.

LLVM[1], Rust[2], and other projects have taken to differentiating these
two as `...windows-gnu` vs `...windows-msvc`.  I think that makes a lot
of sense, as it correctly identifiers both their commonalities and their
differences.

A lot of MinGW-supporting software, most notably GCC itself, will
presumably continue to use configs like x86_64-pc-mingw32 and
i686-pc-mingw32.  That's fine; this patch doesn't normalize them away
(like LLVM does) or remove them!  If and when that software wants to
support the MSVC ABI without requiring MSVC itself, they can switch to
these newer configurations.

[1]: a18266473b/llvm/unittests/TargetParser/TripleTest.cpp (L1907-L1951)
[2]: 36fb58e433/compiler/rustc_target/src/spec/mod.rs (L1255-L1271)
This commit is contained in:
John Ericson 2023-06-26 19:56:57 -04:00 committed by Dmitry V. Levin
parent 4ad4bb7c30
commit 91f6a7f616
3 changed files with 13 additions and 4 deletions

13
config.sub vendored
View File

@ -4,7 +4,7 @@
# shellcheck disable=SC2006,SC2268 # see below for rationale
timestamp='2023-06-23'
timestamp='2023-06-26'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@ -145,7 +145,8 @@ case $1 in
nto-qnx* | linux-* | uclinux-uclibc* \
| uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
| netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
| storm-chaos* | os2-emx* | rtmk-nova* | managarm-*)
| storm-chaos* | os2-emx* | rtmk-nova* | managarm-* \
| windows-* )
basic_machine=$field1
basic_os=$maybe_os
;;
@ -1766,7 +1767,7 @@ case $os in
;;
none)
;;
kernel* )
kernel* | msvc* )
# Restricted further below
;;
*)
@ -1785,6 +1786,8 @@ case $kernel-$os in
;;
managarm-mlibc* | managarm-kernel* )
;;
windows*-gnu* | windows*-msvc*)
;;
-dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* | -mlibc* )
# These are just libc implementations, not actual OSes, and thus
# require a kernel.
@ -1799,6 +1802,10 @@ case $kernel-$os in
echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2
exit 1
;;
*-msvc* )
echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2
exit 1
;;
kfreebsd*-gnu* | kopensolaris*-gnu*)
;;
vxworks-simlinux | vxworks-simwindows | vxworks-spe)

View File

@ -1,5 +1,5 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.5.
.TH CONFIG.SUB "1" "June 2023" "GNU config.sub (2023-06-23)" "User Commands"
.TH CONFIG.SUB "1" "July 2023" "GNU config.sub (2023-06-26)" "User Commands"
.SH NAME
config.sub \- validate and canonicalize a configuration triplet
.SH SYNOPSIS

View File

@ -865,6 +865,8 @@ x86_64-sortix x86_64-pc-sortix
x86_64-twizzler x86_64-pc-twizzler
x86_64-unknown-ptx x86_64-sequent-ptx
x86_64-windows x86_64-pc-windows
x86_64-windows-gnu x86_64-pc-windows-gnu
x86_64-windows-msvc x86_64-pc-windows-msvc
x86_64-wrs-vxworks x86_64-wrs-vxworks
x86_64-wrs-vxworks-simlinux x86_64-wrs-vxworks-simlinux
x86_64-wrs-vxworks-simwindows x86_64-wrs-vxworks-simwindows