index d1d5e19..1edfa1d 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -329,7 +329,6 @@ endif()
 
 find_package(GTest CONFIG)
 find_package(glslang CONFIG)
-find_package(SPIRV-Tools CONFIG)
 
 # Slang
 # ---
@@ -532,7 +531,6 @@ target_link_libraries(vk_layer_validation_tests PRIVATE
     VkLayer_utils
     $<$<BOOL:${USE_SLANG}>:slang>
     glslang::SPIRV
-    glslang::SPVRemapper
     SPIRV-Tools-static
     SPIRV-Headers::SPIRV-Headers
     GTest::gtest
@@ -554,6 +552,22 @@ target_include_directories(vk_layer_validation_tests PRIVATE
     ${VVL_SOURCE_DIR}/layers/external
 )
 
++find_package(SPIRV-Tools CONFIG QUIET)
+
+# See https://github.com/KhronosGroup/SPIRV-Tools/issues/3909 for background on this.
+# The targets available from SPIRV-Tools change depending on how SPIRV_TOOLS_BUILD_STATIC is set.
+# Try to handle all possible combinations so that we work with externally built packages.
+if (TARGET SPIRV-Tools)
+    target_link_libraries(vk_layer_validation_tests PRIVATE SPIRV-Tools)
+elseif(TARGET SPIRV-Tools-static)
+    target_link_libraries(vk_layer_validation_tests PRIVATE SPIRV-Tools-static)
+elseif(TARGET SPIRV-Tools-shared)
+    target_link_libraries(vk_layer_validation_tests PRIVATE SPIRV-Tools-shared)
+else()
+    message(FATAL_ERROR "Cannot determine SPIRV-Tools target name")
+endif()
+
+
 # More details in tests/android/mock/README.md
 option(VVL_MOCK_ANDROID "Enable building for Android on desktop for testing with MockICD setup")
 if(VVL_MOCK_ANDROID)
