1 { 2 'includes': [ 3 'common.gypi', 4 ], 5 'targets': [ 6 # Due to an unfortunate intersection of lameness between gcc and gyp, 7 # we have to build the *_SSE2.cpp files in a separate target. The 8 # gcc lameness is that, in order to compile SSE2 intrinsics code, it 9 # must be passed the -msse2 flag. However, with this flag, it may 10 # emit SSE2 instructions even for scalar code, such as the CPUID 11 # test used to test for the presence of SSE2. So that, and all other 12 # code must be compiled *without* -msse2. The gyp lameness is that it 13 # does not allow file-specific CFLAGS, so we must create this extra 14 # target for those files to be compiled with -msse2. 15 # 16 # This is actually only a problem on 32-bit Linux (all Intel Macs have 17 # SSE2, Linux x86_64 has SSE2 by definition, and MSC will happily emit 18 # SSE2 from instrinsics, while generating plain ol' 386 for everything 19 # else). However, to keep the .gyp file simple and avoid platform-specific 20 # build breakage, we do this on all platforms. 21 22 # For about the same reason, we need to compile the ARM opts files 23 # separately as well. 24 { 25 'target_name': 'opts', 26 'type': 'static_library', 27 'include_dirs': [ 28 '../include/config', 29 '../include/core', 30 '../src/core', 31 '../src/opts', 32 ], 33 'conditions': [ 34 [ 'skia_target_arch != "arm"', { 35 'conditions': [ 36 [ 'skia_os in ["linux", "freebsd", "openbsd", "solaris"]', { 37 'cflags': [ 38 '-msse2', 39 ], 40 }], 41 ], 42 'sources': [ 43 '../src/opts/opts_check_SSE2.cpp', 44 '../src/opts/SkBitmapProcState_opts_SSE2.cpp', 45 '../src/opts/SkBlitRow_opts_SSE2.cpp', 46 '../src/opts/SkUtils_opts_SSE2.cpp', 47 ], 48 'dependencies': [ 49 'opts_ssse3', 50 ], 51 }], 52 [ 'skia_target_arch == "arm" and armv7 == 1', { 53 # The assembly uses the frame pointer register (r7 in Thumb/r11 in 54 # ARM), the compiler doesn't like that. 55 'cflags!': [ 56 '-fno-omit-frame-pointer', 57 ], 58 'cflags': [ 59 '-fomit-frame-pointer', 60 ], 61 'sources': [ 62 '../src/opts/opts_check_arm.cpp', 63 '../src/opts/memset.arm.S', 64 '../src/opts/memset16_neon.S', 65 '../src/opts/memset32_neon.S', 66 '../src/opts/SkBitmapProcState_opts_arm.cpp', 67 '../src/opts/SkBlitRow_opts_arm.cpp', 68 ], 69 }], 70 [ 'skia_target_arch == "arm" and armv7 != 1', { 71 'sources': [ 72 '../src/opts/SkBitmapProcState_opts_none.cpp', 73 '../src/opts/SkBlitRow_opts_none.cpp', 74 '../src/opts/SkUtils_opts_none.cpp', 75 ], 76 }], 77 ], 78 }, 79 # For the same lame reasons as what is done for skia_opts, we have to 80 # create another target specifically for SSSE3 code as we would not want 81 # to compile the SSE2 code with -mssse3 which would potentially allow 82 # gcc to generate SSSE3 code. 83 { 84 'target_name': 'opts_ssse3', 85 'type': 'static_library', 86 'include_dirs': [ 87 '../include/config', 88 '../include/core', 89 '../src/core', 90 ], 91 'conditions': [ 92 [ 'skia_os in ["linux", "freebsd", "openbsd", "solaris"]', { 93 'cflags': [ 94 '-mssse3', 95 ], 96 }], 97 # TODO(epoger): the following will enable SSSE3 on Macs, but it will 98 # break once we set OTHER_CFLAGS anywhere else (the first setting will 99 # be replaced, not added to) 100 [ 'skia_os in ["mac"]', { 101 'xcode_settings': { 102 'OTHER_CFLAGS': ['-mssse3',], 103 }, 104 }], 105 [ 'skia_target_arch != "arm"', { 106 'sources': [ 107 '../src/opts/SkBitmapProcState_opts_SSSE3.cpp', 108 ], 109 }], 110 ], 111 }, 112 ], 113 } 114 115 # Local Variables: 116 # tab-width:2 117 # indent-tabs-mode:nil 118 # End: 119 # vim: set expandtab tabstop=2 shiftwidth=2: 120