| epoger@google.com | ae85aea | 2011-05-31 13:50:51 +0000 | [diff] [blame] | 1 | { | 
| epoger@google.com | ae85aea | 2011-05-31 13:50:51 +0000 | [diff] [blame] | 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', | 
| borenet@google.com | efb1d77 | 2012-10-10 19:45:51 +0000 | [diff] [blame] | 23 |       'product_name': 'skia_opts', | 
| epoger@google.com | ae85aea | 2011-05-31 13:50:51 +0000 | [diff] [blame] | 24 |       'type': 'static_library', | 
| borenet@google.com | efb1d77 | 2012-10-10 19:45:51 +0000 | [diff] [blame] | 25 |       'standalone_static_library': 1, | 
| epoger@google.com | ae85aea | 2011-05-31 13:50:51 +0000 | [diff] [blame] | 26 |       'include_dirs': [ | 
 | 27 |         '../include/config', | 
 | 28 |         '../include/core', | 
 | 29 |         '../src/core', | 
| djsollen@google.com | a44e6c6 | 2012-01-09 14:38:25 +0000 | [diff] [blame] | 30 |         '../src/opts', | 
| epoger@google.com | ae85aea | 2011-05-31 13:50:51 +0000 | [diff] [blame] | 31 |       ], | 
 | 32 |       'conditions': [ | 
| caryclark@google.com | 867cbd8 | 2012-09-20 15:45:41 +0000 | [diff] [blame] | 33 |         [ 'skia_arch_type == "x86" and skia_os != "ios"', { | 
| tomhudson@google.com | 95ad155 | 2012-02-14 18:28:54 +0000 | [diff] [blame] | 34 |           'conditions': [ | 
| borenet@google.com | 05d550e | 2013-06-11 15:52:19 +0000 | [diff] [blame] | 35 |             [ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "nacl", "chromeos"]', { | 
| tomhudson@google.com | 95ad155 | 2012-02-14 18:28:54 +0000 | [diff] [blame] | 36 |               'cflags': [ | 
 | 37 |                 '-msse2', | 
 | 38 |               ], | 
 | 39 |             }], | 
| djsollen@google.com | 98d97fc | 2013-01-18 15:21:54 +0000 | [diff] [blame] | 40 |             [ 'skia_os != "android"', { | 
 | 41 |               'dependencies': [ | 
 | 42 |                 'opts_ssse3', | 
 | 43 |               ], | 
 | 44 |             }], | 
| tomhudson@google.com | 95ad155 | 2012-02-14 18:28:54 +0000 | [diff] [blame] | 45 |           ], | 
| djsollen@google.com | 5862929 | 2011-11-03 13:08:29 +0000 | [diff] [blame] | 46 |           'sources': [ | 
| djsollen@google.com | a44e6c6 | 2012-01-09 14:38:25 +0000 | [diff] [blame] | 47 |             '../src/opts/opts_check_SSE2.cpp', | 
| djsollen@google.com | 5862929 | 2011-11-03 13:08:29 +0000 | [diff] [blame] | 48 |             '../src/opts/SkBitmapProcState_opts_SSE2.cpp', | 
 | 49 |             '../src/opts/SkBlitRow_opts_SSE2.cpp', | 
| tomhudson@google.com | 8dd90a9 | 2012-03-19 13:49:50 +0000 | [diff] [blame] | 50 |             '../src/opts/SkBlitRect_opts_SSE2.cpp', | 
| djsollen@google.com | 5862929 | 2011-11-03 13:08:29 +0000 | [diff] [blame] | 51 |             '../src/opts/SkUtils_opts_SSE2.cpp', | 
 | 52 |           ], | 
 | 53 |         }], | 
