Add support for stand-alone Fuchsia build.

When target_os is set to "fuchsia":
BUILD: suppress Wundef flag
DEPS: download the Fuchsia SDK
audio_encoding: add header include
video_capture: video_capture_factory is not yet implemented for Fuchsia
so we add a null capture factory when building for Fuchsia.

Bug: webrtc:14061
Change-Id: Id6ca7418859c85293a0a5e2a8427807ee039db2c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/262200
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Minyue Li <minyue@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37030}
diff --git a/BUILD.gn b/BUILD.gn
index e290a6e..3ad9c97 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -356,10 +356,14 @@
     }
 
     if (is_clang) {
-      cflags += [
-        "-Wc++11-narrowing",
-        "-Wundef",
-      ]
+      cflags += [ "-Wc++11-narrowing" ]
+
+      if (!is_fuchsia) {
+        # Compiling with the Fuchsia SDK results in Wundef errors
+        # TODO(bugs.fuchsia.dev/100722): Remove from (!is_fuchsia) branch when
+        # Fuchsia build errors are fixed.
+        cflags += [ "-Wundef" ]
+      }
 
       if (!is_nacl) {
         # Flags NaCl (Clang 3.7) do not recognize.
diff --git a/DEPS b/DEPS
index e8120ae..6c97f73 100644
--- a/DEPS
+++ b/DEPS
@@ -2256,6 +2256,17 @@
     'action': ['python3', 'src/build/mac_toolchain.py'],
   },
   {
+    # Update the Fuchsia SDK if necessary.
+    'name': 'Download Fuchsia SDK',
+    'pattern': '.',
+    'condition': 'checkout_fuchsia',
+    'action': [
+      'python3',
+      'src/build/fuchsia/update_sdk.py',
+      '--default-bucket=fuchsia',
+    ],
+  },
+  {
     # Note: On Win, this should run after win_toolchain, as it may use it.
     'name': 'clang',
     'pattern': '.',
diff --git a/modules/audio_coding/neteq/tools/rtp_encode.cc b/modules/audio_coding/neteq/tools/rtp_encode.cc
index ee392f2..6aeeb6d 100644
--- a/modules/audio_coding/neteq/tools/rtp_encode.cc
+++ b/modules/audio_coding/neteq/tools/rtp_encode.cc
@@ -13,7 +13,7 @@
 #ifdef WIN32
 #include <winsock2.h>
 #endif
-#ifdef WEBRTC_LINUX
+#if defined(WEBRTC_LINUX) || defined(WEBRTC_FUCHSIA)
 #include <netinet/in.h>
 #endif
 
diff --git a/modules/video_capture/BUILD.gn b/modules/video_capture/BUILD.gn
index 616be5d..ad2d85e 100644
--- a/modules/video_capture/BUILD.gn
+++ b/modules/video_capture/BUILD.gn
@@ -102,6 +102,9 @@
         ]
       }
     }
+    if (is_fuchsia) {
+      sources = [ "video_capture_factory_null.cc" ]
+    }
 
     if (build_with_mozilla && is_android) {
       include_dirs = [
diff --git a/modules/video_capture/video_capture_factory_null.cc b/modules/video_capture/video_capture_factory_null.cc
new file mode 100644
index 0000000..7808d19
--- /dev/null
+++ b/modules/video_capture/video_capture_factory_null.cc
@@ -0,0 +1,27 @@
+/*
+ *  Copyright (c) 2022 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.
+ */
+
+#include "modules/video_capture/video_capture_impl.h"
+
+namespace webrtc {
+namespace videocapturemodule {
+
+// static
+VideoCaptureModule::DeviceInfo* VideoCaptureImpl::CreateDeviceInfo() {
+  return nullptr;
+}
+
+rtc::scoped_refptr<VideoCaptureModule> VideoCaptureImpl::Create(
+    const char* device_id) {
+  return nullptr;
+}
+
+}  // namespace videocapturemodule
+}  // namespace webrtc