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