| djsollen@google.com | e341cb3 | 2012-06-28 16:08:05 +0000 | [diff] [blame] | 54 |         [ 'skia_arch_type == "arm" and armv7 == 1', { | 
| djsollen@google.com | 5862929 | 2011-11-03 13:08:29 +0000 | [diff] [blame] | 55 |           # The assembly uses the frame pointer register (r7 in Thumb/r11 in | 
 | 56 |           # ARM), the compiler doesn't like that. | 
 | 57 |           'cflags!': [ | 
 | 58 |             '-fno-omit-frame-pointer', | 
| djsollen@google.com | 5afbbc4 | 2012-11-29 15:09:58 +0000 | [diff] [blame] | 59 |             '-mapcs-frame', | 
 | 60 |             '-mapcs', | 
| djsollen@google.com | 5862929 | 2011-11-03 13:08:29 +0000 | [diff] [blame] | 61 |           ], | 
 | 62 |           'cflags': [ | 
 | 63 |             '-fomit-frame-pointer', | 
| djsollen@google.com | 5afbbc4 | 2012-11-29 15:09:58 +0000 | [diff] [blame] | 64 |             '-mno-apcs-frame', | 
| djsollen@google.com | 5862929 | 2011-11-03 13:08:29 +0000 | [diff] [blame] | 65 |           ], | 
| digit@google.com | eec9dbc | 2012-05-30 13:54:41 +0000 | [diff] [blame] | 66 |           'variables': { | 
 | 67 |             'arm_neon_optional%': '<(arm_neon_optional>', | 
 | 68 |           }, | 
| djsollen@google.com | 5862929 | 2011-11-03 13:08:29 +0000 | [diff] [blame] | 69 |           'sources': [ | 
| djsollen@google.com | a44e6c6 | 2012-01-09 14:38:25 +0000 | [diff] [blame] | 70 |             '../src/opts/opts_check_arm.cpp', | 
 | 71 |             '../src/opts/memset.arm.S', | 
| djsollen@google.com | 5862929 | 2011-11-03 13:08:29 +0000 | [diff] [blame] | 72 |             '../src/opts/SkBitmapProcState_opts_arm.cpp', | 
 | 73 |             '../src/opts/SkBlitRow_opts_arm.cpp', | 
| digit@google.com | a8dd1ce | 2012-08-08 22:06:29 +0000 | [diff] [blame] | 74 |             '../src/opts/SkBlitRow_opts_arm.h', | 
| djsollen@google.com | 5862929 | 2011-11-03 13:08:29 +0000 | [diff] [blame] | 75 |           ], | 
| digit@google.com | eec9dbc | 2012-05-30 13:54:41 +0000 | [diff] [blame] | 76 |           'conditions': [ | 
 | 77 |             [ 'arm_neon == 1 or arm_neon_optional == 1', { | 
 | 78 |               'dependencies': [ | 
 | 79 |                 'opts_neon', | 
 | 80 |               ] | 
| caryclark@google.com | 867cbd8 | 2012-09-20 15:45:41 +0000 | [diff] [blame] | 81 |             }], | 
 | 82 |             [ 'skia_os == "ios"', { | 
 | 83 |               'sources!': [ | 
| caryclark@google.com | 594dd3c | 2012-09-24 19:33:57 +0000 | [diff] [blame] | 84 |                 # these fail to compile under xcode for ios | 
| caryclark@google.com | 867cbd8 | 2012-09-20 15:45:41 +0000 | [diff] [blame] | 85 |                 '../src/opts/memset.arm.S', | 
| caryclark@google.com | 594dd3c | 2012-09-24 19:33:57 +0000 | [diff] [blame] | 86 |                 '../src/opts/SkBitmapProcState_opts_arm.cpp', | 
 | 87 |                 '../src/opts/SkBlitRow_opts_arm.cpp', | 
| caryclark@google.com | 867cbd8 | 2012-09-20 15:45:41 +0000 | [diff] [blame] | 88 |               ], | 
 | 89 |             }], | 
| digit@google.com | eec9dbc | 2012-05-30 13:54:41 +0000 | [diff] [blame] | 90 |           ], | 
| djsollen@google.com | 5862929 | 2011-11-03 13:08:29 +0000 | [diff] [blame] | 91 |         }], | 
| caryclark@google.com | 594dd3c | 2012-09-24 19:33:57 +0000 | [diff] [blame] | 92 |         [ '(skia_arch_type == "arm" and armv7 == 0) or (skia_os == "ios")', { | 
| djsollen@google.com | 5862929 | 2011-11-03 13:08:29 +0000 | [diff] [blame] | 93 |           'sources': [ | 
 | 94 |             '../src/opts/SkBitmapProcState_opts_none.cpp', | 
 | 95 |             '../src/opts/SkBlitRow_opts_none.cpp', | 
 | 96 |             '../src/opts/SkUtils_opts_none.cpp', | 
 | 97 |           ], | 
 | 98 |         }], | 
