[llvm] Support: allow building with non-C/C++ language linkers (PR #65634)

Saleem Abdulrasool via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 7 15:19:02 PDT 2023


https://github.com/compnerd updated https://github.com/llvm/llvm-project/pull/65634:

>From 58b919e14443e60ba81222afe55bec88940d9fb1 Mon Sep 17 00:00:00 2001
From: Saleem Abdulrasool <compnerd at compnerd.org>
Date: Thu, 7 Sep 2023 09:21:54 -0700
Subject: [PATCH] Support: allow building with non-C/C++ language linkers

When building with Swift as the linker language, CMake will use the
Swift driver to perform the link oepration.  The flags here are not
marked to be interpreted by the linker as the default behaviour with
MSVC is to use `link` directly rather than through a linker driver.
For simplicity's sake and as an immediate solution to these flags being
passed to the driver, avoid the delay load with Swift.  A more
comprehensive solution would be to pass these flags via `-Xlinker` when
building with Swift.
---
 llvm/lib/Support/CMakeLists.txt | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/llvm/lib/Support/CMakeLists.txt b/llvm/lib/Support/CMakeLists.txt
index 87fe7bebf688d4e..54baf159a86877c 100644
--- a/llvm/lib/Support/CMakeLists.txt
+++ b/llvm/lib/Support/CMakeLists.txt
@@ -79,7 +79,11 @@ endif( MSVC OR MINGW )
 # Delay load shell32.dll if possible to speed up process startup.
 set (delayload_flags)
 if (MSVC)
-  set (delayload_flags delayimp -delayload:shell32.dll -delayload:ole32.dll)
+  # When linking with Swift, `swiftc.exe` is used as the linker drive rather
+  # than invoking `link.exe` directly.  In such a case, the flags should be
+  # marked as `-Xlinker` to pass them directly to the linker.  As a temporary
+  # workaround simply elide the delay loading.
+  set (delayload_flags $<$<NOT:$<LINK_LANGUAGE:Swift>>:delayimp -delayload:shell32.dll -delayload:ole32.dll>)
 endif()
 
 # Link Z3 if the user wants to build it.



More information about the llvm-commits mailing list