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 26059a4c70d7eb6556c123e529259aaffe7214164dcommit-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) 27f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 28f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #ifdef __APPLE__ 29f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #include "TargetConditionals.h" 30f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #endif 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #if defined(PALMOS_SDK_VERSION) 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_BUILD_FOR_PALM 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #elif defined(UNDER_CE) 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_BUILD_FOR_WINCE 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #elif defined(WIN32) 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_BUILD_FOR_WIN32 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #elif defined(__SYMBIAN32__) 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_BUILD_FOR_WIN32 4060abb078e5597c9c6ceaba1ef495c4916ff4df0ddjsollen@google.com #elif defined(ANDROID) 4160abb078e5597c9c6ceaba1ef495c4916ff4df0ddjsollen@google.com #define SK_BUILD_FOR_ANDROID 42ea6805d2224eaccfcd95f4a019cfcc57ac89afcereed@google.com #elif defined(linux) || defined(__FreeBSD__) || defined(__OpenBSD__) || \ 4379c865a5c8f585880d48771194c8cd82ab8cda98george@mozilla.com defined(__sun) || defined(__NetBSD__) || defined(__DragonFly__) || \ 4479c865a5c8f585880d48771194c8cd82ab8cda98george@mozilla.com defined(__GLIBC__) || defined(__GNU__) 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_BUILD_FOR_UNIX 46f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #elif TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR 47f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #define SK_BUILD_FOR_IOS 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #else 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_BUILD_FOR_MAC 508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 54059a4c70d7eb6556c123e529259aaffe7214164dcommit-bot@chromium.org/* Even if the user only defined the framework variant we still need to build 55059a4c70d7eb6556c123e529259aaffe7214164dcommit-bot@chromium.org * the default (NDK-compliant) Android code. Therefore, when attempting to 56059a4c70d7eb6556c123e529259aaffe7214164dcommit-bot@chromium.org * include/exclude something from the framework variant check first that we are 57059a4c70d7eb6556c123e529259aaffe7214164dcommit-bot@chromium.org * building for Android then check the status of the framework define. 5858629291bc145edca8fb303e465c8537bed65314djsollen@google.com */ 59530efc808544e9ff79814f61678bd919b168cb21bsalomon@google.com#if defined(SK_BUILD_FOR_ANDROID_FRAMEWORK) && !defined(SK_BUILD_FOR_ANDROID) 6058629291bc145edca8fb303e465c8537bed65314djsollen@google.com #define SK_BUILD_FOR_ANDROID 6158629291bc145edca8fb303e465c8537bed65314djsollen@google.com#endif 6258629291bc145edca8fb303e465c8537bed65314djsollen@google.com 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////// 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if !defined(SK_DEBUG) && !defined(SK_RELEASE) 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #ifdef NDEBUG 678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_RELEASE 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #else 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_DEBUG 708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 7363debae4c1020fa1e0ccd92ef3cbfdc8735acf8ereed@android.com#ifdef SK_BUILD_FOR_WIN32 74333d6cb2448d0febcbeb7c8c7310c0ff2d1a6104tomhudson@google.com #if !defined(SK_RESTRICT) 75333d6cb2448d0febcbeb7c8c7310c0ff2d1a6104tomhudson@google.com #define SK_RESTRICT __restrict 76333d6cb2448d0febcbeb7c8c7310c0ff2d1a6104tomhudson@google.com #endif 77363a4c22af71b8afedc00050ee5cc97fe4bd6f76bungeman@google.com #if !defined(SK_WARN_UNUSED_RESULT) 78363a4c22af71b8afedc00050ee5cc97fe4bd6f76bungeman@google.com #define SK_WARN_UNUSED_RESULT 79363a4c22af71b8afedc00050ee5cc97fe4bd6f76bungeman@google.com #endif 8063debae4c1020fa1e0ccd92ef3cbfdc8735acf8ereed@android.com#endif 8163debae4c1020fa1e0ccd92ef3cbfdc8735acf8ereed@android.com 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////// 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 845c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com#if !defined(SK_RESTRICT) 855c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #define SK_RESTRICT __restrict__ 865c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com#endif 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 88363a4c22af71b8afedc00050ee5cc97fe4bd6f76bungeman@google.com#if !defined(SK_WARN_UNUSED_RESULT) 89363a4c22af71b8afedc00050ee5cc97fe4bd6f76bungeman@google.com #define SK_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 90363a4c22af71b8afedc00050ee5cc97fe4bd6f76bungeman@google.com#endif 91363a4c22af71b8afedc00050ee5cc97fe4bd6f76bungeman@google.com 928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////// 938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if !defined(SK_CPU_BENDIAN) && !defined(SK_CPU_LENDIAN) 958ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org #if defined(__sparc) || defined(__sparc__) || \ 968ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org defined(_POWER) || defined(__powerpc__) || \ 978ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org defined(__ppc__) || defined(__hppa) || \ 988ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org defined(__PPC__) || defined(__PPC64__) || \ 998ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org defined(_MIPSEB) || defined(__ARMEB__) || \ 1008ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org defined(__s390__) || \ 1018ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org (defined(__sh__) && defined(__BIG_ENDIAN__)) || \ 1028ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org (defined(__ia64) && defined(__BIG_ENDIAN__)) 1038ec45cede94aded3599621cad6b3e724d667d6f0commit-bot@chromium.org #define SK_CPU_BENDIAN 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #else 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_CPU_LENDIAN 1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////// 1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1114460e75bc7e8c13e0e44ee9330ae8f556d8b0094commit-bot@chromium.org#if defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64) 1124460e75bc7e8c13e0e44ee9330ae8f556d8b0094commit-bot@chromium.org #define SK_CPU_X86 1 1134460e75bc7e8c13e0e44ee9330ae8f556d8b0094commit-bot@chromium.org#endif 1144460e75bc7e8c13e0e44ee9330ae8f556d8b0094commit-bot@chromium.org 1154a2cb30accbd5f9b0b60904a55e0bfecf706255areed@google.com/** 116126b4362be3bb43ef8f7a10df710b40e8bba869dreed@google.com * SK_CPU_SSE_LEVEL 117126b4362be3bb43ef8f7a10df710b40e8bba869dreed@google.com * 118ab69788571ed968dc0bcc934b9979195c6a28310reed@google.com * If defined, SK_CPU_SSE_LEVEL should be set to the highest supported level. 119ab69788571ed968dc0bcc934b9979195c6a28310reed@google.com * On non-intel CPU this should be undefined. 1204a2cb30accbd5f9b0b60904a55e0bfecf706255areed@google.com */ 121126b4362be3bb43ef8f7a10df710b40e8bba869dreed@google.com 12200aad94f01a9078d26363db3116f8005d84440f2reed@google.com#define SK_CPU_SSE_LEVEL_SSE1 10 1238dbd5725c0a6681425c7a019c58c4cacdad2a238reed@google.com#define SK_CPU_SSE_LEVEL_SSE2 20 1248dbd5725c0a6681425c7a019c58c4cacdad2a238reed@google.com#define SK_CPU_SSE_LEVEL_SSE3 30 1258dbd5725c0a6681425c7a019c58c4cacdad2a238reed@google.com#define SK_CPU_SSE_LEVEL_SSSE3 31 126ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org#define SK_CPU_SSE_LEVEL_SSE41 41 127ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org#define SK_CPU_SSE_LEVEL_SSE42 42 128ab69788571ed968dc0bcc934b9979195c6a28310reed@google.com 129126b4362be3bb43ef8f7a10df710b40e8bba869dreed@google.com// Are we in GCC? 1304a2cb30accbd5f9b0b60904a55e0bfecf706255areed@google.com#ifndef SK_CPU_SSE_LEVEL 13188a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org // These checks must be done in descending order to ensure we set the highest 13288a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org // available SSE level. 133ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org #if defined(__SSE4_2__) 134ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE42 135ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org #elif defined(__SSE4_1__) 136ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE41 137ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org #elif defined(__SSSE3__) 13888a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSSE3 139ab69788571ed968dc0bcc934b9979195c6a28310reed@google.com #elif defined(__SSE3__) 1408dbd5725c0a6681425c7a019c58c4cacdad2a238reed@google.com #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE3 14188a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org #elif defined(__SSE2__) 14288a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE2 1434a2cb30accbd5f9b0b60904a55e0bfecf706255areed@google.com #endif 1444a2cb30accbd5f9b0b60904a55e0bfecf706255areed@google.com#endif 1454a2cb30accbd5f9b0b60904a55e0bfecf706255areed@google.com 146126b4362be3bb43ef8f7a10df710b40e8bba869dreed@google.com// Are we in VisualStudio? 147126b4362be3bb43ef8f7a10df710b40e8bba869dreed@google.com#ifndef SK_CPU_SSE_LEVEL 14888a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org // These checks must be done in descending order to ensure we set the highest 149ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org // available SSE level. 64-bit intel guarantees at least SSE2 support. 150ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org #if defined(_M_X64) || defined(_M_AMD64) 151ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE2 152ce4402c2fbae8a2bc73b79dc28e0fb9ea9d82c88commit-bot@chromium.org #elif defined (_M_IX86_FP) 15388a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org #if _M_IX86_FP >= 2 1544736ed1a0a7e252e169685e3c7572f08dfca0a2ccommit-bot@chromium.org #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE2 15588a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org #elif _M_IX86_FP == 1 15688a954335acc3e4737e7e08c86233a6b246299f3commit-bot@chromium.org #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE1 1574736ed1a0a7e252e169685e3c7572f08dfca0a2ccommit-bot@chromium.org #endif 15800aad94f01a9078d26363db3116f8005d84440f2reed@google.com #endif 15900aad94f01a9078d26363db3116f8005d84440f2reed@google.com#endif 16000aad94f01a9078d26363db3116f8005d84440f2reed@google.com 161867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com////////////////////////////////////////////////////////////////////// 162867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com// ARM defines 163867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com 164d01ec71f9c350ab73e24808a5d4da22a3c8fc515commit-bot@chromium.org#if defined(__arm__) && (!defined(__APPLE__) || !TARGET_IPHONE_SIMULATOR) 1653a2682a77f996f649de7699c9f7bee046c6d4f17mtklein #define SK_CPU_ARM32 166867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com 167867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #if defined(__GNUC__) 168867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ 169867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ 170867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || defined(__ARM_ARCH_7EM__) || defined(_ARM_ARCH_7) 171867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #define SK_ARM_ARCH 7 172867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ 173867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ 174867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \ 175867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || defined(__ARM_ARCH_6M__) || defined(_ARM_ARCH_6) 176867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #define SK_ARM_ARCH 6 177867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \ 178867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \ 179867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || defined(__ARM_ARCH_5TEJ__) || defined(_ARM_ARCH_5) 180867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #define SK_ARM_ARCH 5 181867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #elif defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) || defined(_ARM_ARCH_4) 182867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #define SK_ARM_ARCH 4 183867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #else 184867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #define SK_ARM_ARCH 3 185867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #endif 186867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com 187867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #if defined(__thumb2__) && (SK_ARM_ARCH >= 6) \ 188867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || !defined(__thumb__) && ((SK_ARM_ARCH > 5) || defined(__ARM_ARCH_5E__) \ 189867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com || defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__)) 190867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #define SK_ARM_HAS_EDSP 191867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #endif 192867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #endif 193126b4362be3bb43ef8f7a10df710b40e8bba869dreed@google.com#endif 194126b4362be3bb43ef8f7a10df710b40e8bba869dreed@google.com 195d01ec71f9c350ab73e24808a5d4da22a3c8fc515commit-bot@chromium.org// Disable ARM64 optimizations for iOS due to complications regarding gyp and iOS. 196d01ec71f9c350ab73e24808a5d4da22a3c8fc515commit-bot@chromium.org#if defined(__aarch64__) && !defined(SK_BUILD_FOR_IOS) 1976f2d4d4679f5f0e1a1b5c2e940f1b65e34d94649commit-bot@chromium.org #define SK_CPU_ARM64 1986f2d4d4679f5f0e1a1b5c2e940f1b65e34d94649commit-bot@chromium.org#endif 1996f2d4d4679f5f0e1a1b5c2e940f1b65e34d94649commit-bot@chromium.org 2004a2cb30accbd5f9b0b60904a55e0bfecf706255areed@google.com////////////////////////////////////////////////////////////////////// 2014a2cb30accbd5f9b0b60904a55e0bfecf706255areed@google.com 2027ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org#if !defined(SKIA_IMPLEMENTATION) 2037ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org #define SKIA_IMPLEMENTATION 0 2047ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org#endif 205c0091114461339c7e6a78a0f1669cecad1e22146reed@google.com 206c0091114461339c7e6a78a0f1669cecad1e22146reed@google.com#if defined(SKIA_DLL) 207c0091114461339c7e6a78a0f1669cecad1e22146reed@google.com #if defined(WIN32) 208866ff8787a9823d05363e6f95ea4d599c6fca8fdrobertphillips@google.com #if SKIA_IMPLEMENTATION 209c0091114461339c7e6a78a0f1669cecad1e22146reed@google.com #define SK_API __declspec(dllexport) 210c0091114461339c7e6a78a0f1669cecad1e22146reed@google.com #else 211c0091114461339c7e6a78a0f1669cecad1e22146reed@google.com #define SK_API __declspec(dllimport) 212c0091114461339c7e6a78a0f1669cecad1e22146reed@google.com #endif 2137ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org #else 214866ff8787a9823d05363e6f95ea4d599c6fca8fdrobertphillips@google.com #define SK_API __attribute__((visibility("default"))) 2157ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org #endif 2167ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org#else 2177ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org #define SK_API 2187ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org#endif 2197ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org 220157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com////////////////////////////////////////////////////////////////////// 221157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com 222157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com/** 223157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com * Use SK_PURE_FUNC as an attribute to indicate that a function's 224157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com * return value only depends on the value of its parameters. This 225157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com * can help the compiler optimize out successive calls. 226157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com * 227157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com * Usage: 228157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com * void function(int params) SK_PURE_FUNC; 229157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com */ 230157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com#if defined(__GNUC__) 231157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com# define SK_PURE_FUNC __attribute__((pure)) 232157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com#else 233157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com# define SK_PURE_FUNC /* nothing */ 234157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com#endif 235157d94465a47a57e30e5cf49cd57dccd903e27e2digit@google.com 236536079b2099e986853c82c874059a6bcd7602742digit@google.com////////////////////////////////////////////////////////////////////// 237536079b2099e986853c82c874059a6bcd7602742digit@google.com 238536079b2099e986853c82c874059a6bcd7602742digit@google.com/** 239536079b2099e986853c82c874059a6bcd7602742digit@google.com * SK_HAS_ATTRIBUTE(<name>) should return true iff the compiler 240536079b2099e986853c82c874059a6bcd7602742digit@google.com * supports __attribute__((<name>)). Mostly important because 241536079b2099e986853c82c874059a6bcd7602742digit@google.com * Clang doesn't support all of GCC attributes. 242536079b2099e986853c82c874059a6bcd7602742digit@google.com */ 243536079b2099e986853c82c874059a6bcd7602742digit@google.com#if defined(__has_attribute) 244536079b2099e986853c82c874059a6bcd7602742digit@google.com# define SK_HAS_ATTRIBUTE(x) __has_attribute(x) 245536079b2099e986853c82c874059a6bcd7602742digit@google.com#elif defined(__GNUC__) 246536079b2099e986853c82c874059a6bcd7602742digit@google.com# define SK_HAS_ATTRIBUTE(x) 1 247536079b2099e986853c82c874059a6bcd7602742digit@google.com#else 248536079b2099e986853c82c874059a6bcd7602742digit@google.com# define SK_HAS_ATTRIBUTE(x) 0 249536079b2099e986853c82c874059a6bcd7602742digit@google.com#endif 250536079b2099e986853c82c874059a6bcd7602742digit@google.com 251536079b2099e986853c82c874059a6bcd7602742digit@google.com/** 252536079b2099e986853c82c874059a6bcd7602742digit@google.com * SK_ATTRIBUTE_OPTIMIZE_O1 can be used as a function attribute 253536079b2099e986853c82c874059a6bcd7602742digit@google.com * to specify individual optimization level of -O1, if the compiler 254536079b2099e986853c82c874059a6bcd7602742digit@google.com * supports it. 255536079b2099e986853c82c874059a6bcd7602742digit@google.com * 256536079b2099e986853c82c874059a6bcd7602742digit@google.com * NOTE: Clang/ARM (r161757) does not support the 'optimize' attribute. 257536079b2099e986853c82c874059a6bcd7602742digit@google.com */ 258536079b2099e986853c82c874059a6bcd7602742digit@google.com#if SK_HAS_ATTRIBUTE(optimize) 259536079b2099e986853c82c874059a6bcd7602742digit@google.com# define SK_ATTRIBUTE_OPTIMIZE_O1 __attribute__((optimize("O1"))) 260536079b2099e986853c82c874059a6bcd7602742digit@google.com#else 261536079b2099e986853c82c874059a6bcd7602742digit@google.com# define SK_ATTRIBUTE_OPTIMIZE_O1 /* nothing */ 2628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 264536079b2099e986853c82c874059a6bcd7602742digit@google.com#endif 265