Revert of Remove typedefs.h from webrtc/ root (part 1) (patchset #3 id:40001 of https://codereview.webrtc.org/3007253002/ )

Reason for revert:
Breaks the Chromium WebRTC FYI bots:
https://build.chromium.org/p/chromium.webrtc.fyi/builders/ios-simulator/builds/2834
https://build.chromium.org/p/chromium.webrtc.fyi/builders/Win%20Builder/builds/11775

Example:
FAILED: obj/third_party/libjingle_xmpp/libjingle_xmpp_unittests/xmpplogintask_unittest.obj
ninja -t msvc -e environment.x86 -- E:\b\c\goma_client/gomacc.exe "e:\b\c\win_toolchain\vs_files\f53e4598951162bad6330f7a167486c7ae5db1e5\vc\bin\amd64_x86/cl.exe" /nologo /showIncludes  @obj/third_party/libjingle_xmpp/libjingle_xmpp_unittests/xmpplogintask_unittest.obj.rsp /c ../../third_party/libjingle_xmpp/xmpp/xmpplogintask_unittest.cc /Foobj/third_party/libjingle_xmpp/libjingle_xmpp_unittests/xmpplogintask_unittest.obj /Fd"obj/third_party/libjingle_xmpp/libjingle_xmpp_unittests_cc.pdb"
../../third_party/libjingle_xmpp/xmpp/xmpplogintask_unittest.cc(95): error C3861: 'FALLTHROUGH': identifier not found

Original issue's description:
> Remove typedefs.h from webrtc/ root (part 1)
>
> Split out webrtc-specific #defines from typedefs.h, into rtc_base/annotations.h and rtc_base/arch.h.
> Also removes the curiously named WEBRTC_CPU_DETECTION #define.
>
> BUG=webrtc:6854
>
> Review-Url: https://codereview.webrtc.org/3007253002
> Cr-Commit-Position: refs/heads/master@{#19752}
> Committed: https://chromium.googlesource.com/external/webrtc/+/a895836321e68b67ca2081c3bdbf6c08d8ee4b57

TBR=kwiberg@webrtc.org,solenberg@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:6854

Review-Url: https://codereview.webrtc.org/3013543002
Cr-Original-Commit-Position: refs/heads/master@{#19754}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: bdf3072f1a06c7af95420e314cac4de72b7f8248
diff --git a/common_audio/resampler/sinc_resampler.cc b/common_audio/resampler/sinc_resampler.cc
index 2f17ded..acf7d0f 100644
--- a/common_audio/resampler/sinc_resampler.cc
+++ b/common_audio/resampler/sinc_resampler.cc
@@ -160,12 +160,12 @@
           AlignedMalloc(sizeof(float) * kKernelStorageSize, 16))),
       input_buffer_(static_cast<float*>(
           AlignedMalloc(sizeof(float) * input_buffer_size_, 16))),
-#if (defined(WEBRTC_ARCH_X86_FAMILY) && !defined(__SSE2__))
+#if defined(WEBRTC_CPU_DETECTION)
       convolve_proc_(nullptr),
 #endif
       r1_(input_buffer_.get()),
       r2_(input_buffer_.get() + kKernelSize / 2) {
-#if (defined(WEBRTC_ARCH_X86_FAMILY) && !defined(__SSE2__))
+#if defined(WEBRTC_CPU_DETECTION)
   InitializeCPUSpecificFeatures();
   RTC_DCHECK(convolve_proc_);
 #endif
diff --git a/common_audio/resampler/sinc_resampler.h b/common_audio/resampler/sinc_resampler.h
index 50059e5..fa92163 100644
--- a/common_audio/resampler/sinc_resampler.h
+++ b/common_audio/resampler/sinc_resampler.h
@@ -149,7 +149,7 @@
   // TODO(ajm): Move to using a global static which must only be initialized
   // once by the user. We're not doing this initially, because we don't have
   // e.g. a LazyInstance helper in webrtc.
-#if (defined(WEBRTC_ARCH_X86_FAMILY) && !defined(__SSE2__))
+#if defined(WEBRTC_CPU_DETECTION)
   typedef float (*ConvolveProc)(const float*, const float*, const float*,
                                 double);
   ConvolveProc convolve_proc_;
diff --git a/modules/audio_coding/neteq/neteq_impl.cc b/modules/audio_coding/neteq/neteq_impl.cc
index f4ace1b..7858e84 100644
--- a/modules/audio_coding/neteq/neteq_impl.cc
+++ b/modules/audio_coding/neteq/neteq_impl.cc
@@ -935,7 +935,7 @@
           static_cast<uint32_t>(output_size_samples_));
       // Skipping break on purpose. Execution should move on into the
       // next case.
-      RTC_FALLTHROUGH();
+      FALLTHROUGH();
     }
     case kAudioRepetition: {
       // TODO(hlundin): Write test for this.
diff --git a/modules/audio_device/ios/voice_processing_audio_unit.mm b/modules/audio_device/ios/voice_processing_audio_unit.mm
index 591a176..3701f3f 100644
--- a/modules/audio_device/ios/voice_processing_audio_unit.mm
+++ b/modules/audio_device/ios/voice_processing_audio_unit.mm
@@ -434,12 +434,12 @@
       case kStarted:
         Stop();
         // Fall through.
-        RTC_FALLTHROUGH();
+        FALLTHROUGH();
       case kInitialized:
         Uninitialize();
         break;
       case kUninitialized:
-        RTC_FALLTHROUGH();
+        FALLTHROUGH();
       case kInitRequired:
         break;
     }
