[clang] [Clang] Add explicit visibility symbol macros (PR #108276)

Reid Kleckner via cfe-commits cfe-commits at lists.llvm.org
Wed Oct 9 11:04:00 PDT 2024


================
@@ -0,0 +1,67 @@
+//===-- clang/Support/Compiler.h - Compiler abstraction support -*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines explicit visibility macros used to export symbols from
+// clang-cpp
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef CLANG_SUPPORT_COMPILER_H
+#define CLANG_SUPPORT_COMPILER_H
+
+#include "llvm/Support/Compiler.h"
+
+/// CLANG_ABI is the main export/visibility macro to mark something as
+/// explicitly exported when clang is built as a shared library with everything
+/// else that is unannotated will have internal visibility.
+///
+/// CLANG_EXPORT_TEMPLATE is used on explicit template instantiations in source
+/// files that were declared extern in a header. This macro is only set as a
+/// compiler export attribute on windows, on other platforms it does nothing.
+///
+/// CLANG_TEMPLATE_ABI is for annotating extern template declarations in headers
+/// for both functions and classes. On windows its turned in to dllimport for
+/// library consumers, for other platforms its a default visibility attribute.
+#ifndef CLANG_ABI_GENERATING_ANNOTATIONS
+// Marker to add to classes or functions in public headers that should not have
+// export macros added to them by the clang tool
----------------
rnk wrote:

I don't have specific insight on the number of clang symbols, but for prior art, LLVM has the [`extract_symbols.py`](https://github.com/llvm/llvm-project/blob/main/llvm/utils/extract_symbols.py) script that tries to export everything. You can see there [was an issue in 2023](https://github.com/llvm/llvm-project/issues/60109) where the symbol limit has been reached.

Generally, DLLs with an explicit export list are usually not at risk of hitting the limit, but it's reasonable to ask "how many exports" does the resulting DLL have and compare to 64K.

https://github.com/llvm/llvm-project/pull/108276


More information about the cfe-commits mailing list