[clang] [clang-tools-extra] [clangd] Update clangDaemonTweaks to set symbol visibility macros (PR #112304)

Thomas Fransham via cfe-commits cfe-commits at lists.llvm.org
Mon Dec 16 06:37:20 PST 2024


https://github.com/fsfod updated https://github.com/llvm/llvm-project/pull/112304

>From d41e927e0f437e09cb320b4594f958cb18e30116 Mon Sep 17 00:00:00 2001
From: Thomas Fransham <tfransham at gmail.com>
Date: Tue, 15 Oct 2024 04:42:35 +0100
Subject: [PATCH 1/2] [clangd] Update clangDaemonTweaks to set symbol
 visibility macros correctly

This will fix linker duplicate symbols errors from clangDaemonTweaks exporting
clang symbols instead of importing them for windows shared library builds using
explicit symbol visibly.

This is part of the work to enable LLVM_BUILD_LLVM_DYLIB and LLVM/Clang
plugins on window.
---
 clang-tools-extra/clangd/refactor/tweaks/CMakeLists.txt | 2 +-
 clang/cmake/modules/AddClang.cmake                      | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/clang-tools-extra/clangd/refactor/tweaks/CMakeLists.txt b/clang-tools-extra/clangd/refactor/tweaks/CMakeLists.txt
index 59475b0dfd3d22..fa4ccba52e8831 100644
--- a/clang-tools-extra/clangd/refactor/tweaks/CMakeLists.txt
+++ b/clang-tools-extra/clangd/refactor/tweaks/CMakeLists.txt
@@ -11,7 +11,7 @@ set(LLVM_LINK_COMPONENTS
 # To enable these tweaks in executables or shared libraries, add
 # $<TARGET_OBJECTS:obj.clangDaemonTweaks> to a list of sources, see
 # clangd/tool/CMakeLists.txt for an example.
-add_clang_library(clangDaemonTweaks OBJECT
+add_clang_library(clangDaemonTweaks CLANG_IMPORT OBJECT
   AddUsing.cpp
   AnnotateHighlightings.cpp
   DumpAST.cpp
diff --git a/clang/cmake/modules/AddClang.cmake b/clang/cmake/modules/AddClang.cmake
index 091aec98e93ca3..33f47190afa26e 100644
--- a/clang/cmake/modules/AddClang.cmake
+++ b/clang/cmake/modules/AddClang.cmake
@@ -47,7 +47,7 @@ endmacro()
 
 macro(add_clang_library name)
   cmake_parse_arguments(ARG
-    "SHARED;STATIC;INSTALL_WITH_TOOLCHAIN"
+    "SHARED;STATIC;INSTALL_WITH_TOOLCHAIN;CLANG_IMPORT"
     ""
     "ADDITIONAL_HEADERS"
     ${ARGN})
@@ -114,7 +114,7 @@ macro(add_clang_library name)
     if(TARGET "obj.${name}")
       target_compile_definitions("obj.${name}" PUBLIC CLANG_BUILD_STATIC)
     endif()
-  elseif(NOT ARG_SHARED AND NOT ARG_STATIC)
+  elseif(NOT ARG_SHARED AND NOT ARG_STATIC AND NOT ARG_CLANG_IMPORT)
     # Clang component libraries linked in to clang-cpp are declared without SHARED or STATIC
     target_compile_definitions("obj.${name}" PUBLIC CLANG_EXPORTS)
   endif()

>From 732af54324b6d55ebf4b4e5e0531e652ac9faa81 Mon Sep 17 00:00:00 2001
From: Thomas Fransham <tfransham at gmail.com>
Date: Mon, 16 Dec 2024 02:32:41 +0000
Subject: [PATCH 2/2] Add a CLANG_EXPORT arg to add_clang_library cmake
 function instead of  and make OBJECT targets for it default to importing
 clang symbols

---
 clang-tools-extra/clangd/refactor/tweaks/CMakeLists.txt | 2 +-
 clang/cmake/modules/AddClang.cmake                      | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/clang-tools-extra/clangd/refactor/tweaks/CMakeLists.txt b/clang-tools-extra/clangd/refactor/tweaks/CMakeLists.txt
index fa4ccba52e8831..59475b0dfd3d22 100644
--- a/clang-tools-extra/clangd/refactor/tweaks/CMakeLists.txt
+++ b/clang-tools-extra/clangd/refactor/tweaks/CMakeLists.txt
@@ -11,7 +11,7 @@ set(LLVM_LINK_COMPONENTS
 # To enable these tweaks in executables or shared libraries, add
 # $<TARGET_OBJECTS:obj.clangDaemonTweaks> to a list of sources, see
 # clangd/tool/CMakeLists.txt for an example.
-add_clang_library(clangDaemonTweaks CLANG_IMPORT OBJECT
+add_clang_library(clangDaemonTweaks OBJECT
   AddUsing.cpp
   AnnotateHighlightings.cpp
   DumpAST.cpp
diff --git a/clang/cmake/modules/AddClang.cmake b/clang/cmake/modules/AddClang.cmake
index 33f47190afa26e..3eb018c9acf31d 100644
--- a/clang/cmake/modules/AddClang.cmake
+++ b/clang/cmake/modules/AddClang.cmake
@@ -47,7 +47,7 @@ endmacro()
 
 macro(add_clang_library name)
   cmake_parse_arguments(ARG
-    "SHARED;STATIC;INSTALL_WITH_TOOLCHAIN;CLANG_IMPORT"
+    "SHARED;STATIC;OBJECT;INSTALL_WITH_TOOLCHAIN;CLANG_EXPORT"
     ""
     "ADDITIONAL_HEADERS"
     ${ARGN})
@@ -114,7 +114,7 @@ macro(add_clang_library name)
     if(TARGET "obj.${name}")
       target_compile_definitions("obj.${name}" PUBLIC CLANG_BUILD_STATIC)
     endif()
-  elseif(NOT ARG_SHARED AND NOT ARG_STATIC AND NOT ARG_CLANG_IMPORT)
+  elseif(ARG_CLANG_EXPORT OR NOT (ARG_SHARED OR ARG_STATIC OR ARG_OBJECT))
     # Clang component libraries linked in to clang-cpp are declared without SHARED or STATIC
     target_compile_definitions("obj.${name}" PUBLIC CLANG_EXPORTS)
   endif()



More information about the cfe-commits mailing list