From 91f6a7f616b161c25ba2001861a40e662e18c4ad Mon Sep 17 00:00:00 2001 From: John Ericson Date: Mon, 26 Jun 2023 19:56:57 -0400 Subject: [PATCH] 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]: https://github.com/llvm/llvm-project/blob/a18266473be1439d324059afa0e8b124f0466428/llvm/unittests/TargetParser/TripleTest.cpp#L1907-L1951 [2]: https://github.com/rust-lang/rust/blob/36fb58e433c782e27dd41034284e157cf86d587f/compiler/rustc_target/src/spec/mod.rs#L1255-L1271 --- config.sub | 13 ++++++++++--- doc/config.sub.1 | 2 +- testsuite/config-sub.data | 2 ++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/config.sub b/config.sub index f6ede1d..9865d6e 100755 --- a/config.sub +++ b/config.sub @@ -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) diff --git a/doc/config.sub.1 b/doc/config.sub.1 index 1991aa3..94c6d20 100644 --- a/doc/config.sub.1 +++ b/doc/config.sub.1 @@ -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 diff --git a/testsuite/config-sub.data b/testsuite/config-sub.data index 3b622ab..bb19dc2 100644 --- a/testsuite/config-sub.data +++ b/testsuite/config-sub.data @@ -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