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