| OLD | NEW |
| (Empty) |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 # This gyp file contains the platform-specific optimizations for Skia | |
| 6 { | |
| 7 'variables': { | |
| 8 'skia_src_path': '../third_party/skia/src', | |
| 9 'includes': [ '../third_party/skia/gyp/opts.gypi' ], | |
| 10 'include_dirs': [ | |
| 11 '../third_party/skia/include/core', | |
| 12 '../third_party/skia/include/effects', | |
| 13 '../third_party/skia/include/utils', | |
| 14 '../third_party/skia/src/core', | |
| 15 '../third_party/skia/src/opts', | |
| 16 '../third_party/skia/src/utils', | |
| 17 ], | |
| 18 }, | |
| 19 | |
| 20 'targets': [ | |
| 21 # Due to an unfortunate intersection of lameness between gcc and gyp, | |
| 22 # we have to build the *_SSE2.cpp files in a separate target. The | |
| 23 # gcc lameness is that, in order to compile SSE2 intrinsics code, it | |
| 24 # must be passed the -msse2 flag. However, with this flag, it may | |
| 25 # emit SSE2 instructions even for scalar code, such as the CPUID | |
| 26 # test used to test for the presence of SSE2. So that, and all other | |
| 27 # code must be compiled *without* -msse2. The gyp lameness is that it | |
| 28 # does not allow file-specific CFLAGS, so we must create this extra | |
| 29 # target for those files to be compiled with -msse2. | |
| 30 # | |
| 31 # This is actually only a problem on 32-bit Linux (all Intel Macs have | |
| 32 # SSE2, Linux x86_64 has SSE2 by definition, and MSC will happily emit | |
| 33 # SSE2 from instrinsics, which generating plain ol' 386 for everything | |
| 34 # else). However, to keep the .gyp file simple and avoid platform-specific | |
| 35 # build breakage, we do this on all platforms. | |
| 36 | |
| 37 # For about the same reason, we need to compile the ARM opts files | |
| 38 # separately as well. | |
| 39 { | |
| 40 'target_name': 'skia_opts', | |
| 41 'type': 'static_library', | |
| 42 'includes': [ | |
| 43 'skia_common.gypi', | |
| 44 '../build/android/increase_size_for_speed.gypi', | |
| 45 # Disable LTO due to compiler error | |
| 46 # in mems_in_disjoint_alias_sets_p, at alias.c:393 | |
| 47 # crbug.com/422255 | |
| 48 '../build/android/disable_lto.gypi', | |
| 49 ], | |
| 50 'include_dirs': [ '<@(include_dirs)' ], | |
| 51 'conditions': [ | |
| 52 [ 'os_posix == 1 and OS != "mac" and OS != "android" and \ | |
| 53 target_arch != "arm" and target_arch != "arm64" and \ | |
| 54 target_arch != "mipsel" and target_arch != "mips64el"', { | |
| 55 'cflags': [ '-msse2' ], | |
| 56 }], | |
| 57 [ 'target_arch != "arm" and target_arch != "mipsel" and \ | |
| 58 target_arch != "arm64" and target_arch != "mips64el"', { | |
| 59 'sources': [ '<@(sse2_sources)' ], | |
| 60 'dependencies': [ | |
| 61 'skia_opts_ssse3', | |
| 62 'skia_opts_sse41', | |
| 63 ], | |
| 64 }], | |
| 65 [ 'target_arch == "arm"', { | |
| 66 'conditions': [ | |
| 67 [ 'arm_version >= 7', { | |
| 68 'sources': [ '<@(armv7_sources)' ], | |
| 69 }, { # arm_version < 7 | |
| 70 'sources': [ '<@(none_sources)' ], | |
| 71 }], | |
| 72 [ 'arm_version >= 7 and (arm_neon == 1 or arm_neon_optional == 1)',
{ | |
| 73 'dependencies': [ | |
| 74 'skia_opts_neon', | |
| 75 ] | |
| 76 }], | |
| 77 ], | |
| 78 # The assembly uses the frame pointer register (r7 in Thumb/r11 in | |
| 79 # ARM), the compiler doesn't like that. Explicitly remove the | |
| 80 # -fno-omit-frame-pointer flag for Android, as that gets added to all | |
| 81 # targets via common.gypi. | |
| 82 'cflags!': [ | |
| 83 '-fno-omit-frame-pointer', | |
| 84 '-marm', | |
| 85 '-mapcs-frame', | |
| 86 ], | |
| 87 'cflags': [ | |
| 88 '-fomit-frame-pointer', | |
| 89 ], | |
| 90 }], | |
| 91 [ 'target_arch == "mipsel"',{ | |
| 92 'cflags': [ '-fomit-frame-pointer' ], | |
| 93 'conditions': [ | |
| 94 [ 'mips_dsp_rev >= 1', { | |
| 95 'sources': [ '<@(mips_dsp_sources)' ], | |
| 96 }, { # mips_dsp_rev == 0 | |
| 97 'sources': [ '<@(none_sources)' ], | |
| 98 }], | |
| 99 ], | |
| 100 }], | |
| 101 [ 'target_arch == "mips64el"',{ | |
| 102 'cflags': [ '-fomit-frame-pointer' ], | |
| 103 'sources': [ '<@(none_sources)' ], | |
| 104 }], | |
| 105 [ 'target_arch == "arm64"', { | |
| 106 'sources': [ '<@(arm64_sources)' ], | |
| 107 }], | |
| 108 ], | |
| 109 }, | |
| 110 # For the same lame reasons as what is done for skia_opts, we have to | |
| 111 # create another target specifically for SSSE3 code as we would not want | |
| 112 # to compile the SSE2 code with -mssse3 which would potentially allow | |
| 113 # gcc to generate SSSE3 code. | |
| 114 { | |
| 115 'target_name': 'skia_opts_ssse3', | |
| 116 'type': 'static_library', | |
| 117 'includes': [ | |
| 118 'skia_common.gypi', | |
| 119 '../build/android/increase_size_for_speed.gypi', | |
| 120 ], | |
| 121 'include_dirs': [ '<@(include_dirs)' ], | |
| 122 'conditions': [ | |
| 123 [ 'OS in ["linux", "freebsd", "openbsd", "solaris", "android"]', { | |
| 124 'cflags': [ '-mssse3' ], | |
| 125 }], | |
| 126 [ 'OS == "mac"', { | |
| 127 'xcode_settings': { | |
| 128 'GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS': 'YES', | |
| 129 }, | |
| 130 }], | |
| 131 [ 'OS == "win" and clang == 1', { | |
| 132 # cl.exe's /arch flag doesn't have a setting for SSSE3, and cl.exe | |
| 133 # doesn't need it for intrinsics. clang-cl does need it, though. | |
| 134 'msvs_settings': { | |
| 135 'VCCLCompilerTool': { 'AdditionalOptions': [ '-mssse3' ] }, | |
| 136 }, | |
| 137 }], | |
| 138 [ 'OS == "win"', { | |
| 139 'defines' : [ 'SK_CPU_SSE_LEVEL=31' ], | |
| 140 }], | |
| 141 [ 'target_arch != "arm" and target_arch != "arm64" and \ | |
| 142 target_arch != "mipsel" and target_arch != "mips64el"', { | |
| 143 'sources': [ '<@(ssse3_sources)' ], | |
| 144 }], | |
| 145 ], | |
| 146 }, | |
| 147 # For the same lame reasons as what is done for skia_opts, we also have to | |
| 148 # create another target specifically for SSE4.1 code as we would not want | |
| 149 # to compile the SSE2 code with -msse4.1 which would potentially allow | |
| 150 # gcc to generate SSE4.1 code. | |
| 151 { | |
| 152 'target_name': 'skia_opts_sse41', | |
| 153 'type': 'static_library', | |
| 154 'includes': [ | |
| 155 'skia_common.gypi', | |
| 156 '../build/android/increase_size_for_speed.gypi', | |
| 157 ], | |
| 158 'include_dirs': [ '<@(include_dirs)' ], | |
| 159 'sources': [ '<@(sse41_sources)' ], | |
| 160 'conditions': [ | |
| 161 [ 'OS in ["linux", "freebsd", "openbsd", "solaris", "android"]', { | |
| 162 'cflags': [ '-msse4.1' ], | |
| 163 }], | |
| 164 [ 'OS == "mac"', { | |
| 165 'xcode_settings': { | |
| 166 'GCC_ENABLE_SSE41_EXTENSIONS': 'YES', | |
| 167 }, | |
| 168 }], | |
| 169 [ 'OS == "win" and clang == 1', { | |
| 170 # cl.exe's /arch flag doesn't have a setting for SSE4.1, and cl.exe | |
| 171 # doesn't need it for intrinsics. clang-cl does need it, though. | |
| 172 'msvs_settings': { | |
| 173 'VCCLCompilerTool': { 'AdditionalOptions': [ '-msse4.1' ] }, | |
| 174 }, | |
| 175 }], | |
| 176 [ 'OS == "win"', { | |
| 177 'defines' : [ 'SK_CPU_SSE_LEVEL=41' ], | |
| 178 }], | |
| 179 ], | |
| 180 }, | |
| 181 { | |
| 182 'target_name': 'skia_opts_none', | |
| 183 'type': 'static_library', | |
| 184 'includes': [ | |
| 185 'skia_common.gypi', | |
| 186 '../build/android/increase_size_for_speed.gypi', | |
| 187 ], | |
| 188 'include_dirs': [ '<@(include_dirs)' ], | |
| 189 'sources': [ '<@(none_sources)' ], | |
| 190 }, | |
| 191 ], | |
| 192 'conditions': [ | |
| 193 # NEON code must be compiled with -mfpu=neon which also affects scalar | |
| 194 # code. To support dynamic NEON code paths, we need to build all | |
| 195 # NEON-specific sources in a separate static library. The situation | |
| 196 # is very similar to the SSSE3 one. | |
| 197 ['target_arch == "arm" and (arm_neon == 1 or arm_neon_optional == 1)', { | |
| 198 'targets': [ | |
| 199 { | |
| 200 'target_name': 'skia_opts_neon', | |
| 201 'type': 'static_library', | |
| 202 'includes': [ | |
| 203 'skia_common.gypi', | |
| 204 '../build/android/increase_size_for_speed.gypi', | |
| 205 # Disable LTO due to Neon issues | |
| 206 # crbug.com/408997 | |
| 207 '../build/android/disable_lto.gypi', | |
| 208 ], | |
| 209 'include_dirs': [ '<@(include_dirs)' ], | |
| 210 'cflags!': [ | |
| 211 '-fno-omit-frame-pointer', | |
| 212 '-mfpu=vfp', # remove them all, just in case. | |
| 213 '-mfpu=vfpv3', | |
| 214 '-mfpu=vfpv3-d16', | |
| 215 ], | |
| 216 'cflags': [ | |
| 217 '-mfpu=neon', | |
| 218 '-fomit-frame-pointer', | |
| 219 ], | |
| 220 'ldflags': [ | |
| 221 '-march=armv7-a', | |
| 222 '-Wl,--fix-cortex-a8', | |
| 223 ], | |
| 224 'sources': [ '<@(neon_sources)' ], | |
| 225 }, | |
| 226 ], | |
| 227 }], | |
| 228 ], | |
| 229 } | |
| OLD | NEW |