Revert https://github.com/KhronosGroup/Vulkan-ValidationLayers/commit/2c2b81c05189
as it breaks overriding via *_INSTALL_DIR e.g.,

CMake Error at CMakeLists.txt:254 (find_package):
  Could not find a package configuration file provided by "robin_hood" with
  any of the following names:

    robin_hoodConfig.cmake
    robin_hood-config.cmake

  Add the installation prefix of "robin_hood" to CMAKE_PREFIX_PATH or set
  "robin_hood_DIR" to a directory containing one of the above files.  If
  "robin_hood" provides a separate development package or SDK, be sure it has
  been installed.

--- CMakeLists.txt.orig	2021-12-21 17:05:00 UTC
+++ CMakeLists.txt
@@ -102,21 +102,7 @@ else()
     message("********************************************************************************")
     find_package(PythonInterp 3 QUIET)
 endif()
-#backwards compatability settings for other parts of the build system that don't use find_package() variables yet
-if (ROBIN_HOOD_HASHING_INSTALL_DIR)
-    list(APPEND CMAKE_PREFIX_PATH ${ROBIN_HOOD_HASHING_INSTALL_DIR})
-endif()
-if (SPIRV_HEADERS_INSTALL_DIR)
-    list(APPEND CMAKE_PREFIX_PATH ${SPIRV_HEADERS_INSTALL_DIR})
-endif()
-if (SPIRV_TOOLS_INSTALL_DIR)
-    list(APPEND CMAKE_PREFIX_PATH ${SPIRV_TOOLS_INSTALL_DIR})
-endif()
-if (GOOGLETEST_INSTALL_DIR)
-    list(APPEND CMAKE_PREFIX_PATH ${GOOGLETEST_INSTALL_DIR})
-endif()
 
-
 if (TARGET Vulkan::Headers)
     message(STATUS "Using Vulkan headers from Vulkan::Headers target")
     get_target_property(VulkanHeaders_INCLUDE_DIRS Vulkan::Headers INTERFACE_INCLUDE_DIRECTORIES)
@@ -251,13 +237,12 @@ option(BUILD_LAYERS "Build layers" ON)
 option(BUILD_LAYER_SUPPORT_FILES "Generate layer files" OFF) # For generating files when not building layers
 option(USE_ROBIN_HOOD_HASHING "Use robin-hood-hashing" ON)
 if (USE_ROBIN_HOOD_HASHING)
-    find_package(robin_hood REQUIRED CONFIG)
+    if(NOT ROBIN_HOOD_HASHING_INSTALL_DIR)
+	set(ROBIN_HOOD_HASHING_INSTALL_DIR $ENV{ROBIN_HOOD_HASHING_INSTALL_DIR} PATH "Path to robin-hood-hashing repository")
+    endif()
+    set(ROBIN_HOOD_HASHING_INCLUDE_DIR "${ROBIN_HOOD_HASHING_INSTALL_DIR}/src/include" PATH "Path to robin-hood-hashing/src/include")
 endif()
 
-if(BUILD_LAYERS OR BUILD_TESTS)
-    find_package(SPIRV-Headers REQUIRED CONFIG)
-endif()
-
 if(BUILD_TESTS)
     set(GLSLANG_INSTALL_DIR "GLSLANG-NOTFOUND" CACHE PATH "Absolute path to a glslang install directory")
     if(NOT GLSLANG_INSTALL_DIR AND NOT DEFINED ENV{GLSLANG_INSTALL_DIR} AND NOT TARGET glslang)
@@ -269,7 +254,20 @@ if(BUILD_TESTS)
         set(GLSLANG_INSTALL_DIR $ENV{GLSLANG_INSTALL_DIR})
     endif()
 
+    # CMake command line option overrides environment variable
+    if(NOT SPIRV_HEADERS_INSTALL_DIR)
+        set(SPIRV_HEADERS_INSTALL_DIR $ENV{SPIRV_HEADERS_INSTALL_DIR})
+    endif()
+
+    if(NOT SPIRV_TOOLS_INSTALL_DIR)
+        set(SPIRV_TOOLS_INSTALL_DIR $ENV{SPIRV_TOOLS_INSTALL_DIR})
+    endif()
+
     if (NOT TARGET glslang)
+        if(NOT SPIRV_HEADERS_INSTALL_DIR)
+            message(FATAL_ERROR "Must define location of SPIRV-Headers -- see BUILD.md")
+        endif()
+
         message(STATUS "Using glslang install located at ${GLSLANG_INSTALL_DIR}")
         set(GLSLANG_SEARCH_PATH "${GLSLANG_INSTALL_DIR}/lib")
         set(GLSLANG_DEBUG_SEARCH_PATH "${GLSLANG_INSTALL_DIR}/lib")
