clang 22.0.0git
Compiler.h
Go to the documentation of this file.
1/===-- clang/Support/Compiler.h - Compiler abstraction support -*- C++ -*-===/
2/
3/ Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4/ See https://llvm.org/LICENSE.txt for license information.
5/ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6/
7/===----------------------------------------------------------------------===/
8/
9/ This file defines explicit visibility macros used to export symbols from
10/ clang-cpp
11/
12/===----------------------------------------------------------------------===/
13
14#ifndef CLANG_SUPPORT_COMPILER_H
15#define CLANG_SUPPORT_COMPILER_H
16
17#include "llvm/Support/Compiler.h"
18
19/ CLANG_ABI is the main export/visibility macro to mark something as
20/ explicitly exported when clang is built as a shared library with everything
21/ else that is unannotated having hidden visibility.
22/
23/ CLANG_EXPORT_TEMPLATE is used on explicit template instantiations in source
24/ files that were declared extern in a header. This macro is only set as a
25/ compiler export attribute on windows, on other platforms it does nothing.
26/
27/ CLANG_TEMPLATE_ABI is for annotating extern template declarations in headers
28/ for both functions and classes. On windows its turned in to dllimport for
29/ library consumers, for other platforms its a default visibility attribute.
30#ifndef CLANG_ABI_GENERATING_ANNOTATIONS
31/ Marker to add to classes or functions in public headers that should not have
32/ export macros added to them by the clang tool
33#define CLANG_ABI_NOT_EXPORTED
34/ Some libraries like those for tablegen are linked in to tools that used
35/ in the build so can't depend on the llvm shared library. If export macros
36/ were left enabled when building these we would get duplicate or
37/ missing symbol linker errors on windows.
38#if defined(CLANG_BUILD_STATIC)
39#define CLANG_ABI
40#define CLANG_TEMPLATE_ABI
41#define CLANG_EXPORT_TEMPLATE
42#elif defined(_WIN32) && !defined(__MINGW32__)
43#if defined(CLANG_EXPORTS)
44#define CLANG_ABI __declspec(dllexport)
45#define CLANG_TEMPLATE_ABI
46#define CLANG_EXPORT_TEMPLATE __declspec(dllexport)
47#else
48#define CLANG_ABI __declspec(dllimport)
49#define CLANG_TEMPLATE_ABI __declspec(dllimport)
50#define CLANG_EXPORT_TEMPLATE
51#endif
52#elif defined(__ELF__) || defined(__MINGW32__) || defined(_AIX) || \
53 defined(__MVS__) || defined(__CYGWIN__)
54#define CLANG_ABI LLVM_ATTRIBUTE_VISIBILITY_DEFAULT
55#define CLANG_TEMPLATE_ABI LLVM_ATTRIBUTE_VISIBILITY_DEFAULT
56#define CLANG_EXPORT_TEMPLATE
57#elif defined(__MACH__) || defined(__WASM__) || defined(__EMSCRIPTEN__)
58#define CLANG_ABI LLVM_ATTRIBUTE_VISIBILITY_DEFAULT
59#define CLANG_TEMPLATE_ABI
60#define CLANG_EXPORT_TEMPLATE
61#endif
62#endif
63
64#endif

Follow Lee on X/Twitter - Father, Husband, Serial builder creating AI, crypto, games & web tools. We are friends :) AI Will Come To Life!

Check out: eBank.nz (Art Generator) | Netwrck.com (AI Tools) | Text-Generator.io (AI API) | BitBank.nz (Crypto AI) | ReadingTime (Kids Reading) | RewordGame | BigMultiplayerChess | WebFiddle | How.nz | Helix AI Assistant