15bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com
2f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com/*
35bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Copyright 2006 The Android Open Source Project
4f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com *
55bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Use of this source code is governed by a BSD-style license that can be
65bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * found in the LICENSE file.
7f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com */
8f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
95bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com
10f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#ifndef SkPreConfig_DEFINED
11f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#define SkPreConfig_DEFINED
12f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
13982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com#ifdef WEBKIT_VERSION_MIN_REQUIRED
14982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    #include "config.h"
15982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com#endif
16982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com
17f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com//////////////////////////////////////////////////////////////////////
18f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
19a49a4f7bcdc9b1281b1257fd5f2b5aa875fe87c6commit-bot@chromium.org#if !defined(SK_BUILD_FOR_ANDROID) && !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_PALM) && !defined(SK_BUILD_FOR_WINCE) && !defined(SK_BUILD_FOR_WIN32) && !defined(SK_BUILD_FOR_UNIX) && !defined(SK_BUILD_FOR_MAC) && !defined(SK_BUILD_FOR_SDL) && !defined(SK_BUILD_FOR_BREW) && !defined(SK_BUILD_FOR_NACL)
20982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com
21982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    #ifdef __APPLE__
22982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com        #include "TargetConditionals.h"
23982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    #endif
24f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
25f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    #if defined(PALMOS_SDK_VERSION)
26f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com        #define SK_BUILD_FOR_PALM
27f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    #elif defined(UNDER_CE)
28f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com        #define SK_BUILD_FOR_WINCE
29f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    #elif defined(WIN32)
30f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com        #define SK_BUILD_FOR_WIN32
31f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    #elif defined(__SYMBIAN32__)
32f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com        #define SK_BUILD_FOR_WIN32
33d78c616ada60e45a1f1719648facfeff4546c163djsollen@google.com    #elif defined(ANDROID)
34d78c616ada60e45a1f1719648facfeff4546c163djsollen@google.com        #define SK_BUILD_FOR_ANDROID
355bacd58d7cc7f75dc41ba47916e0f0fdc1a8188dreed@google.com    #elif defined(linux) || defined(__FreeBSD__) || defined(__OpenBSD__) || \
36a5f8c106f102f1c8db7ed72a057605225bb1f99cgeorge@mozilla.com          defined(__sun) || defined(__NetBSD__) || defined(__DragonFly__) || \
37a5f8c106f102f1c8db7ed72a057605225bb1f99cgeorge@mozilla.com          defined(__GLIBC__) || defined(__GNU__)
38f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com        #define SK_BUILD_FOR_UNIX
39982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    #elif TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
40982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com        #define SK_BUILD_FOR_IOS
41f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    #else
42f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com        #define SK_BUILD_FOR_MAC
43f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    #endif
44f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
45f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#endif
46f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
47a49a4f7bcdc9b1281b1257fd5f2b5aa875fe87c6commit-bot@chromium.org/* Even if the user only defined the framework variant we still need to build
48a49a4f7bcdc9b1281b1257fd5f2b5aa875fe87c6commit-bot@chromium.org * the default (NDK-compliant) Android code. Therefore, when attempting to
49a49a4f7bcdc9b1281b1257fd5f2b5aa875fe87c6commit-bot@chromium.org * include/exclude something from the framework variant check first that we are
50a49a4f7bcdc9b1281b1257fd5f2b5aa875fe87c6commit-bot@chromium.org * building for Android then check the status of the framework define.
511417d5dde39e5270a421e703ef6b3c34f3f00936djsollen@google.com */
5217e5c9977b16344ea53334e98cda9f46f984fd90bsalomon@google.com#if defined(SK_BUILD_FOR_ANDROID_FRAMEWORK) && !defined(SK_BUILD_FOR_ANDROID)
531417d5dde39e5270a421e703ef6b3c34f3f00936djsollen@google.com    #define SK_BUILD_FOR_ANDROID
541417d5dde39e5270a421e703ef6b3c34f3f00936djsollen@google.com#endif
551417d5dde39e5270a421e703ef6b3c34f3f00936djsollen@google.com
56a49a4f7bcdc9b1281b1257fd5f2b5aa875fe87c6commit-bot@chromium.org
576bc89e386885ed9624fb41b9873af75041a4dbffdigit@google.com// USE_CHROMIUM_SKIA is defined when building Skia for the Chromium
586bc89e386885ed9624fb41b9873af75041a4dbffdigit@google.com// browser.
596bc89e386885ed9624fb41b9873af75041a4dbffdigit@google.com#if defined(USE_CHROMIUM_SKIA)
606bc89e386885ed9624fb41b9873af75041a4dbffdigit@google.com    #define SK_BUILD_FOR_CHROMIUM
616bc89e386885ed9624fb41b9873af75041a4dbffdigit@google.com#endif
626bc89e386885ed9624fb41b9873af75041a4dbffdigit@google.com
63f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com//////////////////////////////////////////////////////////////////////
64f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
65f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#if !defined(SK_DEBUG) && !defined(SK_RELEASE)
66f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    #ifdef NDEBUG
67f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com        #define SK_RELEASE
68f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    #else
69f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com        #define SK_DEBUG
70f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    #endif
71f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#endif
72f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
73213e28b34ce9e8cc606d997ca31378553c6de2fareed@android.com#ifdef SK_BUILD_FOR_WIN32
74f0903f83ea23d57e923ede72cb94f01dd1cce7ectomhudson@google.com    #if !defined(SK_RESTRICT)
75f0903f83ea23d57e923ede72cb94f01dd1cce7ectomhudson@google.com        #define SK_RESTRICT __restrict
76f0903f83ea23d57e923ede72cb94f01dd1cce7ectomhudson@google.com    #endif
77cc81fa60efd95bcd60e48d74619dd23129035ffbbungeman@google.com    #if !defined(SK_WARN_UNUSED_RESULT)
78cc81fa60efd95bcd60e48d74619dd23129035ffbbungeman@google.com        #define SK_WARN_UNUSED_RESULT
79cc81fa60efd95bcd60e48d74619dd23129035ffbbungeman@google.com    #endif
80213e28b34ce9e8cc606d997ca31378553c6de2fareed@android.com    #include "sk_stdint.h"
81213e28b34ce9e8cc606d997ca31378553c6de2fareed@android.com#endif
82213e28b34ce9e8cc606d997ca31378553c6de2fareed@android.com
83f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com//////////////////////////////////////////////////////////////////////
84f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
8515a207b7ae3751d44996ba297d99b8b96417f3cfreed@android.com#if !defined(SK_RESTRICT)
8615a207b7ae3751d44996ba297d99b8b96417f3cfreed@android.com    #define SK_RESTRICT __restrict__
8715a207b7ae3751d44996ba297d99b8b96417f3cfreed@android.com#endif
88f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
89cc81fa60efd95bcd60e48d74619dd23129035ffbbungeman@google.com#if !defined(SK_WARN_UNUSED_RESULT)
90cc81fa60efd95bcd60e48d74619dd23129035ffbbungeman@google.com    #define SK_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
91cc81fa60efd95bcd60e48d74619dd23129035ffbbungeman@google.com#endif
92cc81fa60efd95bcd60e48d74619dd23129035ffbbungeman@google.com
93f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com//////////////////////////////////////////////////////////////////////
94f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
9515a207b7ae3751d44996ba297d99b8b96417f3cfreed@android.com#if !defined(SK_SCALAR_IS_FLOAT) && !defined(SK_SCALAR_IS_FIXED)
9615a207b7ae3751d44996ba297d99b8b96417f3cfreed@android.com    #define SK_SCALAR_IS_FLOAT
97f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#endif
98f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
99f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com//////////////////////////////////////////////////////////////////////
100f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
101f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#if !defined(SK_CPU_BENDIAN) && !defined(SK_CPU_LENDIAN)
1023bf750475a81f5ae73cb6b7bceaca83cec596dd5george@mozilla.com    #if defined (__ppc__) || defined(__PPC__) || defined(__ppc64__) \
1033bf750475a81f5ae73cb6b7bceaca83cec596dd5george@mozilla.com        || defined(__PPC64__)
104f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com        #define SK_CPU_BENDIAN
105f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    #else
106f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com        #define SK_CPU_LENDIAN
107f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    #endif
108f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#endif
109f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
110f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com//////////////////////////////////////////////////////////////////////
111f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
112c0855f93e734cbcf32190cfe52bb4b1358707feereed@google.com#ifndef SK_MMAP_SUPPORT
113c0855f93e734cbcf32190cfe52bb4b1358707feereed@google.com    #ifdef SK_BUILD_FOR_WIN32
114c0855f93e734cbcf32190cfe52bb4b1358707feereed@google.com        // by default, if we're windows, we assume we don't have mmap
115c0855f93e734cbcf32190cfe52bb4b1358707feereed@google.com        #define SK_MMAP_SUPPORT 0
116c0855f93e734cbcf32190cfe52bb4b1358707feereed@google.com    #else
117c0855f93e734cbcf32190cfe52bb4b1358707feereed@google.com        #define SK_MMAP_SUPPORT 1
118c0855f93e734cbcf32190cfe52bb4b1358707feereed@google.com    #endif
119c0855f93e734cbcf32190cfe52bb4b1358707feereed@google.com#endif
120c0855f93e734cbcf32190cfe52bb4b1358707feereed@google.com
121c0855f93e734cbcf32190cfe52bb4b1358707feereed@google.com//////////////////////////////////////////////////////////////////////
122c0855f93e734cbcf32190cfe52bb4b1358707feereed@google.com
123feef02594215abc54b2f6428f80601cfa434dcbareed@google.com/**
124befae7001e3f486482e86e31081170985048d002reed@google.com *  SK_CPU_SSE_LEVEL
125befae7001e3f486482e86e31081170985048d002reed@google.com *
126c4900b45422a657fed3260d454c7b5edfa797d67reed@google.com *  If defined, SK_CPU_SSE_LEVEL should be set to the highest supported level.
127c4900b45422a657fed3260d454c7b5edfa797d67reed@google.com *  On non-intel CPU this should be undefined.
128feef02594215abc54b2f6428f80601cfa434dcbareed@google.com */
129befae7001e3f486482e86e31081170985048d002reed@google.com
130fc8457c9b3f49d77fc8ef81534f2b521c8fbb2c4reed@google.com#define SK_CPU_SSE_LEVEL_SSE1     10
131ade4832f252d5eea13ad6d8b488c17a8a43eccdfreed@google.com#define SK_CPU_SSE_LEVEL_SSE2     20
132ade4832f252d5eea13ad6d8b488c17a8a43eccdfreed@google.com#define SK_CPU_SSE_LEVEL_SSE3     30
133ade4832f252d5eea13ad6d8b488c17a8a43eccdfreed@google.com#define SK_CPU_SSE_LEVEL_SSSE3    31
134c4900b45422a657fed3260d454c7b5edfa797d67reed@google.com
135befae7001e3f486482e86e31081170985048d002reed@google.com// Are we in GCC?
136feef02594215abc54b2f6428f80601cfa434dcbareed@google.com#ifndef SK_CPU_SSE_LEVEL
137fc8457c9b3f49d77fc8ef81534f2b521c8fbb2c4reed@google.com    #if defined(__SSE2__)
138ade4832f252d5eea13ad6d8b488c17a8a43eccdfreed@google.com        #define SK_CPU_SSE_LEVEL    SK_CPU_SSE_LEVEL_SSE2
139c4900b45422a657fed3260d454c7b5edfa797d67reed@google.com    #elif defined(__SSE3__)
140ade4832f252d5eea13ad6d8b488c17a8a43eccdfreed@google.com        #define SK_CPU_SSE_LEVEL    SK_CPU_SSE_LEVEL_SSE3
141fc8457c9b3f49d77fc8ef81534f2b521c8fbb2c4reed@google.com    #elif defined(__SSSE3__)
142ade4832f252d5eea13ad6d8b488c17a8a43eccdfreed@google.com        #define SK_CPU_SSE_LEVEL    SK_CPU_SSE_LEVEL_SSSE3
143feef02594215abc54b2f6428f80601cfa434dcbareed@google.com    #endif
144feef02594215abc54b2f6428f80601cfa434dcbareed@google.com#endif
145feef02594215abc54b2f6428f80601cfa434dcbareed@google.com
146befae7001e3f486482e86e31081170985048d002reed@google.com// Are we in VisualStudio?
147befae7001e3f486482e86e31081170985048d002reed@google.com#ifndef SK_CPU_SSE_LEVEL
148fc8457c9b3f49d77fc8ef81534f2b521c8fbb2c4reed@google.com    #if _M_IX86_FP == 1
149fc8457c9b3f49d77fc8ef81534f2b521c8fbb2c4reed@google.com        #define SK_CPU_SSE_LEVEL    SK_CPU_SSE_LEVEL_SSE1
150fc8457c9b3f49d77fc8ef81534f2b521c8fbb2c4reed@google.com    #elif _M_IX86_FP >= 2
151fc8457c9b3f49d77fc8ef81534f2b521c8fbb2c4reed@google.com        #define SK_CPU_SSE_LEVEL    SK_CPU_SSE_LEVEL_SSE2
152fc8457c9b3f49d77fc8ef81534f2b521c8fbb2c4reed@google.com    #endif
153fc8457c9b3f49d77fc8ef81534f2b521c8fbb2c4reed@google.com#endif
154fc8457c9b3f49d77fc8ef81534f2b521c8fbb2c4reed@google.com
155fc8457c9b3f49d77fc8ef81534f2b521c8fbb2c4reed@google.com// 64bit intel guarantees at least SSE2
156fc8457c9b3f49d77fc8ef81534f2b521c8fbb2c4reed@google.com#if defined(__x86_64__) || defined(_WIN64)
157fc8457c9b3f49d77fc8ef81534f2b521c8fbb2c4reed@google.com    #if !defined(SK_CPU_SSE_LEVEL) || (SK_CPU_SSE_LEVEL < SK_CPU_SSE_LEVEL_SSE2)
158fc8457c9b3f49d77fc8ef81534f2b521c8fbb2c4reed@google.com        #undef SK_CPU_SSE_LEVEL
159ade4832f252d5eea13ad6d8b488c17a8a43eccdfreed@google.com        #define SK_CPU_SSE_LEVEL    SK_CPU_SSE_LEVEL_SSE2
160befae7001e3f486482e86e31081170985048d002reed@google.com    #endif
161ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com#endif
162ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com
163ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com//////////////////////////////////////////////////////////////////////
164ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com// ARM defines
165ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com
166ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com#if defined(__arm__) && (!defined(__APPLE__) || !TARGET_IPHONE_SIMULATOR)
167ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com    #define SK_CPU_ARM
168ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com
169ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com    #if defined(__GNUC__)
170ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com        #if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \
171ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com                || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \
172ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com                || defined(__ARM_ARCH_7EM__) || defined(_ARM_ARCH_7)
173ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com            #define SK_ARM_ARCH 7
174ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com        #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
175ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com                || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \
176ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com                || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \
177ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com                || defined(__ARM_ARCH_6M__) || defined(_ARM_ARCH_6)
178ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com            #define SK_ARM_ARCH 6
179ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com        #elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \
180ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com                || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \
181ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com                || defined(__ARM_ARCH_5TEJ__) || defined(_ARM_ARCH_5)
182ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com            #define SK_ARM_ARCH 5
183ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com        #elif defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) || defined(_ARM_ARCH_4)
184ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com            #define SK_ARM_ARCH 4
185ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com        #else
186ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com            #define SK_ARM_ARCH 3
187ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com        #endif
188ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com
189ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com        #if defined(__thumb2__) && (SK_ARM_ARCH >= 6) \
190ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com                || !defined(__thumb__) && ((SK_ARM_ARCH > 5) || defined(__ARM_ARCH_5E__) \
191ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com                || defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__))
192ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com            #define SK_ARM_HAS_EDSP
193ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com        #endif
194ee96b3f90978c8b3d0134dd856b07d38dee78abfcaryclark@google.com    #endif
195befae7001e3f486482e86e31081170985048d002reed@google.com#endif
196befae7001e3f486482e86e31081170985048d002reed@google.com
197feef02594215abc54b2f6428f80601cfa434dcbareed@google.com//////////////////////////////////////////////////////////////////////
198feef02594215abc54b2f6428f80601cfa434dcbareed@google.com
1992083387d719b933797044ad07efd3bb67f99a5c5ctguil@chromium.org#if !defined(SKIA_IMPLEMENTATION)
2002083387d719b933797044ad07efd3bb67f99a5c5ctguil@chromium.org    #define SKIA_IMPLEMENTATION 0
2012083387d719b933797044ad07efd3bb67f99a5c5ctguil@chromium.org#endif
202a4f5d7684c09ad261c807de850c6d5bea136a586reed@google.com
203a4f5d7684c09ad261c807de850c6d5bea136a586reed@google.com#if defined(SKIA_DLL)
204a4f5d7684c09ad261c807de850c6d5bea136a586reed@google.com    #if defined(WIN32)
205a524c8ef21631c86dae4525305f3871bf2bbc949robertphillips@google.com        #if SKIA_IMPLEMENTATION
206a4f5d7684c09ad261c807de850c6d5bea136a586reed@google.com            #define SK_API __declspec(dllexport)
207a4f5d7684c09ad261c807de850c6d5bea136a586reed@google.com        #else
208a4f5d7684c09ad261c807de850c6d5bea136a586reed@google.com            #define SK_API __declspec(dllimport)
209a4f5d7684c09ad261c807de850c6d5bea136a586reed@google.com        #endif
2102083387d719b933797044ad07efd3bb67f99a5c5ctguil@chromium.org    #else
211a524c8ef21631c86dae4525305f3871bf2bbc949robertphillips@google.com        #define SK_API __attribute__((visibility("default")))
2122083387d719b933797044ad07efd3bb67f99a5c5ctguil@chromium.org    #endif
2132083387d719b933797044ad07efd3bb67f99a5c5ctguil@chromium.org#else
2142083387d719b933797044ad07efd3bb67f99a5c5ctguil@chromium.org    #define SK_API
2152083387d719b933797044ad07efd3bb67f99a5c5ctguil@chromium.org#endif
2162083387d719b933797044ad07efd3bb67f99a5c5ctguil@chromium.org
21796fe115c17db62f4ee60f20e684950084e1fbf0adigit@google.com//////////////////////////////////////////////////////////////////////
21896fe115c17db62f4ee60f20e684950084e1fbf0adigit@google.com
21996fe115c17db62f4ee60f20e684950084e1fbf0adigit@google.com/**
22096fe115c17db62f4ee60f20e684950084e1fbf0adigit@google.com * Use SK_PURE_FUNC as an attribute to indicate that a function's
22196fe115c17db62f4ee60f20e684950084e1fbf0adigit@google.com * return value only depends on the value of its parameters. This
22296fe115c17db62f4ee60f20e684950084e1fbf0adigit@google.com * can help the compiler optimize out successive calls.
22396fe115c17db62f4ee60f20e684950084e1fbf0adigit@google.com *
22496fe115c17db62f4ee60f20e684950084e1fbf0adigit@google.com * Usage:
22596fe115c17db62f4ee60f20e684950084e1fbf0adigit@google.com *      void  function(int params)  SK_PURE_FUNC;
22696fe115c17db62f4ee60f20e684950084e1fbf0adigit@google.com */
22796fe115c17db62f4ee60f20e684950084e1fbf0adigit@google.com#if defined(__GNUC__)
22896fe115c17db62f4ee60f20e684950084e1fbf0adigit@google.com#  define  SK_PURE_FUNC  __attribute__((pure))
22996fe115c17db62f4ee60f20e684950084e1fbf0adigit@google.com#else
23096fe115c17db62f4ee60f20e684950084e1fbf0adigit@google.com#  define  SK_PURE_FUNC  /* nothing */
23196fe115c17db62f4ee60f20e684950084e1fbf0adigit@google.com#endif
23296fe115c17db62f4ee60f20e684950084e1fbf0adigit@google.com
2336f215000caa63d83c7409db3c839b9d303f50137digit@google.com//////////////////////////////////////////////////////////////////////
2346f215000caa63d83c7409db3c839b9d303f50137digit@google.com
2356f215000caa63d83c7409db3c839b9d303f50137digit@google.com/**
2366f215000caa63d83c7409db3c839b9d303f50137digit@google.com * SK_HAS_ATTRIBUTE(<name>) should return true iff the compiler
2376f215000caa63d83c7409db3c839b9d303f50137digit@google.com * supports __attribute__((<name>)). Mostly important because
2386f215000caa63d83c7409db3c839b9d303f50137digit@google.com * Clang doesn't support all of GCC attributes.
2396f215000caa63d83c7409db3c839b9d303f50137digit@google.com */
2406f215000caa63d83c7409db3c839b9d303f50137digit@google.com#if defined(__has_attribute)
2416f215000caa63d83c7409db3c839b9d303f50137digit@google.com#   define SK_HAS_ATTRIBUTE(x) __has_attribute(x)
2426f215000caa63d83c7409db3c839b9d303f50137digit@google.com#elif defined(__GNUC__)
2436f215000caa63d83c7409db3c839b9d303f50137digit@google.com#   define SK_HAS_ATTRIBUTE(x) 1
2446f215000caa63d83c7409db3c839b9d303f50137digit@google.com#else
2456f215000caa63d83c7409db3c839b9d303f50137digit@google.com#   define SK_HAS_ATTRIBUTE(x) 0
2466f215000caa63d83c7409db3c839b9d303f50137digit@google.com#endif
2476f215000caa63d83c7409db3c839b9d303f50137digit@google.com
2486f215000caa63d83c7409db3c839b9d303f50137digit@google.com/**
2496f215000caa63d83c7409db3c839b9d303f50137digit@google.com * SK_ATTRIBUTE_OPTIMIZE_O1 can be used as a function attribute
2506f215000caa63d83c7409db3c839b9d303f50137digit@google.com * to specify individual optimization level of -O1, if the compiler
2516f215000caa63d83c7409db3c839b9d303f50137digit@google.com * supports it.
2526f215000caa63d83c7409db3c839b9d303f50137digit@google.com *
2536f215000caa63d83c7409db3c839b9d303f50137digit@google.com * NOTE: Clang/ARM (r161757) does not support the 'optimize' attribute.
2546f215000caa63d83c7409db3c839b9d303f50137digit@google.com */
2556f215000caa63d83c7409db3c839b9d303f50137digit@google.com#if SK_HAS_ATTRIBUTE(optimize)
2566f215000caa63d83c7409db3c839b9d303f50137digit@google.com#   define SK_ATTRIBUTE_OPTIMIZE_O1 __attribute__((optimize("O1")))
2576f215000caa63d83c7409db3c839b9d303f50137digit@google.com#else
2586f215000caa63d83c7409db3c839b9d303f50137digit@google.com#   define SK_ATTRIBUTE_OPTIMIZE_O1 /* nothing */
259f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#endif
260f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
2616f215000caa63d83c7409db3c839b9d303f50137digit@google.com#endif
262