@@ -304,6 +302,34 @@ if(BUILD_TESTS)
     endif()
 endif()
 
+if(BUILD_TESTS OR BUILD_LAYERS)
+    # spirv-tools
+    if (NOT TARGET SPIRV-Tools)
+        if(NOT SPIRV_TOOLS_INSTALL_DIR)
+            set(SPIRV_TOOLS_INSTALL_DIR "${GLSLANG_INSTALL_DIR}")
+        endif()
+
+        set(SPIRV_HEADERS_INCLUDE_DIR "${SPIRV_HEADERS_INSTALL_DIR}/include" CACHE PATH "Path to spirv-headers")
+        set(SPIRV_TOOLS_BINARY_ROOT "${SPIRV_TOOLS_INSTALL_DIR}/lib"
+            CACHE PATH "User defined path to the SPIRV-Tools binaries for this project")
+        set(SPIRV_TOOLS_OPT_BINARY_ROOT "${SPIRV_TOOLS_INSTALL_DIR}/lib"
+            CACHE PATH "User defined path to the SPIRV-Tools-opt binaries for this project")
+        set(SPIRV_TOOLS_INCLUDE_DIR "${SPIRV_TOOLS_INSTALL_DIR}/include" CACHE PATH "Path to spirv tools headers")
+        set(SPIRV_TOOLS_SEARCH_PATH "${SPIRV_TOOLS_INSTALL_DIR}/lib")
+        set(SPIRV_TOOLS_DEBUG_SEARCH_PATH "${SPIRV_TOOLS_INSTALL_DIR}/lib")
+        set(SPIRV_TOOLS_OPT_SEARCH_PATH "${SPIRV_TOOLS_INSTALL_DIR}/lib")
+        set(SPIRV_TOOLS_OPT_DEBUG_SEARCH_PATH "${SPIRV_TOOLS_INSTALL_DIR}/lib")
+
+        find_library(SPIRV_TOOLS_LIB NAMES SPIRV-Tools HINTS ${SPIRV_TOOLS_SEARCH_PATH})
+        find_library(SPIRV_TOOLS_OPT_LIB NAMES SPIRV-Tools-opt HINTS ${SPIRV_TOOLS_OPT_SEARCH_PATH})
+
+        set(SPIRV_TOOLS_LIBRARIES ${SPIRV_TOOLS_OPT_LIB} ${SPIRV_TOOLS_LIB})
+    else()
+        set(SPIRV_TOOLS_LIBRARIES SPIRV-Tools SPIRV-Tools-opt)
+        set(SPIRV_TOOLS_INCLUDE_DIR "${spirv-tools_SOURCE_DIR}/include" CACHE PATH "Path to spirv tools headers")
+    endif()
+endif()
+
 # Generate dependent helper files ------------------------------------------------------------------------------------------------
 
 set(SCRIPTS_DIR "${PROJECT_SOURCE_DIR}/scripts")
@@ -346,7 +372,7 @@ target_include_directories(VkLayer_utils
                                   ${VulkanHeaders_INCLUDE_DIR})
 
 if (USE_ROBIN_HOOD_HASHING)
-    target_link_libraries(VkLayer_utils PUBLIC robin_hood::robin_hood)
+    target_include_directories(VkLayer_utils PUBLIC ${ROBIN_HOOD_HASHING_INCLUDE_DIR})
     target_compile_definitions(VkLayer_utils PUBLIC USE_ROBIN_HOOD_HASHING)
 endif()
 
@@ -387,8 +413,37 @@ endif()
 
 if(BUILD_TESTS)
     # Attempt to enable googletest if available.