diff --git a/modules/remote_bitrate_estimator/test/bwe.cc b/modules/remote_bitrate_estimator/test/bwe.cc
index 566f93b..abc301c 100644
--- a/modules/remote_bitrate_estimator/test/bwe.cc
+++ b/modules/remote_bitrate_estimator/test/bwe.cc
@@ -97,7 +97,7 @@
     case kBbrEstimator:
       return new BbrBweSender(observer, clock);
     case kTcpEstimator:
-      RTC_FALLTHROUGH();
+      FALLTHROUGH();
     case kNullEstimator:
       return new NullBweSender();
   }
diff --git a/modules/rtp_rtcp/source/rtp_format_h264.cc b/modules/rtp_rtcp/source/rtp_format_h264.cc
index eb33bcc..5aa7e27 100644
--- a/modules/rtp_rtcp/source/rtp_format_h264.cc
+++ b/modules/rtp_rtcp/source/rtp_format_h264.cc
@@ -574,7 +574,7 @@
       }
       case H264::NaluType::kIdr:
         parsed_payload->frame_type = kVideoFrameKey;
-        RTC_FALLTHROUGH();
+        FALLTHROUGH();
       case H264::NaluType::kSlice: {
         rtc::Optional<uint32_t> pps_id = PpsParser::ParsePpsIdFromSlice(
             &payload_data[start_offset], end_offset - start_offset);
diff --git a/modules/video_coding/jitter_buffer.cc b/modules/video_coding/jitter_buffer.cc
index eaf09be..a556080 100644
--- a/modules/video_coding/jitter_buffer.cc
+++ b/modules/video_coding/jitter_buffer.cc
@@ -749,7 +749,7 @@
           frame_event_->Set();
         }
       }
