aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorAndrew Rogers <andrurogerz@gmail.com>2025-06-24 09:18:34 -0700
committerGitHub <noreply@github.com>2025-06-24 09:18:34 -0700
commite175ecff936287823b5443d7b2d443fc6569f31f (patch)
tree14504caf439ce7c9038eac3be83c108cb62e36a3 /clang/lib/CodeGen/CodeGenModule.cpp
parent6a8899cee7131c7678d72f29cc080bc6f1d3a124 (diff)
downloadllvm-e175ecff936287823b5443d7b2d443fc6569f31f.zip
llvm-e175ecff936287823b5443d7b2d443fc6569f31f.tar.gz
llvm-e175ecff936287823b5443d7b2d443fc6569f31f.tar.bz2
[llvm] revisions to `LLVM_ABI` export macro definitions (#144598)
## Purpose Simplify the logic used to define `LLVM_ABI` and related macros, eliminate the `LLVM_ABI_FRIEND` macro, and update the `LLVM_ABI` macro to always resolve to `__attribute__((visibility("default")))` when building LLVM as a shared library for ELF or Mach-O targets. ## Background Previously, `LLVM_ABI` was defined to the C++ style attribute `[[gnu::visibility("default")]]` when compiling with gcc, which has more restrictions on its placement. Of note, the C++ style attributes cannot decorate `friend` functions and must not appear after `extern` on variable declarations. Documentation for `LLVM_ABI` and related annotations is found in the LLVM repo [here](https://github.com/llvm/llvm-project/blob/main/llvm/docs/InterfaceExportAnnotations.rst). ## Overview - Define a new CMake config value, `LLVM_ENABLE_LLVM_EXPORT_ANNOTATIONS`, which is implicitly set whenever `LLVM_BUILD_LLVM_DYLIB`, `LLVM_BUILD_SHARED_LIBS`, or `LLVM_ENABLE_PLUGINS` is set. Add it as a `#cmakedefine` to llvm-config.h so its definition is available to projects building against LLVM as required so clients see `__declspec(dllimport)` on Windows. - Gate the `LLVM_ABI` macro definitions in Compiler.h behind the new `LLVM_ENABLE_LLVM_EXPORT_ANNOTATIONS` definition. This is simpler/cleaner, but should be equivalent to the previous logic. - Maintain `LLVM_BUILD_STATIC` as an override to be used by specific targets that don't want to build against the DLL/shared library, such as tablegen. - For ELF and Mach-O targets, directly define `LLVM_ABI` as `__attribute__((visibility("default")))` instead of `LLVM_ATTRIBUTE_VISIBILITY_DEFAULT`, which resolves to C++ style `[[gnu::visibility("default")]]` when compiling with gcc. - Remove the `LLVM_ABI_FRIEND` macro and replace all usages of it with `LLVM_ABI`. - Update the documentation for exporting friend functions to no longer reference `LLVM_ABI_FRIEND`. ## Validation - Built as static lib with clang and gcc on Linux. - Built as static with clang-cl and MSVC on Windows. - Built as shared lib with clang and gcc on Linux (+ additional local changes not yet merged). - Built as DLL with clang-cl and MSVC on Windows (+ additional local changes not yet merged). --------- Co-authored-by: SquallATF <squallatf@gmail.com>
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
0 files changed, 0 insertions, 0 deletions