| From 882d3b0428073001897e65cb95405ae31bc643fc Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin@martin.st> |
| Date: Fri, 18 Jun 2021 22:59:58 +0300 |
| Subject: [PATCH] [llvm-rc] Don't rewrite the arch in the default triple unless |
| necessary |
| |
| When the default target arch isn't one that is supported as a |
| windows target, we want to set a suitable architecture (so that |
| Clang tests that run plain 'llvm-windres' succeed checks for e.g. |
| "#ifdef _WIN32"). But if the default target architecture is |
| usable, don't rewrite it. (Rewriting it, by e.g. |
| "T.setArch(T.getArch())", normalizes the spelling of the architecture, |
| e.g. changing i686 to i386. Such a change can make clang unable |
| to find the right sysroot.) |
| |
| This can't, unfortunately, practically be tested very well because |
| it is entirely dependent on the default triple of the llvm build. |
| --- |
| tools/llvm-rc/llvm-rc.cpp | 19 +++++++++++++------ |
| 1 file changed, 13 insertions(+), 6 deletions(-) |
| |
| diff --git a/tools/llvm-rc/llvm-rc.cpp b/tools/llvm-rc/llvm-rc.cpp |
| index 8a4ef95cfabd..b45c7a07309e 100644 |
| --- a/tools/llvm-rc/llvm-rc.cpp |
| +++ b/tools/llvm-rc/llvm-rc.cpp |
| @@ -145,7 +145,7 @@ ErrorOr<std::string> findClang(const char *Argv0) { |
| return Path; |
| } |
| |
| -Triple::ArchType getDefaultArch(Triple::ArchType Arch) { |
| +bool isUsableDefaultArch(Triple::ArchType Arch) { |
| switch (Arch) { |
| case Triple::x86: |
| case Triple::x86_64: |
| @@ -154,17 +154,23 @@ Triple::ArchType getDefaultArch(Triple::ArchType Arch) { |
| case Triple::aarch64: |
| // These work properly with the clang driver, setting the expected |
| // defines such as _WIN32 etc. |
| - return Arch; |
| + return true; |
| default: |
| // Other archs aren't set up for use with windows as target OS, (clang |
| - // doesn't define e.g. _WIN32 etc), so set a reasonable default arch. |
| - return Triple::x86_64; |
| + // doesn't define e.g. _WIN32 etc), so with them we need to set a |
| + // different default arch. |
| + return false; |
| } |
| } |
| |
| +Triple::ArchType getDefaultFallbackArch() { |
| + return Triple::x86_64; |
| +} |
| + |
| std::string getClangClTriple() { |
| Triple T(sys::getDefaultTargetTriple()); |
| - T.setArch(getDefaultArch(T.getArch())); |
| + if (!isUsableDefaultArch(T.getArch())) |
| + T.setArch(getDefaultFallbackArch()); |
| T.setOS(Triple::Win32); |
| T.setVendor(Triple::PC); |
| T.setEnvironment(Triple::MSVC); |
| @@ -174,7 +180,8 @@ std::string getClangClTriple() { |
| |
| std::string getMingwTriple() { |
| Triple T(sys::getDefaultTargetTriple()); |
| - T.setArch(getDefaultArch(T.getArch())); |
| + if (!isUsableDefaultArch(T.getArch())) |
| + T.setArch(getDefaultFallbackArch()); |
| if (T.isWindowsGNUEnvironment()) |
| return T.str(); |
| // Write out the literal form of the vendor/env here, instead of |
| -- |
| 2.25.1 |
| |