-      RTC_FALLTHROUGH();
+      FALLTHROUGH();
     }
     // Note: There is no break here - continuing to kDecodableSession.
     case kDecodableSession: {
diff --git a/modules/video_coding/rtp_frame_reference_finder.cc b/modules/video_coding/rtp_frame_reference_finder.cc
index 82af339..e167e15 100644
--- a/modules/video_coding/rtp_frame_reference_finder.cc
+++ b/modules/video_coding/rtp_frame_reference_finder.cc
@@ -71,7 +71,7 @@
         case kHandOff:
           complete_frame = true;
           frame_callback_->OnCompleteFrame(std::move(*frame_it));
-          RTC_FALLTHROUGH();
+          FALLTHROUGH();
         case kDrop:
           frame_it = stashed_frames_.erase(frame_it);
       }
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
index 76de9c0..902024f 100644
--- a/rtc_base/BUILD.gn
+++ b/rtc_base/BUILD.gn
@@ -98,8 +98,6 @@
   all_dependent_configs = [ ":rtc_base_approved_all_dependent_config" ]
 
   sources = [
-    "annotations.h",
-    "arch.h",
     "array_view.h",
     "arraysize.h",
     "atomicops.h",
diff --git a/rtc_base/annotations.h b/rtc_base/annotations.h
deleted file mode 100644
index 25dac33..0000000
--- a/rtc_base/annotations.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  Copyright (c) 2017 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.
- */
-
-#ifndef WEBRTC_RTC_BASE_ANNOTATIONS_H_
-#define WEBRTC_RTC_BASE_ANNOTATIONS_H_
-
-// Annotate a function indicating the caller must examine the return value.
-// Use like:
-//   int foo() RTC_WARN_UNUSED_RESULT;
-// To explicitly ignore a result, cast to void.
-// TODO(kwiberg): Remove when we can use [[nodiscard]] from C++17.
-#if defined(__clang__)
-#define RTC_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))
-#elif defined(__GNUC__)
-// gcc has a __warn_unused_result__ attribute, but you can't quiet it by
-// casting to void, so we don't use it.
-#define RTC_WARN_UNUSED_RESULT
-#else
-#define RTC_WARN_UNUSED_RESULT
-#endif
-
-// Macro to be used for switch-case fallthrough (required for enabling
-// -Wimplicit-fallthrough warning on Clang).
-#if defined(__clang__)
-#define RTC_FALLTHROUGH() [[clang::fallthrough]]
-#else
-#define RTC_FALLTHROUGH() do { } while (0)
-#endif
-
-// Prevent the compiler from warning about an unused variable. For example:
-//   int result = DoSomething();
-//   assert(result == 17);
-//   RTC_UNUSED(result);
-// Note: In most cases it is better to remove the unused variable rather than
-// suppressing the compiler warning.
-#define RTC_UNUSED(x) static_cast<void>(x)
-
-#endif  // WEBRTC_RTC_BASE_ANNOTATIONS_H_
diff --git a/rtc_base/arch.h b/rtc_base/arch.h
deleted file mode 100644
index 0137503..0000000
--- a/rtc_base/arch.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *  Copyright (c) 2017 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.
- */
-
-// This file contains platform-specific defines.
-// Much of it is derived from Chromium's build/build_config.h.
-
-#ifndef WEBRTC_RTC_BASE_ARCH_H_
-#define WEBRTC_RTC_BASE_ARCH_H_
-
-// Processor architecture detection.  For more info on what's defined, see:
-//   http://msdn.microsoft.com/en-us/library/b0084kay.aspx
-//   http://www.agner.org/optimize/calling_conventions.pdf
-//   or with gcc, run: "echo | gcc -E -dM -"
-#if defined(_M_X64) || defined(__x86_64__)
-#define WEBRTC_ARCH_X86_FAMILY
-#define WEBRTC_ARCH_X86_64
-#define WEBRTC_ARCH_64_BITS
-#define WEBRTC_ARCH_LITTLE_ENDIAN
-#elif defined(__aarch64__)
-#define WEBRTC_ARCH_ARM_FAMILY
-#define WEBRTC_ARCH_64_BITS
-#define WEBRTC_ARCH_LITTLE_ENDIAN
-#elif defined(_M_IX86) || defined(__i386__)
-#define WEBRTC_ARCH_X86_FAMILY
-#define WEBRTC_ARCH_X86
-#define WEBRTC_ARCH_32_BITS
-#define WEBRTC_ARCH_LITTLE_ENDIAN
-#elif defined(__ARMEL__)
-#define WEBRTC_ARCH_ARM_FAMILY
-#define WEBRTC_ARCH_32_BITS
-#define WEBRTC_ARCH_LITTLE_ENDIAN
-#elif defined(__MIPSEL__)
-#define WEBRTC_ARCH_MIPS_FAMILY
-#if defined(__LP64__)
-#define WEBRTC_ARCH_64_BITS
-#else
-#define WEBRTC_ARCH_32_BITS
-#endif
-#define WEBRTC_ARCH_LITTLE_ENDIAN
-#elif defined(__pnacl__)
-#define WEBRTC_ARCH_32_BITS
-#define WEBRTC_ARCH_LITTLE_ENDIAN
-#else
-#error Please add support for your architecture in rtc_base/arch.h
-#endif
-
-#if !(defined(WEBRTC_ARCH_LITTLE_ENDIAN) ^ defined(WEBRTC_ARCH_BIG_ENDIAN))
-#error Define either WEBRTC_ARCH_LITTLE_ENDIAN or WEBRTC_ARCH_BIG_ENDIAN
-#endif
-
-#endif  // WEBRTC_RTC_BASE_ARCH_H_
diff --git a/rtc_base/checks.cc b/rtc_base/checks.cc
index ee0bbb8..533240f 100644
--- a/rtc_base/checks.cc
+++ b/rtc_base/checks.cc
@@ -100,7 +100,7 @@
   delete result;
 }
 
