skia2/gyp/opts.gyp
Mike Klein 78d5a3bac5 Add an SkOpts target for Haswell+ Intel chips.
Haswell brought a whole slew of handy new instructions for us (AVX2, FMA, BMI1+BMI2) and also feature F16C, which came one generation earlier on Ivybridge.  We work with integers often enough that we really want to target AVX2 instead of AVX, and this means it's pretty practical to ask for all those other goodies along with it.

Chrome's GN files and Google3's BUILD file will need an update, before or after this CL.

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2840
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: I826daf77b5104664c5d31ddaabee347e287b87a2
Reviewed-on: https://skia-review.googlesource.com/2840
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
2016-09-30 15:10:48 +00:00

232 lines
7.0 KiB
Python

# Copyright 2015 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Gyp file for building opts target.
{
# Source lists live in opts.gypi. This makes it easier to maintain our Chrome GYP/GN setup.
# (To be honest, I'm not sure why we need to include common.gypi. I thought it was automatic.)
'variables': {
'includes': [ 'common.gypi', 'opts.gypi' ],
},
# Generally we shove things into one 'opts' target conditioned on platform.
# If a particular platform needs some files built with different flags,
# those become separate targets: opts_ssse3, opts_sse41, opts_neon.
'targets': [
{
'target_name': 'opts',
'product_name': 'skia_opts',
'type': 'static_library',
'standalone_static_library': 1,
'dependencies': [
'core.gyp:*',
'effects.gyp:*'
],
'include_dirs': [
'../include/private',
'../src/core',
'../src/opts',
'../src/utils',
'../include/utils',
],
'conditions': [
[ '"x86" in skia_arch_type and skia_os != "ios"', {
'cflags': [ '-msse2' ],
'dependencies': [ 'opts_ssse3', 'opts_sse41', 'opts_sse42', 'opts_avx', 'opts_hsw' ],
'sources': [ '<@(sse2_sources)' ],
}],
[ 'skia_arch_type == "mips"', {
'conditions': [
[ '(mips_arch_variant == "mips32r2") and (mips_dsp == 1 or mips_dsp == 2)', {
'sources': [ '<@(mips_dsp_sources)' ],
},{
'sources': [ '<@(none_sources)' ],
}],
]
}],
[ '(skia_arch_type == "arm" and arm_version < 7) \
or (skia_os == "ios") \
or (skia_os == "android" \
and skia_arch_type not in ["x86", "x86_64", "arm", "mips", \
"arm64"])', {
'sources': [ '<@(none_sources)' ],
}],
[ 'skia_arch_type == "arm" and arm_version >= 7', {
# The assembly uses the frame pointer register (r7 in Thumb/r11 in
# ARM), the compiler doesn't like that.
'cflags!': [ '-fno-omit-frame-pointer', '-mapcs-frame', '-mapcs' ],
'cflags': [ '-fomit-frame-pointer' ],
'sources': [ '<@(armv7_sources)' ],
'conditions': [
[ 'arm_neon == 1', {
'dependencies': [ 'opts_neon' ]
}],
],
}],
[ 'skia_arch_type == "arm64"', {
'sources': [ '<@(arm64_sources)' ],
'dependencies': [ 'opts_crc32' ]
}],
[ 'skia_android_framework', {
'cflags!': [
'-msse2',
'-mfpu=neon',
'-fomit-frame-pointer',
]
}],
],
},
{
'target_name': 'opts_crc32',
'product_name': 'skia_opts_crc32',
'type': 'static_library',
'standalone_static_library': 1,
'dependencies': [ 'core.gyp:*' ],
'include_dirs': [
'../include/private',
'../src/core',
'../src/utils',
],
'sources': [ '<@(crc32_sources)' ],
'conditions': [
[ 'not skia_android_framework', { 'cflags': [ '-march=armv8-a+crc' ] }],
],
},
{
'target_name': 'opts_ssse3',
'product_name': 'skia_opts_ssse3',
'type': 'static_library',
'standalone_static_library': 1,
'dependencies': [ 'core.gyp:*' ],
'include_dirs': [
'../include/private',
'../src/core',
'../src/utils',
],
'sources': [ '<@(ssse3_sources)' ],
'conditions': [
[ 'skia_os == "win"', { 'defines' : [ 'SK_CPU_SSE_LEVEL=31' ] }],
[ 'not skia_android_framework', { 'cflags': [ '-mssse3' ] }],
],
},
{
'target_name': 'opts_sse41',
'product_name': 'skia_opts_sse41',
'type': 'static_library',
'standalone_static_library': 1,
'dependencies': [ 'core.gyp:*' ],
'include_dirs': [
'../include/private',
'../src/core',
'../src/utils',
],
'sources': [ '<@(sse41_sources)' ],
'xcode_settings': { 'GCC_ENABLE_SSE41_EXTENSIONS': 'YES' },
'conditions': [
[ 'skia_os == "win"', { 'defines' : [ 'SK_CPU_SSE_LEVEL=41' ] }],
[ 'not skia_android_framework', { 'cflags': [ '-msse4.1' ] }],
],
},
{
'target_name': 'opts_sse42',
'product_name': 'skia_opts_sse42',
'type': 'static_library',
'standalone_static_library': 1,
'dependencies': [ 'core.gyp:*' ],
'include_dirs': [
'../include/private',
'../src/core',
'../src/utils',
],
'sources': [ '<@(sse42_sources)' ],
'xcode_settings': { 'GCC_ENABLE_SSE42_EXTENSIONS': 'YES' },
'conditions': [
[ 'skia_os == "win"', { 'defines' : [ 'SK_CPU_SSE_LEVEL=42' ] }],
[ 'not skia_android_framework', { 'cflags': [ '-msse4.2' ] }],
],
},
{
'target_name': 'opts_avx',
'product_name': 'skia_opts_avx',
'type': 'static_library',
'standalone_static_library': 1,
'dependencies': [ 'core.gyp:*' ],
'include_dirs': [
'../include/private',
'../src/core',
'../src/utils',
],
'sources': [ '<@(avx_sources)' ],
'msvs_settings': { 'VCCLCompilerTool': { 'EnableEnhancedInstructionSet': '3' } },
'xcode_settings': { 'OTHER_CPLUSPLUSFLAGS': [ '-mavx' ] },
'conditions': [
[ 'not skia_android_framework', { 'cflags': [ '-mavx' ] }],
],
},
{
'target_name': 'opts_hsw',
'product_name': 'skia_opts_hsw',
'type': 'static_library',
'standalone_static_library': 1,
'dependencies': [ 'core.gyp:*' ],
'include_dirs': [
'../include/private',
'../src/core',
'../src/utils',
],
'sources': [ '<@(hsw_sources)' ],
'msvs_settings': { 'VCCLCompilerTool': { 'EnableEnhancedInstructionSet': '5' } },
'xcode_settings': {
'OTHER_CPLUSPLUSFLAGS': [ '-mavx2', '-mbmi', '-mbmi2', '-mf16c', '-mfma' ]
},
'conditions': [
[ 'not skia_android_framework', {
'cflags': [ '-mavx2', '-mbmi', '-mbmi2', '-mf16c', '-mfma' ]
}],
],
},
{
'target_name': 'opts_neon',
'product_name': 'skia_opts_neon',
'type': 'static_library',
'standalone_static_library': 1,
'dependencies': [
'core.gyp:*',
'effects.gyp:*'
],
'include_dirs': [
'../include/private',
'../src/core',
'../src/opts',
'../src/utils',
],
'sources': [ '<@(neon_sources)' ],
'cflags!': [
'-fno-omit-frame-pointer',
'-mfpu=vfp', # remove them all, just in case.
'-mfpu=vfpv3',
'-mfpu=vfpv3-d16',
],
'conditions': [
[ 'not skia_android_framework', {
'cflags': [
'-mfpu=neon',
'-fomit-frame-pointer',
],
}],
],
'ldflags': [
'-march=armv7-a',
'-Wl,--fix-cortex-a8',
],
},
],
}