summaryrefslogtreecommitdiff
path: root/clang/test/Driver/mingw-sysroot.cpp
AgeCommit message (Collapse)Author
2025-09-11[clang] Remove shell requirements from testsAiden Grossman
Most of these tests do not actually have a shell requirement. The shell requirement ended up in the test either from cargo culting (from what I can tell) or because the test authors actually meant to mark Windows as unsupported. This prevents enablement of lit's internal shell within clang. Towards #102699. Reviewers: rnk, efriedma-quic, Sirraide, petrhosek, ilovepi Reviewed By: ilovepi Pull Request: https://github.com/llvm/llvm-project/pull/156905
2025-08-02Reapply "[clang] Remove %T from tests (#151614)"Aiden Grossman
This reverts commit 4c80193a58a5c24e2bbebe291feb406191c4e2ab. This relands the commit. The issues have theoretically been fixed.
2025-08-01Revert "[clang] Remove %T from tests (#151614)"Aiden Grossman
This reverts commit 5a586375aa3a128dadc9473cfa196bf8588c2a82. This breaks two buildbots with failures in implicit-module-header-maps.cpp. No idea why these failures are occurring. https://lab.llvm.org/buildbot/#/builders/64/builds/5166 https://lab.llvm.org/buildbot/#/builders/13/builds/8725
2025-08-01[clang] Remove %T from tests (#151614)Aiden Grossman
This patch removes %T from clang lit tests. %T has been deprecated for about seven years and is not reccomended as it is not unique to each test, which can lead to races. This patch is intended to remove usage in tree with the end goal of removing support for %T within lit.
2024-05-27[Driver][test] Replace legacy -target with --target=Fangrui Song
Similar to previous cleanup. While changing mips* tests, change some -no-integrated-as to the recommended -fno-integrated-as.
2024-02-28[Driver] Unify InstalledDir and Dir (#80527)Fangrui Song
`Driver::ClangExecutable` is derived from: * (-canonical-prefixes default): `realpath` on the executable path * (-no-canonical-prefixes) argv[0] (consult PATH if argv[0] is a word) `Dir` and `ResourceDir` are derived from `ClangExecutable`. Both variables are used to derive certain include and library paths. `InstalledDir` is a related concept used to derive certain other paths. `InstalledDir` is weird in the -canonical-prefixes mode: Clang calls `make_absolute` but does not follow symlinks (FIXME from 9ade6a9a747c49383ac747bd8ffaa6a0beaef71c). This causes some search and library paths to be mix-and-matched. The "Do a PATH lookup, if there are no directory components." logic makes things worse. `InstalledDir` is different when you invoke it via `PATH`: ``` % which clang /usr/bin/clang % clang -v |& grep InstalledDir InstalledDir: /usr/bin % /usr/lib/llvm-16/bin/clang -v |& grep InstalledDir InstalledDir: /usr/lib/llvm-16/bin ``` I believe `InstalledDir` was a partial solution to `-no-canonical-prefixes` and should be eventually removed. This patch removes `SetInstallDir` and relies on Driver::Driver to set `InstalledDir` to `Dir`. The behavior for regular file `clang` or `-no-canonical-prefixes` is unchanged. If a user creates a symlink to the regular file `clang` and uses the default `-canonical-prefixes`, they now consistently get search and library paths relative to the regular file `clang`, not mix-and-match paths. If a user creates a symlink to the regular file `clang` and replaces some directorys from the actual installation, they should change the symlink to a wrapper that calls the underlying clang with `-no-canonical-prefixes`.
2024-01-07[clang] [MinGW] Don't look for a GCC in path if the install base has a ↵Martin Storsjö
proper mingw sysroot (#76949) This fixes uses of the MSYS2 clang64 environment compilers, if another set of GCC based compilers are available further back in PATH (which may be explicitly added, or inherited unintentionally from other software installed). (The issue in the clang64 environment can be worked around somewhat by installing *-gcc-compat packages which present aliases named <triple>-gcc within the clang64 environment as well.) This fixes https://github.com/msys2/MINGW-packages/issues/11495 and https://github.com/msys2/MINGW-packages/issues/19279.
2023-01-17[clang] [MinGW] Avoid adding <base>/include and <base>/lib when cross compilingMartin Storsjö
The MinGW compiler driver first tries to deduce the root of the toolchain installation (either clang itself or a separate cross mingw gcc installation). On top of this root, a number of include and lib paths are added (some added unconditionally, some only if they exist): - <base>/x86_64-w64-mingw32/include - <base>/include - <base>/include/x86_64-w64-windows-gnu (Some more are also added for libstdc++ and/or libc++.) The first one is the one commonly used for MinGW targets so far. For LLVM runtimes installed with the LLVM_ENABLE_PER_TARGET_RUNTIME_DIR option, the latter two are used though (this is currently not the default, not yet at least). For cross compiling, if base is a separate dedicated directory, this is fine, but when using the sysroots of a distro-installed cross mingw toolchain, base is /usr - and having /usr/include in the include path for cross compilation is a potential source for problems; see https://github.com/llvm/llvm-project/issues/59871. If not cross compiling though, <base>/include needs to be included too. E.g. in the case of msys2, most headers are in e.g. /mingw64/include while the compiler is /mingw64/bin/clang. When cross compiling, if the sysroot has been explicitly set by the user, keep <base>/include too. (In the case of a distro provided cross gcc toolchain in /usr, the sysroot needs to be set to /usr and not /usr/x86_64-w64-mingw32 though, to be able to find libgcc files under /usr/lib/gcc/x86_64-w64-mingw32. So with such a toolchain, setting the sysroot explicitly does retain the problem.) All in all - this avoids adding /usr/include and /usr/lib to the include/lib paths when doing mingw cross compilation with a distro-provided sysroot in /usr/x86_64-w64-mingw32. Test that the include directory is omitted in the mingw-sysroot.cpp tests, when cross compiling. That test is only ever executed on non-Windows hosts, since it uses symlinks to set up fake environments with colocated compilers and header/lib directories. There aren't really any current corresponding tests for the same implicit behaviours when actually running on Windows. Differential Revision: https://reviews.llvm.org/D141206
2022-11-30[clang] [test] Fix recently pushed mingw tests in some environmentsMartin Storsjö
Account for backslashes in paths in mingw.cpp. Testing clang with the <triple>-clang form seems to require the x86 target to be enabled, when the triple is an x86 triple. Just skip that aspect of the test, since the "clang --target=<triple>" form should give enough test coverage here.
2022-11-29[clang] [MinGW] Improve/extend the gcc/sysroot detection logicMartin Storsjö
There are three functions that try to detect the right implicit sysroot and libgcc directory setup to use - One which looks for mingw sysroots located in <clangbin>/../<sysrootname> - One which looks for a mingw-targeting gcc executables in the PATH - One which looks in the <gccroot>/lib/gcc directory to find the right one to use, and the right specific triple used for arch specific directories in the gcc/libstdc++ install These have mostly tried to look for executables named "<arch>-w64-mingw32-gcc" or "mingw32-gcc" or subdirectories named "<arch>-w64-mingw32" or "mingw32". In the case of findClangRelativeSysroot, it also has looked for directories with the name of the actual triple. This was added in deff7536278d355977171726124f83aa4bb95419, with the intent of looking for a directory matching exactly the user provided literal triple - however the triple here is the normalized one, not the one provided by the user on the command line. Improve and unify this logic somewhat: - Always first look for things based on the literal triple provided by the user. - Secondly look for things based on the normalized triple (which usually ends up as e.g. x86_64-w64-windows-gnu), accessed via the Triple which is passed to the constructor - Then look for the common triple form <arch>-w64-mingw32 The literal triple provided by the user is available via Driver::getTargetTriple(), but computeTargetTriple() may change e.g. the architecture of it, so we need to reapply the effective architecture on the literal triple spelling from Driver::getTargetTriple(). Do this consistently for all of findGcc, findClangRelativeSysroot and findGccLibDir (while keeping the existing plain "mingw32" cases in findGcc and findGccLibDir too). Fedora 37 started shipping mingw sysroots targeting UCRT, in addition to the traditional msvcrt.dll, and these use triples in the form <arch>-w64-mingw32ucrt - see https://fedoraproject.org/wiki/Changes/F37MingwUCRT. Thus, in addition to the existing default tested triples, try looking for triples in the form <arch>-w64-mingw32ucrt, to automatically find the UCRT sysroots on Fedora 37. By explicitly setting a specific target on the Clang command line, the user can be more explicit with which flavour is to be preferred. This should fix the main issue in https://github.com/llvm/llvm-project/issues/59001. Differential Revision: https://reviews.llvm.org/D138692
2022-07-08[clang] [MinGW] Fix paths on GentooMark Harmstone
There's code in clang/lib/Driver/ToolChains/Gnu.cpp for Clang to use Gentoo's include and lib paths, but this is missing for mingw, meaning that any C++ programs using the STL will fail to compile. See https://bugs.gentoo.org/788430 Differential Revision: https://reviews.llvm.org/D111081
2021-10-29[clang] [MinGW] Guess the right ix86 arch name spelling as sysrootMartin Storsjö
For x86, most contempory mingw toolchains use i686 as 32 bit x86 arch target. As long as the target triple is set to the right form, this works fine, either as the compiler's default target, or via e.g. a triple prefix like i686-w64-mingw32-clang. However, if the unprefixed toolchain targets x86_64, but the user tries to switch it to target 32 bit by adding the -m32 option, the computeTargetTriple function in Clang, together with Triple::get32BitArchVariant, sets the arch to i386. This causes the right sysroot to not be found. When targeting an arch where there are potential spelling ambiguities with respect to the sysroots (i386 and arm), check if the driver can find a sysroot with the arch name - if not, try a couple other candidates. Differential Revision: https://reviews.llvm.org/D111952
2021-05-28[clang] [MinGW] Fix gcc version detection/pickingMartin Storsjö
Actually compare each version to the version of the last chosen one. There's no guarantee that the added test case does showcase the previous issue (it depends on the order that directory entries are returned when iterating), but with the issue fixed it should behave deterministically in any case. Also improve the match patterns in the mingw-sysroot.cpp test a bit. Differential Revision: https://reviews.llvm.org/D102873
2020-05-15[tests][Driver] Set `--sysroot=""` to allow `DEFAULT_SYSROOT` buildHubert Tong
Summary: If `DEFAULT_SYSROOT` is configured to some path, some tests would fail. This patch overrides `sysroot` to be the empty string in the style of D66834 so that the tests will pass even when the build is configured with a `DEFAULT_SYSROOT`. Reviewed By: mstorsjo Differential Revision: https://reviews.llvm.org/D79694
2020-04-05make ccabe93298 more robustNico Weber
2020-04-05clang: Make tests using symlinks more consistent.Nico Weber
Instead of checking if each symlink exists before removing it, remove the whole temp dir housing the symlinks before recreating it. This is a bit shorter, conceptually simpler (in that the first and consecutive test runs have more similar behavior), it's what we're already doing in almost all places where we do it, and it works if the symlink exists but is a dead link (e.g. when it points into the build dir but the build dir is renamed). No intended behavior change.
2018-04-25[test] Add a testcase for MinGW sysroot detections from SVN r330244. NFC.Martin Storsjo
Differential Revision: https://reviews.llvm.org/D45985 llvm-svn: 330872