| epoger@google.com | ae85aea | 2011-05-31 13:50:51 +0000 | [diff] [blame] | 99 |       ], | 
 | 100 |     }, | 
| tomhudson@google.com | 95ad155 | 2012-02-14 18:28:54 +0000 | [diff] [blame] | 101 |     # For the same lame reasons as what is done for skia_opts, we have to | 
 | 102 |     # create another target specifically for SSSE3 code as we would not want | 
 | 103 |     # to compile the SSE2 code with -mssse3 which would potentially allow | 
 | 104 |     # gcc to generate SSSE3 code. | 
 | 105 |     { | 
 | 106 |       'target_name': 'opts_ssse3', | 
| borenet@google.com | efb1d77 | 2012-10-10 19:45:51 +0000 | [diff] [blame] | 107 |       'product_name': 'skia_opts_ssse3', | 
| tomhudson@google.com | 95ad155 | 2012-02-14 18:28:54 +0000 | [diff] [blame] | 108 |       'type': 'static_library', | 
| borenet@google.com | efb1d77 | 2012-10-10 19:45:51 +0000 | [diff] [blame] | 109 |       'standalone_static_library': 1, | 
| tomhudson@google.com | 95ad155 | 2012-02-14 18:28:54 +0000 | [diff] [blame] | 110 |       'include_dirs': [ | 
 | 111 |         '../include/config', | 
 | 112 |         '../include/core', | 
 | 113 |         '../src/core', | 
 | 114 |       ], | 
 | 115 |       'conditions': [ | 
| borenet@google.com | 05d550e | 2013-06-11 15:52:19 +0000 | [diff] [blame] | 116 |         [ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "nacl", "chromeos"]', { | 
| tomhudson@google.com | 95ad155 | 2012-02-14 18:28:54 +0000 | [diff] [blame] | 117 |           'cflags': [ | 
 | 118 |             '-mssse3', | 
 | 119 |           ], | 
 | 120 |         }], | 
| epoger@google.com | 2109923 | 2012-02-14 19:49:19 +0000 | [diff] [blame] | 121 |         # TODO(epoger): the following will enable SSSE3 on Macs, but it will | 
 | 122 |         # break once we set OTHER_CFLAGS anywhere else (the first setting will | 
 | 123 |         # be replaced, not added to) | 
 | 124 |         [ 'skia_os in ["mac"]', { | 
 | 125 |           'xcode_settings': { | 
 | 126 |             'OTHER_CFLAGS': ['-mssse3',], | 
 | 127 |           }, | 
 | 128 |         }], | 
| djsollen@google.com | e341cb3 | 2012-06-28 16:08:05 +0000 | [diff] [blame] | 129 |         [ 'skia_arch_type == "x86"', { | 
| tomhudson@google.com | 95ad155 | 2012-02-14 18:28:54 +0000 | [diff] [blame] | 130 |           'sources': [ | 
 | 131 |             '../src/opts/SkBitmapProcState_opts_SSSE3.cpp', | 
 | 132 |           ], | 
 | 133 |         }], | 
 | 134 |       ], | 
 | 135 |     }, | 
