10 #ifndef SkPreConfig_DEFINED
11 #define SkPreConfig_DEFINED
15 #define SK_NOTHING_ARG1(arg1)
16 #define SK_NOTHING_ARG2(arg1, arg2)
17 #define SK_NOTHING_ARG3(arg1, arg2, arg3)
21 #if !defined(SK_BUILD_FOR_ANDROID) && !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_WIN32) && !defined(SK_BUILD_FOR_UNIX) && !defined(SK_BUILD_FOR_MAC)
24 #include "TargetConditionals.h"
27 #if defined(_WIN32) || defined(__SYMBIAN32__)
28 #define SK_BUILD_FOR_WIN32
29 #elif defined(ANDROID)
30 #define SK_BUILD_FOR_ANDROID
31 #elif defined(linux) || defined(__linux) || defined(__FreeBSD__) || \
32 defined(__OpenBSD__) || defined(__sun) || defined(__NetBSD__) || \
33 defined(__DragonFly__) || defined(__Fuchsia__) || \
34 defined(__GLIBC__) || defined(__GNU__) || defined(__unix__)
35 #define SK_BUILD_FOR_UNIX
36 #elif TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
37 #define SK_BUILD_FOR_IOS
39 #define SK_BUILD_FOR_MAC
49 #if defined(SK_BUILD_FOR_ANDROID_FRAMEWORK) && !defined(SK_BUILD_FOR_ANDROID)
50 #define SK_BUILD_FOR_ANDROID
55 #ifdef SK_BUILD_FOR_WIN32
56 #if !defined(SK_RESTRICT)
57 #define SK_RESTRICT __restrict
59 #if !defined(SK_WARN_UNUSED_RESULT)
60 #define SK_WARN_UNUSED_RESULT
64 #if !defined(SK_RESTRICT)
65 #define SK_RESTRICT __restrict__
68 #if !defined(SK_WARN_UNUSED_RESULT)
69 #define SK_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
74 #if !defined(SK_CPU_BENDIAN) && !defined(SK_CPU_LENDIAN)
75 #if defined(__sparc) || defined(__sparc__) || \
76 defined(_POWER) || defined(__powerpc__) || \
77 defined(__ppc__) || defined(__hppa) || \
78 defined(__PPC__) || defined(__PPC64__) || \
79 defined(_MIPSEB) || defined(__ARMEB__) || \
80 defined(__s390__) || \
81 (defined(__sh__) && defined(__BIG_ENDIAN__)) || \
82 (defined(__ia64) && defined(__BIG_ENDIAN__))
83 #define SK_CPU_BENDIAN
85 #define SK_CPU_LENDIAN
91 #if defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64)
102 #define SK_CPU_SSE_LEVEL_SSE1 10
103 #define SK_CPU_SSE_LEVEL_SSE2 20
104 #define SK_CPU_SSE_LEVEL_SSE3 30
105 #define SK_CPU_SSE_LEVEL_SSSE3 31
106 #define SK_CPU_SSE_LEVEL_SSE41 41
107 #define SK_CPU_SSE_LEVEL_SSE42 42
108 #define SK_CPU_SSE_LEVEL_AVX 51
109 #define SK_CPU_SSE_LEVEL_AVX2 52
115 #ifdef SK_BUILD_NO_OPTS
116 #define SK_CPU_SSE_LEVEL 0
120 #ifndef SK_CPU_SSE_LEVEL
123 #if defined(__AVX2__)
124 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_AVX2
125 #elif defined(__AVX__)
126 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_AVX
127 #elif defined(__SSE4_2__)
128 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE42
129 #elif defined(__SSE4_1__)
130 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE41
131 #elif defined(__SSSE3__)
132 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSSE3
133 #elif defined(__SSE3__)
134 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE3
135 #elif defined(__SSE2__)
136 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE2
141 #ifndef SK_CPU_SSE_LEVEL
144 #if defined(__AVX2__)
145 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_AVX2
146 #elif defined(__AVX__)
147 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_AVX
148 #elif defined(_M_X64) || defined(_M_AMD64)
149 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE2
150 #elif defined(_M_IX86_FP)
152 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE2
153 #elif _M_IX86_FP == 1
154 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE1
162 #if defined(__arm__) && (!defined(__APPLE__) || !TARGET_IPHONE_SIMULATOR)
165 #if defined(__GNUC__)
166 #if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \
167 || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \
168 || defined(__ARM_ARCH_7EM__) || defined(_ARM_ARCH_7)
169 #define SK_ARM_ARCH 7
170 #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
171 || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \
172 || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \
173 || defined(__ARM_ARCH_6M__) || defined(_ARM_ARCH_6)
174 #define SK_ARM_ARCH 6
175 #elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \
176 || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \
177 || defined(__ARM_ARCH_5TEJ__) || defined(_ARM_ARCH_5)
178 #define SK_ARM_ARCH 5
179 #elif defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) || defined(_ARM_ARCH_4)
180 #define SK_ARM_ARCH 4
182 #define SK_ARM_ARCH 3
187 #if defined(__aarch64__) && !defined(SK_BUILD_NO_OPTS)
192 #if !defined(SK_ARM_HAS_NEON) && !defined(SK_BUILD_NO_OPTS) && (defined(__ARM_NEON__) || defined(__ARM_NEON))
193 #define SK_ARM_HAS_NEON
198 #if !defined(SKIA_IMPLEMENTATION)
199 #define SKIA_IMPLEMENTATION 0
203 #if defined(SKIA_DLL)
204 #if defined(_MSC_VER)
205 #if SKIA_IMPLEMENTATION
206 #define SK_API __declspec(dllexport)
208 #define SK_API __declspec(dllimport)
211 #define SK_API __attribute__((visibility("default")))
228 #if defined(__GNUC__)
229 # define SK_PURE_FUNC __attribute__((pure))
231 # define SK_PURE_FUNC
241 #if defined(__has_attribute)
242 # define SK_HAS_ATTRIBUTE(x) __has_attribute(x)
243 #elif defined(__GNUC__)
244 # define SK_HAS_ATTRIBUTE(x) 1
246 # define SK_HAS_ATTRIBUTE(x) 0
256 #if SK_HAS_ATTRIBUTE(optimize)
257 # define SK_ATTRIBUTE_OPTIMIZE_O1 __attribute__((optimize("O1")))
259 # define SK_ATTRIBUTE_OPTIMIZE_O1