SkPreConfig.h revision 3ac6b7551dc7aa182018f96b32f6e516305333ee
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 28a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project 48a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkPreConfig_DEFINED 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkPreConfig_DEFINED 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 13f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com#ifdef WEBKIT_VERSION_MIN_REQUIRED 14f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #include "config.h" 15f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com#endif 16f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 174469938e92d779dff05e745559e67907bbf21e78reed@google.com// Allows embedders that want to disable macros that take arguments to just 184469938e92d779dff05e745559e67907bbf21e78reed@google.com// define that symbol to be one of these 194469938e92d779dff05e745559e67907bbf21e78reed@google.com// 204469938e92d779dff05e745559e67907bbf21e78reed@google.com#define SK_NOTHING_ARG1(arg1) 214469938e92d779dff05e745559e67907bbf21e78reed@google.com#define SK_NOTHING_ARG2(arg1, arg2) 224469938e92d779dff05e745559e67907bbf21e78reed@google.com#define SK_NOTHING_ARG3(arg1, arg2, arg3) 234469938e92d779dff05e745559e67907bbf21e78reed@google.com 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////// 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 263ac6b7551dc7aa182018f96b32f6e516305333eebungeman#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) 27f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 28f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #ifdef __APPLE__ 29f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #include "TargetConditionals.h" 30f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #endif 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 323ac6b7551dc7aa182018f96b32f6e516305333eebungeman #if defined(WIN32) || defined(__SYMBIAN32__) 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_BUILD_FOR_WIN32 3460abb078e5597c9c6ceaba1ef495c4916ff4df0ddjsollen@google.com #elif defined(ANDROID) 3560abb078e5597c9c6ceaba1ef495c4916ff4df0ddjsollen@google.com #define SK_BUILD_FOR_ANDROID 36ea6805d2224eaccfcd95f4a019cfcc57ac89afcereed@google.com #elif defined(linux) || defined(__FreeBSD__) || defined(__OpenBSD__) || \ 3779c865a5c8f585880d48771194c8cd82ab8cda98george@mozilla.com defined(__sun) || defined(__NetBSD__) || defined(__DragonFly__) || \ 3879c865a5c8f585880d48771194c8cd82ab8cda98george@mozilla.com defined(__GLIBC__) || defined(__GNU__) 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_BUILD_FOR_UNIX 40f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #elif TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR 41f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #define SK_BUILD_FOR_IOS 428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #else 438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_BUILD_FOR_MAC 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 48059a4c70d7eb6556c123e529259aaffe7214164dcommit-bot@chromium.org/* Even if the user only defined the framework variant we still need to build 49059a4c70d7eb6556c123e529259aaffe7214164dcommit-bot@chromium.org * the default (NDK-compliant) Android code. Therefore, when attempting to 50059a4c70d7eb6556c123e529259aaffe7214164dcommit-bot@chromium.org * include/exclude something from the framework variant check first that we are 51059a4c70d7eb6556c123e529259aaffe7214164dcommit-bot@chromium.org * building for Android then check the status of the framework define. 5258629291bc145edca8fb303e465c8537bed65314djsollen@google.com */ 53530efc808544e9ff79814f61678bd919b168cb21bsalomon@google.com#if defined(SK_BUILD_FOR_ANDROID_FRAMEWORK) && !defined(SK_BUILD_FOR_ANDROID) 5458629291bc145edca8fb303e465c8537bed65314djsollen@google.com #define SK_BUILD_FOR_ANDROID 5558629291bc145edca8fb303e465c8537bed65314djsollen@google.com#endif 5658629291bc145edca8fb303e465c8537bed65314djsollen@google.com 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////// 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if !defined(SK_DEBUG) && !defined(SK_RELEASE) 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #ifdef NDEBUG 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_RELEASE 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #else 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_DEBUG 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 6763debae4c1020fa1e0ccd92ef3cbfdc8735acf8ereed@android.com#ifdef SK_BUILD_FOR_WIN32 68333d6cb2448d0febcbeb7c8c7310c0ff2d1a6104tomhudson@google.com #if !defined(SK_RESTRICT) 69333d6cb2448d0febcbeb7c8c7310c0ff2d1a6104tomhudson@google.com #define SK_RESTRICT __restrict 70333d6cb2448d0febcbeb7c8c7310c0ff2d1a6104tomhudson@google.com #endif 71363a4c22af71b8afedc00050ee5cc97fe4bd6f76bungeman@google.com #if !defined(SK_WARN_UNUSED_RESULT) 72363a4c22af71b8afedc00050ee5cc97fe4bd6f76bungeman@google.com #define SK_WARN_UNUSED_RESULT 73363a4c22af71b8afedc00050ee5cc97fe4bd6f76bungeman@google.com #endif 7463debae4c1020fa1e0ccd92ef3cbfdc8735acf8ereed@android.com#endif 7563debae4c1020fa1e0ccd92ef3cbfdc8735acf8ereed@android.com 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////// 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 785c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com#if !defined(SK_RESTRICT) 795c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #define SK_RESTRICT __restrict__ 805c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com#endif 818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 82363a4c22af71b8afedc00050ee5cc97fe4bd6f76bungeman@google.com#if !defined(SK_WARN_UNUSED_RESULT) 83363a4c22af71b8afedc00050ee5cc97fe4bd6f76bungeman@google.com #define SK_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 84363a4c22af71b8afedc00050ee5cc97fe4bd6f76bungeman@google.com#endif 85363a4c22af71b8afedc00050ee5cc97fe4bd6f76bungeman@google.com 868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////// 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if !defined(SK_CPU_BENDIAN) && !defined(SK_CPU_LENDIAN) 898ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org #if defined(__sparc) || defined(__sparc__) || \ 908ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org defined(_POWER) || defined(__powerpc__) || \ 918ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org defined(__ppc__) || defined(__hppa) || \ 928ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org defined(__PPC__) || defined(__PPC64__) || \ 938ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org defined(_MIPSEB) || defined(__ARMEB__) || \ 948ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org defined(__s390__) || \ 958ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org (defined(__sh__) && defined(__BIG_ENDIAN__)) || \ 968ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org (defined(__ia64) && defined(__BIG_ENDIAN__)) 978ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org #define SK_CPU_BENDIAN 988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #else 998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_CPU_LENDIAN 1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////// 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1054460e75bc7e8c13e0e44ee9330ae8f556d8b0094commit-bot@chromium.org#if defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64) 1064460e75bc7e8c13e0e44ee9330ae8f556d8b0094commit-bot@chromium.org #define SK_CPU_X86 1 1074460e75bc7e8c13e0e44ee9330ae8f556d8b0094commit-bot@chromium.org#endif 1084460e75bc7e8c13e0e44ee9330ae8f556d8b0094commit-bot@chromium.org 1094a2cb30accbd5f9b0b60904a55e0bfecf706255areed@google.com/** 110126b4362be3bb43ef8f7a10df710b40e8bba869dreed@google.com * SK_CPU_SSE_LEVEL 111126b4362be3bb43ef8f7a10df710b40e8bba869dreed@google.com * 112ab69788571ed968dc0bcc934b9979195c6a28310reed@google.com * If defined, SK_CPU_SSE_LEVEL should be set to the highest supported level. 113ab69788571ed968dc0bcc934b9979195c6a28310reed@google.com * On non-intel CPU this should be undefined. 1144a2cb30accbd5f9b0b60904a55e0bfecf706255areed@google.com */ 115126b4362be3bb43ef8f7a10df710b40e8bba869dreed@google.com 11600aad94f01a9078d26363db3116f8005d84440f2reed@google.com#define SK_CPU_SSE_LEVEL_SSE1 10 1178dbd5725c0a6681425c7a019c58c4cacdad2a238reed@google.com#define SK_CPU_SSE_LEVEL_SSE2 20 1188dbd5725c0a6681425c7a019c58c4cacdad2a238reed@google.com#define SK_CPU_SSE_LEVEL_SSE3 30 1198dbd5725c0a6681425c7a019c58c4cacdad2a238reed@google.com#define SK_CPU_SSE_LEVEL_SSSE3 31 120ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org#define SK_CPU_SSE_LEVEL_SSE41 41 121ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org#define SK_CPU_SSE_LEVEL_SSE42 42 122ab69788571ed968dc0bcc934b9979195c6a28310reed@google.com 123126b4362be3bb43ef8f7a10df710b40e8bba869dreed@google.com// Are we in GCC? 1244a2cb30accbd5f9b0b60904a55e0bfecf706255areed@google.com#ifndef SK_CPU_SSE_LEVEL 12588a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org // These checks must be done in descending order to ensure we set the highest 12688a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org // available SSE level. 127ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org #if defined(__SSE4_2__) 128ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE42 129ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org #elif defined(__SSE4_1__) 130ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE41 131ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org #elif defined(__SSSE3__) 13288a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSSE3 133ab69788571ed968dc0bcc934b9979195c6a28310reed@google.com #elif defined(__SSE3__) 1348dbd5725c0a6681425c7a019c58c4cacdad2a238reed@google.com #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE3 13588a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org #elif defined(__SSE2__) 13688a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE2 1374a2cb30accbd5f9b0b60904a55e0bfecf706255areed@google.com #endif 1384a2cb30accbd5f9b0b60904a55e0bfecf706255areed@google.com#endif 1394a2cb30accbd5f9b0b60904a55e0bfecf706255areed@google.com 140126b4362be3bb43ef8f7a10df710b40e8bba869dreed@google.com// Are we in VisualStudio? 141126b4362be3bb43ef8f7a10df710b40e8bba869dreed@google.com#ifndef SK_CPU_SSE_LEVEL 14288a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org // These checks must be done in descending order to ensure we set the highest 143ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org // available SSE level. 64-bit intel guarantees at least SSE2 support. 144ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org #if defined(_M_X64) || defined(_M_AMD64) 145ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE2 146ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org #elif defined (_M_IX86_FP) 14788a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org #if _M_IX86_FP >= 2 1484736ed1a0a7e252e169685e3c7572f08dfca0a2ccommit-bot@chromium.org #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE2 14988a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org #elif _M_IX86_FP == 1 15088a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE1 1514736ed1a0a7e252e169685e3c7572f08dfca0a2ccommit-bot@chromium.org #endif 15200aad94f01a9078d26363db3116f8005d84440f2reed@google.com #endif 15300aad94f01a9078d26363db3116f8005d84440f2reed@google.com#endif 15400aad94f01a9078d26363db3116f8005d84440f2reed@google.com 155867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com////////////////////////////////////////////////////////////////////// 156867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com// ARM defines 157867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com 158d01ec71f9c350ab73e24808a5d4da22a3c8fc515commit-bot@chromium.org#if defined(__arm__) && (!defined(__APPLE__) || !TARGET_IPHONE_SIMULATOR) 1593a2682a77f996f649de7699c9f7bee046c6d4f17mtklein #define SK_CPU_ARM32 160867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com 161867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #if defined(__GNUC__) 162867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ 163867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ 164867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || defined(__ARM_ARCH_7EM__) || defined(_ARM_ARCH_7) 165867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #define SK_ARM_ARCH 7 166867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ 167867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ 168867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \ 169867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || defined(__ARM_ARCH_6M__) || defined(_ARM_ARCH_6) 170867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #define SK_ARM_ARCH 6 171867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \ 172867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \ 173867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || defined(__ARM_ARCH_5TEJ__) || defined(_ARM_ARCH_5) 174867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #define SK_ARM_ARCH 5 175867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #elif defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) || defined(_ARM_ARCH_4) 176867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #define SK_ARM_ARCH 4 177867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #else 178867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #define SK_ARM_ARCH 3 179867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #endif 180867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com 181867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #if defined(__thumb2__) && (SK_ARM_ARCH >= 6) \ 182867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || !defined(__thumb__) && ((SK_ARM_ARCH > 5) || defined(__ARM_ARCH_5E__) \ 183867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__)) 184867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #define SK_ARM_HAS_EDSP 185867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #endif 186867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #endif 187126b4362be3bb43ef8f7a10df710b40e8bba869dreed@google.com#endif 188126b4362be3bb43ef8f7a10df710b40e8bba869dreed@google.com 189d01ec71f9c350ab73e24808a5d4da22a3c8fc515commit-bot@chromium.org// Disable ARM64 optimizations for iOS due to complications regarding gyp and iOS. 190d01ec71f9c350ab73e24808a5d4da22a3c8fc515commit-bot@chromium.org#if defined(__aarch64__) && !defined(SK_BUILD_FOR_IOS) 1916f2d4d4679f5f0e1a1b5c2e940f1b65e34d94649commit-bot@chromium.org #define SK_CPU_ARM64 1926f2d4d4679f5f0e1a1b5c2e940f1b65e34d94649commit-bot@chromium.org#endif 1936f2d4d4679f5f0e1a1b5c2e940f1b65e34d94649commit-bot@chromium.org 194b79ff56de23fef680ae7187040f2d6a9516b553dmtklein// All 64-bit ARM chips have NEON. Many 32-bit ARM chips do too. 195f3f9440372099bb44b29438ee0c445b7e1bd836dmtklein// TODO: Why don't we want NEON on iOS? 196f3f9440372099bb44b29438ee0c445b7e1bd836dmtklein#if !defined(SK_ARM_HAS_NEON) && !defined(SK_BUILD_FOR_IOS) && \ 197f3f9440372099bb44b29438ee0c445b7e1bd836dmtklein (defined(SK_CPU_ARM64) || defined(__ARM_NEON__)) 198b79ff56de23fef680ae7187040f2d6a9516b553dmtklein #define SK_ARM_HAS_NEON 199b79ff56de23fef680ae7187040f2d6a9516b553dmtklein#endif 200b79ff56de23fef680ae7187040f2d6a9516b553dmtklein 2014a2cb30accbd5f9b0b60904a55e0bfecf706255areed@google.com////////////////////////////////////////////////////////////////////// 2024a2cb30accbd5f9b0b60904a55e0bfecf706255areed@google.com 2037ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org#if !defined(SKIA_IMPLEMENTATION) 2047ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org #define SKIA_IMPLEMENTATION 0 2057ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org#endif 206c0091114461339c7e6a78a0f1669cecad1e22146reed@google.com 207c0091114461339c7e6a78a0f1669cecad1e22146reed@google.com#if defined(SKIA_DLL) 208c0091114461339c7e6a78a0f1669cecad1e22146reed@google.com #if defined(WIN32) 209866ff8787a9823d05363e6f95ea4d599c6fca8fdrobertphillips@google.com #if SKIA_IMPLEMENTATION 210c0091114461339c7e6a78a0f1669cecad1e22146reed@google.com #define SK_API __declspec(dllexport) 211c0091114461339c7e6a78a0f1669cecad1e22146reed@google.com #else 212c0091114461339c7e6a78a0f1669cecad1e22146reed@google.com #define SK_API __declspec(dllimport) 213c0091114461339c7e6a78a0f1669cecad1e22146reed@google.com #endif 2147ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org #else 215866ff8787a9823d05363e6f95ea4d599c6fca8fdrobertphillips@google.com #define SK_API __attribute__((visibility("default"))) 2167ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org #endif 2177ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org#else 2187ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org #define SK_API 2197ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org#endif 2207ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org 221157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com////////////////////////////////////////////////////////////////////// 222157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com 223157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com/** 224157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com * Use SK_PURE_FUNC as an attribute to indicate that a function's 225157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com * return value only depends on the value of its parameters. This 226157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com * can help the compiler optimize out successive calls. 227157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com * 228157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com * Usage: 229157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com * void function(int params) SK_PURE_FUNC; 230157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com */ 231157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com#if defined(__GNUC__) 232157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com# define SK_PURE_FUNC __attribute__((pure)) 233157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com#else 234157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com# define SK_PURE_FUNC /* nothing */ 235157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com#endif 236157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com 237536079b2099e986853c82c874059a6bcd7602742digit@google.com////////////////////////////////////////////////////////////////////// 238536079b2099e986853c82c874059a6bcd7602742digit@google.com 239536079b2099e986853c82c874059a6bcd7602742digit@google.com/** 240536079b2099e986853c82c874059a6bcd7602742digit@google.com * SK_HAS_ATTRIBUTE(<name>) should return true iff the compiler 241536079b2099e986853c82c874059a6bcd7602742digit@google.com * supports __attribute__((<name>)). Mostly important because 242536079b2099e986853c82c874059a6bcd7602742digit@google.com * Clang doesn't support all of GCC attributes. 243536079b2099e986853c82c874059a6bcd7602742digit@google.com */ 244536079b2099e986853c82c874059a6bcd7602742digit@google.com#if defined(__has_attribute) 245536079b2099e986853c82c874059a6bcd7602742digit@google.com# define SK_HAS_ATTRIBUTE(x) __has_attribute(x) 246536079b2099e986853c82c874059a6bcd7602742digit@google.com#elif defined(__GNUC__) 247536079b2099e986853c82c874059a6bcd7602742digit@google.com# define SK_HAS_ATTRIBUTE(x) 1 248536079b2099e986853c82c874059a6bcd7602742digit@google.com#else 249536079b2099e986853c82c874059a6bcd7602742digit@google.com# define SK_HAS_ATTRIBUTE(x) 0 250536079b2099e986853c82c874059a6bcd7602742digit@google.com#endif 251536079b2099e986853c82c874059a6bcd7602742digit@google.com 252536079b2099e986853c82c874059a6bcd7602742digit@google.com/** 253536079b2099e986853c82c874059a6bcd7602742digit@google.com * SK_ATTRIBUTE_OPTIMIZE_O1 can be used as a function attribute 254536079b2099e986853c82c874059a6bcd7602742digit@google.com * to specify individual optimization level of -O1, if the compiler 255536079b2099e986853c82c874059a6bcd7602742digit@google.com * supports it. 256536079b2099e986853c82c874059a6bcd7602742digit@google.com * 257536079b2099e986853c82c874059a6bcd7602742digit@google.com * NOTE: Clang/ARM (r161757) does not support the 'optimize' attribute. 258536079b2099e986853c82c874059a6bcd7602742digit@google.com */ 259536079b2099e986853c82c874059a6bcd7602742digit@google.com#if SK_HAS_ATTRIBUTE(optimize) 260536079b2099e986853c82c874059a6bcd7602742digit@google.com# define SK_ATTRIBUTE_OPTIMIZE_O1 __attribute__((optimize("O1"))) 261536079b2099e986853c82c874059a6bcd7602742digit@google.com#else 262536079b2099e986853c82c874059a6bcd7602742digit@google.com# define SK_ATTRIBUTE_OPTIMIZE_O1 /* nothing */ 2638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 265536079b2099e986853c82c874059a6bcd7602742digit@google.com#endif 266