| digit@google.com | eec9dbc | 2012-05-30 13:54:41 +0000 | [diff] [blame] | 136 |     # NEON code must be compiled with -mfpu=neon which also affects scalar | 
 | 137 |     # code. To support dynamic NEON code paths, we need to build all | 
 | 138 |     # NEON-specific sources in a separate static library. The situation | 
 | 139 |     # is very similar to the SSSE3 one. | 
 | 140 |     { | 
 | 141 |       'target_name': 'opts_neon', | 
| borenet@google.com | efb1d77 | 2012-10-10 19:45:51 +0000 | [diff] [blame] | 142 |       'product_name': 'skia_opts_neon', | 
| digit@google.com | eec9dbc | 2012-05-30 13:54:41 +0000 | [diff] [blame] | 143 |       'type': 'static_library', | 
| borenet@google.com | efb1d77 | 2012-10-10 19:45:51 +0000 | [diff] [blame] | 144 |       'standalone_static_library': 1, | 
| digit@google.com | eec9dbc | 2012-05-30 13:54:41 +0000 | [diff] [blame] | 145 |       'include_dirs': [ | 
 | 146 |         '../include/config', | 
 | 147 |         '../include/core', | 
 | 148 |         '../src/core', | 
| digit@google.com | fce02ac | 2012-08-01 14:25:07 +0000 | [diff] [blame] | 149 |         '../src/opts', | 
| digit@google.com | eec9dbc | 2012-05-30 13:54:41 +0000 | [diff] [blame] | 150 |       ], | 
 | 151 |       'cflags!': [ | 
 | 152 |         '-fno-omit-frame-pointer', | 
 | 153 |         '-mfpu=vfp',  # remove them all, just in case. | 
 | 154 |         '-mfpu=vfpv3', | 
 | 155 |         '-mfpu=vfpv3-d16', | 
 | 156 |       ], | 
 | 157 |       'cflags': [ | 
| digit@google.com | eec9dbc | 2012-05-30 13:54:41 +0000 | [diff] [blame] | 158 |         '-mfpu=neon', | 
| digit@google.com | fce02ac | 2012-08-01 14:25:07 +0000 | [diff] [blame] | 159 |         '-fomit-frame-pointer', | 
| digit@google.com | eec9dbc | 2012-05-30 13:54:41 +0000 | [diff] [blame] | 160 |       ], | 
| djsollen@google.com | 4dcc624 | 2013-01-23 18:56:38 +0000 | [diff] [blame] | 161 |       'ldflags': [ | 
 | 162 |         '-march=armv7-a', | 
 | 163 |         '-Wl,--fix-cortex-a8', | 
 | 164 |       ], | 
| digit@google.com | eec9dbc | 2012-05-30 13:54:41 +0000 | [diff] [blame] | 165 |       'sources': [ | 
 | 166 |         '../src/opts/memset16_neon.S', | 
 | 167 |         '../src/opts/memset32_neon.S', | 
| digit@google.com | 3ada0ef | 2012-08-13 14:06:34 +0000 | [diff] [blame] | 168 |         '../src/opts/SkBitmapProcState_arm_neon.cpp', | 
| digit@google.com | fce02ac | 2012-08-01 14:25:07 +0000 | [diff] [blame] | 169 |         '../src/opts/SkBitmapProcState_matrixProcs_neon.cpp', | 
 | 170 |         '../src/opts/SkBitmapProcState_matrix_clamp_neon.h', | 
 | 171 |         '../src/opts/SkBitmapProcState_matrix_repeat_neon.h', | 
| digit@google.com | a8dd1ce | 2012-08-08 22:06:29 +0000 | [diff] [blame] | 172 |         '../src/opts/SkBlitRow_opts_arm_neon.cpp', | 
| digit@google.com | eec9dbc | 2012-05-30 13:54:41 +0000 | [diff] [blame] | 173 |       ], | 
 | 174 |     }, | 
| epoger@google.com | ae85aea | 2011-05-31 13:50:51 +0000 | [diff] [blame] | 175 |   ], | 
 | 176 | } | 
 | 177 |  | 
 | 178 | # Local Variables: | 
 | 179 | # tab-width:2 | 
 | 180 | # indent-tabs-mode:nil | 
 | 181 | # End: | 
 | 182 | # vim: set expandtab tabstop=2 shiftwidth=2: |