Home | History | Annotate | Download | only in gyp
      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