diff --git a/PRESUBMIT.py b/PRESUBMIT.py index a973ffeb3a..86d5c21043 100755 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py @@ -6,6 +6,7 @@ # in the file PATENTS. All contributing project authors may # be found in the AUTHORS file in the root of the source tree. +import json import os import re import sys @@ -291,6 +292,35 @@ def _CheckNoSourcesAbove(input_api, gn_files, output_api): items=violating_gn_files)] return [] +def _CheckNoMixingCAndCCSources(input_api, gn_files, output_api): + # Disallow mixing .c and .cc source files in the same target. + source_pattern = input_api.re.compile(r' +sources \+?= \[(.*?)\]', + re.MULTILINE | re.DOTALL) + file_pattern = input_api.re.compile(r'"(.*)"') + violating_gn_files = dict() + for gn_file in gn_files: + contents = input_api.ReadFile(gn_file) + for source_block_match in source_pattern.finditer(contents): + c_files = [] + cc_files = [] + for file_list_match in file_pattern.finditer(source_block_match.group(1)): + source_file = file_list_match.group(1) + if source_file.endswith('.c'): + c_files.append(source_file) + if source_file.endswith('.cc'): + cc_files.append(source_file) + if c_files and cc_files: + violating_gn_files[gn_file.LocalPath()] = sorted(c_files + cc_files) + if violating_gn_files: + return [output_api.PresubmitError( + 'GN targets cannot mix .cc and .c source files. Please create a ' + 'separate target for each collection of sources.\n' + 'Mixed sources: \n' + '%s\n' + 'Violating GN files:' % json.dumps(violating_gn_files, indent=2), + items=violating_gn_files.keys())] + return [] + def _CheckGnChanges(input_api, output_api): source_file_filter = lambda x: input_api.FilterSourceFile( x, white_list=(r'.+\.(gn|gni)$',)) @@ -304,6 +334,7 @@ def _CheckGnChanges(input_api, output_api): if gn_files: result.extend(_CheckNoRtcBaseDeps(input_api, gn_files, output_api)) result.extend(_CheckNoSourcesAbove(input_api, gn_files, output_api)) + result.extend(_CheckNoMixingCAndCCSources(input_api, gn_files, output_api)) return result def _CheckUnwantedDependencies(input_api, output_api): diff --git a/webrtc/common_audio/BUILD.gn b/webrtc/common_audio/BUILD.gn index 39702dc13c..5d7a9c6123 100644 --- a/webrtc/common_audio/BUILD.gn +++ b/webrtc/common_audio/BUILD.gn @@ -28,8 +28,6 @@ rtc_static_library("common_audio") { "blocker.h", "channel_buffer.cc", "channel_buffer.h", - "fft4g.c", - "fft4g.h", "fir_filter.cc", "fir_filter.h", "fir_filter_neon.h", @@ -49,6 +47,65 @@ rtc_static_library("common_audio") { "resampler/resampler.cc", "resampler/sinc_resampler.cc", "resampler/sinc_resampler.h", + "smoothing_filter.cc", + "smoothing_filter.h", + "sparse_fir_filter.cc", + "sparse_fir_filter.h", + "vad/include/vad.h", + "vad/vad.cc", + "wav_file.cc", + "wav_file.h", + "wav_header.cc", + "wav_header.h", + "window_generator.cc", + "window_generator.h", + ] + + deps = [ + "../base:rtc_analytics", + "../system_wrappers", + ] + public_deps = [ + ":common_audio_c", + ] + + defines = [] + if (rtc_use_openmax_dl) { + sources += [ + "real_fourier_openmax.cc", + "real_fourier_openmax.h", + ] + defines += [ "RTC_USE_OPENMAX_DL" ] + if (rtc_build_openmax_dl) { + deps += [ "//third_party/openmax_dl/dl" ] + } + } + + if (rtc_build_with_neon) { + deps += [ ":common_audio_neon" ] + } + + if (is_win) { + cflags = [ "/wd4334" ] # Ignore warning on shift operator promotion. + } + + public_configs = [ ":common_audio_config" ] + + if (!build_with_chromium && is_clang) { + # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). + suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] + } + + if (current_cpu == "x86" || current_cpu == "x64") { + deps += [ ":common_audio_sse2" ] + } +} + +rtc_source_set("common_audio_c") { + visibility = [ ":*" ] # Only targets in this file can depend on this. + sources = [ + "fft4g.c", + "fft4g.h", "ring_buffer.c", "ring_buffer.h", "signal_processing/auto_corr_to_refl_coef.c", @@ -86,13 +143,7 @@ rtc_static_library("common_audio") { "signal_processing/splitting_filter.c", "signal_processing/sqrt_of_one_minus_x_squared.c", "signal_processing/vector_scaling_operations.c", - "smoothing_filter.cc", - "smoothing_filter.h", - "sparse_fir_filter.cc", - "sparse_fir_filter.h", - "vad/include/vad.h", "vad/include/webrtc_vad.h", - "vad/vad.cc", "vad/vad_core.c", "vad/vad_core.h", "vad/vad_filterbank.c", @@ -102,31 +153,8 @@ rtc_static_library("common_audio") { "vad/vad_sp.c", "vad/vad_sp.h", "vad/webrtc_vad.c", - "wav_file.cc", - "wav_file.h", - "wav_header.cc", - "wav_header.h", - "window_generator.cc", - "window_generator.h", ] - deps = [ - "../base:rtc_analytics", - "../system_wrappers", - ] - - defines = [] - if (rtc_use_openmax_dl) { - sources += [ - "real_fourier_openmax.cc", - "real_fourier_openmax.h", - ] - defines += [ "RTC_USE_OPENMAX_DL" ] - if (rtc_build_openmax_dl) { - deps += [ "//third_party/openmax_dl/dl" ] - } - } - if (current_cpu == "arm") { sources += [ "signal_processing/complex_bit_reverse_arm.S", @@ -140,10 +168,6 @@ rtc_static_library("common_audio") { } } - if (rtc_build_with_neon) { - deps += [ ":common_audio_neon" ] - } - if (current_cpu == "mipsel") { sources += [ "signal_processing/complex_bit_reverse_mips.c", @@ -176,15 +200,6 @@ rtc_static_library("common_audio") { } public_configs = [ ":common_audio_config" ] - - if (!build_with_chromium && is_clang) { - # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). - suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] - } - - if (current_cpu == "x86" || current_cpu == "x64") { - deps += [ ":common_audio_sse2" ] - } } if (current_cpu == "x86" || current_cpu == "x64") { @@ -210,6 +225,38 @@ if (rtc_build_with_neon) { sources = [ "fir_filter_neon.cc", "resampler/sinc_resampler_neon.cc", + ] + + 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. + suppressed_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", + "-ffat-lto-objects", + ] + } + + if (!build_with_chromium && is_clang) { + # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). + suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] + } + + public_deps = [ + ":common_audio_neon_c", + ] + } + + rtc_source_set("common_audio_neon_c") { + visibility = [ ":*" ] # Only targets in this file can depend on this. + sources = [ "signal_processing/cross_correlation_neon.c", "signal_processing/downsample_fast_neon.c", "signal_processing/min_max_operations_neon.c", diff --git a/webrtc/modules/audio_coding/BUILD.gn b/webrtc/modules/audio_coding/BUILD.gn index 77a9c3e264..efbf7e051b 100644 --- a/webrtc/modules/audio_coding/BUILD.gn +++ b/webrtc/modules/audio_coding/BUILD.gn @@ -225,10 +225,6 @@ rtc_static_library("g711") { "codecs/g711/audio_decoder_pcm.h", "codecs/g711/audio_encoder_pcm.cc", "codecs/g711/audio_encoder_pcm.h", - "codecs/g711/g711.c", - "codecs/g711/g711.h", - "codecs/g711/g711_interface.c", - "codecs/g711/g711_interface.h", ] public_configs = [ ":g711_config" ] @@ -237,6 +233,19 @@ rtc_static_library("g711") { ":audio_decoder_interface", ":audio_encoder_interface", ] + public_deps = [ + ":g711_c", + ] +} + +rtc_source_set("g711_c") { + visibility = [ ":*" ] # Only targets in this file can depend on this. + sources = [ + "codecs/g711/g711.c", + "codecs/g711/g711.h", + "codecs/g711/g711_interface.c", + "codecs/g711/g711_interface.h", + ] } config("g722_config") { @@ -252,11 +261,6 @@ rtc_static_library("g722") { "codecs/g722/audio_decoder_g722.h", "codecs/g722/audio_encoder_g722.cc", "codecs/g722/audio_encoder_g722.h", - "codecs/g722/g722_decode.c", - "codecs/g722/g722_enc_dec.h", - "codecs/g722/g722_encode.c", - "codecs/g722/g722_interface.c", - "codecs/g722/g722_interface.h", ] public_configs = [ ":g722_config" ] @@ -265,6 +269,20 @@ rtc_static_library("g722") { ":audio_decoder_interface", ":audio_encoder_interface", ] + public_deps = [ + ":g722_c", + ] +} + +rtc_source_set("g722_c") { + visibility = [ ":*" ] # Only targets in this file can depend on this. + sources = [ + "codecs/g722/g722_decode.c", + "codecs/g722/g722_enc_dec.h", + "codecs/g722/g722_encode.c", + "codecs/g722/g722_interface.c", + "codecs/g722/g722_interface.h", + ] } config("ilbc_config") { @@ -276,14 +294,32 @@ config("ilbc_config") { rtc_static_library("ilbc") { sources = [ - "codecs/ilbc/abs_quant.c", - "codecs/ilbc/abs_quant.h", - "codecs/ilbc/abs_quant_loop.c", - "codecs/ilbc/abs_quant_loop.h", "codecs/ilbc/audio_decoder_ilbc.cc", "codecs/ilbc/audio_decoder_ilbc.h", "codecs/ilbc/audio_encoder_ilbc.cc", "codecs/ilbc/audio_encoder_ilbc.h", + ] + + public_configs = [ ":ilbc_config" ] + + deps = [ + ":audio_decoder_interface", + ":audio_encoder_interface", + "../../base:rtc_base_approved", + "../../common_audio", + ] + public_deps = [ + ":ilbc_c", + ] +} + +rtc_source_set("ilbc_c") { + visibility = [ ":*" ] # Only targets in this file can depend on this. + sources = [ + "codecs/ilbc/abs_quant.c", + "codecs/ilbc/abs_quant.h", + "codecs/ilbc/abs_quant_loop.c", + "codecs/ilbc/abs_quant_loop.h", "codecs/ilbc/augmented_cb_corr.c", "codecs/ilbc/augmented_cb_corr.h", "codecs/ilbc/bw_expand.c", @@ -424,9 +460,6 @@ rtc_static_library("ilbc") { public_configs = [ ":ilbc_config" ] deps = [ - ":audio_decoder_interface", - ":audio_encoder_interface", - "../../base:rtc_base_approved", "../../common_audio", ] } @@ -448,6 +481,23 @@ config("isac_config") { } rtc_static_library("isac") { + sources = [ + "codecs/isac/main/source/audio_decoder_isac.cc", + "codecs/isac/main/source/audio_encoder_isac.cc", + ] + + deps = [ + ":audio_decoder_interface", + ":audio_encoder_interface", + ":isac_common", + ] + public_deps = [ + ":isac_c", + ] +} + +rtc_static_library("isac_c") { + visibility = [ ":*" ] # Only targets in this file can depend on this. sources = [ "codecs/isac/main/include/audio_decoder_isac.h", "codecs/isac/main/include/audio_encoder_isac.h", @@ -456,8 +506,6 @@ rtc_static_library("isac") { "codecs/isac/main/source/arith_routines.h", "codecs/isac/main/source/arith_routines_hist.c", "codecs/isac/main/source/arith_routines_logist.c", - "codecs/isac/main/source/audio_decoder_isac.cc", - "codecs/isac/main/source/audio_encoder_isac.cc", "codecs/isac/main/source/bandwidth_estimator.c", "codecs/isac/main/source/bandwidth_estimator.h", "codecs/isac/main/source/codec.h", @@ -512,9 +560,6 @@ rtc_static_library("isac") { public_configs = [ ":isac_config" ] deps = [ - ":audio_decoder_interface", - ":audio_encoder_interface", - ":isac_common", "../..:webrtc_common", "../../base:rtc_base_approved", "../../common_audio", @@ -529,6 +574,31 @@ config("isac_fix_config") { } rtc_static_library("isac_fix") { + sources = [ + "codecs/isac/fix/source/audio_decoder_isacfix.cc", + "codecs/isac/fix/source/audio_encoder_isacfix.cc", + ] + + public_configs = [ ":isac_fix_config" ] + + deps = [ + ":audio_decoder_interface", + ":audio_encoder_interface", + ":isac_common", + "../../common_audio", + "../../system_wrappers", + ] + public_deps = [ + ":isac_fix_c", + ] + + if (rtc_build_with_neon) { + deps += [ ":isac_neon" ] + } +} + +rtc_source_set("isac_fix_c") { + visibility = [ ":*" ] # Only targets in this file can depend on this. sources = [ "codecs/isac/fix/include/audio_decoder_isacfix.h", "codecs/isac/fix/include/audio_encoder_isacfix.h", @@ -537,8 +607,6 @@ rtc_static_library("isac_fix") { "codecs/isac/fix/source/arith_routines_hist.c", "codecs/isac/fix/source/arith_routines_logist.c", "codecs/isac/fix/source/arith_routins.h", - "codecs/isac/fix/source/audio_decoder_isacfix.cc", - "codecs/isac/fix/source/audio_encoder_isacfix.cc", "codecs/isac/fix/source/bandwidth_estimator.c", "codecs/isac/fix/source/bandwidth_estimator.h", "codecs/isac/fix/source/codec.h", @@ -582,18 +650,6 @@ rtc_static_library("isac_fix") { public_configs = [ ":isac_fix_config" ] - deps = [ - ":audio_decoder_interface", - ":audio_encoder_interface", - ":isac_common", - "../../common_audio", - "../../system_wrappers", - ] - - if (rtc_build_with_neon) { - deps += [ ":isac_neon" ] - } - if (current_cpu == "arm" && arm_version >= 7) { sources += [ "codecs/isac/fix/source/lattice_armv7.S", @@ -628,6 +684,10 @@ rtc_static_library("isac_fix") { sources -= [ "codecs/isac/fix/source/pitch_filter_c.c" ] } } + + deps = [ + "../../common_audio", + ] } if (rtc_build_with_neon) { @@ -676,8 +736,6 @@ rtc_static_library("pcm16b") { "codecs/pcm16b/audio_decoder_pcm16b.h", "codecs/pcm16b/audio_encoder_pcm16b.cc", "codecs/pcm16b/audio_encoder_pcm16b.h", - "codecs/pcm16b/pcm16b.c", - "codecs/pcm16b/pcm16b.h", ] deps = [ @@ -685,6 +743,18 @@ rtc_static_library("pcm16b") { ":audio_encoder_interface", ":g711", ] + public_deps = [ + ":pcm16b_c", + ] + public_configs = [ ":pcm16b_config" ] +} + +rtc_source_set("pcm16b_c") { + visibility = [ ":*" ] # Only targets in this file can depend on this. + sources = [ + "codecs/pcm16b/pcm16b.c", + "codecs/pcm16b/pcm16b.h", + ] public_configs = [ ":pcm16b_config" ] } @@ -699,9 +769,6 @@ rtc_static_library("webrtc_opus") { "codecs/opus/audio_decoder_opus.h", "codecs/opus/audio_encoder_opus.cc", "codecs/opus/audio_encoder_opus.h", - "codecs/opus/opus_inst.h", - "codecs/opus/opus_interface.c", - "codecs/opus/opus_interface.h", ] deps = [ @@ -711,6 +778,9 @@ rtc_static_library("webrtc_opus") { "../../base:rtc_analytics", "../../base:rtc_base_approved", ] + public_deps = [ + ":webrtc_opus_c", + ] defines = [] if (rtc_opus_variable_complexity) { @@ -719,6 +789,21 @@ rtc_static_library("webrtc_opus") { defines += [ "WEBRTC_OPUS_VARIABLE_COMPLEXITY=0" ] } + if (rtc_build_opus) { + public_deps += [ rtc_opus_dir ] + } else if (build_with_mozilla) { + include_dirs = [ getenv("DIST") + "/include/opus" ] + } +} + +rtc_source_set("webrtc_opus_c") { + visibility = [ ":*" ] # Only targets in this file can depend on this. + sources = [ + "codecs/opus/opus_inst.h", + "codecs/opus/opus_interface.c", + "codecs/opus/opus_interface.h", + ] + if (rtc_build_opus) { public_deps = [ rtc_opus_dir, @@ -726,6 +811,10 @@ rtc_static_library("webrtc_opus") { } else if (build_with_mozilla) { include_dirs = [ getenv("DIST") + "/include/opus" ] } + + deps = [ + "../../base:rtc_base_approved", + ] } if (rtc_enable_protobuf) { @@ -1568,12 +1657,18 @@ if (rtc_include_tests) { } } + rtc_source_set("isac_test_util") { + testonly = true + sources = [ + "codecs/isac/main/util/utility.c", + ] + } + rtc_executable("isac_test") { testonly = true sources = [ "codecs/isac/main/test/simpleKenny.c", - "codecs/isac/main/util/utility.c", ] include_dirs = [ @@ -1584,6 +1679,7 @@ if (rtc_include_tests) { deps = [ ":isac", + ":isac_test_util", "../../base:rtc_base_approved", ] @@ -1620,11 +1716,11 @@ if (rtc_include_tests) { sources = [ "codecs/isac/main/test/ReleaseTest-API/ReleaseTest-API.cc", - "codecs/isac/main/util/utility.c", ] deps = [ ":isac", + ":isac_test_util", "../../base:rtc_base_approved", ] @@ -1640,11 +1736,11 @@ if (rtc_include_tests) { sources = [ "codecs/isac/main/test/SwitchingSampRate/SwitchingSampRate.cc", - "codecs/isac/main/util/utility.c", ] deps = [ ":isac", + ":isac_test_util", ] include_dirs = [ diff --git a/webrtc/modules/audio_device/BUILD.gn b/webrtc/modules/audio_device/BUILD.gn index 1dee9437d3..0b210dc996 100644 --- a/webrtc/modules/audio_device/BUILD.gn +++ b/webrtc/modules/audio_device/BUILD.gn @@ -159,10 +159,8 @@ rtc_static_library("audio_device") { "mac/audio_device_mac.h", "mac/audio_mixer_manager_mac.cc", "mac/audio_mixer_manager_mac.h", - "mac/portaudio/pa_memorybarrier.h", - "mac/portaudio/pa_ringbuffer.c", - "mac/portaudio/pa_ringbuffer.h", ] + deps += [ ":mac_portaudio" ] libs = [ # Needed for CoreGraphics: "ApplicationServices.framework", @@ -243,6 +241,15 @@ rtc_static_library("audio_device") { } } +rtc_source_set("mac_portaudio") { + visibility = [ ":*" ] # Only targets in this file can depend on this. + sources = [ + "mac/portaudio/pa_memorybarrier.h", + "mac/portaudio/pa_ringbuffer.c", + "mac/portaudio/pa_ringbuffer.h", + ] +} + config("mock_audio_device_config") { if (is_win) { cflags = [ diff --git a/webrtc/modules/audio_processing/BUILD.gn b/webrtc/modules/audio_processing/BUILD.gn index 36c766798a..5ba9f3e42c 100644 --- a/webrtc/modules/audio_processing/BUILD.gn +++ b/webrtc/modules/audio_processing/BUILD.gn @@ -35,11 +35,6 @@ rtc_static_library("audio_processing") { "agc/agc_manager_direct.cc", "agc/agc_manager_direct.h", "agc/gain_map_internal.h", - "agc/legacy/analog_agc.c", - "agc/legacy/analog_agc.h", - "agc/legacy/digital_agc.c", - "agc/legacy/digital_agc.h", - "agc/legacy/gain_control.h", "agc/loudness_histogram.cc", "agc/loudness_histogram.h", "agc/utility.cc", @@ -168,6 +163,9 @@ rtc_static_library("audio_processing") { "../../audio/utility:audio_frame_operations", "../audio_coding:isac", ] + public_deps = [ + ":audio_processing_c", + ] if (apm_debug_dump) { defines += [ "WEBRTC_APM_DEBUG_DUMP=1" ] @@ -198,28 +196,8 @@ rtc_static_library("audio_processing") { if (rtc_prefer_fixed_point) { defines += [ "WEBRTC_NS_FIXED" ] - sources += [ - "ns/noise_suppression_x.c", - "ns/noise_suppression_x.h", - "ns/nsx_core.c", - "ns/nsx_core.h", - "ns/nsx_defines.h", - ] - if (current_cpu == "mipsel") { - sources += [ "ns/nsx_core_mips.c" ] - } else { - sources += [ "ns/nsx_core_c.c" ] - } } else { defines += [ "WEBRTC_NS_FLOAT" ] - sources += [ - "ns/defines.h", - "ns/noise_suppression.c", - "ns/noise_suppression.h", - "ns/ns_core.c", - "ns/ns_core.h", - "ns/windows_private.h", - ] } if (current_cpu == "x86" || current_cpu == "x64") { @@ -252,6 +230,47 @@ rtc_static_library("audio_processing") { ] } +rtc_source_set("audio_processing_c") { + visibility = [ ":*" ] # Only targets in this file can depend on this. + sources = [ + "agc/legacy/analog_agc.c", + "agc/legacy/analog_agc.h", + "agc/legacy/digital_agc.c", + "agc/legacy/digital_agc.h", + "agc/legacy/gain_control.h", + ] + + if (rtc_prefer_fixed_point) { + sources += [ + "ns/noise_suppression_x.c", + "ns/noise_suppression_x.h", + "ns/nsx_core.c", + "ns/nsx_core.h", + "ns/nsx_defines.h", + ] + if (current_cpu == "mipsel") { + sources += [ "ns/nsx_core_mips.c" ] + } else { + sources += [ "ns/nsx_core_c.c" ] + } + } else { + sources += [ + "ns/defines.h", + "ns/noise_suppression.c", + "ns/noise_suppression.h", + "ns/ns_core.c", + "ns/ns_core.h", + "ns/windows_private.h", + ] + } + + deps = [ + "../../base:rtc_base_approved", + "../../common_audio", + "../../system_wrappers", + ] +} + if (rtc_enable_protobuf) { proto_library("audioproc_debug_proto") { sources = [ @@ -287,7 +306,6 @@ if (rtc_build_with_neon) { sources = [ "aec/aec_core_neon.cc", "aecm/aecm_core_neon.cc", - "ns/nsx_core_neon.c", "utility/ooura_fft_neon.cc", "utility/ooura_fft_tables_neon_sse2.h", ] @@ -312,6 +330,9 @@ if (rtc_build_with_neon) { deps = [ "../../common_audio", ] + public_deps = [ + ":audio_processing_neon_c", + ] if (apm_debug_dump) { defines = [ "WEBRTC_APM_DEBUG_DUMP=1" ] @@ -319,6 +340,29 @@ if (rtc_build_with_neon) { defines = [ "WEBRTC_APM_DEBUG_DUMP=0" ] } } + + rtc_static_library("audio_processing_neon_c") { + sources = [ + "ns/nsx_core_neon.c", + ] + + 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. + suppressed_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", + "-ffat-lto-objects", + ] + } + } } if (rtc_include_tests) {