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