webrtc/third_party/libvpx/libvpx.gyp
stefan@webrtc.org f0d4696ab3 Add support for SSE intrinsics on gcc in libvpx.
BUG=none
TEST=build on Linux with -Dtarget_arch=ia32 -Ddisable_sse2=1, trybots

Review URL: https://webrtc-codereview.appspot.com/646009

git-svn-id: http://webrtc.googlecode.com/svn/trunk@2398 4adac7df-926f-26a2-2b94-8c16560cd09d
2012-06-12 08:33:53 +00:00

203 lines
6.3 KiB
Python

# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# This file is based upon the libvpx.gyp file in the Chromium source code,
# but with the following targets removed: simple_encoder, simple_decoder,
# libvpx_include, libvpx_lib.
# http://src.chromium.org/svn/trunk/deps/third_party/libvpx/libvpx.gyp
{
# The target_defaults block is unique to the WebRTC libvpx.gyp.
'target_defaults': {
'conditions': [
['OS=="mac"', {
'xcode_settings': {
'WARNING_CFLAGS': [
'-Wno-implicit-function-declaration',
# TODO(andrew): this one should be fixed upstream.
'-Wno-parentheses-equality',
'-Wno-conversion',
],
},
}],
],
},
'variables': {
'conditions': [
['os_posix==1', {
'asm_obj_extension': 'o',
}],
['OS=="win"', {
'asm_obj_extension': 'obj',
}],
],
},
'conditions': [
# TODO(andrew): Hack to ensure we pass -msse2 to gcc on Linux for files
# containing SSE intrinsics. This should be handled in the gyp generator
# scripts somehow. Clang (default on Mac) doesn't require this.
['target_arch=="ia32"', {
'targets' : [
{
'target_name': 'libvpx_sse2',
'type': 'static_library',
'include_dirs': [
'source/config/<(OS)/<(target_arch)',
'source/libvpx',
'source/libvpx/vp8/common',
'source/libvpx/vp8/decoder',
'source/libvpx/vp8/encoder',
],
'sources': [
'source/libvpx/vp8/encoder/x86/denoising_sse2.c',
],
'cflags': [ '-msse2', ],
},
],
}],
[ '(OS=="linux" or OS=="mac" or OS=="win") and target_arch!="arm"', {
'targets': [
{
# This libvpx target contains both encoder and decoder.
# Encoder is configured to be realtime only.
'target_name': 'libvpx',
'type': 'static_library',
'variables': {
'yasm_output_path': '<(SHARED_INTERMEDIATE_DIR)/third_party/libvpx',
'yasm_flags': [
'-I', 'source/config/<(OS)/<(target_arch)',
'-I', 'source/libvpx',
],
},
'includes': [
'../yasm/yasm_compile.gypi'
],
'include_dirs': [
'source/config/<(OS)/<(target_arch)',
'source/libvpx',
'source/libvpx/vp8/common',
'source/libvpx/vp8/decoder',
'source/libvpx/vp8/encoder',
],
'direct_dependent_settings': {
'include_dirs': [
'source/libvpx',
],
},
'conditions': [
[ 'target_arch=="ia32"', {
'includes': [
'libvpx_srcs_x86.gypi',
],
'dependencies': [ 'libvpx_sse2', ],
}],
[ 'target_arch=="x64"', {
'includes': [
'libvpx_srcs_x86_64.gypi',
],
}],
],
},
],
},
],
# 'libvpx' target for Chrome OS ARM builds.
[ 'target_arch=="arm" ', {
'targets': [
{
# This libvpx target contains both encoder and decoder.
# Encoder is configured to be realtime only.
'target_name': 'libvpx',
'type': 'static_library',
# Copy the script to the output folder so that we can use it with
# absolute path.
'copies': [{
'destination': '<(shared_generated_dir)',
'files': [
'<(ads2gas_script_path)',
],
}],
# Rule to convert .asm files to .S files.
'rules': [
{
'rule_name': 'convert_asm',
'extension': 'asm',
'inputs': [ '<(shared_generated_dir)/<(ads2gas_script)', ],
'outputs': [
'<(shared_generated_dir)/<(RULE_INPUT_ROOT).S',
],
'action': [
'bash',
'-c',
'cat <(RULE_INPUT_PATH) | perl <(shared_generated_dir)/<(ads2gas_script) > <(shared_generated_dir)/<(RULE_INPUT_ROOT).S',
],
'process_outputs_as_sources': 1,
'message': 'Convert libvpx asm file for ARM <(RULE_INPUT_PATH).',
},
],
'variables': {
# Location of the assembly conversion script.
'ads2gas_script': 'ads2gas.pl',
'ads2gas_script_path': 'source/libvpx/build/make/<(ads2gas_script)',
# Location of the intermediate output.
'shared_generated_dir': '<(SHARED_INTERMEDIATE_DIR)/third_party/libvpx',
# Conditions to generate arm-neon as an target.
'conditions': [
['target_arch=="arm" and arm_neon==1', {
'target_arch_full': 'arm-neon',
}, {
'target_arch_full': '<(target_arch)',
}],
['OS=="android"', {
'_OS': 'linux',
}, {
'_OS': '<(OS)',
}],
],
},
'cflags': [
# We need to explicitly tell the GCC assembler to look for
# .include directive files from the place where they're
# generated to.
'-Wa,-I,third_party/libvpx/source/config/<(_OS)/<(target_arch_full)',
],
'include_dirs': [
'source/config/<(_OS)/<(target_arch_full)',
'source/libvpx',
],
'direct_dependent_settings': {
'include_dirs': [
'source/libvpx',
],
},
'conditions': [
# Libvpx optimizations for ARMv6 or ARMv7 without NEON.
['arm_neon==0', {
'includes': [
'libvpx_srcs_arm.gypi',
],
}],
# Libvpx optimizations for ARMv7 with NEON.
['arm_neon==1', {
'includes': [
'libvpx_srcs_arm_neon.gypi',
],
}],
],
},
],
}],
],
}
# Local Variables:
# tab-width:2
# indent-tabs-mode:nil
# End:
# vim: set expandtab tabstop=2 shiftwidth=2: