diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6c095f3f..5bdcd891 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -44,6 +44,7 @@ message(STATUS "Version: ${GEODE_VERSION}, tag: ${GEODE_VERSION_TAG} (type: ${GE
 
 project(geode-sdk VERSION ${GEODE_VERSION} LANGUAGES CXX C)
 
+# Change debug format to embedded
 if (MSVC)
 	string(REPLACE "/Zi" "/Z7" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
 	string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
@@ -100,8 +101,17 @@ endif()
 if (PROJECT_IS_TOP_LEVEL AND NOT GEODE_BUILDING_DOCS)
 	set(TULIP_LINK_SOURCE ON)
 endif()
+set(CMAKE_WARN_DEPRECATED OFF CACHE BOOL "" FORCE)
 CPMAddPackage("gh:geode-sdk/TulipHook#4369d05")
+set(CMAKE_WARN_DEPRECATED ON CACHE BOOL "" FORCE)
 
+# Silence warnings from dependencies
+include(CheckCXXCompilerFlag)
+check_cxx_compiler_flag(-Wno-everything SUPPORTS_W_NO_EVERYTHING)
+if (SUPPORTS_W_NO_EVERYTHING)
+	target_compile_options(capstone-static PRIVATE -Wno-everything)
+	target_compile_options(keystone PRIVATE -Wno-everything)
+endif()
 
 target_sources(${PROJECT_NAME} INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/entry.cpp)
 
diff --git a/loader/CMakeLists.txt b/loader/CMakeLists.txt
index e34f2e36..33ed7440 100644
--- a/loader/CMakeLists.txt
+++ b/loader/CMakeLists.txt
@@ -167,7 +167,22 @@ if (NOT GEODE_BUILDING_DOCS)
 	# Zip support (needed for in-memory streams, which zlib's minizip doesn't support)
 	set(MZ_LZMA Off CACHE INTERNAL "Enables LZMA & XZ compression")
 	set(MZ_ZSTD Off CACHE INTERNAL "")
-	CPMAddPackage("gh:zlib-ng/minizip-ng#cee6d8c")
+	set(CMAKE_WARN_DEPRECATED OFF CACHE BOOL "" FORCE)
+	CPMAddPackage(
+		GITHUB_REPOSITORY zlib-ng/minizip-ng
+		GIT_TAG cee6d8c
+		OPTIONS "CMAKE_POLICY_DEFAULT_CMP0048 OLD"
+	)
+	set(CMAKE_WARN_DEPRECATED ON CACHE BOOL "" FORCE)
+
+	# Silence warnings from dependencies
+	include(CheckCXXCompilerFlag)
+	check_cxx_compiler_flag(-Wno-everything SUPPORTS_W_NO_EVERYTHING)
+	if (SUPPORTS_W_NO_EVERYTHING)
+		target_compile_options(md4c PRIVATE -Wno-everything)
+		target_compile_options(zlib PRIVATE -Wno-everything)
+		target_compile_options(zlibstatic PRIVATE -Wno-everything)
+	endif()
 
 	# Regex support
 	CPMAddPackage("gh:google/re2#954656f")
@@ -179,6 +194,19 @@ endif()
 
 target_link_libraries(${PROJECT_NAME} z TulipHook geode-sdk mat-json)
 
+if (MSVC)
+	# Disable outputting .exp file
+	include(CheckLinkerFlag)
+	check_linker_flag(CXX /NOEXP SUPPORTS_NOEXP)
+	if (SUPPORTS_NOEXP)
+		target_link_options(${PROJECT_NAME} PRIVATE /NOEXP)
+	endif()
+
+	# Disable incremental link in CI builds
+	if (DEFINED ENV{GEODE_CI})
+		target_link_options(${PROJECT_NAME} PRIVATE /INCREMENTAL:NO)
+	endif()
+endif()
 
 # Use precompiled headers for faster builds
 if (NOT GEODE_DISABLE_PRECOMPILED_HEADERS)
@@ -217,14 +245,6 @@ elseif (WIN32)
 	if (MSVC)
 		# disable warnings about CCNode::setID
 		target_link_options(${PROJECT_NAME} PUBLIC /ignore:4217)
-
-		# disable outputting .exp file
-		target_link_options(${PROJECT_NAME} PRIVATE /NOEXP)
-
-		# disable incremental link in CI builds
-		if (DEFINED ENV{GEODE_CI})
-			target_link_options(${PROJECT_NAME} PRIVATE /INCREMENTAL:NO)
-		endif()
 	endif()
 endif()
 
diff --git a/loader/launcher/windows/CMakeLists.txt b/loader/launcher/windows/CMakeLists.txt
index 805c4c01..51cc3467 100644
--- a/loader/launcher/windows/CMakeLists.txt
+++ b/loader/launcher/windows/CMakeLists.txt
@@ -43,9 +43,17 @@ set_target_properties(Updater PROPERTIES
 target_link_libraries(Updater PUBLIC ghc_filesystem)
 
 if (MSVC)
-	target_link_options(fake-geode-loader PRIVATE /NOEXP /DEBUG:NONE)
-	target_link_options(ProxyLoader PRIVATE /NOIMPLIB /NOEXP /DEBUG:NONE)
+	include(CheckLinkerFlag)
+	check_linker_flag(CXX /NOEXP SUPPORTS_NOEXP)
+	if (SUPPORTS_NOEXP)
+		target_link_options(fake-geode-loader PRIVATE /NOEXP)
+		target_link_options(ProxyLoader PRIVATE /NOEXP)
+	endif()
+
+	target_link_options(fake-geode-loader PRIVATE /DEBUG:NONE)
+	target_link_options(ProxyLoader PRIVATE /NOIMPLIB /DEBUG:NONE)
 	target_link_options(Updater PRIVATE /DEBUG:NONE)
+
 	if (DEFINED ENV{GEODE_CI})
 		target_link_options(fake-geode-loader PRIVATE /INCREMENTAL:NO)
 		target_link_options(ProxyLoader PRIVATE /INCREMENTAL:NO)