- add third_party src.
[platform/framework/web/crosswalk.git] / src / third_party / skia / gyp / opts.gyp
1 {
2   'targets': [
3     # Due to an unfortunate intersection of lameness between gcc and gyp,
4     # we have to build the *_SSE2.cpp files in a separate target.  The
5     # gcc lameness is that, in order to compile SSE2 intrinsics code, it
6     # must be passed the -msse2 flag.  However, with this flag, it may
7     # emit SSE2 instructions even for scalar code, such as the CPUID
8     # test used to test for the presence of SSE2.  So that, and all other
9     # code must be compiled *without* -msse2.  The gyp lameness is that it
10     # does not allow file-specific CFLAGS, so we must create this extra
11     # target for those files to be compiled with -msse2.
12     #
13     # This is actually only a problem on 32-bit Linux (all Intel Macs have
14     # SSE2, Linux x86_64 has SSE2 by definition, and MSC will happily emit
15     # SSE2 from instrinsics, while generating plain ol' 386 for everything
16     # else).  However, to keep the .gyp file simple and avoid platform-specific
17     # build breakage, we do this on all platforms.
18
19     # For about the same reason, we need to compile the ARM opts files
20     # separately as well.
21     {
22       'target_name': 'opts',
23       'product_name': 'skia_opts',
24       'type': 'static_library',
25       'standalone_static_library': 1,
26       'dependencies': [
27         'core.gyp:*',
28       ],
29       'include_dirs': [
30         '../src/core',
31         '../src/opts',
32       ],
33       'conditions': [
34         [ 'skia_arch_type == "x86" and skia_os != "ios"', {
35           'conditions': [
36             [ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "nacl", "chromeos", "android"]', {
37               'cflags': [
38                 '-msse2',
39               ],
40             }],
41           ],
42           'include_dirs': [
43             '../include/utils',
44           ],
45           'dependencies': [
46             'opts_ssse3',
47           ],
48           'sources': [
49             '../src/opts/opts_check_SSE2.cpp',
50             '../src/opts/SkBitmapProcState_opts_SSE2.cpp',
51             '../src/opts/SkBitmapFilter_opts_SSE2.cpp',
52             '../src/opts/SkBlitRow_opts_SSE2.cpp',
53             '../src/opts/SkBlitRect_opts_SSE2.cpp',
54             '../src/opts/SkMorphology_opts_SSE2.cpp',
55             '../src/opts/SkUtils_opts_SSE2.cpp',
56             '../src/opts/SkXfermode_opts_none.cpp',
57           ],
58         }],
59         [ 'skia_arch_type == "arm" and arm_version >= 7', {
60           # The assembly uses the frame pointer register (r7 in Thumb/r11 in
61           # ARM), the compiler doesn't like that.
62           'cflags!': [
63             '-fno-omit-frame-pointer',
64             '-mapcs-frame',
65             '-mapcs',
66           ],
67           'cflags': [
68             '-fomit-frame-pointer',
69             '-mno-apcs-frame',
70           ],
71           'variables': {
72             'arm_neon_optional%': '<(arm_neon_optional>',
73           },
74           'sources': [
75             '../src/opts/opts_check_arm.cpp',
76             '../src/opts/memset.arm.S',
77             '../src/opts/SkBitmapProcState_opts_arm.cpp',
78             '../src/opts/SkBlitMask_opts_arm.cpp',
79             '../src/opts/SkBlitRow_opts_arm.cpp',
80             '../src/opts/SkBlitRow_opts_arm.h',
81             '../src/opts/SkMorphology_opts_none.cpp',
82             '../src/opts/SkXfermode_opts_arm.cpp',
83           ],
84           'conditions': [
85             [ 'arm_neon == 1 or arm_neon_optional == 1', {
86               'dependencies': [
87                 'opts_neon',
88               ]
89             }],
90             [ 'skia_os == "ios"', {
91               'sources!': [
92                 # these fail to compile under xcode for ios
93                 '../src/opts/memset.arm.S',
94                 '../src/opts/SkBitmapProcState_opts_arm.cpp',
95                 '../src/opts/SkBlitRow_opts_arm.cpp',
96               ],
97             }],
98           ],
99         }],
100         [ '(skia_arch_type == "arm" and arm_version < 7) or (skia_os == "ios")', {
101           'sources': [
102             '../src/opts/SkBitmapProcState_opts_none.cpp',
103             '../src/opts/SkBlitMask_opts_none.cpp',
104             '../src/opts/SkBlitRow_opts_none.cpp',
105             '../src/opts/SkMorphology_opts_none.cpp',
106             '../src/opts/SkUtils_opts_none.cpp',
107             '../src/opts/SkXfermode_opts_none.cpp',
108           ],
109         }],
110       ],
111     },
112     # For the same lame reasons as what is done for skia_opts, we have to
113     # create another target specifically for SSSE3 code as we would not want
114     # to compile the SSE2 code with -mssse3 which would potentially allow
115     # gcc to generate SSSE3 code.
116     {
117       'target_name': 'opts_ssse3',
118       'product_name': 'skia_opts_ssse3',
119       'type': 'static_library',
120       'standalone_static_library': 1,
121       'dependencies': [
122         'core.gyp:*',
123       ],
124       'include_dirs': [
125         '../src/core',
126       ],
127       'conditions': [
128         [ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "nacl", "chromeos", "android"]', {
129           'cflags': [
130             '-mssse3',
131           ],
132         }],
133         # (Mac has -mssse3 globally.)
134         [ 'skia_arch_type == "x86"', {
135           'sources': [
136             '../src/opts/SkBitmapProcState_opts_SSSE3.cpp',
137           ],
138         }],
139       ],
140     },
141     # NEON code must be compiled with -mfpu=neon which also affects scalar
142     # code. To support dynamic NEON code paths, we need to build all
143     # NEON-specific sources in a separate static library. The situation
144     # is very similar to the SSSE3 one.
145     {
146       'target_name': 'opts_neon',
147       'product_name': 'skia_opts_neon',
148       'type': 'static_library',
149       'standalone_static_library': 1,
150       'dependencies': [
151         'core.gyp:*',
152       ],
153       'include_dirs': [
154         '../src/core',
155         '../src/opts',
156       ],
157       'cflags!': [
158         '-fno-omit-frame-pointer',
159         '-mfpu=vfp',  # remove them all, just in case.
160         '-mfpu=vfpv3',
161         '-mfpu=vfpv3-d16',
162       ],
163       'cflags': [
164         '-mfpu=neon',
165         '-fomit-frame-pointer',
166       ],
167       'ldflags': [
168         '-march=armv7-a',
169         '-Wl,--fix-cortex-a8',
170       ],
171       'sources': [
172         '../src/opts/memset16_neon.S',
173         '../src/opts/memset32_neon.S',
174         '../src/opts/SkBitmapProcState_arm_neon.cpp',
175         '../src/opts/SkBitmapProcState_matrixProcs_neon.cpp',
176         '../src/opts/SkBitmapProcState_matrix_clamp_neon.h',
177         '../src/opts/SkBitmapProcState_matrix_repeat_neon.h',
178         '../src/opts/SkBlitRow_opts_arm_neon.cpp',
179         '../src/opts/SkXfermode_opts_arm_neon.cpp',
180       ],
181     },
182   ],
183 }
184
185 # Local Variables:
186 # tab-width:2
187 # indent-tabs-mode:nil
188 # End:
189 # vim: set expandtab tabstop=2 shiftwidth=2: