• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2006 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef SkPostConfig_DEFINED
18 #define SkPostConfig_DEFINED
19 
20 #if defined(SK_BUILD_FOR_WIN32) || defined(SK_BUILD_FOR_WINCE)
21     #define SK_BUILD_FOR_WIN
22 #endif
23 
24 #if defined(SK_DEBUG) && defined(SK_RELEASE)
25     #error "cannot define both SK_DEBUG and SK_RELEASE"
26 #elif !defined(SK_DEBUG) && !defined(SK_RELEASE)
27     #error "must define either SK_DEBUG or SK_RELEASE"
28 #endif
29 
30 #if defined SK_SUPPORT_UNITTEST && !defined(SK_DEBUG)
31     #error "can't have unittests without debug"
32 #endif
33 
34 #if defined(SK_SCALAR_IS_FIXED) && defined(SK_SCALAR_IS_FLOAT)
35     #error "cannot define both SK_SCALAR_IS_FIXED and SK_SCALAR_IS_FLOAT"
36 #elif !defined(SK_SCALAR_IS_FIXED) && !defined(SK_SCALAR_IS_FLOAT)
37     #ifdef SK_CAN_USE_FLOAT
38         #define SK_SCALAR_IS_FLOAT
39     #else
40         #define SK_SCALAR_IS_FIXED
41     #endif
42 #endif
43 
44 #if defined(SK_SCALAR_IS_FLOAT) && !defined(SK_CAN_USE_FLOAT)
45     #define SK_CAN_USE_FLOAT
46     // we do nothing in the else case: fixed-scalars can have floats or not
47 #endif
48 
49 #if defined(SK_CPU_LENDIAN) && defined(SK_CPU_BENDIAN)
50     #error "cannot define both SK_CPU_LENDIAN and SK_CPU_BENDIAN"
51 #elif !defined(SK_CPU_LENDIAN) && !defined(SK_CPU_BENDIAN)
52     #error "must define either SK_CPU_LENDIAN or SK_CPU_BENDIAN"
53 #endif
54 
55 // ensure the port has defined all of these, or none of them
56 #ifdef SK_A32_SHIFT
57     #if !defined(SK_R32_SHIFT) || !defined(SK_G32_SHIFT) || !defined(SK_B32_SHIFT)
58         #error "all or none of the 32bit SHIFT amounts must be defined"
59     #endif
60 #else
61     #if defined(SK_R32_SHIFT) || defined(SK_G32_SHIFT) || defined(SK_B32_SHIFT)
62         #error "all or none of the 32bit SHIFT amounts must be defined"
63     #endif
64 #endif
65 
66 ///////////////////////////////////////////////////////////////////////////////
67 
68 #ifndef SkNEW
69     #define SkNEW(type_name)                new type_name
70     #define SkNEW_ARGS(type_name, args)     new type_name args
71     #define SkNEW_ARRAY(type_name, count)   new type_name[count]
72     #define SkDELETE(obj)                   delete obj
73     #define SkDELETE_ARRAY(array)           delete[] array
74 #endif
75 
76 #ifndef SK_CRASH
77 #if 1   // set to 0 for infinite loop, which can help connecting gdb
78     #define SK_CRASH() *(int *)(uintptr_t)0xbbadbeef = 0
79 #else
80     #define SK_CRASH()  do {} while (true)
81 #endif
82 #endif
83 
84 ///////////////////////////////////////////////////////////////////////////////
85 
86 #if defined(SK_SOFTWARE_FLOAT) && defined(SK_SCALAR_IS_FLOAT)
87     // if this is defined, we convert floats to 2scompliment ints for compares
88     #ifndef SK_SCALAR_SLOW_COMPARES
89         #define SK_SCALAR_SLOW_COMPARES
90     #endif
91     #ifndef SK_USE_FLOATBITS
92         #define SK_USE_FLOATBITS
93     #endif
94 #endif
95 
96 #ifdef SK_BUILD_FOR_WIN
97     // we want lean_and_mean when we include windows.h
98     #ifndef WIN32_LEAN_AND_MEAN
99         #define WIN32_LEAN_AND_MEAN
100         #define WIN32_IS_MEAN_WAS_LOCALLY_DEFINED
101     #endif
102 
103     #include <windows.h>
104 
105     #ifdef WIN32_IS_MEAN_WAS_LOCALLY_DEFINED
106         #undef WIN32_LEAN_AND_MEAN
107     #endif
108 
109     #ifndef SK_DEBUGBREAK
110         #define SK_DEBUGBREAK(cond)     do { if (!(cond)) DebugBreak(); } while (false)
111     #endif
112 #elif defined(SK_BUILD_FOR_MAC)
113     #ifndef SK_DEBUGBREAK
114         #define SK_DEBUGBREAK(cond)     do { if (!(cond)) SK_CRASH(); } while (false)
115     #endif
116 #else
117     #ifdef SK_DEBUG
118         #include <stdio.h>
119         #ifndef SK_DEBUGBREAK
120             #define SK_DEBUGBREAK(cond) do { if (cond) break; \
121                 SkDebugf("%s:%d: failed assertion \"%s\"\n", \
122                 __FILE__, __LINE__, #cond); SK_CRASH(); } while (false)
123         #endif
124     #endif
125 #endif
126 
127 //  stdlib macros
128 
129 #if 0
130 #if !defined(strlen) && defined(SK_DEBUG)
131     extern size_t sk_strlen(const char*);
132     #define strlen(s)   sk_strlen(s)
133 #endif
134 #ifndef sk_strcpy
135     #define sk_strcpy(dst, src)     strcpy(dst, src)
136 #endif
137 #ifndef sk_strchr
138     #define sk_strchr(s, c)         strchr(s, c)
139 #endif
140 #ifndef sk_strrchr
141     #define sk_strrchr(s, c)        strrchr(s, c)
142 #endif
143 #ifndef sk_strcmp
144     #define sk_strcmp(s, t)         strcmp(s, t)
145 #endif
146 #ifndef sk_strncmp
147     #define sk_strncmp(s, t, n)     strncmp(s, t, n)
148 #endif
149 #ifndef sk_memcpy
150     #define sk_memcpy(dst, src, n)  memcpy(dst, src, n)
151 #endif
152 #ifndef memmove
153     #define memmove(dst, src, n)    memmove(dst, src, n)
154 #endif
155 #ifndef sk_memset
156     #define sk_memset(dst, val, n)  memset(dst, val, n)
157 #endif
158 #ifndef sk_memcmp
159     #define sk_memcmp(s, t, n)      memcmp(s, t, n)
160 #endif
161 
162 #define sk_strequal(s, t)           (!sk_strcmp(s, t))
163 #define sk_strnequal(s, t, n)       (!sk_strncmp(s, t, n))
164 #endif
165 
166 //////////////////////////////////////////////////////////////////////
167 
168 #if defined(SK_BUILD_FOR_WIN32) || defined(SK_BUILD_FOR_MAC)
169     #ifndef SkLONGLONG
170         #ifdef SK_BUILD_FOR_WIN32
171             #define SkLONGLONG  __int64
172         #else
173             #define SkLONGLONG  long long
174         #endif
175     #endif
176 #endif
177 
178 //////////////////////////////////////////////////////////////////////////////////////////////
179 #ifndef SK_BUILD_FOR_WINCE
180 #include <string.h>
181 #include <stdlib.h>
182 #else
183 #define _CMNINTRIN_DECLARE_ONLY
184 #include "cmnintrin.h"
185 #endif
186 
187 #if defined SK_DEBUG && defined SK_BUILD_FOR_WIN32
188 //#define _CRTDBG_MAP_ALLOC
189 #ifdef free
190 #undef free
191 #endif
192 #include <crtdbg.h>
193 #undef free
194 
195 #ifdef SK_DEBUGx
196 #if defined(SK_SIMULATE_FAILED_MALLOC) && defined(__cplusplus)
197     void * operator new(
198         size_t cb,
199         int nBlockUse,
200         const char * szFileName,
201         int nLine,
202         int foo
203         );
204     void * operator new[](
205         size_t cb,
206         int nBlockUse,
207         const char * szFileName,
208         int nLine,
209         int foo
210         );
211     void operator delete(
212         void *pUserData,
213         int, const char*, int, int
214         );
215     void operator delete(
216         void *pUserData
217         );
218     void operator delete[]( void * p );
219     #define DEBUG_CLIENTBLOCK   new( _CLIENT_BLOCK, __FILE__, __LINE__, 0)
220 #else
221     #define DEBUG_CLIENTBLOCK   new( _CLIENT_BLOCK, __FILE__, __LINE__)
222 #endif
223     #define new DEBUG_CLIENTBLOCK
224 #else
225 #define DEBUG_CLIENTBLOCK
226 #endif // _DEBUG
227 
228 #endif
229 
230 #endif
231 
232