blob: bd072cb1e8efff9744650a42b211eb537ff25a83 [file] [log] [blame]
epoger@google.comae85aea2011-05-31 13:50:51 +00001{
epoger@google.comae85aea2011-05-31 13:50:51 +00002 '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',
borenet@google.comefb1d772012-10-10 19:45:51 +000023 'product_name': 'skia_opts',
epoger@google.comae85aea2011-05-31 13:50:51 +000024 'type': 'static_library',
borenet@google.comefb1d772012-10-10 19:45:51 +000025 'standalone_static_library': 1,
bungeman@google.comb8f36552013-07-22 14:39:45 +000026 'dependencies': [
27 'core.gyp:*',
28 ],
epoger@google.comae85aea2011-05-31 13:50:51 +000029 'include_dirs': [
epoger@google.comae85aea2011-05-31 13:50:51 +000030 '../src/core',
djsollen@google.coma44e6c62012-01-09 14:38:25 +000031 '../src/opts',
epoger@google.comae85aea2011-05-31 13:50:51 +000032 ],
33 'conditions': [
caryclark@google.com867cbd82012-09-20 15:45:41 +000034 [ 'skia_arch_type == "x86" and skia_os != "ios"', {
tomhudson@google.com95ad1552012-02-14 18:28:54 +000035 'conditions': [
mtklein@google.comd9d5c052013-07-31 20:09:25 +000036 [ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "nacl", "chromeos", "android"]', {
tomhudson@google.com95ad1552012-02-14 18:28:54 +000037 'cflags': [
38 '-msse2',
39 ],
40 }],
41 ],
humper@google.comb0889472013-07-09 21:37:14 +000042 'include_dirs': [
43 '../include/utils',
44 ],
mtklein@google.comd9d5c052013-07-31 20:09:25 +000045 'dependencies': [
46 'opts_ssse3',
47 ],
djsollen@google.com58629292011-11-03 13:08:29 +000048 'sources': [
djsollen@google.coma44e6c62012-01-09 14:38:25 +000049 '../src/opts/opts_check_SSE2.cpp',
djsollen@google.com58629292011-11-03 13:08:29 +000050 '../src/opts/SkBitmapProcState_opts_SSE2.cpp',
humper@google.comb0889472013-07-09 21:37:14 +000051 '../src/opts/SkBitmapFilter_opts_SSE2.cpp',
djsollen@google.com58629292011-11-03 13:08:29 +000052 '../src/opts/SkBlitRow_opts_SSE2.cpp',
tomhudson@google.com8dd90a92012-03-19 13:49:50 +000053 '../src/opts/SkBlitRect_opts_SSE2.cpp',
senorblanco@chromium.org27eec462013-11-08 20:49:04 +000054 '../src/opts/SkBlurImage_opts_SSE2.cpp',
senorblanco@chromium.org7a47ad32013-10-30 21:57:04 +000055 '../src/opts/SkMorphology_opts_SSE2.cpp',
djsollen@google.com58629292011-11-03 13:08:29 +000056 '../src/opts/SkUtils_opts_SSE2.cpp',
commit-bot@chromium.orgdf187c72013-10-09 14:39:46 +000057 '../src/opts/SkXfermode_opts_none.cpp',
djsollen@google.com58629292011-11-03 13:08:29 +000058 ],
59 }],
djsollen@google.comf7542ba2013-07-31 12:57:27 +000060 [ 'skia_arch_type == "arm" and arm_version >= 7', {
djsollen@google.com58629292011-11-03 13:08:29 +000061 # The assembly uses the frame pointer register (r7 in Thumb/r11 in
62 # ARM), the compiler doesn't like that.
63 'cflags!': [
64 '-fno-omit-frame-pointer',
djsollen@google.com5afbbc42012-11-29 15:09:58 +000065 '-mapcs-frame',
66 '-mapcs',
djsollen@google.com58629292011-11-03 13:08:29 +000067 ],
68 'cflags': [
69 '-fomit-frame-pointer',
djsollen@google.com5afbbc42012-11-29 15:09:58 +000070 '-mno-apcs-frame',
djsollen@google.com58629292011-11-03 13:08:29 +000071 ],
digit@google.comeec9dbc2012-05-30 13:54:41 +000072 'variables': {
73 'arm_neon_optional%': '<(arm_neon_optional>',
74 },
djsollen@google.com58629292011-11-03 13:08:29 +000075 'sources': [
djsollen@google.coma44e6c62012-01-09 14:38:25 +000076 '../src/opts/opts_check_arm.cpp',
77 '../src/opts/memset.arm.S',
djsollen@google.com58629292011-11-03 13:08:29 +000078 '../src/opts/SkBitmapProcState_opts_arm.cpp',
commit-bot@chromium.orge997c262013-08-28 15:07:58 +000079 '../src/opts/SkBlitMask_opts_arm.cpp',
djsollen@google.com58629292011-11-03 13:08:29 +000080 '../src/opts/SkBlitRow_opts_arm.cpp',
digit@google.coma8dd1ce2012-08-08 22:06:29 +000081 '../src/opts/SkBlitRow_opts_arm.h',
commit-bot@chromium.orgdf187c72013-10-09 14:39:46 +000082 '../src/opts/SkXfermode_opts_arm.cpp',
djsollen@google.com58629292011-11-03 13:08:29 +000083 ],
digit@google.comeec9dbc2012-05-30 13:54:41 +000084 'conditions': [
85 [ 'arm_neon == 1 or arm_neon_optional == 1', {
86 'dependencies': [
87 'opts_neon',
88 ]
caryclark@google.com867cbd82012-09-20 15:45:41 +000089 }],
90 [ 'skia_os == "ios"', {
91 'sources!': [
caryclark@google.com594dd3c2012-09-24 19:33:57 +000092 # these fail to compile under xcode for ios
caryclark@google.com867cbd82012-09-20 15:45:41 +000093 '../src/opts/memset.arm.S',
caryclark@google.com594dd3c2012-09-24 19:33:57 +000094 '../src/opts/SkBitmapProcState_opts_arm.cpp',
95 '../src/opts/SkBlitRow_opts_arm.cpp',
caryclark@google.com867cbd82012-09-20 15:45:41 +000096 ],
97 }],
digit@google.comeec9dbc2012-05-30 13:54:41 +000098 ],
djsollen@google.com58629292011-11-03 13:08:29 +000099 }],
commit-bot@chromium.orgb6872c02013-12-10 12:53:56 +0000100 [ '(skia_arch_type == "mips") or (skia_arch_type == "arm" and arm_version < 7) or (skia_os == "ios")', {
djsollen@google.com58629292011-11-03 13:08:29 +0000101 'sources': [
102 '../src/opts/SkBitmapProcState_opts_none.cpp',
commit-bot@chromium.orge997c262013-08-28 15:07:58 +0000103 '../src/opts/SkBlitMask_opts_none.cpp',
djsollen@google.com58629292011-11-03 13:08:29 +0000104 '../src/opts/SkBlitRow_opts_none.cpp',
senorblanco@chromium.org27eec462013-11-08 20:49:04 +0000105 '../src/opts/SkBlurImage_opts_none.cpp',
senorblanco@chromium.org7a47ad32013-10-30 21:57:04 +0000106 '../src/opts/SkMorphology_opts_none.cpp',
djsollen@google.com58629292011-11-03 13:08:29 +0000107 '../src/opts/SkUtils_opts_none.cpp',
commit-bot@chromium.orgdf187c72013-10-09 14:39:46 +0000108 '../src/opts/SkXfermode_opts_none.cpp',
djsollen@google.com58629292011-11-03 13:08:29 +0000109 ],
110 }],
epoger@google.comae85aea2011-05-31 13:50:51 +0000111 ],
112 },
tomhudson@google.com95ad1552012-02-14 18:28:54 +0000113 # For the same lame reasons as what is done for skia_opts, we have to
114 # create another target specifically for SSSE3 code as we would not want
115 # to compile the SSE2 code with -mssse3 which would potentially allow
116 # gcc to generate SSSE3 code.
117 {
118 'target_name': 'opts_ssse3',
borenet@google.comefb1d772012-10-10 19:45:51 +0000119 'product_name': 'skia_opts_ssse3',
tomhudson@google.com95ad1552012-02-14 18:28:54 +0000120 'type': 'static_library',
borenet@google.comefb1d772012-10-10 19:45:51 +0000121 'standalone_static_library': 1,
bungeman@google.comb8f36552013-07-22 14:39:45 +0000122 'dependencies': [
123 'core.gyp:*',
124 ],
tomhudson@google.com95ad1552012-02-14 18:28:54 +0000125 'include_dirs': [
tomhudson@google.com95ad1552012-02-14 18:28:54 +0000126 '../src/core',
127 ],
128 'conditions': [
mtklein@google.comd9d5c052013-07-31 20:09:25 +0000129 [ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "nacl", "chromeos", "android"]', {
tomhudson@google.com95ad1552012-02-14 18:28:54 +0000130 'cflags': [
131 '-mssse3',
132 ],
133 }],
commit-bot@chromium.org4460de42013-08-06 18:13:01 +0000134 # (Mac has -mssse3 globally.)
djsollen@google.come341cb32012-06-28 16:08:05 +0000135 [ 'skia_arch_type == "x86"', {
tomhudson@google.com95ad1552012-02-14 18:28:54 +0000136 'sources': [
137 '../src/opts/SkBitmapProcState_opts_SSSE3.cpp',
138 ],
139 }],
140 ],
141 },
digit@google.comeec9dbc2012-05-30 13:54:41 +0000142 # NEON code must be compiled with -mfpu=neon which also affects scalar
143 # code. To support dynamic NEON code paths, we need to build all
144 # NEON-specific sources in a separate static library. The situation
145 # is very similar to the SSSE3 one.
146 {
147 'target_name': 'opts_neon',
borenet@google.comefb1d772012-10-10 19:45:51 +0000148 'product_name': 'skia_opts_neon',
digit@google.comeec9dbc2012-05-30 13:54:41 +0000149 'type': 'static_library',
borenet@google.comefb1d772012-10-10 19:45:51 +0000150 'standalone_static_library': 1,
bungeman@google.comb8f36552013-07-22 14:39:45 +0000151 'dependencies': [
152 'core.gyp:*',
153 ],
digit@google.comeec9dbc2012-05-30 13:54:41 +0000154 'include_dirs': [
digit@google.comeec9dbc2012-05-30 13:54:41 +0000155 '../src/core',
digit@google.comfce02ac2012-08-01 14:25:07 +0000156 '../src/opts',
digit@google.comeec9dbc2012-05-30 13:54:41 +0000157 ],
158 'cflags!': [
159 '-fno-omit-frame-pointer',
160 '-mfpu=vfp', # remove them all, just in case.
161 '-mfpu=vfpv3',
162 '-mfpu=vfpv3-d16',
163 ],
164 'cflags': [
digit@google.comeec9dbc2012-05-30 13:54:41 +0000165 '-mfpu=neon',
digit@google.comfce02ac2012-08-01 14:25:07 +0000166 '-fomit-frame-pointer',
digit@google.comeec9dbc2012-05-30 13:54:41 +0000167 ],
djsollen@google.com4dcc6242013-01-23 18:56:38 +0000168 'ldflags': [
169 '-march=armv7-a',
170 '-Wl,--fix-cortex-a8',
171 ],
digit@google.comeec9dbc2012-05-30 13:54:41 +0000172 'sources': [
173 '../src/opts/memset16_neon.S',
174 '../src/opts/memset32_neon.S',
digit@google.com3ada0ef2012-08-13 14:06:34 +0000175 '../src/opts/SkBitmapProcState_arm_neon.cpp',
digit@google.comfce02ac2012-08-01 14:25:07 +0000176 '../src/opts/SkBitmapProcState_matrixProcs_neon.cpp',
177 '../src/opts/SkBitmapProcState_matrix_clamp_neon.h',
178 '../src/opts/SkBitmapProcState_matrix_repeat_neon.h',
rmistry@google.comd6bab022013-12-02 13:50:38 +0000179 '../src/opts/SkBlitMask_opts_arm_neon.cpp',
digit@google.coma8dd1ce2012-08-08 22:06:29 +0000180 '../src/opts/SkBlitRow_opts_arm_neon.cpp',
senorblanco@chromium.org1d62f422013-12-04 18:19:45 +0000181 '../src/opts/SkBlurImage_opts_neon.cpp',
senorblanco@chromium.orgf376f5d2013-11-11 16:48:51 +0000182 '../src/opts/SkMorphology_opts_neon.cpp',
commit-bot@chromium.orgcd7992b2013-10-17 16:29:34 +0000183 '../src/opts/SkXfermode_opts_arm_neon.cpp',
digit@google.comeec9dbc2012-05-30 13:54:41 +0000184 ],
185 },
epoger@google.comae85aea2011-05-31 13:50:51 +0000186 ],
187}