Create a peer connection factory builder

Similar to the builder on android: https://cs.chromium.org/chromium/src/third_party/webrtc/sdk/android/api/org/webrtc/PeerConnectionFactory.java?rcl=b90e63c620877712e45ee320cfa25cb825bf5373&l=134

1. A builder will allow us to choose what module factories to provide and use default for the others.
2. A helper category is added to provide helpers functions for creating common builders.

Bug: None
Change-Id: I5889bdd7dc2a2aeded62ef5f2c2381edd07089b3
Reviewed-on: https://webrtc-review.googlesource.com/83280
Commit-Queue: Anders Carlsson <andersc@webrtc.org>
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Reviewed-by: Anders Carlsson <andersc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23696}
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 822c3c2..1e3bd62 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -706,6 +706,10 @@
         "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h",
         "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Private.h",
         "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm",
+        "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactoryBuilder+DefaultComponents.h",
+        "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactoryBuilder+DefaultComponents.mm",
+        "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactoryBuilder.h",
+        "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactoryBuilder.mm",
         "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactoryOptions+Private.h",
         "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactoryOptions.mm",
         "objc/Framework/Classes/PeerConnection/RTCRtcpParameters+Private.h",
@@ -786,12 +790,16 @@
         ":videorendereradapter_objc",
         ":videosource_objc",
         "../api:libjingle_peerconnection_api",
+        "../api/audio_codecs:audio_codecs_api",
         "../api/audio_codecs:builtin_audio_decoder_factory",
+        "../api/audio_codecs:builtin_audio_encoder_factory",
         "../api/video:video_frame",
         "../api/video_codecs:video_codecs_api",
         "../common_video",
         "../media:rtc_media_base",
         "../modules:module_api",
+        "../modules/audio_device:audio_device_api",
+        "../modules/audio_processing:audio_processing",
         "../modules/video_coding:video_codec_interface",
         "../pc:create_pc_factory",
         "../pc:peerconnection",
@@ -926,6 +934,7 @@
           "objc/Framework/UnitTests/RTCIceServerTest.mm",
           "objc/Framework/UnitTests/RTCIntervalRangeTests.mm",
           "objc/Framework/UnitTests/RTCMediaConstraintsTest.mm",
+          "objc/Framework/UnitTests/RTCPeerConnectionFactoryBuilderTest.mm",
           "objc/Framework/UnitTests/RTCPeerConnectionTest.mm",
           "objc/Framework/UnitTests/RTCSessionDescriptionTest.mm",
           "objc/Framework/UnitTests/RTCTracingTest.mm",
@@ -957,9 +966,14 @@
           ":videosource_objc",
           ":videotoolbox_objc",
           "../../system_wrappers:system_wrappers_default",
+          "../api/audio_codecs:audio_codecs_api",
+          "../api/audio_codecs:builtin_audio_decoder_factory",
+          "../api/audio_codecs:builtin_audio_encoder_factory",
           "../api/video_codecs:video_codecs_api",
           "../media:rtc_media_base",
           "../modules:module_api",
+          "../modules/audio_device:audio_device_api",
+          "../modules/audio_processing:audio_processing",
           "../modules/video_coding:video_codec_interface",
           "../rtc_base:rtc_base_tests_utils",
           "//test:test_support",