xref: /aosp_15_r20/external/skia/include/private/base/SkAPI.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2022 Google LLC
3*c8dee2aaSAndroid Build Coastguard Worker  *
4*c8dee2aaSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker  * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker  */
7*c8dee2aaSAndroid Build Coastguard Worker 
8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SkAPI_DEFINED
9*c8dee2aaSAndroid Build Coastguard Worker #define SkAPI_DEFINED
10*c8dee2aaSAndroid Build Coastguard Worker 
11*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkLoadUserConfig.h" // IWYU pragma: keep
12*c8dee2aaSAndroid Build Coastguard Worker 
13*c8dee2aaSAndroid Build Coastguard Worker // If SKIA_IMPLEMENTATION is defined as 1, that signals we are building Skia and should
14*c8dee2aaSAndroid Build Coastguard Worker // export our symbols. If it is not set (or set to 0), then Skia is being used by a client
15*c8dee2aaSAndroid Build Coastguard Worker // and we should not export our symbols.
16*c8dee2aaSAndroid Build Coastguard Worker #if !defined(SKIA_IMPLEMENTATION)
17*c8dee2aaSAndroid Build Coastguard Worker     #define SKIA_IMPLEMENTATION 0
18*c8dee2aaSAndroid Build Coastguard Worker #endif
19*c8dee2aaSAndroid Build Coastguard Worker 
20*c8dee2aaSAndroid Build Coastguard Worker // If we are compiling Skia is being as a DLL, we need to be sure to export all of our public
21*c8dee2aaSAndroid Build Coastguard Worker // APIs to that DLL. If a client is using Skia which was compiled as a DLL, we need to instruct
22*c8dee2aaSAndroid Build Coastguard Worker // the linker to use the symbols from that DLL. This is the goal of the SK_API define.
23*c8dee2aaSAndroid Build Coastguard Worker #if !defined(SK_API)
24*c8dee2aaSAndroid Build Coastguard Worker     #if defined(SKIA_DLL)
25*c8dee2aaSAndroid Build Coastguard Worker         #if defined(_MSC_VER)
26*c8dee2aaSAndroid Build Coastguard Worker             #if SKIA_IMPLEMENTATION
27*c8dee2aaSAndroid Build Coastguard Worker                 #define SK_API __declspec(dllexport)
28*c8dee2aaSAndroid Build Coastguard Worker             #else
29*c8dee2aaSAndroid Build Coastguard Worker                 #define SK_API __declspec(dllimport)
30*c8dee2aaSAndroid Build Coastguard Worker             #endif
31*c8dee2aaSAndroid Build Coastguard Worker         #else
32*c8dee2aaSAndroid Build Coastguard Worker             #define SK_API __attribute__((visibility("default")))
33*c8dee2aaSAndroid Build Coastguard Worker         #endif
34*c8dee2aaSAndroid Build Coastguard Worker     #else
35*c8dee2aaSAndroid Build Coastguard Worker         #define SK_API
36*c8dee2aaSAndroid Build Coastguard Worker     #endif
37*c8dee2aaSAndroid Build Coastguard Worker #endif
38*c8dee2aaSAndroid Build Coastguard Worker 
39*c8dee2aaSAndroid Build Coastguard Worker // SK_SPI is functionally identical to SK_API, but used within src to clarify that it's less stable
40*c8dee2aaSAndroid Build Coastguard Worker #if !defined(SK_SPI)
41*c8dee2aaSAndroid Build Coastguard Worker     #define SK_SPI SK_API
42*c8dee2aaSAndroid Build Coastguard Worker #endif
43*c8dee2aaSAndroid Build Coastguard Worker 
44*c8dee2aaSAndroid Build Coastguard Worker // See https://clang.llvm.org/docs/AttributeReference.html#availability
45*c8dee2aaSAndroid Build Coastguard Worker // The API_AVAILABLE macro comes from <os/availability.h> on MacOS
46*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_ENABLE_API_AVAILABLE)
47*c8dee2aaSAndroid Build Coastguard Worker #   define SK_API_AVAILABLE API_AVAILABLE
48*c8dee2aaSAndroid Build Coastguard Worker #else
49*c8dee2aaSAndroid Build Coastguard Worker #   define SK_API_AVAILABLE(...)
50*c8dee2aaSAndroid Build Coastguard Worker #endif
51*c8dee2aaSAndroid Build Coastguard Worker 
52*c8dee2aaSAndroid Build Coastguard Worker #endif
53