-    find_package(GTest REQUIRED CONFIG)
-    add_subdirectory(tests ${CMAKE_BINARY_DIR}/tests)
+
+    if(TARGET gtest_main)
+        # Already enabled as a target (perhaps by a project enclosing this one)
+        message(STATUS "Vulkan-ValidationLayers/external: " "googletest already configured - using it")
+    elseif(IS_DIRECTORY "${GOOGLETEST_INSTALL_DIR}")
+        # The googletest directory exists, so enable it as a target.
+        message(STATUS "Vulkan-ValidationLayers/external: " "googletest found - configuring it for tests")
+        set(BUILD_GTEST ON CACHE BOOL "Builds the googletest subproject")
+        set(BUILD_GMOCK OFF CACHE BOOL "Builds the googlemock subproject")
+        set(gtest_force_shared_crt ON CACHE BOOL "Link gtest runtimes dynamically")
+        set(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries")
+        # EXCLUDE_FROM_ALL keeps the install target from installing GTEST files.
+        add_subdirectory("${GOOGLETEST_INSTALL_DIR}" ${CMAKE_BINARY_DIR}/googletest)
+    else()
+        message(SEND_ERROR "Could not find googletest directory. Be sure to run update_deps.py with the --tests option to download the appropriate version of googletest")
+        set(BUILD_TESTS OFF)
+    endif()
+
+    if (WIN32)
+        set_target_properties(gtest PROPERTIES FOLDER ${LAYERS_HELPER_FOLDER})
+        set_target_properties(gtest_main PROPERTIES FOLDER ${LAYERS_HELPER_FOLDER})
+    endif()
+
+    if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+        set_target_properties(gtest PROPERTIES COMPILE_OPTIONS "-w")
+        set_target_properties(gtest_main PROPERTIES COMPILE_OPTIONS "-w")
+    endif()
+
+    if (BUILD_TESTS)
+        add_subdirectory(tests ${CMAKE_BINARY_DIR}/tests)
+    endif()
 endif()
 
 if(BUILD_LAYERS OR BUILD_LAYER_SUPPORT_FILES)
--- layers/CMakeLists.txt.orig	2021-12-21 17:05:00 UTC
+++ layers/CMakeLists.txt
@@ -269,8 +269,6 @@ if(INSTRUMENT_OPTICK)
 endif()
 
 if(BUILD_LAYERS)
-    find_package(SPIRV-Tools REQUIRED CONFIG)
-    find_package(SPIRV-Tools-opt REQUIRED CONFIG)
     AddVkLayer(khronos_validation "${KHRONOS_LAYER_COMPILE_DEFINITIONS}"
         ${CHASSIS_LIBRARY_FILES}
         ${CORE_VALIDATION_LIBRARY_FILES}
@@ -298,14 +296,15 @@ if(BUILD_LAYERS)
 
     # Khronos validation additional dependencies
     target_include_directories(VkLayer_khronos_validation PRIVATE ${GLSLANG_INCLUDE_DIR})
+    target_include_directories(VkLayer_khronos_validation PRIVATE ${SPIRV_TOOLS_INCLUDE_DIR})
+    target_include_directories(VkLayer_khronos_validation PRIVATE ${SPIRV_HEADERS_INCLUDE_DIR})
     if(INSTRUMENT_OPTICK)
         target_include_directories(VkLayer_khronos_validation PRIVATE ${OPTICK_SOURCE_DIR})
     endif()
     if (USE_ROBIN_HOOD_HASHING)
         target_include_directories(VkLayer_khronos_validation PRIVATE ${ROBIN_HOOD_HASHING_INCLUDE_DIR})
     endif()
-    target_link_libraries(VkLayer_khronos_validation PRIVATE SPIRV-Headers::SPIRV-Headers SPIRV-Tools-static SPIRV-Tools-opt)
-
+    target_link_libraries(VkLayer_khronos_validation PRIVATE ${SPIRV_TOOLS_LIBRARIES})
 
     # The output file needs Unix "/" separators or Windows "\" separators On top of that, Windows separators actually need to be doubled
     # because the json format uses backslash escapes
--- scripts/common_ci.py.orig	2021-12-21 17:05:00 UTC
+++ scripts/common_ci.py
@@ -76,6 +76,16 @@ def BuildVVL(args, build_tests=False):
     cmake_ver_cmd = 'cmake --version'
     RunShellCmd(cmake_ver_cmd)
 
+    GTEST_DIR = RepoRelative("external/googletest")
+    if not os.path.exists(GTEST_DIR):
+        print("Clone Testing Framework Source Code")
+        clone_gtest_cmd = f'git clone https://github.com/google/googletest.git {GTEST_DIR}'
+        RunShellCmd(clone_gtest_cmd)
+
+        print("Get Specified Testing Source")
+        gtest_checkout_cmd = 'git checkout tags/release-1.8.1'
+        RunShellCmd(gtest_checkout_cmd, GTEST_DIR)
+
     utils.make_dirs(VVL_BUILD_DIR)
     print("Run CMake for Validation Layers")
     cmake_cmd = f'cmake -DUPDATE_DEPS=ON -DCMAKE_BUILD_TYPE={args.configuration.capitalize()} {args.cmake} ..'
--- scripts/known_good.json.orig	2021-12-21 17:05:00 UTC
+++ scripts/known_good.json
@@ -43,24 +43,18 @@
       "name": "robin-hood-hashing",
       "url": "https://github.com/martinus/robin-hood-hashing.git",
       "sub_dir": "robin-hood-hashing",
-      "build_dir": "robin-hood-hashing/build",
-      "install_dir": "robin-hood-hashing/build/install",
-      "cmake_options": [
-        "-DRH_STANDALONE_PROJECT=OFF"
-      ],
+      "build_dir": "robin-hood-hashing",
+      "install_dir": "robin-hood-hashing",
+      "build_step": "skip",
       "commit": "3.11.3"
     },
     {
         "name": "googletest",
         "url": "https://github.com/google/googletest.git",
         "sub_dir": "googletest",
-        "build_dir": "googletest/build",
-        "install_dir": "googletest/build/install",
-         "cmake_options": [
-              "-DBUILD_GMOCK=OFF",
-              "-Dgtest_force_shared_crt=ON",
-              "-DBUILD_SHARED_LIBS=OFF"
-        ],
+        "build_dir": "googletest",
+        "install_dir": "googletest",
+        "build_step": "skip",
         "commit": "release-1.8.1",
         "optional": ["tests"]
     }
--- tests/CMakeLists.txt.orig	2021-12-21 17:05:00 UTC
+++ tests/CMakeLists.txt
@@ -66,9 +66,6 @@ else()
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 endif()
 
-find_package(SPIRV-Tools REQUIRED CONFIG)
-find_package(SPIRV-Tools-opt REQUIRED CONFIG)
-
 set(LIBGLM_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/libs)
 
 set(COMMON_CPP
@@ -120,16 +117,25 @@ add_executable(vk_layer_validation_tests
                ${COMMON_CPP})
 add_test(NAME vk_layer_validation_tests COMMAND vk_layer_validation_tests)
 add_dependencies(vk_layer_validation_tests VkLayer_khronos_validation VkLayer_khronos_validation-json)
+if(NOT GTEST_IS_STATIC_LIB)
+    set_target_properties(vk_layer_validation_tests PROPERTIES COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1")
+endif()
+# Note that there is no need to add GTEST directories here due to googletest exporting them via the gtest target.
 target_include_directories(vk_layer_validation_tests
                            PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
                                   ${PROJECT_SOURCE_DIR}/layers
                                   ${PROJECT_SOURCE_DIR}/layers/generated
                                   ${GLSLANG_INCLUDE_DIR}
+                                  ${SPIRV_TOOLS_INCLUDE_DIR}
+                                  ${SPIRV_HEADERS_INCLUDE_DIR}
                                   ${CMAKE_CURRENT_BINARY_DIR}
                                   ${CMAKE_BINARY_DIR}
                                   ${PROJECT_BINARY_DIR}
                                   ${VulkanHeaders_INCLUDE_DIR}
                                   ${PROJECT_BINARY_DIR}/layers)
+if (USE_ROBIN_HOOD_HASHING)
+    target_include_directories(vk_layer_validation_tests PUBLIC ${ROBIN_HOOD_HASHING_INCLUDE_DIR})
+endif()
 add_dependencies(vk_layer_validation_tests
                  VkLayer_utils)
 
@@ -151,10 +157,10 @@ endif()
 # Specify target_link_libraries
 target_link_libraries(vk_layer_validation_tests
                       PRIVATE VkLayer_utils
+                              gtest
+                              gtest_main
                               ${GLSLANG_LIBRARIES}
-			      SPIRV-Headers::SPIRV-Headers
-			      SPIRV-Tools-static SPIRV-Tools-opt
-			      GTest::gtest GTest::gtest_main)
+                              ${SPIRV_TOOLS_LIBRARIES})
 
 if(NOT WIN32)
     target_link_libraries(vk_layer_validation_tests PRIVATE dl)
@@ -162,6 +168,16 @@ if(NOT WIN32)
         target_link_libraries(vk_layer_validation_tests
                               PRIVATE ${XCB_LIBRARIES}
                                       ${X11_LIBRARIES})
+    endif()
+endif()
+
+if(WIN32)
+    # For Windows, copy necessary gtest DLLs to the right spot for the vk_layer_tests...
+    if(NOT GTEST_IS_STATIC_LIB)
+        file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/googletest/googletest/$<CONFIG>/*.dll SRC_GTEST_DLLS)
+        file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG> DST_GTEST_DLLS)
+        add_custom_command(TARGET vk_layer_validation_tests POST_BUILD
+                           COMMAND xcopy /Y /I ${SRC_GTEST_DLLS} ${DST_GTEST_DLLS})
     endif()
 endif()
 
