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) || 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(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
76 #define SK_CPU_BENDIAN
77 #elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
78 #define SK_CPU_LENDIAN
79 #elif defined(__sparc) || defined(__sparc__) || \
80 defined(_POWER) || defined(__powerpc__) || \
81 defined(__ppc__) || defined(__hppa) || \
82 defined(__PPC__) || defined(__PPC64__) || \
83 defined(_MIPSEB) || defined(__ARMEB__) || \
84 defined(__s390__) || \
85 (defined(__sh__) && defined(__BIG_ENDIAN__)) || \
86 (defined(__ia64) && defined(__BIG_ENDIAN__))
87 #define SK_CPU_BENDIAN
89 #define SK_CPU_LENDIAN
95 #if defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64)
106 #define SK_CPU_SSE_LEVEL_SSE1 10
107 #define SK_CPU_SSE_LEVEL_SSE2 20
108 #define SK_CPU_SSE_LEVEL_SSE3 30
109 #define SK_CPU_SSE_LEVEL_SSSE3 31
110 #define SK_CPU_SSE_LEVEL_SSE41 41
111 #define SK_CPU_SSE_LEVEL_SSE42 42
112 #define SK_CPU_SSE_LEVEL_AVX 51
113 #define SK_CPU_SSE_LEVEL_AVX2 52
119 #ifdef SK_BUILD_NO_OPTS
120 #define SK_CPU_SSE_LEVEL 0
124 #ifndef SK_CPU_SSE_LEVEL
127 #if defined(__AVX2__)
128 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_AVX2
129 #elif defined(__AVX__)
130 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_AVX
131 #elif defined(__SSE4_2__)
132 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE42
133 #elif defined(__SSE4_1__)
134 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE41
135 #elif defined(__SSSE3__)
136 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSSE3
137 #elif defined(__SSE3__)
138 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE3
139 #elif defined(__SSE2__)
140 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE2
145 #ifndef SK_CPU_SSE_LEVEL
148 #if defined(__AVX2__)
149 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_AVX2
150 #elif defined(__AVX__)
151 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_AVX
152 #elif defined(_M_X64) || defined(_M_AMD64)
153 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE2
154 #elif defined(_M_IX86_FP)
156 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE2
157 #elif _M_IX86_FP == 1
158 #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE1
166 #if defined(__arm__) && (!defined(__APPLE__) || !TARGET_IPHONE_SIMULATOR)
169 #if defined(__GNUC__)
170 #if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \
171 || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \
172 || defined(__ARM_ARCH_7EM__) || defined(_ARM_ARCH_7)
173 #define SK_ARM_ARCH 7
174 #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
175 || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \
176 || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \
177 || defined(__ARM_ARCH_6M__) || defined(_ARM_ARCH_6)
178 #define SK_ARM_ARCH 6
179 #elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \
180 || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \
181 || defined(__ARM_ARCH_5TEJ__) || defined(_ARM_ARCH_5)
182 #define SK_ARM_ARCH 5
183 #elif defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) || defined(_ARM_ARCH_4)
184 #define SK_ARM_ARCH 4
186 #define SK_ARM_ARCH 3
191 #if defined(__aarch64__) && !defined(SK_BUILD_NO_OPTS)
196 #if !defined(SK_ARM_HAS_NEON) && !defined(SK_BUILD_NO_OPTS) && (defined(__ARM_NEON__) || defined(__ARM_NEON))
197 #define SK_ARM_HAS_NEON
202 #if defined(__ARM_FEATURE_CRC32) && !defined(__APPLE__)
203 #define SK_ARM_HAS_CRC32
208 #if !defined(SKIA_IMPLEMENTATION)
209 #define SKIA_IMPLEMENTATION 0
213 #if defined(SKIA_DLL)
214 #if defined(_MSC_VER)
215 #if SKIA_IMPLEMENTATION
216 #define SK_API __declspec(dllexport)
218 #define SK_API __declspec(dllimport)
221 #define SK_API __attribute__((visibility("default")))
238 #if defined(__GNUC__)
239 # define SK_PURE_FUNC __attribute__((pure))
241 # define SK_PURE_FUNC
251 #if defined(__has_attribute)
252 # define SK_HAS_ATTRIBUTE(x) __has_attribute(x)
253 #elif defined(__GNUC__)
254 # define SK_HAS_ATTRIBUTE(x) 1
256 # define SK_HAS_ATTRIBUTE(x) 0
266 #if SK_HAS_ATTRIBUTE(optimize)
267 # define SK_ATTRIBUTE_OPTIMIZE_O1 __attribute__((optimize("O1")))
269 # define SK_ATTRIBUTE_OPTIMIZE_O1