Add a [rtc_]build_with_neon variable to unify conditions.
Also consolidate ARM options for gn in an arm_neon_config.
R=jridges@masque.com, kjellander@webrtc.org, zhongwei.yao@chromium.org
Review URL: https://codereview.webrtc.org/1181373004.
Cr-Commit-Position: refs/heads/master@{#9501}
diff --git a/webrtc/build/arm_neon.gypi b/webrtc/build/arm_neon.gypi
index 9d8f71c..9070080 100644
--- a/webrtc/build/arm_neon.gypi
+++ b/webrtc/build/arm_neon.gypi
@@ -24,11 +24,19 @@
'-mfpu=vfpv3-d16',
],
'conditions': [
- # "-mfpu=neon" is not requried for arm64 in GCC.
+ # "-mfpu=neon" is not required for arm64 in GCC.
['target_arch!="arm64"', {
'cflags': [
'-mfpu=neon',
],
}],
+ # Disable LTO on NEON targets due to compiler bug.
+ # TODO(fdegans): Enable this. See crbug.com/408997.
+ ['use_lto==1', {
+ 'cflags!': [
+ '-flto',
+ '-ffat-lto-objects',
+ ],
+ }],
],
}
diff --git a/webrtc/build/common.gypi b/webrtc/build/common.gypi
index 26b0de3..0ab88c6 100644
--- a/webrtc/build/common.gypi
+++ b/webrtc/build/common.gypi
@@ -121,6 +121,9 @@
# enable schannel on windows.
'use_legacy_ssl_defaults%': 0,
+ # Determines whether NEON code will be built.
+ 'build_with_neon%': 0,
+
'conditions': [
['build_with_chromium==1', {
# Exclude pulse audio on Chromium since its prerequisites don't require
@@ -152,6 +155,9 @@
['target_arch=="arm" or target_arch=="arm64"', {
'prefer_fixed_point%': 1,
}],
+ ['(target_arch=="arm" and (arm_neon==1 or arm_neon_optional==1)) or target_arch=="arm64"', {
+ 'build_with_neon%': 1,
+ }],
['OS!="ios" and (target_arch!="arm" or arm_version>=7) and target_arch!="mips64el"', {
'rtc_use_openmax_dl%': 1,
}, {
diff --git a/webrtc/build/webrtc.gni b/webrtc/build/webrtc.gni
index d03a4ed..fa05996 100644
--- a/webrtc/build/webrtc.gni
+++ b/webrtc/build/webrtc.gni
@@ -105,10 +105,10 @@
rtc_use_openmax_dl = false
}
- # WebRTC builds ARM v7 Neon instruction set optimized code for both iOS and
- # Android, which is why we currently cannot use the variables in
- # //build/config/arm.gni (since it disables Neon for Android).
- rtc_build_armv7_neon = current_cpu == "arm" && arm_version >= 7
+ # Determines whether NEON code will be built.
+ rtc_build_with_neon = (current_cpu == "arm" &&
+ (arm_use_neon == 1 || arm_optionally_use_neon == 1)) ||
+ current_cpu == "arm64"
}
# Make it possible to provide custom locations for some libraries (move these
diff --git a/webrtc/common_audio/BUILD.gn b/webrtc/common_audio/BUILD.gn
index 3d4a332..b01b318 100644
--- a/webrtc/common_audio/BUILD.gn
+++ b/webrtc/common_audio/BUILD.gn
@@ -130,14 +130,13 @@
]
if (arm_version >= 7) {
- deps += [ ":common_audio_neon" ]
sources += [ "signal_processing/filter_ar_fast_q12_armv7.S" ]
} else {
sources += [ "signal_processing/filter_ar_fast_q12.c" ]
}
}
- if (current_cpu == "arm64") {
+ if (rtc_build_with_neon) {
deps += [ ":common_audio_neon" ]
}
@@ -211,7 +210,7 @@
}
}
-if (rtc_build_armv7_neon || current_cpu == "arm64") {
+if (rtc_build_with_neon) {
source_set("common_audio_neon") {
sources = [
"fir_filter_neon.cc",
@@ -221,20 +220,24 @@
"signal_processing/min_max_operations_neon.c",
]
- configs += [ "..:common_config" ]
- public_configs = [ "..:common_inherited_config" ]
-
- if (!arm_use_neon) {
+ if (current_cpu != "arm64") {
+ # Enable compilation for the NEON instruction set. This is needed
+ # since //build/config/arm.gni only enables NEON for iOS, not Android.
+ # This provides the same functionality as webrtc/build/arm_neon.gypi.
configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
cflags = [ "-mfpu=neon" ]
}
- # Disable LTO in audio_processing_neon target due to compiler bug.
+ # Disable LTO on NEON targets due to compiler bug.
+ # TODO(fdegans): Enable this. See crbug.com/408997.
if (rtc_use_lto) {
cflags -= [
"-flto",
"-ffat-lto-objects",
]
}
+
+ configs += [ "..:common_config" ]
+ public_configs = [ "..:common_inherited_config" ]
}
}
diff --git a/webrtc/common_audio/common_audio.gyp b/webrtc/common_audio/common_audio.gyp
index 36e6a65..884a8af 100644
--- a/webrtc/common_audio/common_audio.gyp
+++ b/webrtc/common_audio/common_audio.gyp
@@ -136,6 +136,9 @@
['target_arch=="ia32" or target_arch=="x64"', {
'dependencies': ['common_audio_sse2',],
}],
+ ['build_with_neon==1', {
+ 'dependencies': ['common_audio_neon',],
+ }],
['target_arch=="arm"', {
'sources': [
'signal_processing/complex_bit_reverse_arm.S',
@@ -147,7 +150,6 @@
],
'conditions': [
['arm_version>=7', {
- 'dependencies': ['common_audio_neon',],
'sources': [
'signal_processing/filter_ar_fast_q12_armv7.S',
],
@@ -157,9 +159,6 @@
}],
], # conditions
}],
- ['target_arch=="arm64"', {
- 'dependencies': ['common_audio_neon',],
- }],
['target_arch=="mipsel" and mips_arch_variant!="r6"', {
'sources': [
'signal_processing/include/spl_inl_mips.h',
@@ -212,7 +211,7 @@
},
], # targets
}],
- ['target_arch=="arm" and arm_version>=7 or target_arch=="arm64"', {
+ ['build_with_neon==1', {
'targets': [
{
'target_name': 'common_audio_neon',
@@ -225,15 +224,6 @@
'signal_processing/downsample_fast_neon.c',
'signal_processing/min_max_operations_neon.c',
],
- 'conditions': [
- # Disable LTO in common_audio_neon target due to compiler bug
- ['use_lto==1', {
- 'cflags!': [
- '-flto',
- '-ffat-lto-objects',
- ],
- }],
- ],
},
], # targets
}],
diff --git a/webrtc/modules/audio_coding/BUILD.gn b/webrtc/modules/audio_coding/BUILD.gn
index 50438f9..15ea369 100644
--- a/webrtc/modules/audio_coding/BUILD.gn
+++ b/webrtc/modules/audio_coding/BUILD.gn
@@ -528,6 +528,7 @@
"codecs/isac/fix/source/initialize.c",
"codecs/isac/fix/source/isacfix.c",
"codecs/isac/fix/source/lattice.c",
+ "codecs/isac/fix/source/lattice_c.c",
"codecs/isac/fix/source/lpc_masking_model.c",
"codecs/isac/fix/source/lpc_masking_model.h",
"codecs/isac/fix/source/lpc_tables.c",
@@ -566,27 +567,19 @@
"../../system_wrappers",
]
- if (current_cpu == "arm64") {
+ if (rtc_build_with_neon) {
deps += [ ":isac_neon" ]
}
- if (rtc_build_armv7_neon) {
- deps += [ ":isac_neon" ]
-
- # Enable compilation for the ARM v7 Neon instruction set. This is needed
- # since //build/config/arm.gni only enables Neon for iOS, not Android.
- # This provides the same functionality as webrtc/build/arm_neon.gypi.
- # TODO(kjellander): Investigate if this can be moved into webrtc.gni or
- # //build/config/arm.gni instead, to reduce code duplication.
- # Remove the -mfpu=vfpv3-d16 cflag.
- configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
- cflags = [ "-mfpu=neon" ]
-
+ if (current_cpu == "arm" && arm_version >= 7) {
sources += [
"codecs/isac/fix/source/lattice_armv7.S",
"codecs/isac/fix/source/pitch_filter_armv6.S",
]
- sources -= [ "codecs/isac/fix/source/pitch_filter_c.c" ]
+ sources -= [
+ "codecs/isac/fix/source/lattice_c.c",
+ "codecs/isac/fix/source/pitch_filter_c.c",
+ ]
}
if (current_cpu == "mipsel") {
@@ -597,7 +590,10 @@
"codecs/isac/fix/source/pitch_estimator_mips.c",
"codecs/isac/fix/source/transform_mips.c",
]
- sources -= [ "codecs/isac/fix/source/pitch_estimator_c.c" ]
+ sources -= [
+ "codecs/isac/fix/source/lattice_c.c",
+ "codecs/isac/fix/source/pitch_estimator_c.c",
+ ]
if (mips_dsp_rev > 0) {
sources += [ "codecs/isac/fix/source/filterbanks_mips.c" ]
}
@@ -609,13 +605,9 @@
sources -= [ "codecs/isac/fix/source/pitch_filter_c.c" ]
}
}
-
- if (!rtc_build_armv7_neon && current_cpu != "mipsel") {
- sources += [ "codecs/isac/fix/source/lattice_c.c" ]
- }
}
-if (rtc_build_armv7_neon || current_cpu == "arm64") {
+if (rtc_build_with_neon) {
source_set("isac_neon") {
sources = [
"codecs/isac/fix/source/entropy_coding_neon.c",
@@ -623,26 +615,23 @@
"codecs/isac/fix/source/lattice_neon.c",
"codecs/isac/fix/source/transform_neon.c",
]
-
- if (rtc_build_armv7_neon) {
- # Enable compilation for the ARM v7 Neon instruction set. This is needed
- # since //build/config/arm.gni only enables Neon for iOS, not Android.
- # This provides the same functionality as webrtc/build/arm_neon.gypi.
- # TODO(kjellander): Investigate if this can be moved into webrtc.gni or
- # //build/config/arm.gni instead, to reduce code duplication.
- # Remove the -mfpu=vfpv3-d16 cflag.
- configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
- cflags = [ "-mfpu=neon" ]
- }
-
if (current_cpu != "arm64" || !is_clang) {
# Disable AllpassFilter2FixDec16Neon function due to a clang bug.
- # Refer more details at:
+ # For more details refer to:
# https://code.google.com/p/webrtc/issues/detail?id=4567
sources += [ "codecs/isac/fix/source/filterbanks_neon.c" ]
}
- # Disable LTO in audio_processing_neon target due to compiler bug.
+ if (current_cpu != "arm64") {
+ # Enable compilation for the NEON instruction set. This is needed
+ # since //build/config/arm.gni only enables NEON for iOS, not Android.
+ # This provides the same functionality as webrtc/build/arm_neon.gypi.
+ configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
+ cflags = [ "-mfpu=neon" ]
+ }
+
+ # Disable LTO on NEON targets due to compiler bug.
+ # TODO(fdegans): Enable this. See crbug.com/408997.
if (rtc_use_lto) {
cflags -= [
"-flto",
diff --git a/webrtc/modules/audio_coding/codecs/isac/isacfix.gypi b/webrtc/modules/audio_coding/codecs/isac/isacfix.gypi
index a85adbe..68aa8d0 100644
--- a/webrtc/modules/audio_coding/codecs/isac/isacfix.gypi
+++ b/webrtc/modules/audio_coding/codecs/isac/isacfix.gypi
@@ -89,13 +89,8 @@
'fix/source/lattice_c.c',
'fix/source/pitch_filter_c.c',
],
- 'conditions': [
- ['arm_neon==1 or arm_neon_optional==1', {
- 'dependencies': [ 'isac_neon' ],
- }],
- ],
}],
- ['target_arch=="arm64"', {
+ ['build_with_neon==1', {
'dependencies': ['isac_neon', ],
}],
['target_arch=="mipsel" and mips_arch_variant!="r6"', {
@@ -131,7 +126,7 @@
},
],
'conditions': [
- ['target_arch=="arm" and arm_version>=7 or target_arch=="arm64"', {
+ ['build_with_neon==1', {
'targets': [
{
'target_name': 'isac_neon',
@@ -147,18 +142,11 @@
'fix/source/transform_neon.c',
],
'conditions': [
- # Disable LTO in isac_neon target due to compiler bug
- ['use_lto==1', {
- 'cflags!': [
- '-flto',
- '-ffat-lto-objects',
- ],
- }],
- # Disable AllpassFilter2FixDec16Neon function due to a clang
- # bug. Refer more details at:
+ # Disable AllpassFilter2FixDec16Neon function due to a clang bug.
+ # For more details refer to:
# https://code.google.com/p/webrtc/issues/detail?id=4567
['target_arch!="arm64" or clang==0', {
- 'sources': ['fix/source/filterbanks_neon.c',],
+ 'sources': ['fix/source/filterbanks_neon.c',],
}]
],
},
diff --git a/webrtc/modules/audio_processing/BUILD.gn b/webrtc/modules/audio_processing/BUILD.gn
index ce750b6..907f22b 100644
--- a/webrtc/modules/audio_processing/BUILD.gn
+++ b/webrtc/modules/audio_processing/BUILD.gn
@@ -180,7 +180,7 @@
deps += [ ":audio_processing_sse2" ]
}
- if (rtc_build_armv7_neon || current_cpu == "arm64") {
+ if (rtc_build_with_neon) {
deps += [ ":audio_processing_neon" ]
}
@@ -242,7 +242,7 @@
}
}
-if (rtc_build_armv7_neon || current_cpu == "arm64") {
+if (rtc_build_with_neon) {
source_set("audio_processing_neon") {
sources = [
"aec/aec_core_neon.c",
@@ -251,32 +251,28 @@
"ns/nsx_core_neon.c",
]
- configs += [ "../..:common_config" ]
- public_configs = [ "../..:common_inherited_config" ]
-
- deps = [
- "../../common_audio",
- ]
-
- # Enable compilation for the ARM v7 Neon instruction set. This is needed
- # since //build/config/arm.gni only enables Neon for iOS, not Android.
- # This provides the same functionality as webrtc/build/arm_neon.gypi.
- # TODO(kjellander): Investigate if this can be moved into webrtc.gni or
- # //build/config/arm.gni instead, to reduce code duplication.
- # Remove the -mfpu=vfpv3-d16 cflag.
- configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
-
- # "-mfpu=neon" is not requried for arm64 in GCC.
if (current_cpu != "arm64") {
+ # Enable compilation for the NEON instruction set. This is needed
+ # since //build/config/arm.gni only enables NEON for iOS, not Android.
+ # This provides the same functionality as webrtc/build/arm_neon.gypi.
+ configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
cflags = [ "-mfpu=neon" ]
}
- # Disable LTO in audio_processing_neon target due to compiler bug.
+ # Disable LTO on NEON targets due to compiler bug.
+ # TODO(fdegans): Enable this. See crbug.com/408997.
if (rtc_use_lto) {
cflags -= [
"-flto",
"-ffat-lto-objects",
]
}
+
+ configs += [ "../..:common_config" ]
+ public_configs = [ "../..:common_inherited_config" ]
+
+ deps = [
+ "../../common_audio",
+ ]
}
}
diff --git a/webrtc/modules/audio_processing/audio_processing.gypi b/webrtc/modules/audio_processing/audio_processing.gypi
index a4f9b39..f0d5669 100644
--- a/webrtc/modules/audio_processing/audio_processing.gypi
+++ b/webrtc/modules/audio_processing/audio_processing.gypi
@@ -186,7 +186,7 @@
['target_arch=="ia32" or target_arch=="x64"', {
'dependencies': ['audio_processing_sse2',],
}],
- ['(target_arch=="arm" and arm_version>=7) or target_arch=="arm64"', {
+ ['build_with_neon==1', {
'dependencies': ['audio_processing_neon',],
}],
['target_arch=="mipsel" and mips_arch_variant!="r6"', {
@@ -249,7 +249,7 @@
},
],
}],
- ['(target_arch=="arm" and arm_version>=7) or target_arch=="arm64"', {
+ ['build_with_neon==1', {
'targets': [{
'target_name': 'audio_processing_neon',
'type': 'static_library',
@@ -263,15 +263,6 @@
'aecm/aecm_core_neon.c',
'ns/nsx_core_neon.c',
],
- 'conditions': [
- # Disable LTO in audio_processing_neon target due to compiler bug
- ['use_lto==1', {
- 'cflags!': [
- '-flto',
- '-ffat-lto-objects',
- ],
- }],
- ],
}],
}],
],