Home | History | Annotate | Download | only in gyp
      1 {
      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',
     23       'product_name': 'skia_opts',
     24       'type': 'static_library',
     25       'standalone_static_library': 1,
     26       'dependencies': [
     27         'core.gyp:*',
     28       ],
     29       'include_dirs': [
     30         '../src/core',
     31         '../src/opts',
     32       ],
     33       'conditions': [
     34         [ 'skia_arch_type == "x86" and skia_os != "ios"', {
     35           'conditions': [
     36             [ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "nacl", "chromeos", "android"]', {
     37               'cflags': [
     38                 '-msse2',
     39               ],
     40             }],
     41           ],
     42           'include_dirs': [
     43             '../include/utils',
     44           ],
     45           'dependencies': [
     46             'opts_ssse3',
     47           ],
     48           'sources': [
     49             '../src/opts/opts_check_SSE2.cpp',
     50             '../src/opts/SkBitmapProcState_opts_SSE2.cpp',
     51             '../src/opts/SkBitmapFilter_opts_SSE2.cpp',
     52             '../src/opts/SkBlitRow_opts_SSE2.cpp',
     53             '../src/opts/SkBlitRect_opts_SSE2.cpp',
     54             '../src/opts/SkBlurImage_opts_SSE2.cpp',
     55             '../src/opts/SkMorphology_opts_SSE2.cpp',
     56             '../src/opts/SkUtils_opts_SSE2.cpp',
     57             '../src/opts/SkXfermode_opts_none.cpp',
     58           ],
     59         }],
     60         [ 'skia_arch_type == "arm" and arm_version >= 7', {
     61           # 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',
     65             '-mapcs-frame',
     66             '-mapcs',
     67           ],
     68           'cflags': [
     69             '-fomit-frame-pointer',
     70             '-mno-apcs-frame',
     71           ],
     72           'variables': {
     73             'arm_neon_optional%': '<(arm_neon_optional>',
     74           },
     75           'sources': [
     76             '../src/opts/opts_check_arm.cpp',
     77             '../src/opts/memset.arm.S',
     78             '../src/opts/SkBitmapProcState_opts_arm.cpp',
     79             '../src/opts/SkBlitMask_opts_arm.cpp',
     80             '../src/opts/SkBlitRow_opts_arm.cpp',
     81             '../src/opts/SkBlitRow_opts_arm.h',
     82             '../src/opts/SkXfermode_opts_arm.cpp',
     83           ],
     84           'conditions': [
     85             [ 'arm_neon == 1 or arm_neon_optional == 1', {
     86               'dependencies': [
     87                 'opts_neon',
     88               ]
     89             }],
     90             [ 'skia_os == "ios"', {
     91               'sources!': [
     92                 # these fail to compile under xcode for ios
     93                 '../src/opts/memset.arm.S',
     94                 '../src/opts/SkBitmapProcState_opts_arm.cpp',
     95                 '../src/opts/SkBlitRow_opts_arm.cpp',
     96               ],
     97             }],
     98           ],
     99         }],
    100         [ '(skia_arch_type == "mips") or (skia_arch_type == "arm" and arm_version < 7) or (skia_os == "ios")', {
    101           'sources': [
    102             '../src/opts/SkBitmapProcState_opts_none.cpp',
    103             '../src/opts/SkBlitMask_opts_none.cpp',
    104             '../src/opts/SkBlitRow_opts_none.cpp',
    105             '../src/opts/SkBlurImage_opts_none.cpp',
    106             '../src/opts/SkMorphology_opts_none.cpp',
    107             '../src/opts/SkUtils_opts_none.cpp',
    108             '../src/opts/SkXfermode_opts_none.cpp',
    109           ],
    110         }],
    111       ],
    112     },
    113     # 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',
    119       'product_name': 'skia_opts_ssse3',
    120       'type': 'static_library',
    121       'standalone_static_library': 1,
    122       'dependencies': [
    123         'core.gyp:*',
    124       ],
    125       'include_dirs': [
    126         '../src/core',
    127       ],
    128       'conditions': [
    129         [ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "nacl", "chromeos", "android"]', {
    130           'cflags': [
    131             '-mssse3',
    132           ],
    133         }],
    134         # (Mac has -mssse3 globally.)
    135         [ 'skia_arch_type == "x86"', {
    136           'sources': [
    137             '../src/opts/SkBitmapProcState_opts_SSSE3.cpp',
    138           ],
    139         }],
    140       ],
    141     },
    142     # 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',
    148       'product_name': 'skia_opts_neon',
    149       'type': 'static_library',
    150       'standalone_static_library': 1,
    151       'dependencies': [
    152         'core.gyp:*',
    153       ],
    154       'include_dirs': [
    155         '../src/core',
    156         '../src/opts',
    157       ],
    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': [
    165         '-mfpu=neon',
    166         '-fomit-frame-pointer',
    167       ],
    168       'ldflags': [
    169         '-march=armv7-a',
    170         '-Wl,--fix-cortex-a8',
    171       ],
    172       'sources': [
    173         '../src/opts/memset16_neon.S',
    174         '../src/opts/memset32_neon.S',
    175         '../src/opts/SkBitmapProcState_arm_neon.cpp',
    176         '../src/opts/SkBitmapProcState_matrixProcs_neon.cpp',
    177         '../src/opts/SkBitmapProcState_matrix_clamp_neon.h',
    178         '../src/opts/SkBitmapProcState_matrix_repeat_neon.h',
    179         '../src/opts/SkBlitMask_opts_arm_neon.cpp',
    180         '../src/opts/SkBlitRow_opts_arm_neon.cpp',
    181         '../src/opts/SkBlurImage_opts_neon.cpp',
    182         '../src/opts/SkMorphology_opts_neon.cpp',
    183         '../src/opts/SkXfermode_opts_arm_neon.cpp',
    184       ],
    185     },
    186   ],
    187 }
    188