SkPostConfig.h revision cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2
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 SkPostConfig_DEFINED 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkPostConfig_DEFINED 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined(SK_BUILD_FOR_WIN32) || defined(SK_BUILD_FOR_WINCE) 148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_BUILD_FOR_WIN 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined(SK_DEBUG) && defined(SK_RELEASE) 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #error "cannot define both SK_DEBUG and SK_RELEASE" 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#elif !defined(SK_DEBUG) && !defined(SK_RELEASE) 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #error "must define either SK_DEBUG or SK_RELEASE" 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined SK_SUPPORT_UNITTEST && !defined(SK_DEBUG) 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #error "can't have unittests without debug" 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined(SK_SCALAR_IS_FIXED) && defined(SK_SCALAR_IS_FLOAT) 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #error "cannot define both SK_SCALAR_IS_FIXED and SK_SCALAR_IS_FLOAT" 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#elif !defined(SK_SCALAR_IS_FIXED) && !defined(SK_SCALAR_IS_FLOAT) 307886ad3de1aa523d5c71f1fa9f355dfcb2412d1dreed@google.com #define SK_SCALAR_IS_FLOAT 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined(SK_CPU_LENDIAN) && defined(SK_CPU_BENDIAN) 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #error "cannot define both SK_CPU_LENDIAN and SK_CPU_BENDIAN" 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#elif !defined(SK_CPU_LENDIAN) && !defined(SK_CPU_BENDIAN) 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #error "must define either SK_CPU_LENDIAN or SK_CPU_BENDIAN" 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// ensure the port has defined all of these, or none of them 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_A32_SHIFT 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #if !defined(SK_R32_SHIFT) || !defined(SK_G32_SHIFT) || !defined(SK_B32_SHIFT) 428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #error "all or none of the 32bit SHIFT amounts must be defined" 438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #if defined(SK_R32_SHIFT) || defined(SK_G32_SHIFT) || defined(SK_B32_SHIFT) 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #error "all or none of the 32bit SHIFT amounts must be defined" 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5004423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com#if !defined(SK_HAS_COMPILER_FEATURE) 5104423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #if defined(__has_feature) 5204423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #define SK_HAS_COMPILER_FEATURE(x) __has_feature(x) 5304423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #else 5404423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #define SK_HAS_COMPILER_FEATURE(x) 0 5504423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #endif 5604423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com#endif 5704423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com 58cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com#if !defined(SK_SUPPORT_GPU) 59cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com #define SK_SUPPORT_GPU 1 60cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com#endif 61cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com 6204423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com/** 6304423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * The clang static analyzer likes to know that when the program is not 6404423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * expected to continue (crash, assertion failure, etc). It will notice that 6504423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * some combination of parameters lead to a function call that does not return. 6604423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * It can then make appropriate assumptions about the parameters in code 6704423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * executed only if the non-returning function was *not* called. 6804423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com */ 6904423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com#if !defined(SkNO_RETURN_HINT) 7004423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #if SK_HAS_COMPILER_FEATURE(attribute_analyzer_noreturn) 713a52d68b4001afd8c7036e80558fba7c87f45a0cbsalomon@google.com namespace { 723a52d68b4001afd8c7036e80558fba7c87f45a0cbsalomon@google.com inline void SkNO_RETURN_HINT() __attribute__((analyzer_noreturn)); 733a52d68b4001afd8c7036e80558fba7c87f45a0cbsalomon@google.com inline void SkNO_RETURN_HINT() {} 743a52d68b4001afd8c7036e80558fba7c87f45a0cbsalomon@google.com } 7504423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #else 7604423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #define SkNO_RETURN_HINT() do {} while (false) 7704423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #endif 7804423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com#endif 7904423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com 80fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com#if defined(SK_ZLIB_INCLUDE) && defined(SK_SYSTEM_ZLIB) 81fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com #error "cannot define both SK_ZLIB_INCLUDE and SK_SYSTEM_ZLIB" 82fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com#elif defined(SK_ZLIB_INCLUDE) || defined(SK_SYSTEM_ZLIB) 83fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com #define SK_HAS_ZLIB 84fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com#endif 85fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com 868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkNEW 898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SkNEW(type_name) new type_name 908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SkNEW_ARGS(type_name, args) new type_name args 918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SkNEW_ARRAY(type_name, count) new type_name[count] 92c377baf406996aed18d82d328029c82dbc3b8ddatomhudson@google.com #define SkNEW_PLACEMENT(buf, type_name) new (buf) type_name 93c377baf406996aed18d82d328029c82dbc3b8ddatomhudson@google.com #define SkNEW_PLACEMENT_ARGS(buf, type_name, args) \ 94c377baf406996aed18d82d328029c82dbc3b8ddatomhudson@google.com new (buf) type_name args 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SkDELETE(obj) delete obj 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SkDELETE_ARRAY(array) delete[] array 978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SK_CRASH 1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if 1 // set to 0 for infinite loop, which can help connecting gdb 101b1277c96b0818550190be134fd5e9a971087120bbsalomon@google.com #define SK_CRASH() do { SkNO_RETURN_HINT(); *(int *)(uintptr_t)0xbbadbeef = 0; } while (false) 1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 103b1277c96b0818550190be134fd5e9a971087120bbsalomon@google.com #define SK_CRASH() do { SkNO_RETURN_HINT(); } while (true) 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined(SK_SOFTWARE_FLOAT) && defined(SK_SCALAR_IS_FLOAT) 1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // if this is defined, we convert floats to 2scompliment ints for compares 1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #ifndef SK_SCALAR_SLOW_COMPARES 1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_SCALAR_SLOW_COMPARES 1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 1145c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #ifndef SK_USE_FLOATBITS 1155c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #define SK_USE_FLOATBITS 1165c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #endif 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_BUILD_FOR_WIN 12016690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com // we want lean_and_mean when we include windows.h 12116690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com #ifndef WIN32_LEAN_AND_MEAN 12216690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com #define WIN32_LEAN_AND_MEAN 12316690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com #define WIN32_IS_MEAN_WAS_LOCALLY_DEFINED 12416690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com #endif 12516690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com 1268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #include <windows.h> 12716690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com 12816690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com #ifdef WIN32_IS_MEAN_WAS_LOCALLY_DEFINED 12916690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com #undef WIN32_LEAN_AND_MEAN 13016690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com #endif 1318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #ifndef SK_DEBUGBREAK 13304423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #define SK_DEBUGBREAK(cond) do { if (!(cond)) { SkNO_RETURN_HINT(); __debugbreak(); }} while (false) 1348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 135f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 136f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #ifndef SK_A32_SHIFT 137f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #define SK_A32_SHIFT 24 138f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #define SK_R32_SHIFT 16 139f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #define SK_G32_SHIFT 8 140f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #define SK_B32_SHIFT 0 141f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #endif 142f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 1438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#elif defined(SK_BUILD_FOR_MAC) 1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #ifndef SK_DEBUGBREAK 1458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_DEBUGBREAK(cond) do { if (!(cond)) SK_CRASH(); } while (false) 1468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #ifdef SK_DEBUG 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #include <stdio.h> 1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #ifndef SK_DEBUGBREAK 1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_DEBUGBREAK(cond) do { if (cond) break; \ 1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("%s:%d: failed assertion \"%s\"\n", \ 1538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com __FILE__, __LINE__, #cond); SK_CRASH(); } while (false) 1548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 1558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 1568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 15827661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com/* 15927661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com * We check to see if the SHIFT value has already been defined. 16027661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com * if not, we define it ourself to some default values. We default to OpenGL 16127661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com * order (in memory: r,g,b,a) 16227661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com */ 16327661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com#ifndef SK_A32_SHIFT 16427661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #ifdef SK_CPU_BENDIAN 16527661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #define SK_R32_SHIFT 24 16627661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #define SK_G32_SHIFT 16 16727661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #define SK_B32_SHIFT 8 16827661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #define SK_A32_SHIFT 0 16927661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #else 17027661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #define SK_R32_SHIFT 0 17127661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #define SK_G32_SHIFT 8 17227661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #define SK_B32_SHIFT 16 17327661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #define SK_A32_SHIFT 24 17427661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #endif 17527661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com#endif 17627661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com 1778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// stdlib macros 1788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if 0 1808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if !defined(strlen) && defined(SK_DEBUG) 1818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com extern size_t sk_strlen(const char*); 1828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define strlen(s) sk_strlen(s) 1838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef sk_strcpy 1858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define sk_strcpy(dst, src) strcpy(dst, src) 1868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef sk_strchr 1888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define sk_strchr(s, c) strchr(s, c) 1898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef sk_strrchr 1918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define sk_strrchr(s, c) strrchr(s, c) 1928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef sk_strcmp 1948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define sk_strcmp(s, t) strcmp(s, t) 1958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef sk_strncmp 1978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define sk_strncmp(s, t, n) strncmp(s, t, n) 1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef sk_memcpy 2008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define sk_memcpy(dst, src, n) memcpy(dst, src, n) 2018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef memmove 2038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define memmove(dst, src, n) memmove(dst, src, n) 2048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef sk_memset 2068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define sk_memset(dst, val, n) memset(dst, val, n) 2078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef sk_memcmp 2098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define sk_memcmp(s, t, n) memcmp(s, t, n) 2108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define sk_strequal(s, t) (!sk_strcmp(s, t)) 2138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define sk_strnequal(s, t, n) (!sk_strncmp(s, t, n)) 2148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2165c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com////////////////////////////////////////////////////////////////////// 2175c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com 2185c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com#if defined(SK_BUILD_FOR_WIN32) || defined(SK_BUILD_FOR_MAC) 2195c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #ifndef SkLONGLONG 2205c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #ifdef SK_BUILD_FOR_WIN32 2215c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #define SkLONGLONG __int64 2225c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #else 2235c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #define SkLONGLONG long long 2245c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #endif 2255c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #endif 2265c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com#endif 2275c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com 2288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////////////////////////////// 2298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SK_BUILD_FOR_WINCE 2308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include <string.h> 2318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include <stdlib.h> 2328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 2338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define _CMNINTRIN_DECLARE_ONLY 2348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "cmnintrin.h" 2358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined SK_DEBUG && defined SK_BUILD_FOR_WIN32 2388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//#define _CRTDBG_MAP_ALLOC 2398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef free 2408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#undef free 2418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include <crtdbg.h> 2438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#undef free 2448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_DEBUGx 2468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined(SK_SIMULATE_FAILED_MALLOC) && defined(__cplusplus) 2478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void * operator new( 2488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com size_t cb, 2498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int nBlockUse, 2508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const char * szFileName, 2518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int nLine, 2528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int foo 2538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ); 2548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void * operator new[]( 2558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com size_t cb, 2568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int nBlockUse, 2578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const char * szFileName, 2588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int nLine, 2598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int foo 2608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ); 2618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void operator delete( 2628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void *pUserData, 2638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int, const char*, int, int 2648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ); 2658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void operator delete( 2668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void *pUserData 2678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ); 2688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void operator delete[]( void * p ); 2698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__, 0) 2708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 2718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__) 2728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define new DEBUG_CLIENTBLOCK 2748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 2758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define DEBUG_CLIENTBLOCK 2768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif // _DEBUG 2778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2781341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com 2791341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com#endif 2801341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com 2818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2831341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com////////////////////////////////////////////////////////////////////// 2841341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com 2851341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com#ifndef SK_OVERRIDE 286ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #if defined(_MSC_VER) 287ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #define SK_OVERRIDE override 288ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #elif defined(__clang__) 289ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #if __has_feature(cxx_override_control) 290ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com // Some documentation suggests we should be using __attribute__((override)), 291ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com // but it doesn't work. 292ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #define SK_OVERRIDE override 293ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #elif defined(__has_extension) 294ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #if __has_extension(cxx_override_control) 295ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #define SK_OVERRIDE override 296ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #endif 297ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #endif 298ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #else 299ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com // Linux GCC ignores "__attribute__((override))" and rejects "override". 300ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #define SK_OVERRIDE 301ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #endif 3028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 3038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 304d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com////////////////////////////////////////////////////////////////////// 305d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com 3063a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#ifndef SK_PRINTF_LIKE 3073a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#if defined(__clang__) || defined(__GNUC__) 3083a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#define SK_PRINTF_LIKE(A, B) __attribute__((format(printf, (A), (B)))) 3093a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#else 3103a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#define SK_PRINTF_LIKE(A, B) 3113a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#endif 3123a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#endif 3133a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org 3143a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org////////////////////////////////////////////////////////////////////// 3153a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org 3163a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#ifndef SK_SIZE_T_SPECIFIER 3173a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#if defined(_MSC_VER) 3183a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#define SK_SIZE_T_SPECIFIER "%Iu" 3193a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#else 3203a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#define SK_SIZE_T_SPECIFIER "%zu" 3213a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#endif 3223a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#endif 3233a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org 3243a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org////////////////////////////////////////////////////////////////////// 3253a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org 326d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#ifndef SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 327d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#define SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 1 328d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#endif 3292092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com 3302092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com////////////////////////////////////////////////////////////////////// 3312092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com// ARM defines 3322092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com 3332092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com#if defined(__GNUC__) && defined(__arm__) 3342092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com 3352092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# define SK_ARM_ARCH 3 3362092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com 3372092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) \ 3382092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com || defined(_ARM_ARCH_4) 3392092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# undef SK_ARM_ARCH 3402092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# define SK_ARM_ARCH 4 3412092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# endif 3422092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com 3432092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \ 3442092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \ 3452092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com || defined(__ARM_ARCH_5TEJ__) || defined(_ARM_ARCH_5) 3462092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# undef SK_ARM_ARCH 3472092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# define SK_ARM_ARCH 5 3482092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# endif 3492092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com 3502092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ 3512092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ 3522092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \ 3532092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com || defined(__ARM_ARCH_6M__) || defined(_ARM_ARCH_6) 3542092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# undef SK_ARM_ARCH 3552092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# define SK_ARM_ARCH 6 3562092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# endif 3572092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com 3582092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ 3592092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ 3602092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com || defined(__ARM_ARCH_7EM__) || defined(_ARM_ARCH_7) 3612092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# undef SK_ARM_ARCH 3622092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# define SK_ARM_ARCH 7 3632092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# endif 3642092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com 3652092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# undef SK_ARM_HAS_EDSP 3662092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# if defined(__thumb2__) && (SK_ARM_ARCH >= 6) \ 3672092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com || !defined(__thumb__) \ 3682092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com && ((SK_ARM_ARCH > 5) || defined(__ARM_ARCH_5E__) \ 3692092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com || defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__)) 3702092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# define SK_ARM_HAS_EDSP 1 3712092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com# endif 3722092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com 3732092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7george@mozilla.com#endif 374