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