Separate build targets for aec3 and aec3_unittests

Bug: webrtc:8844
Change-Id: Id6a98eae19aaedc87c3f402a004f58f0290d5c28
Reviewed-on: https://webrtc-review.googlesource.com/56580
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22173}
diff --git a/api/audio/BUILD.gn b/api/audio/BUILD.gn
index 73973bd..ab9bae8 100644
--- a/api/audio/BUILD.gn
+++ b/api/audio/BUILD.gn
@@ -53,6 +53,7 @@
   deps = [
     ":aec3_config",
     ":echo_control",
+    "../../modules/audio_processing/aec3",
   ]
 }
 
diff --git a/audio/BUILD.gn b/audio/BUILD.gn
index 618ec84..72b27eb 100644
--- a/audio/BUILD.gn
+++ b/audio/BUILD.gn
@@ -51,6 +51,7 @@
     "../api:libjingle_peerconnection_api",
     "../api:optional",
     "../api:transport_api",
+    "../api/audio:aec3_factory",
     "../api/audio:audio_mixer_api",
     "../api/audio_codecs:audio_codecs_api",
     "../api/audio_codecs:builtin_audio_encoder_factory",
diff --git a/modules/BUILD.gn b/modules/BUILD.gn
index c4010a2..aa76b0f 100644
--- a/modules/BUILD.gn
+++ b/modules/BUILD.gn
@@ -258,6 +258,7 @@
       "audio_device:audio_device_unittests",
       "audio_mixer:audio_mixer_unittests",
       "audio_processing:audio_processing_unittests",
+      "audio_processing/aec3:aec3_unittests",
       "bitrate_controller:bitrate_controller_unittests",
       "congestion_controller:congestion_controller_unittests",
       "pacing:pacing_unittests",
diff --git a/modules/audio_processing/BUILD.gn b/modules/audio_processing/BUILD.gn
index 0528479..6a1a3bb 100644
--- a/modules/audio_processing/BUILD.gn
+++ b/modules/audio_processing/BUILD.gn
@@ -35,84 +35,6 @@
     "aec/aec_resampler.h",
     "aec/echo_cancellation.cc",
     "aec/echo_cancellation.h",
-    "aec3/adaptive_fir_filter.cc",
-    "aec3/adaptive_fir_filter.h",
-    "aec3/aec3_common.cc",
-    "aec3/aec3_common.h",
-    "aec3/aec3_fft.cc",
-    "aec3/aec3_fft.h",
-    "aec3/aec_state.cc",
-    "aec3/aec_state.h",
-    "aec3/block_framer.cc",
-    "aec3/block_framer.h",
-    "aec3/block_processor.cc",
-    "aec3/block_processor.h",
-    "aec3/block_processor_metrics.cc",
-    "aec3/block_processor_metrics.h",
-    "aec3/cascaded_biquad_filter.cc",
-    "aec3/cascaded_biquad_filter.h",
-    "aec3/comfort_noise_generator.cc",
-    "aec3/comfort_noise_generator.h",
-    "aec3/decimator.cc",
-    "aec3/decimator.h",
-    "aec3/delay_estimate.h",
-    "aec3/downsampled_render_buffer.cc",
-    "aec3/downsampled_render_buffer.h",
-    "aec3/echo_canceller3.cc",
-    "aec3/echo_canceller3.h",
-    "aec3/echo_path_delay_estimator.cc",
-    "aec3/echo_path_delay_estimator.h",
-    "aec3/echo_path_variability.cc",
-    "aec3/echo_path_variability.h",
-    "aec3/echo_remover.cc",
-    "aec3/echo_remover.h",
-    "aec3/echo_remover_metrics.cc",
-    "aec3/echo_remover_metrics.h",
-    "aec3/erl_estimator.cc",
-    "aec3/erl_estimator.h",
-    "aec3/erle_estimator.cc",
-    "aec3/erle_estimator.h",
-    "aec3/fft_buffer.cc",
-    "aec3/fft_buffer.h",
-    "aec3/fft_data.h",
-    "aec3/frame_blocker.cc",
-    "aec3/frame_blocker.h",
-    "aec3/main_filter_update_gain.cc",
-    "aec3/main_filter_update_gain.h",
-    "aec3/matched_filter.cc",
-    "aec3/matched_filter.h",
-    "aec3/matched_filter_lag_aggregator.cc",
-    "aec3/matched_filter_lag_aggregator.h",
-    "aec3/matrix_buffer.cc",
-    "aec3/matrix_buffer.h",
-    "aec3/output_selector.cc",
-    "aec3/output_selector.h",
-    "aec3/render_buffer.cc",
-    "aec3/render_buffer.h",
-    "aec3/render_delay_buffer.cc",
-    "aec3/render_delay_buffer.h",
-    "aec3/render_delay_controller.cc",
-    "aec3/render_delay_controller.h",
-    "aec3/render_delay_controller_metrics.cc",
-    "aec3/render_delay_controller_metrics.h",
-    "aec3/render_signal_analyzer.cc",
-    "aec3/render_signal_analyzer.h",
-    "aec3/residual_echo_estimator.cc",
-    "aec3/residual_echo_estimator.h",
-    "aec3/shadow_filter_update_gain.cc",
-    "aec3/shadow_filter_update_gain.h",
-    "aec3/skew_estimator.cc",
-    "aec3/skew_estimator.h",
-    "aec3/subtractor.cc",
-    "aec3/subtractor.h",
-    "aec3/subtractor_output.h",
-    "aec3/suppression_filter.cc",
-    "aec3/suppression_filter.h",
-    "aec3/suppression_gain.cc",
-    "aec3/suppression_gain.h",
-    "aec3/vector_buffer.cc",
-    "aec3/vector_buffer.h",
-    "aec3/vector_math.h",
     "agc/agc.cc",
     "agc/agc.h",
     "agc/agc_manager_direct.cc",
