Reorganize gyp for Android
BUG=1120
TEST=trybot, local test on xoom and nexus
Message:
It turned out the last CL can only build neon code that
caused problem on Xoom.
Description:
In order to support audo-cpu-detection, I split files into two gypi files, one
contains non-neon code, antoher one ONLY contains neon specific code, so I can
apply different flags to them. Also created two build targets for each of them
We build for linux as before.
Tested on xoom and nexus S.
Review URL: https://webrtc-codereview.appspot.com/930024
git-svn-id: http://webrtc.googlecode.com/svn/trunk@3141 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/third_party/libvpx/libvpx.gyp b/third_party/libvpx/libvpx.gyp
index 2537ed5..c712b8f 100644
--- a/third_party/libvpx/libvpx.gyp
+++ b/third_party/libvpx/libvpx.gyp
@@ -44,202 +44,30 @@
},
'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" or target_arch=="x64"', {
- 'targets' : [
- {
- 'target_name': 'libvpx_sse2',
- 'type': 'static_library',
- 'include_dirs': [
- 'source/config/<(OS)/<(target_arch)',
- '<(libvpx_src_dir)',
- '<(libvpx_src_dir)/vp8/common',
- '<(libvpx_src_dir)/vp8/decoder',
- '<(libvpx_src_dir)/vp8/encoder',
- ],
- 'sources': [
- '<(libvpx_src_dir)/vp8/encoder/x86/denoising_sse2.c',
- ],
- 'conditions': [
- ['os_posix==1 and OS!="mac"', {
- 'cflags': [ '-msse2', ],
- }],
- ['OS=="mac"', {
- 'xcode_settings': {
- 'OTHER_CFLAGS': [ '-msse2', ],
- },
- }],
- ],
- },
- ],
- }],
- [ 'target_arch!="arm"', {
+ ['OS == "android"', {
'targets': [
{
- # This libvpx target contains both encoder and decoder.
- # Encoder is configured to be realtime only.
- 'target_name': 'libvpx',
+ 'target_name': 'libvpx_arm_neon',
'type': 'static_library',
- 'variables': {
- 'yasm_output_path': '<(SHARED_INTERMEDIATE_DIR)/third_party/libvpx',
- 'OS_CATEGORY%': '<(OS_CATEGORY)',
- 'yasm_flags': [
- '-D', 'CHROMIUM',
- '-I', 'source/config/<(OS_CATEGORY)/<(target_arch)',
- '-I', '<(libvpx_src_dir)',
- '-I', '<(shared_generated_dir)', # Generated assembly offsets
- ],
- },
'dependencies': [
'gen_asm_offsets',
],
'includes': [
- '../yasm/yasm_compile.gypi'
+ 'libvpx_asm_conversion.gypi',
+ 'libvpx_src_neon.gypi',
],
- 'include_dirs': [
- 'source/config/<(OS_CATEGORY)/<(target_arch)',
- '<(libvpx_src_dir)',
- '<(libvpx_src_dir)/vp8/common',
- '<(libvpx_src_dir)/vp8/decoder',
- '<(libvpx_src_dir)/vp8/encoder',
- '<(shared_generated_dir)', # Provides vpx_rtcd.h.
- ],
- 'direct_dependent_settings': {
- 'include_dirs': [
- '<(libvpx_src_dir)',
- ],
- },
- # VS2010 does not correctly incrementally link obj files generated
- # from asm files. This flag disables UseLibraryDependencyInputs to
- # avoid this problem.
- 'msvs_2010_disable_uldi_when_referenced': 1,
- 'conditions': [
- [ 'target_arch=="ia32"', {
- 'includes': [
- 'libvpx_srcs_x86.gypi',
- ],
- 'dependencies': [ 'libvpx_sse2', ],
- }],
- [ 'target_arch=="x64"', {
- 'includes': [
- 'libvpx_srcs_x86_64.gypi',
- ],
- 'dependencies': [ 'libvpx_sse2', ],
- }],
- ['clang == 1', {
- 'xcode_settings': {
- 'WARNING_CFLAGS': [
- # libvpx heavily relies on implicit enum casting.
- '-Wno-conversion',
- # libvpx does `if ((a == b))` in some places.
- '-Wno-parentheses-equality',
- ],
- },
- 'cflags': [
- '-Wno-conversion',
- '-Wno-parentheses-equality',
- ],
- }],
- [ 'chromeos == 1', {
- # ChromeOS needs these files for animated WebM avatars.
- 'sources': [
- '<(libvpx_src_dir)/libmkv/EbmlIDs.h',
- '<(libvpx_src_dir)/libmkv/EbmlWriter.c',
- '<(libvpx_src_dir)/libmkv/EbmlWriter.h',
- ],
- }],
- ],
- },
- ],
- },
- ],
- # 'libvpx' target for 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',
- 'dependencies': [
- 'gen_asm_offsets',
- ],
-
- # 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': '<(libvpx_src_dir)/build/make/<(ads2gas_script)',
- },
'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,<!(pwd)/source/config/<(OS_CATEGORY)/<(target_arch_full)',
'-Wa,-I,<(shared_generated_dir)',
+ '-mfpu=neon',
],
- 'include_dirs': [
- 'source/config/<(OS_CATEGORY)/<(target_arch_full)',
- '<(libvpx_src_dir)',
+ 'cflags!': [
+ '-mfpu=vfpv3-d16',
],
- 'direct_dependent_settings': {
- 'include_dirs': [
- '<(libvpx_src_dir)',
- ],
- },
'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 or OS == "android"', {
- 'includes': [
- 'libvpx_srcs_arm_neon.gypi',
- ],
- 'cflags!': [
- '-mfpu=vfpv3-d16',
- ],
- 'cflags': [
- '-mfpu=neon',
- ],
- }],
- ['OS == "android"', {
- 'cflags': [
- '-I<(android_ndk_root)/sources/android/cpufeatures',
- ],
- }],
[ 'chromeos == 1', {
# ChromeOS needs these files for animated WebM avatars.
'sources': [
@@ -249,9 +77,250 @@
],
}],
],
- },
+ }, # libvpx_arm_neon
+ {
+ 'target_name': 'libvpx',
+ 'type': 'static_library',
+ 'dependencies': [
+ 'libvpx_arm_neon',
+ 'gen_asm_offsets',
+ ],
+ 'includes': [
+ 'libvpx_asm_conversion.gypi',
+ 'libvpx_src_c.gypi',
+ 'libvpx_src_armv5te.gypi',
+ 'libvpx_src_armv6.gypi',
+ ],
+ '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,<!(pwd)/source/config/<(OS_CATEGORY)/<(target_arch_full)',
+ '-Wa,-I,<(shared_generated_dir)',
+ # Extra flags
+ '-mfpu=vfpv3-d16',
+ '-I<(android_ndk_root)/sources/android/cpufeatures',
+ ],
+ 'conditions': [
+ [ 'chromeos == 1', {
+ # ChromeOS needs these files for animated WebM avatars.
+ 'sources': [
+ '<(libvpx_src_dir)/libmkv/EbmlIDs.h',
+ '<(libvpx_src_dir)/libmkv/EbmlWriter.c',
+ '<(libvpx_src_dir)/libmkv/EbmlWriter.h',
+ ],
+ }],
+ ],
+ }, # target libvpx
],
- }],
+ }, {
+ # 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.
+ 'conditions': [
+ ['target_arch=="ia32" or target_arch=="x64"', {
+ 'targets' : [
+ {
+ 'target_name': 'libvpx_sse2',
+ 'type': 'static_library',
+ 'include_dirs': [
+ 'source/config/<(OS)/<(target_arch)',
+ '<(libvpx_src_dir)',
+ '<(libvpx_src_dir)/vp8/common',
+ '<(libvpx_src_dir)/vp8/decoder',
+ '<(libvpx_src_dir)/vp8/encoder',
+ ],
+ 'sources': [
+ '<(libvpx_src_dir)/vp8/encoder/x86/denoising_sse2.c',
+ ],
+ 'conditions': [
+ ['os_posix==1 and OS!="mac"', {
+ 'cflags': [ '-msse2', ],
+ }],
+ ['OS=="mac"', {
+ 'xcode_settings': {
+ 'OTHER_CFLAGS': [ '-msse2', ],
+ },
+ }],
+ ],
+ },
+ ],
+ }],
+ [ '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',
+ 'OS_CATEGORY%': '<(OS_CATEGORY)',
+ 'yasm_flags': [
+ '-D', 'CHROMIUM',
+ '-I', 'source/config/<(OS_CATEGORY)/<(target_arch)',
+ '-I', '<(libvpx_src_dir)',
+ '-I', '<(shared_generated_dir)', # Generated assembly offsets
+ ],
+ },
+ 'dependencies': [
+ 'gen_asm_offsets',
+ ],
+ 'includes': [
+ '../yasm/yasm_compile.gypi'
+ ],
+ 'include_dirs': [
+ 'source/config/<(OS_CATEGORY)/<(target_arch)',
+ '<(libvpx_src_dir)',
+ '<(libvpx_src_dir)/vp8/common',
+ '<(libvpx_src_dir)/vp8/decoder',
+ '<(libvpx_src_dir)/vp8/encoder',
+ '<(shared_generated_dir)', # Provides vpx_rtcd.h.
+ ],
+ 'direct_dependent_settings': {
+ 'include_dirs': [
+ '<(libvpx_src_dir)',
+ ],
+ },
+ # VS2010 does not correctly incrementally link obj files generated
+ # from asm files. This flag disables UseLibraryDependencyInputs to
+ # avoid this problem.
+ 'msvs_2010_disable_uldi_when_referenced': 1,
+ 'conditions': [
+ [ 'target_arch=="ia32"', {
+ 'includes': [
+ 'libvpx_srcs_x86.gypi',
+ ],
+ 'dependencies': [ 'libvpx_sse2', ],
+ }],
+ [ 'target_arch=="x64"', {
+ 'includes': [
+ 'libvpx_srcs_x86_64.gypi',
+ ],
+ 'dependencies': [ 'libvpx_sse2', ],
+ }],
+ ['clang == 1', {
+ 'xcode_settings': {
+ 'WARNING_CFLAGS': [
+ # libvpx heavily relies on implicit enum casting.
+ '-Wno-conversion',
+ # libvpx does `if ((a == b))` in some places.
+ '-Wno-parentheses-equality',
+ ],
+ },
+ 'cflags': [
+ '-Wno-conversion',
+ '-Wno-parentheses-equality',
+ ],
+ }],
+ [ 'chromeos == 1', {
+ # ChromeOS needs these files for animated WebM avatars.
+ 'sources': [
+ '<(libvpx_src_dir)/libmkv/EbmlIDs.h',
+ '<(libvpx_src_dir)/libmkv/EbmlWriter.c',
+ '<(libvpx_src_dir)/libmkv/EbmlWriter.h',
+ ],
+ }],
+ ],
+ },
+ ],
+ },
+ ],
+ # 'libvpx' target for 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',
+ 'dependencies': [
+ 'gen_asm_offsets',
+ ],
+
+ # TODO(leozwang): Replace the following ads2gas block with
+ # libvpx_asm_conversion.gypi.
+ # 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':
+ '<(libvpx_src_dir)/build/make/<(ads2gas_script)',
+ },
+ '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,<!(pwd)/source/config/<(OS_CATEGORY)/<(target_arch_full)',
+ '-Wa,-I,<(shared_generated_dir)',
+ ],
+ 'include_dirs': [
+ 'source/config/<(OS_CATEGORY)/<(target_arch_full)',
+ '<(libvpx_src_dir)',
+ ],
+ 'direct_dependent_settings': {
+ 'include_dirs': [
+ '<(libvpx_src_dir)',
+ ],
+ },
+ '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',
+ ],
+ }],
+ [ 'chromeos == 1', {
+ # ChromeOS needs these files for animated WebM avatars.
+ 'sources': [
+ '<(libvpx_src_dir)/libmkv/EbmlIDs.h',
+ '<(libvpx_src_dir)/libmkv/EbmlWriter.c',
+ '<(libvpx_src_dir)/libmkv/EbmlWriter.h',
+ ],
+ }],
+ ],
+ },
+ ],
+ }],
+ ],
+ }],
],
'targets': [
{
diff --git a/third_party/libvpx/libvpx_asm_conversion.gypi b/third_party/libvpx/libvpx_asm_conversion.gypi
new file mode 100644
index 0000000..a3a3914
--- /dev/null
+++ b/third_party/libvpx/libvpx_asm_conversion.gypi
@@ -0,0 +1,55 @@
+# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
+#
+# Use of this source code is governed by a BSD-style license
+# that can be found in the LICENSE file in the root of the source
+# tree. An additional intellectual property rights grant can be found
+# in the file PATENTS. All contributing project authors may
+# be found in the AUTHORS file in the root of the source tree.
+
+# This script is called from libvpx.gypi. It generates .S files from
+# .asm. Converts from ARM syntax used in the RealView Compiler Tools
+# (RVCT) to Gnu Assembler Syntax (GAS).
+
+{
+ # 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':
+ '<(libvpx_src_dir)/build/make/<(ads2gas_script)',
+ },
+ 'include_dirs': [
+ 'source/config/<(OS_CATEGORY)/<(target_arch_full)',
+ '<(libvpx_src_dir)',
+ ],
+ 'direct_dependent_settings': {
+ 'include_dirs': [
+ '<(libvpx_src_dir)',
+ ],
+ },
+}
\ No newline at end of file
diff --git a/third_party/libvpx/libvpx_src_armv5te.gypi b/third_party/libvpx/libvpx_src_armv5te.gypi
new file mode 100644
index 0000000..675576d
--- /dev/null
+++ b/third_party/libvpx/libvpx_src_armv5te.gypi
@@ -0,0 +1,13 @@
+# This file is generated. Do not edit.
+# Copyright (c) 2012 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.
+
+{
+ 'sources': [
+ '<(libvpx_src_dir)/vp8/encoder/arm/armv5te/boolhuff_armv5te.asm',
+ '<(libvpx_src_dir)/vp8/encoder/arm/armv5te/vp8_packtokens_armv5.asm',
+ '<(libvpx_src_dir)/vp8/encoder/arm/armv5te/vp8_packtokens_mbrow_armv5.asm',
+ '<(libvpx_src_dir)/vp8/encoder/arm/armv5te/vp8_packtokens_partitions_armv5.asm',
+ ],
+}
diff --git a/third_party/libvpx/libvpx_src_armv6.gypi b/third_party/libvpx/libvpx_src_armv6.gypi
new file mode 100644
index 0000000..04b6181
--- /dev/null
+++ b/third_party/libvpx/libvpx_src_armv6.gypi
@@ -0,0 +1,35 @@
+# This file is generated. Do not edit.
+# Copyright (c) 2012 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.
+
+{
+ 'sources': [
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/bilinearfilter_v6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/copymem16x16_v6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/copymem8x4_v6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/copymem8x8_v6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/dc_only_idct_add_v6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/dequant_idct_v6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/dequantize_v6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/filter_v6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/idct_blk_v6.c',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/idct_v6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/intra4x4_predict_v6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/iwalsh_v6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/loopfilter_v6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/simpleloopfilter_v6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/sixtappredict8x4_v6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/vp8_sad16x16_armv6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/vp8_variance16x16_armv6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/vp8_variance8x8_armv6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/vp8_variance_halfpixvar16x16_h_armv6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/vp8_variance_halfpixvar16x16_hv_armv6.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/armv6/vp8_variance_halfpixvar16x16_v_armv6.asm',
+ '<(libvpx_src_dir)/vp8/encoder/arm/armv6/vp8_fast_quantize_b_armv6.asm',
+ '<(libvpx_src_dir)/vp8/encoder/arm/armv6/vp8_mse16x16_armv6.asm',
+ '<(libvpx_src_dir)/vp8/encoder/arm/armv6/vp8_short_fdct4x4_armv6.asm',
+ '<(libvpx_src_dir)/vp8/encoder/arm/armv6/vp8_subtract_armv6.asm',
+ '<(libvpx_src_dir)/vp8/encoder/arm/armv6/walsh_v6.asm',
+ ],
+}
diff --git a/third_party/libvpx/libvpx_src_c.gypi b/third_party/libvpx/libvpx_src_c.gypi
new file mode 100644
index 0000000..15b0db7
--- /dev/null
+++ b/third_party/libvpx/libvpx_src_c.gypi
@@ -0,0 +1,176 @@
+# This file is generated. Do not edit.
+# Copyright (c) 2012 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.
+
+{
+ 'sources': [
+ '<(libvpx_src_dir)/vp8/common/alloccommon.c',
+ '<(libvpx_src_dir)/vp8/common/alloccommon.h',
+ '<(libvpx_src_dir)/vp8/common/arm/dequantize_arm.c',
+ '<(libvpx_src_dir)/vp8/common/arm/filter_arm.c',
+ '<(libvpx_src_dir)/vp8/common/arm/loopfilter_arm.c',
+ '<(libvpx_src_dir)/vp8/common/arm/reconintra_arm.c',
+ '<(libvpx_src_dir)/vp8/common/arm/variance_arm.c',
+ '<(libvpx_src_dir)/vp8/common/blockd.c',
+ '<(libvpx_src_dir)/vp8/common/blockd.h',
+ '<(libvpx_src_dir)/vp8/common/coefupdateprobs.h',
+ '<(libvpx_src_dir)/vp8/common/common.h',
+ '<(libvpx_src_dir)/vp8/common/debugmodes.c',
+ '<(libvpx_src_dir)/vp8/common/default_coef_probs.h',
+ '<(libvpx_src_dir)/vp8/common/dequantize.c',
+ '<(libvpx_src_dir)/vp8/common/entropy.c',
+ '<(libvpx_src_dir)/vp8/common/entropy.h',
+ '<(libvpx_src_dir)/vp8/common/entropymode.c',
+ '<(libvpx_src_dir)/vp8/common/entropymode.h',
+ '<(libvpx_src_dir)/vp8/common/entropymv.c',
+ '<(libvpx_src_dir)/vp8/common/entropymv.h',
+ '<(libvpx_src_dir)/vp8/common/extend.c',
+ '<(libvpx_src_dir)/vp8/common/extend.h',
+ '<(libvpx_src_dir)/vp8/common/filter.c',
+ '<(libvpx_src_dir)/vp8/common/filter.h',
+ '<(libvpx_src_dir)/vp8/common/findnearmv.c',
+ '<(libvpx_src_dir)/vp8/common/findnearmv.h',
+ '<(libvpx_src_dir)/vp8/common/generic/systemdependent.c',
+ '<(libvpx_src_dir)/vp8/common/header.h',
+ '<(libvpx_src_dir)/vp8/common/idct_blk.c',
+ '<(libvpx_src_dir)/vp8/common/idctllm.c',
+ '<(libvpx_src_dir)/vp8/common/invtrans.h',
+ '<(libvpx_src_dir)/vp8/common/loopfilter.c',
+ '<(libvpx_src_dir)/vp8/common/loopfilter_filters.c',
+ '<(libvpx_src_dir)/vp8/common/loopfilter.h',
+ '<(libvpx_src_dir)/vp8/common/mbpitch.c',
+ '<(libvpx_src_dir)/vp8/common/mfqe.c',
+ '<(libvpx_src_dir)/vp8/common/modecont.c',
+ '<(libvpx_src_dir)/vp8/common/modecont.h',
+ '<(libvpx_src_dir)/vp8/common/mv.h',
+ '<(libvpx_src_dir)/vp8/common/onyxc_int.h',
+ '<(libvpx_src_dir)/vp8/common/onyxd.h',
+ '<(libvpx_src_dir)/vp8/common/onyx.h',
+ '<(libvpx_src_dir)/vp8/common/postproc.c',
+ '<(libvpx_src_dir)/vp8/common/postproc.h',
+ '<(libvpx_src_dir)/vp8/common/ppflags.h',
+ '<(libvpx_src_dir)/vp8/common/pragmas.h',
+ '<(libvpx_src_dir)/vp8/common/quant_common.c',
+ '<(libvpx_src_dir)/vp8/common/quant_common.h',
+ '<(libvpx_src_dir)/vp8/common/reconinter.c',
+ '<(libvpx_src_dir)/vp8/common/reconinter.h',
+ '<(libvpx_src_dir)/vp8/common/reconintra4x4.c',
+ '<(libvpx_src_dir)/vp8/common/reconintra4x4.h',
+ '<(libvpx_src_dir)/vp8/common/reconintra.c',
+ '<(libvpx_src_dir)/vp8/common/rtcd.c',
+ '<(libvpx_src_dir)/vp8/common/sad_c.c',
+ '<(libvpx_src_dir)/vp8/common/setupintrarecon.c',
+ '<(libvpx_src_dir)/vp8/common/setupintrarecon.h',
+ '<(libvpx_src_dir)/vp8/common/swapyv12buffer.c',
+ '<(libvpx_src_dir)/vp8/common/swapyv12buffer.h',
+ '<(libvpx_src_dir)/vp8/common/systemdependent.h',
+ '<(libvpx_src_dir)/vp8/common/threading.h',
+ '<(libvpx_src_dir)/vp8/common/treecoder.c',
+ '<(libvpx_src_dir)/vp8/common/treecoder.h',
+ '<(libvpx_src_dir)/vp8/common/variance_c.c',
+ '<(libvpx_src_dir)/vp8/common/variance.h',
+ '<(libvpx_src_dir)/vp8/common/vp8_entropymodedata.h',
+ '<(libvpx_src_dir)/vp8/decoder/dboolhuff.c',
+ '<(libvpx_src_dir)/vp8/decoder/dboolhuff.h',
+ '<(libvpx_src_dir)/vp8/decoder/decodemv.c',
+ '<(libvpx_src_dir)/vp8/decoder/decodemv.h',
+ '<(libvpx_src_dir)/vp8/decoder/decoderthreading.h',
+ '<(libvpx_src_dir)/vp8/decoder/decodframe.c',
+ '<(libvpx_src_dir)/vp8/decoder/detokenize.c',
+ '<(libvpx_src_dir)/vp8/decoder/detokenize.h',
+ '<(libvpx_src_dir)/vp8/decoder/ec_types.h',
+ '<(libvpx_src_dir)/vp8/decoder/error_concealment.c',
+ '<(libvpx_src_dir)/vp8/decoder/error_concealment.h',
+ '<(libvpx_src_dir)/vp8/decoder/onyxd_if.c',
+ '<(libvpx_src_dir)/vp8/decoder/onyxd_int.h',
+ '<(libvpx_src_dir)/vp8/decoder/threading.c',
+ '<(libvpx_src_dir)/vp8/decoder/treereader.h',
+ '<(libvpx_src_dir)/vp8/encoder/arm/boolhuff_arm.c',
+ '<(libvpx_src_dir)/vp8/encoder/arm/dct_arm.c',
+ '<(libvpx_src_dir)/vp8/encoder/arm/quantize_arm.c',
+ '<(libvpx_src_dir)/vp8/encoder/bitstream.c',
+ '<(libvpx_src_dir)/vp8/encoder/bitstream.h',
+ '<(libvpx_src_dir)/vp8/encoder/block.h',
+ '<(libvpx_src_dir)/vp8/encoder/boolhuff.h',
+ '<(libvpx_src_dir)/vp8/encoder/dct.c',
+ '<(libvpx_src_dir)/vp8/encoder/dct_value_cost.h',
+ '<(libvpx_src_dir)/vp8/encoder/dct_value_tokens.h',
+ '<(libvpx_src_dir)/vp8/encoder/defaultcoefcounts.h',
+ '<(libvpx_src_dir)/vp8/encoder/denoising.c',
+ '<(libvpx_src_dir)/vp8/encoder/denoising.h',
+ '<(libvpx_src_dir)/vp8/encoder/encodeframe.c',
+ '<(libvpx_src_dir)/vp8/encoder/encodeframe.h',
+ '<(libvpx_src_dir)/vp8/encoder/encodeintra.c',
+ '<(libvpx_src_dir)/vp8/encoder/encodeintra.h',
+ '<(libvpx_src_dir)/vp8/encoder/encodemb.c',
+ '<(libvpx_src_dir)/vp8/encoder/encodemb.h',
+ '<(libvpx_src_dir)/vp8/encoder/encodemv.c',
+ '<(libvpx_src_dir)/vp8/encoder/encodemv.h',
+ '<(libvpx_src_dir)/vp8/encoder/ethreading.c',
+ '<(libvpx_src_dir)/vp8/encoder/firstpass.h',
+ '<(libvpx_src_dir)/vp8/encoder/lookahead.c',
+ '<(libvpx_src_dir)/vp8/encoder/lookahead.h',
+ '<(libvpx_src_dir)/vp8/encoder/mcomp.c',
+ '<(libvpx_src_dir)/vp8/encoder/mcomp.h',
+ '<(libvpx_src_dir)/vp8/encoder/modecosts.c',
+ '<(libvpx_src_dir)/vp8/encoder/modecosts.h',
+ '<(libvpx_src_dir)/vp8/encoder/mr_dissim.c',
+ '<(libvpx_src_dir)/vp8/encoder/mr_dissim.h',
+ '<(libvpx_src_dir)/vp8/encoder/onyx_if.c',
+ '<(libvpx_src_dir)/vp8/encoder/onyx_int.h',
+ '<(libvpx_src_dir)/vp8/encoder/pickinter.c',
+ '<(libvpx_src_dir)/vp8/encoder/pickinter.h',
+ '<(libvpx_src_dir)/vp8/encoder/picklpf.c',
+ '<(libvpx_src_dir)/vp8/encoder/psnr.c',
+ '<(libvpx_src_dir)/vp8/encoder/psnr.h',
+ '<(libvpx_src_dir)/vp8/encoder/quantize.c',
+ '<(libvpx_src_dir)/vp8/encoder/quantize.h',
+ '<(libvpx_src_dir)/vp8/encoder/ratectrl.c',
+ '<(libvpx_src_dir)/vp8/encoder/ratectrl.h',
+ '<(libvpx_src_dir)/vp8/encoder/rdopt.c',
+ '<(libvpx_src_dir)/vp8/encoder/rdopt.h',
+ '<(libvpx_src_dir)/vp8/encoder/segmentation.c',
+ '<(libvpx_src_dir)/vp8/encoder/segmentation.h',
+ '<(libvpx_src_dir)/vp8/encoder/tokenize.c',
+ '<(libvpx_src_dir)/vp8/encoder/tokenize.h',
+ '<(libvpx_src_dir)/vp8/encoder/treewriter.c',
+ '<(libvpx_src_dir)/vp8/encoder/treewriter.h',
+ '<(libvpx_src_dir)/vp8/vp8_cx_iface.c',
+ '<(libvpx_src_dir)/vp8/vp8_dx_iface.c',
+ '<(libvpx_src_dir)/vpx/internal/vpx_codec_internal.h',
+ '<(libvpx_src_dir)/vpx_mem/include/vpx_mem_intrnl.h',
+ '<(libvpx_src_dir)/vpx_mem/vpx_mem.c',
+ '<(libvpx_src_dir)/vpx_mem/vpx_mem.h',
+ '<(libvpx_src_dir)/vpx_ports/arm_cpudetect.c',
+ '<(libvpx_src_dir)/vpx_ports/arm.h',
+ '<(libvpx_src_dir)/vpx_ports/asm_offsets.h',
+ '<(libvpx_src_dir)/vpx_ports/mem.h',
+ '<(libvpx_src_dir)/vpx_ports/vpx_timer.h',
+ '<(libvpx_src_dir)/vpx_scale/generic/gen_scalers.c',
+ '<(libvpx_src_dir)/vpx_scale/generic/vpxscale.c',
+ '<(libvpx_src_dir)/vpx_scale/generic/yv12config.c',
+ '<(libvpx_src_dir)/vpx_scale/generic/yv12extend.c',
+ '<(libvpx_src_dir)/vpx_scale/generic/yv12extend_generic.h',
+ '<(libvpx_src_dir)/vpx_scale/scale_mode.h',
+ '<(libvpx_src_dir)/vpx_scale/vpxscale.h',
+ '<(libvpx_src_dir)/vpx_scale/yv12config.h',
+ '<(libvpx_src_dir)/vpx/src/vpx_codec.c',
+ '<(libvpx_src_dir)/vpx/src/vpx_decoder.c',
+ '<(libvpx_src_dir)/vpx/src/vpx_encoder.c',
+ '<(libvpx_src_dir)/vpx/src/vpx_image.c',
+ '<(libvpx_src_dir)/vpx/vp8cx.h',
+ '<(libvpx_src_dir)/vpx/vp8dx.h',
+ '<(libvpx_src_dir)/vpx/vp8.h',
+ '<(libvpx_src_dir)/vpx/vpx_codec.h',
+ '<(libvpx_src_dir)/vpx/vpx_codec_impl_bottom.h',
+ '<(libvpx_src_dir)/vpx/vpx_codec_impl_top.h',
+ '<(libvpx_src_dir)/vpx/vpx_decoder.h',
+ '<(libvpx_src_dir)/vpx/vpx_encoder.h',
+ '<(libvpx_src_dir)/vpx/vpx_image.h',
+ '<(libvpx_src_dir)/vpx/vpx_integer.h',
+ '<(libvpx_src_dir)/vp8/common/arm/bilinearfilter_arm.c',
+ '<(libvpx_src_dir)/vp8/common/arm/bilinearfilter_arm.h',
+ '<(libvpx_src_dir)/vpx_scale/arm/neon/yv12extend_arm.c',
+ ],
+}
diff --git a/third_party/libvpx/libvpx_src_neon.gypi b/third_party/libvpx/libvpx_src_neon.gypi
new file mode 100644
index 0000000..241a165
--- /dev/null
+++ b/third_party/libvpx/libvpx_src_neon.gypi
@@ -0,0 +1,51 @@
+# This file is generated. Do not edit.
+# Copyright (c) 2012 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.
+
+{
+ 'sources': [
+ '<(libvpx_src_dir)/vp8/common/arm/neon/bilinearpredict16x16_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/bilinearpredict4x4_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/bilinearpredict8x4_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/bilinearpredict8x8_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/buildintrapredictorsmby_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/copymem16x16_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/copymem8x4_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/copymem8x8_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/dc_only_idct_add_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/dequant_idct_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/dequantizeb_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/idct_blk_neon.c',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/idct_dequant_0_2x_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/idct_dequant_full_2x_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/iwalsh_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/loopfilter_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/loopfiltersimplehorizontaledge_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/loopfiltersimpleverticaledge_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/mbloopfilter_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/sad16_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/sad8_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/save_reg_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/shortidct4x4llm_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/sixtappredict16x16_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/sixtappredict4x4_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/sixtappredict8x4_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/sixtappredict8x8_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/variance_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/vp8_subpixelvariance16x16_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/vp8_subpixelvariance16x16s_neon.asm',
+ '<(libvpx_src_dir)/vp8/common/arm/neon/vp8_subpixelvariance8x8_neon.asm',
+ '<(libvpx_src_dir)/vp8/encoder/arm/neon/fastquantizeb_neon.asm',
+ '<(libvpx_src_dir)/vp8/encoder/arm/neon/picklpf_arm.c',
+ '<(libvpx_src_dir)/vp8/encoder/arm/neon/shortfdct_neon.asm',
+ '<(libvpx_src_dir)/vp8/encoder/arm/neon/subtract_neon.asm',
+ '<(libvpx_src_dir)/vp8/encoder/arm/neon/vp8_memcpy_neon.asm',
+ '<(libvpx_src_dir)/vp8/encoder/arm/neon/vp8_mse16x16_neon.asm',
+ '<(libvpx_src_dir)/vp8/encoder/arm/neon/vp8_shortwalsh4x4_neon.asm',
+ '<(libvpx_src_dir)/vpx_scale/arm/neon/vp8_vpxyv12_copyframe_func_neon.asm',
+ '<(libvpx_src_dir)/vpx_scale/arm/neon/vp8_vpxyv12_copysrcframe_func_neon.asm',
+ '<(libvpx_src_dir)/vpx_scale/arm/neon/vp8_vpxyv12_copy_y_neon.asm',
+ '<(libvpx_src_dir)/vpx_scale/arm/neon/vp8_vpxyv12_extendframeborders_neon.asm',
+ ],
+}
diff --git a/webrtc/video_engine/test/android/jni/Android.mk b/webrtc/video_engine/test/android/jni/Android.mk
index 9a0555e..8e1f6af 100644
--- a/webrtc/video_engine/test/android/jni/Android.mk
+++ b/webrtc/video_engine/test/android/jni/Android.mk
@@ -270,6 +270,12 @@
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
+LOCAL_MODULE := libvpx_arm_neon
+LOCAL_SRC_FILES := \
+ $(MY_LIBS_PATH)/third_party/libvpx/libvpx_arm_neon.a
+include $(PREBUILT_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
LOCAL_MODULE := libpaced_sender
LOCAL_SRC_FILES := \
$(MY_LIBS_PATH)/webrtc/modules/libpaced_sender.a
@@ -339,6 +345,7 @@
libaudioproc_debug_proto \
libprotobuf_lite \
libvpx \
+ libvpx_arm_neon \
libpaced_sender \
$(MY_SUPPLEMENTAL_LIBS)