[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 10:50:02 PDT 2023
https://github.com/compnerd updated https://github.com/llvm/llvm-project/pull/65634:
>From 5825269a6b9b823db46404ce356ddcb2d1860786 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 | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/llvm/lib/Support/CMakeLists.txt b/llvm/lib/Support/CMakeLists.txt
index 87fe7bebf688d4..eec5217a873b4c 100644
--- a/llvm/lib/Support/CMakeLists.txt
+++ b/llvm/lib/Support/CMakeLists.txt
@@ -79,7 +79,12 @@ 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. Use `SHELL` escaping to prevent
+ # the de-duplication of the arguments in case the arguments are split up.
+ set (delayload_flags $<$<NOT:$<LINK_LANGUAGE:Swift>>:"SHELL: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