@@ -221,8 +143,8 @@
     ":audio_processing_c",
     ":audio_processing_statistics",
     "..:module_api",
+    "../..:typedefs",
     "../..:webrtc_common",
-    "../../:typedefs",
     "../../api:array_view",
     "../../api:optional",
     "../../api/audio:aec3_config",
@@ -348,8 +270,8 @@
   }
 
   deps = [
+    "../..:typedefs",
     "../..:webrtc_common",
-    "../../:typedefs",
     "../../common_audio",
     "../../common_audio:common_audio_c",
     "../../rtc_base:checks",
@@ -430,8 +352,8 @@
   deps = [
     ":apm_logging",
     ":audio_processing_statistics",
+    "../..:typedefs",
     "../..:webrtc_common",
-    "../../:typedefs",
     "../../common_audio:common_audio",
     "../../common_audio:common_audio_c",
     "../../rtc_base:checks",
@@ -543,10 +465,6 @@
     sources = [
       "aec/echo_cancellation_unittest.cc",
       "aec/system_delay_unittest.cc",
-      "aec3/mock/mock_block_processor.h",
-      "aec3/mock/mock_echo_remover.h",
-      "aec3/mock/mock_render_delay_buffer.h",
-      "aec3/mock/mock_render_delay_controller.h",
       "agc/agc_manager_direct_unittest.cc",
       "agc/loudness_histogram_unittest.cc",
       "agc/mock_agc.h",
@@ -585,8 +503,8 @@
       ":audioproc_test_utils",
       ":mocks",
       "..:module_api",
+      "../..:typedefs",
       "../..:webrtc_common",
-      "../../:typedefs",
       "../../api:array_view",
       "../../api:optional",
       "../../api/audio:aec3_config",
@@ -601,6 +519,7 @@
       "../../system_wrappers:cpu_features_api",
       "../../test:test_support",
       "../audio_coding:neteq_input_audio_tools",
+      "aec3:aec3",
       "aec_dump:mock_aec_dump_unittests",
       "agc2:fixed_digital_unittests",
       "test/conversational_speech:unittest",
@@ -638,40 +557,6 @@
         "aec_dump:aec_dump_unittests",
       ]
       sources += [
-        "aec3/adaptive_fir_filter_unittest.cc",
-        "aec3/aec3_fft_unittest.cc",
-        "aec3/aec_state_unittest.cc",
-        "aec3/block_framer_unittest.cc",
-        "aec3/block_processor_metrics_unittest.cc",
-        "aec3/block_processor_unittest.cc",
-        "aec3/cascaded_biquad_filter_unittest.cc",
-        "aec3/comfort_noise_generator_unittest.cc",
-        "aec3/decimator_unittest.cc",
-        "aec3/echo_canceller3_unittest.cc",
-        "aec3/echo_path_delay_estimator_unittest.cc",
-        "aec3/echo_path_variability_unittest.cc",
-        "aec3/echo_remover_metrics_unittest.cc",
-        "aec3/echo_remover_unittest.cc",
-        "aec3/erl_estimator_unittest.cc",
-        "aec3/erle_estimator_unittest.cc",
-        "aec3/fft_data_unittest.cc",
-        "aec3/frame_blocker_unittest.cc",
-        "aec3/main_filter_update_gain_unittest.cc",
-        "aec3/matched_filter_lag_aggregator_unittest.cc",
-        "aec3/matched_filter_unittest.cc",
-        "aec3/output_selector_unittest.cc",
-        "aec3/render_buffer_unittest.cc",
-        "aec3/render_delay_buffer_unittest.cc",
-        "aec3/render_delay_controller_metrics_unittest.cc",
-        "aec3/render_delay_controller_unittest.cc",
-        "aec3/render_signal_analyzer_unittest.cc",
-        "aec3/residual_echo_estimator_unittest.cc",
-        "aec3/shadow_filter_update_gain_unittest.cc",
-        "aec3/skew_estimator_unittest.cc",
-        "aec3/subtractor_unittest.cc",
-        "aec3/suppression_filter_unittest.cc",
-        "aec3/suppression_gain_unittest.cc",
-        "aec3/vector_math_unittest.cc",
         "audio_processing_impl_locking_unittest.cc",
         "audio_processing_impl_unittest.cc",
         "audio_processing_unittest.cc",
@@ -775,6 +660,7 @@
         "../../system_wrappers",
         "../../system_wrappers:system_wrappers_default",
         "../../test:test_support",
+        "aec3:aec3",
         "aec_dump",
         "aec_dump:aec_dump_impl",
         "//testing/gtest",
@@ -823,8 +709,8 @@
     deps = [
       ":audio_processing",
       "..:module_api",
+      "../..:typedefs",
       "../..:webrtc_common",
-      "../../:typedefs",
       "../../common_audio:common_audio",
       "../../rtc_base:rtc_base_approved",
       "../../system_wrappers",
@@ -843,8 +729,8 @@
     ]
     deps = [
       ":audio_processing",
+      "../..:typedefs",
       "../..:webrtc_common",
-      "../../:typedefs",
       "../../system_wrappers",
       "../../system_wrappers:metrics_default",
     ]
@@ -899,8 +785,8 @@
 
       deps = [
         ":audioproc_debug_proto",
+        "../..:typedefs",
         "../..:webrtc_common",
-        "../../:typedefs",
         "../../rtc_base:protobuf_utils",
         "../../rtc_base:rtc_base_approved",
       ]
diff --git a/modules/audio_processing/aec3/BUILD.gn b/modules/audio_processing/aec3/BUILD.gn
new file mode 100644
index 0000000..0ac47fb
--- /dev/null
+++ b/modules/audio_processing/aec3/BUILD.gn
@@ -0,0 +1,199 @@
+# Copyright (c) 2018 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.
+
+import("//build/config/arm.gni")
+import("../../../webrtc.gni")
+
+config("apm_debug_dump") {
+  if (apm_debug_dump) {
+    defines = [ "WEBRTC_APM_DEBUG_DUMP=1" ]
+  } else {
+    defines = [ "WEBRTC_APM_DEBUG_DUMP=0" ]
+  }
+}
+
+rtc_static_library("aec3") {
+  visibility = [ "*" ]
+  configs += [ ":apm_debug_dump" ]
+  sources = [
+    "adaptive_fir_filter.cc",
+    "adaptive_fir_filter.h",
+    "aec3_common.cc",
+    "aec3_common.h",
+    "aec3_fft.cc",
+    "aec3_fft.h",
+    "aec_state.cc",
+    "aec_state.h",
+    "block_framer.cc",
+    "block_framer.h",
+    "block_processor.cc",
+    "block_processor.h",
+    "block_processor_metrics.cc",
+    "block_processor_metrics.h",
+    "cascaded_biquad_filter.cc",
+    "cascaded_biquad_filter.h",
+    "comfort_noise_generator.cc",
+    "comfort_noise_generator.h",
+    "decimator.cc",
+    "decimator.h",
+    "delay_estimate.h",
+    "downsampled_render_buffer.cc",
+    "downsampled_render_buffer.h",
+    "echo_canceller3.cc",
+    "echo_canceller3.h",
+    "echo_path_delay_estimator.cc",
+    "echo_path_delay_estimator.h",
+    "echo_path_variability.cc",
+    "echo_path_variability.h",
+    "echo_remover.cc",
+    "echo_remover.h",
+    "echo_remover_metrics.cc",
+    "echo_remover_metrics.h",
+    "erl_estimator.cc",
+    "erl_estimator.h",
+    "erle_estimator.cc",
+    "erle_estimator.h",
+    "fft_buffer.cc",
+    "fft_buffer.h",
+    "fft_data.h",
+    "frame_blocker.cc",
+    "frame_blocker.h",
+    "main_filter_update_gain.cc",
+    "main_filter_update_gain.h",
+    "matched_filter.cc",
+    "matched_filter.h",
+    "matched_filter_lag_aggregator.cc",
+    "matched_filter_lag_aggregator.h",
+    "matrix_buffer.cc",
+    "matrix_buffer.h",
+    "output_selector.cc",
+    "output_selector.h",
+    "render_buffer.cc",
+    "render_buffer.h",
+    "render_delay_buffer.cc",
+    "render_delay_buffer.h",
+    "render_delay_controller.cc",
+    "render_delay_controller.h",
+    "render_delay_controller_metrics.cc",
+    "render_delay_controller_metrics.h",
+    "render_signal_analyzer.cc",
+    "render_signal_analyzer.h",
+    "residual_echo_estimator.cc",
+    "residual_echo_estimator.h",
+    "shadow_filter_update_gain.cc",
+    "shadow_filter_update_gain.h",
+    "skew_estimator.cc",
+    "skew_estimator.h",
+    "subtractor.cc",
+    "subtractor.h",
+    "subtractor_output.h",
+    "suppression_filter.cc",
+    "suppression_filter.h",
+    "suppression_gain.cc",
+    "suppression_gain.h",
+    "vector_buffer.cc",
+    "vector_buffer.h",
+    "vector_math.h",
+  ]
+
+  defines = []
+  deps = [
+    "..:aec_core",
+    "..:apm_logging",
+    "..:audio_processing",
+    "../../..:typedefs",
+    "../../../api:array_view",
+    "../../../api:optional",
+    "../../../api/audio:aec3_config",
+    "../../../api/audio:echo_control",
+    "../../../common_audio:common_audio_c",
+    "../../../rtc_base:checks",
+    "../../../rtc_base:rtc_base_approved",
+    "../../../system_wrappers:cpu_features_api",
+    "../../../system_wrappers:metrics_api",
+  ]
+
+  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
+}
+
+if (rtc_include_tests) {
+  rtc_source_set("aec3_unittests") {
+    testonly = true
+
+    configs += [ ":apm_debug_dump" ]
+    sources = [
+      "mock/mock_block_processor.h",
+      "mock/mock_echo_remover.h",
+      "mock/mock_render_delay_buffer.h",
+      "mock/mock_render_delay_controller.h",
+    ]
+
+    deps = [
+      ":aec3",
+      "..:apm_logging",
+      "..:audio_processing",
+      "..:audio_processing_unittests",
+      "../../..:typedefs",
+      "../../../api:array_view",
+      "../../../api:optional",
+      "../../../api/audio:aec3_config",
+      "../../../rtc_base:checks",
+      "../../../rtc_base:rtc_base_approved",
+      "../../../system_wrappers:cpu_features_api",
+      "../../../test:test_support",
+    ]
+
+    defines = []
+
+    if (rtc_enable_protobuf) {
+      sources += [
+        "adaptive_fir_filter_unittest.cc",
+        "aec3_fft_unittest.cc",
+        "aec_state_unittest.cc",
+        "block_framer_unittest.cc",
+        "block_processor_metrics_unittest.cc",
+        "block_processor_unittest.cc",
+        "cascaded_biquad_filter_unittest.cc",
+        "comfort_noise_generator_unittest.cc",
+        "decimator_unittest.cc",
+        "echo_canceller3_unittest.cc",
+        "echo_path_delay_estimator_unittest.cc",
+        "echo_path_variability_unittest.cc",
+        "echo_remover_metrics_unittest.cc",
+        "echo_remover_unittest.cc",
+        "erl_estimator_unittest.cc",
+        "erle_estimator_unittest.cc",
+        "fft_data_unittest.cc",
+        "frame_blocker_unittest.cc",
+        "main_filter_update_gain_unittest.cc",
+        "matched_filter_lag_aggregator_unittest.cc",
+        "matched_filter_unittest.cc",
+        "output_selector_unittest.cc",
+        "render_buffer_unittest.cc",
+        "render_delay_buffer_unittest.cc",
+        "render_delay_controller_metrics_unittest.cc",
+        "render_delay_controller_unittest.cc",
+        "render_signal_analyzer_unittest.cc",
+        "residual_echo_estimator_unittest.cc",
+        "shadow_filter_update_gain_unittest.cc",
+        "skew_estimator_unittest.cc",
+        "subtractor_unittest.cc",
+        "suppression_filter_unittest.cc",
+        "suppression_gain_unittest.cc",
+        "vector_math_unittest.cc",
+      ]
+    }
+
+    if ((!build_with_chromium || is_win) && is_clang) {
+      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
+      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
+    }
+
+    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
+  }
+}
diff --git a/test/fuzzers/BUILD.gn b/test/fuzzers/BUILD.gn
index fad746d..2d2d77c 100644
--- a/test/fuzzers/BUILD.gn
+++ b/test/fuzzers/BUILD.gn
@@ -445,6 +445,7 @@
     ":audio_processing_fuzzer_helper",
     ":fuzz_data_helper",
     "../../modules/audio_processing",
+    "../../modules/audio_processing/aec3",
     "../../rtc_base:rtc_base_approved",
   ]
 }