diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt
index 1f7cd598e1..3a389485b0 100644
--- a/externals/CMakeLists.txt
+++ b/externals/CMakeLists.txt
@@ -42,6 +42,9 @@ endif()
 # mbedtls
 add_subdirectory(mbedtls)
 target_include_directories(mbedtls PUBLIC ./mbedtls/include)
+target_compile_options(mbedcrypto PRIVATE
+    $<$<CXX_COMPILER_ID:Clang>:-Wno-unused-but-set-variable>
+    $<$<CXX_COMPILER_ID:Clang>:-Wno-string-concatenation>)
 
 # MicroProfile
 add_library(microprofile INTERFACE)
@@ -94,6 +97,10 @@ if (ENABLE_CUBEB AND NOT TARGET cubeb::cubeb)
     set(BUILD_TOOLS OFF)
     add_subdirectory(cubeb)
     add_library(cubeb::cubeb ALIAS cubeb)
+    if (NOT MSVC)
+        target_compile_options(speex PRIVATE -Wno-sign-compare)
+        target_compile_options(cubeb PRIVATE -Wno-implicit-const-int-float-conversion)
+    endif()
 endif()
 
 # DiscordRPC
@@ -151,6 +158,9 @@ endif()
 if (NOT TARGET LLVM::Demangle)
     add_library(demangle demangle/ItaniumDemangle.cpp)
     target_include_directories(demangle PUBLIC ./demangle)
+    if (NOT MSVC)
+        target_compile_options(demangle PRIVATE -Wno-deprecated-declarations) # std::is_pod
+    endif()
     add_library(LLVM::Demangle ALIAS demangle)
 endif()
 
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 7bb88c8ea1..015b98d601 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -117,6 +117,7 @@ else()
 
         $<$<CXX_COMPILER_ID:Clang>:-Wno-braced-scalar-init>
         $<$<CXX_COMPILER_ID:Clang>:-Wno-unused-private-field>
+        $<$<CXX_COMPILER_ID:Clang>:-Wno-nullability-completeness>
         $<$<CXX_COMPILER_ID:Clang>:-Werror=shadow-uncaptured-local>
         $<$<CXX_COMPILER_ID:Clang>:-Werror=implicit-fallthrough>
         $<$<CXX_COMPILER_ID:Clang>:-Werror=type-limits>
diff --git a/src/common/swap.h b/src/common/swap.h
index 085baaf9a1..fde343e452 100644
--- a/src/common/swap.h
+++ b/src/common/swap.h
@@ -460,11 +460,6 @@ S operator&(const S& i, const swap_struct_t<T, F> v) {
     return i & v.swap();
 }
 
-template <typename S, typename T, typename F>
-S operator&(const swap_struct_t<T, F> v, const S& i) {
-    return static_cast<S>(v.swap() & i);
-}
-
 // Comparison
 template <typename S, typename T, typename F>
 bool operator<(const S& p, const swap_struct_t<T, F> v) {
diff --git a/src/input_common/input_poller.cpp b/src/input_common/input_poller.cpp
index 870e76ab0a..188e862d7f 100644
--- a/src/input_common/input_poller.cpp
+++ b/src/input_common/input_poller.cpp
@@ -835,15 +835,15 @@ public:
         return input_engine->SupportsNfc(identifier);
     }
 
-    Common::Input::NfcState StartNfcPolling() {
+    Common::Input::NfcState StartNfcPolling() override {
         return input_engine->StartNfcPolling(identifier);
     }
 
-    Common::Input::NfcState StopNfcPolling() {
+    Common::Input::NfcState StopNfcPolling() override {
         return input_engine->StopNfcPolling(identifier);
     }
 
-    Common::Input::NfcState ReadAmiiboData(std::vector<u8>& out_data) {
+    Common::Input::NfcState ReadAmiiboData(std::vector<u8>& out_data) override {
         return input_engine->ReadAmiiboData(identifier, out_data);
     }
 
@@ -852,11 +852,11 @@ public:
     }
 
     Common::Input::NfcState ReadMifareData(const Common::Input::MifareRequest& request,
-                                           Common::Input::MifareRequest& out_data) {
+                                           Common::Input::MifareRequest& out_data) override {
         return input_engine->ReadMifareData(identifier, request, out_data);
     }
 
-    Common::Input::NfcState WriteMifareData(const Common::Input::MifareRequest& request) {
+    Common::Input::NfcState WriteMifareData(const Common::Input::MifareRequest& request) override {
         return input_engine->WriteMifareData(identifier, request);
     }
 
diff --git a/src/web_service/verify_user_jwt.cpp b/src/web_service/verify_user_jwt.cpp
index 129eb19682..f88f676206 100644
--- a/src/web_service/verify_user_jwt.cpp
+++ b/src/web_service/verify_user_jwt.cpp
@@ -4,6 +4,7 @@
 #if defined(__GNUC__) || defined(__clang__)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations" // for deprecated OpenSSL functions
 #endif
 #include <jwt/jwt.hpp>
 #if defined(__GNUC__) || defined(__clang__)