-RTC_NO_RETURN FatalMessage::~FatalMessage() {
+NO_RETURN FatalMessage::~FatalMessage() {
   fflush(stdout);
   fflush(stderr);
   stream_ << std::endl << "#" << std::endl;
@@ -136,8 +136,6 @@
 }  // namespace rtc
 
 // Function to call from the C version of the RTC_CHECK and RTC_DCHECK macros.
-RTC_NO_RETURN void rtc_FatalMessage(const char* file,
-                                    int line,
-                                    const char* msg) {
+NO_RETURN void rtc_FatalMessage(const char* file, int line, const char* msg) {
   rtc::FatalMessage(file, line).stream() << msg;
 }
diff --git a/rtc_base/checks.h b/rtc_base/checks.h
index d1a3ccb..f9507e2 100644
--- a/rtc_base/checks.h
+++ b/rtc_base/checks.h
@@ -11,6 +11,8 @@
 #ifndef WEBRTC_RTC_BASE_CHECKS_H_
 #define WEBRTC_RTC_BASE_CHECKS_H_
 
+#include "webrtc/typedefs.h"
+
 // If you for some reson need to know if DCHECKs are on, test the value of
 // RTC_DCHECK_IS_ON. (Test its value, not if it's defined; it'll always be
 // defined, to either a true or a false value.)
@@ -20,20 +22,10 @@
 #define RTC_DCHECK_IS_ON 0
 #endif
 
-// Annotate a function that will not return control flow to the caller.
-#if defined(_MSC_VER)
-#define RTC_NO_RETURN __declspec(noreturn)
-#elif defined(__GNUC__)
-#define RTC_NO_RETURN __attribute__ ((__noreturn__))
-#else
-#define RTC_NO_RETURN
-#endif
-
 #ifdef __cplusplus
 extern "C" {
 #endif
-RTC_NO_RETURN
-    void rtc_FatalMessage(const char* file, int line, const char* msg);
+NO_RETURN void rtc_FatalMessage(const char* file, int line, const char* msg);
 #ifdef __cplusplus
 }  // extern "C"
 #endif
@@ -240,7 +232,7 @@
   FatalMessage(const char* file, int line);
   // Used for RTC_CHECK_EQ(), etc. Takes ownership of the given string.
   FatalMessage(const char* file, int line, std::string* result);
-  RTC_NO_RETURN ~FatalMessage();
+  NO_RETURN ~FatalMessage();
 
   std::ostream& stream() { return stream_; }
 
diff --git a/rtc_base/httpbase.cc b/rtc_base/httpbase.cc
index cb7bac1..64cb5d9 100644
--- a/rtc_base/httpbase.cc
+++ b/rtc_base/httpbase.cc
@@ -537,7 +537,7 @@
       case SR_EOS:
         // Clean close, with no error.
         read_error = 0;
-        RTC_FALLTHROUGH();  // Fall through to HandleStreamClose.
+        FALLTHROUGH();  // Fall through to HandleStreamClose.
       case SR_ERROR:
         *error = HandleStreamClose(read_error);
         return true;
diff --git a/typedefs.h b/typedefs.h
index 84a7c08..bd0bee7 100644
--- a/typedefs.h
+++ b/typedefs.h
@@ -8,14 +8,118 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
+// This file contains platform-specific typedefs and defines.
+// Much of it is derived from Chromium's build/build_config.h.
+
 #ifndef WEBRTC_TYPEDEFS_H_
 #define WEBRTC_TYPEDEFS_H_
 
-// TODO(solenberg): Delete this file once downstream projects have been updated.
+// Processor architecture detection.  For more info on what's defined, see:
+//   http://msdn.microsoft.com/en-us/library/b0084kay.aspx
+//   http://www.agner.org/optimize/calling_conventions.pdf
+//   or with gcc, run: "echo | gcc -E -dM -"
+#if defined(_M_X64) || defined(__x86_64__)
+#define WEBRTC_ARCH_X86_FAMILY
+#define WEBRTC_ARCH_X86_64
+#define WEBRTC_ARCH_64_BITS
+#define WEBRTC_ARCH_LITTLE_ENDIAN
+#elif defined(__aarch64__)
+#define WEBRTC_ARCH_ARM_FAMILY
+#define WEBRTC_ARCH_64_BITS
+#define WEBRTC_ARCH_LITTLE_ENDIAN
+#elif defined(_M_IX86) || defined(__i386__)
+#define WEBRTC_ARCH_X86_FAMILY
+#define WEBRTC_ARCH_X86
+#define WEBRTC_ARCH_32_BITS
+#define WEBRTC_ARCH_LITTLE_ENDIAN
+#elif defined(__ARMEL__)
+#define WEBRTC_ARCH_ARM_FAMILY
+#define WEBRTC_ARCH_32_BITS
+#define WEBRTC_ARCH_LITTLE_ENDIAN
+#elif defined(__MIPSEL__)
+#define WEBRTC_ARCH_MIPS_FAMILY
+#if defined(__LP64__)
+#define WEBRTC_ARCH_64_BITS
+#else
+#define WEBRTC_ARCH_32_BITS
+#endif
+#define WEBRTC_ARCH_LITTLE_ENDIAN
+#elif defined(__pnacl__)
+#define WEBRTC_ARCH_32_BITS
+#define WEBRTC_ARCH_LITTLE_ENDIAN
+#else
+#error Please add support for your architecture in typedefs.h
+#endif
+
+#if !(defined(WEBRTC_ARCH_LITTLE_ENDIAN) ^ defined(WEBRTC_ARCH_BIG_ENDIAN))
+#error Define either WEBRTC_ARCH_LITTLE_ENDIAN or WEBRTC_ARCH_BIG_ENDIAN
+#endif
+
+// TODO(zhongwei.yao): WEBRTC_CPU_DETECTION is only used in one place; we should
+// probably just remove it.
+#if (defined(WEBRTC_ARCH_X86_FAMILY) && !defined(__SSE2__))
+#define WEBRTC_CPU_DETECTION
+#endif
 
 #include <stdint.h>
 
-#include "webrtc/rtc_base/arch.h"
-#include "webrtc/rtc_base/annotations.h"
+// Annotate a function indicating the caller must examine the return value.
+// Use like:
+//   int foo() RTC_WARN_UNUSED_RESULT;
+// To explicitly ignore a result, cast to void.
+// TODO(kwiberg): Remove when we can use [[nodiscard]] from C++17.
+#if defined(__clang__)
+#define RTC_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))
+#elif defined(__GNUC__)
+// gcc has a __warn_unused_result__ attribute, but you can't quiet it by
+// casting to void, so we don't use it.
+#define RTC_WARN_UNUSED_RESULT
+#else
+#define RTC_WARN_UNUSED_RESULT
+#endif
+
+// Put after a variable that might not be used, to prevent compiler warnings:
+//   int result ATTRIBUTE_UNUSED = DoSomething();
+//   assert(result == 17);
+// Deprecated since it only works with GCC & clang. See RTC_UNUSED below.
+// TODO(terelius): Remove.
+#ifndef ATTRIBUTE_UNUSED
+#if defined(__GNUC__) || defined(__clang__)
+#define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+#else
+#define ATTRIBUTE_UNUSED
+#endif
+#endif
+
+// Macro to be used for switch-case fallthrough (required for enabling
+// -Wimplicit-fallthrough warning on Clang).
+#ifndef FALLTHROUGH
+#if defined(__clang__)
+#define FALLTHROUGH() [[clang::fallthrough]]
+#else
+#define FALLTHROUGH() do { } while (0)
+#endif
+#endif
+
+#ifndef NO_RETURN
+// Annotate a function that will not return control flow to the caller.
+#if defined(_MSC_VER)
+#define NO_RETURN __declspec(noreturn)
+#elif defined(__GNUC__)
+#define NO_RETURN __attribute__ ((__noreturn__))
+#else
+#define NO_RETURN
+#endif
+#endif
+
+// Prevent the compiler from warning about an unused variable. For example:
+//   int result = DoSomething();
+//   assert(result == 17);
+//   RTC_UNUSED(result);
+// Note: In most cases it is better to remove the unused variable rather than
+// suppressing the compiler warning.
+#ifndef RTC_UNUSED
+#define RTC_UNUSED(x) static_cast<void>(x)
+#endif  // RTC_UNUSED
 
 #endif  // WEBRTC_TYPEDEFS_H_
diff --git a/video/rtp_video_stream_receiver.cc b/video/rtp_video_stream_receiver.cc
index 500c0bc..a47055a 100644
--- a/video/rtp_video_stream_receiver.cc
+++ b/video/rtp_video_stream_receiver.cc
@@ -268,7 +268,7 @@
     switch (tracker_.CopyAndFixBitstream(&packet)) {
       case video_coding::H264SpsPpsTracker::kRequestKeyframe:
         keyframe_request_sender_->RequestKeyFrame();
-        RTC_FALLTHROUGH();
+        FALLTHROUGH();
       case video_coding::H264SpsPpsTracker::kDrop:
         return 0;
       case video_coding::H264SpsPpsTracker::kInsert:
diff --git a/video/video_stream_encoder.cc b/video/video_stream_encoder.cc
index 7d810dc..52dcbf0 100644
--- a/video/video_stream_encoder.cc
+++ b/video/video_stream_encoder.cc
@@ -978,7 +978,7 @@
         break;
       }
       // Scale down resolution.
-      RTC_FALLTHROUGH();
+      FALLTHROUGH();
     }
     case VideoSendStream::DegradationPreference::kMaintainFramerate:
       // Scale down resolution.
@@ -1056,7 +1056,7 @@
         break;
       }
       // Scale up resolution.
-      RTC_FALLTHROUGH();
+      FALLTHROUGH();
     }
     case VideoSendStream::DegradationPreference::kMaintainFramerate: {
       // Scale up resolution.