SkPostConfig.h revision 5596a69e9f7884e3042bceba071c468dee52aa7f
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 335596a69e9f7884e3042bceba071c468dee52aa7fvollick@chromium.org#if defined(SK_MSCALAR_IS_DOUBLE) && defined(SK_MSCALAR_IS_FLOAT) 345596a69e9f7884e3042bceba071c468dee52aa7fvollick@chromium.org #error "cannot define both SK_MSCALAR_IS_DOUBLE and SK_MSCALAR_IS_FLOAT" 355596a69e9f7884e3042bceba071c468dee52aa7fvollick@chromium.org#elif !defined(SK_MSCALAR_IS_DOUBLE) && !defined(SK_MSCALAR_IS_FLOAT) 365596a69e9f7884e3042bceba071c468dee52aa7fvollick@chromium.org #define SK_MSCALAR_IS_FLOAT 375596a69e9f7884e3042bceba071c468dee52aa7fvollick@chromium.org#endif 385596a69e9f7884e3042bceba071c468dee52aa7fvollick@chromium.org 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined(SK_CPU_LENDIAN) && defined(SK_CPU_BENDIAN) 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #error "cannot define both SK_CPU_LENDIAN and SK_CPU_BENDIAN" 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#elif !defined(SK_CPU_LENDIAN) && !defined(SK_CPU_BENDIAN) 428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #error "must define either SK_CPU_LENDIAN or SK_CPU_BENDIAN" 438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// ensure the port has defined all of these, or none of them 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_A32_SHIFT 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #if !defined(SK_R32_SHIFT) || !defined(SK_G32_SHIFT) || !defined(SK_B32_SHIFT) 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #error "all or none of the 32bit SHIFT amounts must be defined" 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #if defined(SK_R32_SHIFT) || defined(SK_G32_SHIFT) || defined(SK_B32_SHIFT) 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #error "all or none of the 32bit SHIFT amounts must be defined" 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5604423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com#if !defined(SK_HAS_COMPILER_FEATURE) 5704423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #if defined(__has_feature) 5804423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #define SK_HAS_COMPILER_FEATURE(x) __has_feature(x) 5904423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #else 6004423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #define SK_HAS_COMPILER_FEATURE(x) 0 6104423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #endif 6204423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com#endif 6304423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com 64cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com#if !defined(SK_SUPPORT_GPU) 65cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com #define SK_SUPPORT_GPU 1 66cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com#endif 67cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com 6804423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com/** 6904423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * The clang static analyzer likes to know that when the program is not 7004423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * expected to continue (crash, assertion failure, etc). It will notice that 7104423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * some combination of parameters lead to a function call that does not return. 7204423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * It can then make appropriate assumptions about the parameters in code 7304423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * executed only if the non-returning function was *not* called. 7404423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com */ 7504423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com#if !defined(SkNO_RETURN_HINT) 7604423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #if SK_HAS_COMPILER_FEATURE(attribute_analyzer_noreturn) 773a52d68b4001afd8c7036e80558fba7c87f45a0cbsalomon@google.com namespace { 783a52d68b4001afd8c7036e80558fba7c87f45a0cbsalomon@google.com inline void SkNO_RETURN_HINT() __attribute__((analyzer_noreturn)); 793a52d68b4001afd8c7036e80558fba7c87f45a0cbsalomon@google.com inline void SkNO_RETURN_HINT() {} 803a52d68b4001afd8c7036e80558fba7c87f45a0cbsalomon@google.com } 8104423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #else 8204423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #define SkNO_RETURN_HINT() do {} while (false) 8304423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #endif 8404423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com#endif 8504423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com 86fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com#if defined(SK_ZLIB_INCLUDE) && defined(SK_SYSTEM_ZLIB) 87fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com #error "cannot define both SK_ZLIB_INCLUDE and SK_SYSTEM_ZLIB" 88fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com#elif defined(SK_ZLIB_INCLUDE) || defined(SK_SYSTEM_ZLIB) 89fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com #define SK_HAS_ZLIB 90fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com#endif 91fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com 928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkNEW 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SkNEW(type_name) new type_name 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SkNEW_ARGS(type_name, args) new type_name args 978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SkNEW_ARRAY(type_name, count) new type_name[count] 98c377baf406996aed18d82d328029c82dbc3b8ddatomhudson@google.com #define SkNEW_PLACEMENT(buf, type_name) new (buf) type_name 99c377baf406996aed18d82d328029c82dbc3b8ddatomhudson@google.com #define SkNEW_PLACEMENT_ARGS(buf, type_name, args) \ 100c377baf406996aed18d82d328029c82dbc3b8ddatomhudson@google.com new (buf) type_name args 1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SkDELETE(obj) delete obj 1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SkDELETE_ARRAY(array) delete[] array 1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SK_CRASH 1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if 1 // set to 0 for infinite loop, which can help connecting gdb 107b1277c96b0818550190be134fd5e9a971087120bbsalomon@google.com #define SK_CRASH() do { SkNO_RETURN_HINT(); *(int *)(uintptr_t)0xbbadbeef = 0; } while (false) 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 109b1277c96b0818550190be134fd5e9a971087120bbsalomon@google.com #define SK_CRASH() do { SkNO_RETURN_HINT(); } while (true) 1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined(SK_SOFTWARE_FLOAT) && defined(SK_SCALAR_IS_FLOAT) 1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // if this is defined, we convert floats to 2scompliment ints for compares 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #ifndef SK_SCALAR_SLOW_COMPARES 1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_SCALAR_SLOW_COMPARES 1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 1205c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #ifndef SK_USE_FLOATBITS 1215c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #define SK_USE_FLOATBITS 1225c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #endif 1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_BUILD_FOR_WIN 12616690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com // we want lean_and_mean when we include windows.h 12716690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com #ifndef WIN32_LEAN_AND_MEAN 12816690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com #define WIN32_LEAN_AND_MEAN 12916690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com #define WIN32_IS_MEAN_WAS_LOCALLY_DEFINED 13016690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com #endif 13116690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com 1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #include <windows.h> 13316690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com 13416690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com #ifdef WIN32_IS_MEAN_WAS_LOCALLY_DEFINED 13516690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com #undef WIN32_LEAN_AND_MEAN 13616690af1c21dead3eedb25ebd0a4b9a091684ed4reed@android.com #endif 1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #ifndef SK_DEBUGBREAK 13904423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com #define SK_DEBUGBREAK(cond) do { if (!(cond)) { SkNO_RETURN_HINT(); __debugbreak(); }} while (false) 1408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 141f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 142f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #ifndef SK_A32_SHIFT 143f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #define SK_A32_SHIFT 24 144f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #define SK_R32_SHIFT 16 145f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #define SK_G32_SHIFT 8 146f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #define SK_B32_SHIFT 0 147f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #endif 148f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#elif defined(SK_BUILD_FOR_MAC) 1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #ifndef SK_DEBUGBREAK 1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_DEBUGBREAK(cond) do { if (!(cond)) SK_CRASH(); } while (false) 1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 1538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 1548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #ifdef SK_DEBUG 1558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #include <stdio.h> 1568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #ifndef SK_DEBUGBREAK 1578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SK_DEBUGBREAK(cond) do { if (cond) break; \ 1588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("%s:%d: failed assertion \"%s\"\n", \ 1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com __FILE__, __LINE__, #cond); SK_CRASH(); } while (false) 1608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 1618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #endif 1628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 16427661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com/* 16527661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com * We check to see if the SHIFT value has already been defined. 16627661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com * if not, we define it ourself to some default values. We default to OpenGL 16727661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com * order (in memory: r,g,b,a) 16827661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com */ 16927661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com#ifndef SK_A32_SHIFT 17027661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #ifdef SK_CPU_BENDIAN 17127661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #define SK_R32_SHIFT 24 17227661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #define SK_G32_SHIFT 16 17327661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #define SK_B32_SHIFT 8 17427661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #define SK_A32_SHIFT 0 17527661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #else 17627661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #define SK_R32_SHIFT 0 17727661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #define SK_G32_SHIFT 8 17827661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #define SK_B32_SHIFT 16 17927661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #define SK_A32_SHIFT 24 18027661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com #endif 18127661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com#endif 18227661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com 1838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// stdlib macros 1848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if 0 1868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if !defined(strlen) && defined(SK_DEBUG) 1878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com extern size_t sk_strlen(const char*); 1888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define strlen(s) sk_strlen(s) 1898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef sk_strcpy 1918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define sk_strcpy(dst, src) strcpy(dst, src) 1928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef sk_strchr 1948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define sk_strchr(s, c) strchr(s, c) 1958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef sk_strrchr 1978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define sk_strrchr(s, c) strrchr(s, c) 1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef sk_strcmp 2008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define sk_strcmp(s, t) strcmp(s, t) 2018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef sk_strncmp 2038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define sk_strncmp(s, t, n) strncmp(s, t, n) 2048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef sk_memcpy 2068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define sk_memcpy(dst, src, n) memcpy(dst, src, n) 2078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef memmove 2098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define memmove(dst, src, n) memmove(dst, src, n) 2108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef sk_memset 2128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define sk_memset(dst, val, n) memset(dst, val, n) 2138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef sk_memcmp 2158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define sk_memcmp(s, t, n) memcmp(s, t, n) 2168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define sk_strequal(s, t) (!sk_strcmp(s, t)) 2198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define sk_strnequal(s, t, n) (!sk_strncmp(s, t, n)) 2208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2225c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com////////////////////////////////////////////////////////////////////// 2235c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com 2245c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com#if defined(SK_BUILD_FOR_WIN32) || defined(SK_BUILD_FOR_MAC) 2255c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #ifndef SkLONGLONG 2265c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #ifdef SK_BUILD_FOR_WIN32 2275c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #define SkLONGLONG __int64 2285c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #else 2295c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #define SkLONGLONG long long 2305c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #endif 2315c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com #endif 2325c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com#endif 2335c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com 2348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////////////////////////////// 2358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SK_BUILD_FOR_WINCE 2368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include <string.h> 2378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include <stdlib.h> 2388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 2398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define _CMNINTRIN_DECLARE_ONLY 2408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "cmnintrin.h" 2418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined SK_DEBUG && defined SK_BUILD_FOR_WIN32 2448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//#define _CRTDBG_MAP_ALLOC 2458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef free 2468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#undef free 2478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include <crtdbg.h> 2498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#undef free 2508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_DEBUGx 2528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined(SK_SIMULATE_FAILED_MALLOC) && defined(__cplusplus) 2538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void * operator new( 2548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com size_t cb, 2558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int nBlockUse, 2568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const char * szFileName, 2578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int nLine, 2588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int foo 2598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ); 2608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void * operator new[]( 2618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com size_t cb, 2628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int nBlockUse, 2638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const char * szFileName, 2648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int nLine, 2658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int foo 2668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ); 2678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void operator delete( 2688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void *pUserData, 2698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int, const char*, int, int 2708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ); 2718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void operator delete( 2728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void *pUserData 2738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ); 2748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void operator delete[]( void * p ); 2758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__, 0) 2768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 2778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__) 2788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define new DEBUG_CLIENTBLOCK 2808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 2818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define DEBUG_CLIENTBLOCK 2828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif // _DEBUG 2838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2841341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com 2851341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com#endif 2861341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com 2878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2891341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com////////////////////////////////////////////////////////////////////// 2901341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com 2911341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com#ifndef SK_OVERRIDE 292ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #if defined(_MSC_VER) 293ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #define SK_OVERRIDE override 294867cbd8bc29371a360194aed648c4d43307b0639caryclark@google.com #elif defined(__clang__) && !defined(SK_BUILD_FOR_IOS) 295ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #if __has_feature(cxx_override_control) 296ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com // Some documentation suggests we should be using __attribute__((override)), 297ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com // but it doesn't work. 298ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #define SK_OVERRIDE override 299ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #elif defined(__has_extension) 300ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #if __has_extension(cxx_override_control) 301ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #define SK_OVERRIDE override 302ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #endif 303ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #endif 304ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #else 305ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com // Linux GCC ignores "__attribute__((override))" and rejects "override". 306ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #define SK_OVERRIDE 307ece0100c22e2184245efc380c8dede0fe47517b2george@mozilla.com #endif 3088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 3098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 310d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com////////////////////////////////////////////////////////////////////// 311d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com 3123a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#ifndef SK_PRINTF_LIKE 3133a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#if defined(__clang__) || defined(__GNUC__) 3143a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#define SK_PRINTF_LIKE(A, B) __attribute__((format(printf, (A), (B)))) 3153a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#else 3163a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#define SK_PRINTF_LIKE(A, B) 3173a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#endif 3183a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#endif 3193a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org 3203a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org////////////////////////////////////////////////////////////////////// 3213a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org 3223a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#ifndef SK_SIZE_T_SPECIFIER 3233a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#if defined(_MSC_VER) 3243a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#define SK_SIZE_T_SPECIFIER "%Iu" 3253a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#else 3263a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#define SK_SIZE_T_SPECIFIER "%zu" 3273a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#endif 3283a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#endif 3293a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org 3303a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org////////////////////////////////////////////////////////////////////// 3313a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org 332d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#ifndef SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 333d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#define SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 1 334d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#endif 335