blob: bfbf6b51099611a720975ad57c7ad5aebac56488 [file] [log] [blame]
mtklein09337252015-01-26 18:15:31 -08001# Gyp file for opts projects
epoger@google.comae85aea2011-05-31 13:50:51 +00002{
mtkleinc98fe3a2015-01-26 18:05:37 -08003 'targets': [
mtklein09337252015-01-26 18:15:31 -08004 # Due to an unfortunate intersection of lameness between gcc and gyp,
5 # we have to build the *_SSE2.cpp files in a separate target. The
6 # gcc lameness is that, in order to compile SSE2 intrinsics code, it
7 # must be passed the -msse2 flag. However, with this flag, it may
8 # emit SSE2 instructions even for scalar code, such as the CPUID
9 # test used to test for the presence of SSE2. So that, and all other
10 # code must be compiled *without* -msse2. The gyp lameness is that it
11 # does not allow file-specific CFLAGS, so we must create this extra
12 # target for those files to be compiled with -msse2.
13 #
14 # This is actually only a problem on 32-bit Linux (all Intel Macs have
15 # SSE2, Linux x86_64 has SSE2 by definition, and MSC will happily emit
16 # SSE2 from instrinsics, while generating plain ol' 386 for everything
17 # else). However, to keep the .gyp file simple and avoid platform-specific
18 # build breakage, we do this on all platforms.
19
20 # For about the same reason, we need to compile the ARM opts files
21 # separately as well.
epoger@google.comae85aea2011-05-31 13:50:51 +000022 {
23 'target_name': 'opts',
borenet@google.comefb1d772012-10-10 19:45:51 +000024 'product_name': 'skia_opts',
epoger@google.comae85aea2011-05-31 13:50:51 +000025 'type': 'static_library',
borenet@google.comefb1d772012-10-10 19:45:51 +000026 'standalone_static_library': 1,
bungeman@google.comb8f36552013-07-22 14:39:45 +000027 'dependencies': [
28 'core.gyp:*',
senorblanco@chromium.org0ded88d2014-01-24 15:43:50 +000029 'effects.gyp:*'
bungeman@google.comb8f36552013-07-22 14:39:45 +000030 ],
epoger@google.comae85aea2011-05-31 13:50:51 +000031 'include_dirs': [
epoger@google.comae85aea2011-05-31 13:50:51 +000032 '../src/core',
djsollen@google.coma44e6c62012-01-09 14:38:25 +000033 '../src/opts',
krajcevski630598c2014-07-14 12:00:04 -070034 '../src/utils',
epoger@google.comae85aea2011-05-31 13:50:51 +000035 ],
36 'conditions': [
caryclark@google.com867cbd82012-09-20 15:45:41 +000037 [ 'skia_arch_type == "x86" and skia_os != "ios"', {
mtkleinc98fe3a2015-01-26 18:05:37 -080038 'conditions': [
mtklein09337252015-01-26 18:15:31 -080039 [ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "nacl", "chromeos", "android"]', {
40 'cflags': [
41 '-msse2',
42 ],
mtkleinc98fe3a2015-01-26 18:05:37 -080043 }],
mtklein09337252015-01-26 18:15:31 -080044 ],
45 'include_dirs': [
46 '../include/utils',
47 ],
48 'dependencies': [
49 'opts_ssse3',
50 'opts_sse4',
51 ],
52 'sources': [
53 '../src/opts/opts_check_x86.cpp',
54 '../src/opts/SkBitmapProcState_opts_SSE2.cpp',
55 '../src/opts/SkBitmapFilter_opts_SSE2.cpp',
56 '../src/opts/SkBlitRow_opts_SSE2.cpp',
57 '../src/opts/SkBlitRect_opts_SSE2.cpp',
58 '../src/opts/SkBlurImage_opts_SSE2.cpp',
59 '../src/opts/SkMorphology_opts_SSE2.cpp',
60 '../src/opts/SkTextureCompression_opts_none.cpp',
61 '../src/opts/SkUtils_opts_SSE2.cpp',
62 '../src/opts/SkXfermode_opts_SSE2.cpp',
63 ],
mtkleinc98fe3a2015-01-26 18:05:37 -080064 }],
djsollen@google.comf7542ba2013-07-31 12:57:27 +000065 [ 'skia_arch_type == "arm" and arm_version >= 7', {
djsollen@google.com58629292011-11-03 13:08:29 +000066 # The assembly uses the frame pointer register (r7 in Thumb/r11 in
67 # ARM), the compiler doesn't like that.
mtklein09337252015-01-26 18:15:31 -080068 'cflags!': [
69 '-fno-omit-frame-pointer',
70 '-mapcs-frame',
71 '-mapcs',
72 ],
73 'cflags': [
74 '-fomit-frame-pointer',
75 ],
76 'variables': {
77 'arm_neon_optional%': '<(arm_neon_optional>',
78 },
79 'sources': [
80 '../src/opts/memset.arm.S',
81 '../src/opts/SkBitmapProcState_opts_arm.cpp',
82 '../src/opts/SkBlitMask_opts_arm.cpp',
83 '../src/opts/SkBlitRow_opts_arm.cpp',
84 '../src/opts/SkBlurImage_opts_arm.cpp',
85 '../src/opts/SkMorphology_opts_arm.cpp',
86 '../src/opts/SkTextureCompression_opts_arm.cpp',
87 '../src/opts/SkUtils_opts_arm.cpp',
88 '../src/opts/SkXfermode_opts_arm.cpp',
89 ],
digit@google.comeec9dbc2012-05-30 13:54:41 +000090 'conditions': [
91 [ 'arm_neon == 1 or arm_neon_optional == 1', {
mtklein09337252015-01-26 18:15:31 -080092 'dependencies': [
93 'opts_neon',
94 ]
caryclark@google.com867cbd82012-09-20 15:45:41 +000095 }],
96 [ 'skia_os == "ios"', {
97 'sources!': [
caryclark@google.com594dd3c2012-09-24 19:33:57 +000098 # these fail to compile under xcode for ios
caryclark@google.com867cbd82012-09-20 15:45:41 +000099 '../src/opts/memset.arm.S',
caryclark@google.com594dd3c2012-09-24 19:33:57 +0000100 '../src/opts/SkBitmapProcState_opts_arm.cpp',
101 '../src/opts/SkBlitRow_opts_arm.cpp',
caryclark@google.com867cbd82012-09-20 15:45:41 +0000102 ],
103 }],
digit@google.comeec9dbc2012-05-30 13:54:41 +0000104 ],
djsollen@google.com58629292011-11-03 13:08:29 +0000105 }],
mtklein09337252015-01-26 18:15:31 -0800106 [ 'skia_arch_type == "mips"', {
107 'sources': [
108 '../src/opts/SkBlitMask_opts_none.cpp',
109 '../src/opts/SkBlurImage_opts_none.cpp',
110 '../src/opts/SkMorphology_opts_none.cpp',
111 '../src/opts/SkUtils_opts_none.cpp',
112 '../src/opts/SkTextureCompression_opts_none.cpp',
113 '../src/opts/SkXfermode_opts_none.cpp',
114 ],
115 'conditions': [
116 [ '(mips_arch_variant == "mips32r2") \
117 and (mips_dsp == 1 or mips_dsp == 2)', {
118 'sources': [
119 '../src/opts/SkBitmapProcState_opts_mips_dsp.cpp',
120 '../src/opts/SkBlitRow_opts_mips_dsp.cpp',
121 ],
122 }, {
123 'sources': [
124 '../src/opts/SkBitmapProcState_opts_none.cpp',
125 '../src/opts/SkBlitRow_opts_none.cpp',
126 ],
127 }],
128 ],
djordje.pesut632a4542014-06-11 06:56:10 -0700129 }],
mtklein09337252015-01-26 18:15:31 -0800130 [ '(skia_arch_type == "arm" and arm_version < 7) \
131 or (skia_os == "ios") \
132 or (skia_os == "android" and skia_arch_type not in ["x86", "arm", "mips", "arm64"])', {
133 'sources': [
134 '../src/opts/SkBitmapProcState_opts_none.cpp',
135 '../src/opts/SkBlitMask_opts_none.cpp',
136 '../src/opts/SkBlitRow_opts_none.cpp',
137 '../src/opts/SkBlurImage_opts_none.cpp',
138 '../src/opts/SkMorphology_opts_none.cpp',
139 '../src/opts/SkUtils_opts_none.cpp',
140 '../src/opts/SkTextureCompression_opts_none.cpp',
141 '../src/opts/SkXfermode_opts_none.cpp',
142 ],
143 }],
commit-bot@chromium.orge72a4082014-02-28 16:07:39 +0000144 [ 'skia_android_framework', {
145 'cflags!': [
146 '-msse2',
147 '-mfpu=neon',
148 '-fomit-frame-pointer',
commit-bot@chromium.orge72a4082014-02-28 16:07:39 +0000149 ]
150 }],
mtklein09337252015-01-26 18:15:31 -0800151 [ 'skia_arch_type == "arm64"', {
152 'sources': [
153 '../src/opts/SkBitmapProcState_arm_neon.cpp',
154 '../src/opts/SkBitmapProcState_matrixProcs_neon.cpp',
155 '../src/opts/SkBitmapProcState_opts_arm.cpp',
156 '../src/opts/SkBlitMask_opts_arm.cpp',
157 '../src/opts/SkBlitMask_opts_arm_neon.cpp',
158 '../src/opts/SkBlitRow_opts_arm.cpp',
159 '../src/opts/SkBlitRow_opts_arm_neon.cpp',
160 '../src/opts/SkBlurImage_opts_arm.cpp',
161 '../src/opts/SkBlurImage_opts_neon.cpp',
162 '../src/opts/SkMorphology_opts_arm.cpp',
163 '../src/opts/SkMorphology_opts_neon.cpp',
164 '../src/opts/SkTextureCompression_opts_none.cpp',
165 '../src/opts/SkUtils_opts_none.cpp',
166 '../src/opts/SkXfermode_opts_arm.cpp',
167 '../src/opts/SkXfermode_opts_arm_neon.cpp',
168 ],
169 }],
epoger@google.comae85aea2011-05-31 13:50:51 +0000170 ],
171 },
mtklein09337252015-01-26 18:15:31 -0800172 # For the same lame reasons as what is done for skia_opts, we have to
173 # create another target specifically for SSSE3 code as we would not want
174 # to compile the SSE2 code with -mssse3 which would potentially allow
175 # gcc to generate SSSE3 code.
tomhudson@google.com95ad1552012-02-14 18:28:54 +0000176 {
177 'target_name': 'opts_ssse3',
borenet@google.comefb1d772012-10-10 19:45:51 +0000178 'product_name': 'skia_opts_ssse3',
tomhudson@google.com95ad1552012-02-14 18:28:54 +0000179 'type': 'static_library',
borenet@google.comefb1d772012-10-10 19:45:51 +0000180 'standalone_static_library': 1,
mtklein09337252015-01-26 18:15:31 -0800181 'dependencies': [
182 'core.gyp:*',
183 'effects.gyp:*'
184 ],
185 'include_dirs': [
186 '../src/core',
187 '../src/utils',
188 ],
189 'sources': [
190 '../src/opts/SkBitmapProcState_opts_SSSE3.cpp',
191 ],
tomhudson@google.com95ad1552012-02-14 18:28:54 +0000192 'conditions': [
djsollenbc893292014-07-24 13:53:56 -0700193 [ 'skia_os == "win"', {
194 'defines' : [ 'SK_CPU_SSE_LEVEL=31' ],
195 }],
mtklein09337252015-01-26 18:15:31 -0800196 # (Mac has -mssse3 globally.)
197 [ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "nacl", "chromeos", "android"] \
198 and not skia_android_framework', {
199 'cflags': [
200 '-mssse3',
201 ],
tomhudson@google.com95ad1552012-02-14 18:28:54 +0000202 }],
tomhudson@google.com95ad1552012-02-14 18:28:54 +0000203 ],
204 },
mtklein09337252015-01-26 18:15:31 -0800205 # For the same lame reasons as what is done for skia_opts, we also have to
206 # create another target specifically for SSE4 code as we would not want
207 # to compile the SSE2 code with -msse4 which would potentially allow
208 # gcc to generate SSE4 code.
henrik.smiding3bb195e2014-06-27 08:03:17 -0700209 {
mtklein09337252015-01-26 18:15:31 -0800210 'target_name': 'opts_sse4',
211 'product_name': 'skia_opts_sse4',
henrik.smiding3bb195e2014-06-27 08:03:17 -0700212 'type': 'static_library',
213 'standalone_static_library': 1,
mtklein09337252015-01-26 18:15:31 -0800214 'dependencies': [
215 'core.gyp:*',
216 'effects.gyp:*'
217 ],
218 'include_dirs': [
219 '../src/core',
220 '../src/utils',
221 ],
222 'sources': [
223 '../src/opts/SkBlurImage_opts_SSE4.cpp',
224 ],
henrik.smiding3bb195e2014-06-27 08:03:17 -0700225 'conditions': [
mtklein09337252015-01-26 18:15:31 -0800226 [ 'skia_arch_width == 64', {
227 'sources': [
228 '../src/opts/SkBlitRow_opts_SSE4_x64_asm.S',
229 ],
230 }],
231 [ 'skia_arch_width == 32', {
232 'sources': [
233 '../src/opts/SkBlitRow_opts_SSE4_asm.S',
234 ],
235 }],
djsollenbc893292014-07-24 13:53:56 -0700236 [ 'skia_os == "win"', {
237 'defines' : [ 'SK_CPU_SSE_LEVEL=41' ],
238 }],
mtklein09337252015-01-26 18:15:31 -0800239 [ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "nacl", "chromeos", "android"] \
240 and not skia_android_framework', {
241 'cflags': [
242 '-msse4.1',
243 ],
henrik.smiding3bb195e2014-06-27 08:03:17 -0700244 }],
henrik.smiding5f7f9d02014-07-07 08:05:40 -0700245 [ 'skia_os == "mac"', {
mtklein09337252015-01-26 18:15:31 -0800246 'xcode_settings': {
247 'OTHER_CPLUSPLUSFLAGS!': [
248 '-mssse3',
249 ],
250 'OTHER_CPLUSPLUSFLAGS': [
251 '-msse4.1',
252 ],
253 },
henrik.smiding5f7f9d02014-07-07 08:05:40 -0700254 }],
henrik.smiding3bb195e2014-06-27 08:03:17 -0700255 ],
256 },
mtklein09337252015-01-26 18:15:31 -0800257 # NEON code must be compiled with -mfpu=neon which also affects scalar
258 # code. To support dynamic NEON code paths, we need to build all
259 # NEON-specific sources in a separate static library. The situation
260 # is very similar to the SSSE3 and SSE4 one.
digit@google.comeec9dbc2012-05-30 13:54:41 +0000261 {
262 'target_name': 'opts_neon',
borenet@google.comefb1d772012-10-10 19:45:51 +0000263 'product_name': 'skia_opts_neon',
digit@google.comeec9dbc2012-05-30 13:54:41 +0000264 'type': 'static_library',
borenet@google.comefb1d772012-10-10 19:45:51 +0000265 'standalone_static_library': 1,
bungeman@google.comb8f36552013-07-22 14:39:45 +0000266 'dependencies': [
267 'core.gyp:*',
senorblanco@chromium.org0ded88d2014-01-24 15:43:50 +0000268 'effects.gyp:*'
bungeman@google.comb8f36552013-07-22 14:39:45 +0000269 ],
digit@google.comeec9dbc2012-05-30 13:54:41 +0000270 'include_dirs': [
digit@google.comeec9dbc2012-05-30 13:54:41 +0000271 '../src/core',
digit@google.comfce02ac2012-08-01 14:25:07 +0000272 '../src/opts',
krajcevski630598c2014-07-14 12:00:04 -0700273 '../src/utils',
digit@google.comeec9dbc2012-05-30 13:54:41 +0000274 ],
275 'cflags!': [
276 '-fno-omit-frame-pointer',
277 '-mfpu=vfp', # remove them all, just in case.
278 '-mfpu=vfpv3',
279 '-mfpu=vfpv3-d16',
280 ],
commit-bot@chromium.orge72a4082014-02-28 16:07:39 +0000281 'conditions': [
282 [ 'not skia_android_framework', {
283 'cflags': [
284 '-mfpu=neon',
285 '-fomit-frame-pointer',
286 ],
287 }],
digit@google.comeec9dbc2012-05-30 13:54:41 +0000288 ],
djsollen@google.com4dcc6242013-01-23 18:56:38 +0000289 'ldflags': [
290 '-march=armv7-a',
291 '-Wl,--fix-cortex-a8',
292 ],
mtklein09337252015-01-26 18:15:31 -0800293 'sources': [
294 '../src/opts/memset16_neon.S',
295 '../src/opts/memset32_neon.S',
296 '../src/opts/SkBitmapProcState_arm_neon.cpp',
297 '../src/opts/SkBitmapProcState_matrixProcs_neon.cpp',
298 '../src/opts/SkBitmapProcState_matrix_neon.h',
299 '../src/opts/SkBlitMask_opts_arm_neon.cpp',
300 '../src/opts/SkBlitRow_opts_arm_neon.cpp',
301 '../src/opts/SkBlurImage_opts_neon.cpp',
302 '../src/opts/SkMorphology_opts_neon.cpp',
303 '../src/opts/SkTextureCompression_opts_neon.cpp',
304 '../src/opts/SkXfermode_opts_arm_neon.cpp',
305 ],
digit@google.comeec9dbc2012-05-30 13:54:41 +0000306 },
epoger@google.comae85aea2011-05-31 13:50:51 +0000307 ],
308}