diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7c9b701..4350821 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -132,16 +132,20 @@
     check_symbol_exists(mallinfo2 malloc.h HAVE_MALLINFO2)
 
     include(CheckIncludeFiles)
+
     CHECK_INCLUDE_FILES("xcb/xcb.h;xcb/shm.h" HAVE_XCB_H)
     if(NOT HAVE_XCB_H)
         message(WARNING "xcb/xcb.h or xcb/shm.h was not found. Install the libx11-xcb-dev and "
                         "libxcb-shm0-dev packages to build with WSI support for XCB surfaces.")
     endif()
+
+    CHECK_INCLUDE_FILES("wayland-client.h" HAVE_WAYLAND_CLIENT_H)
+    if(NOT HAVE_WAYLAND_CLIENT_H)
+        message(WARNING "wayland-client.h was not found. Install the libwayland-dev "
+                        "package to build with WSI support for Wayland surfaces.")
+    endif()
 endif()
 
-if(SWIFTSHADER_BUILD_WSI_WAYLAND)
-    find_library(WAYLAND wayland-client)
-endif(SWIFTSHADER_BUILD_WSI_WAYLAND)
 if(SWIFTSHADER_BUILD_WSI_DIRECTFB)
     find_library(DIRECTFB directfb)
     find_path(DIRECTFB_INCLUDE_DIR directfb/directfb.h)
@@ -821,11 +825,9 @@
     if(HAVE_XCB_H)
         target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_XCB_KHR")
     endif()
-    if(SWIFTSHADER_BUILD_WSI_WAYLAND)
-        if(WAYLAND)
-            target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_WAYLAND_KHR")
-        endif()
-    endif(SWIFTSHADER_BUILD_WSI_WAYLAND)
+    if(HAVE_WAYLAND_CLIENT_H)
+        target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_WAYLAND_KHR")
+    endif()
     if(SWIFTSHADER_BUILD_WSI_DIRECTFB)
         if(DIRECTFB AND DIRECTFB_INCLUDE_DIR)
             target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_DIRECTFB_EXT")
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp
index cb13d64..b6b5962 100644
--- a/src/Vulkan/libVulkan.cpp
+++ b/src/Vulkan/libVulkan.cpp
@@ -291,7 +291,7 @@
 	{ { VK_KHR_XCB_SURFACE_EXTENSION_NAME, VK_KHR_XCB_SURFACE_SPEC_VERSION }, [] { return vk::XcbSurfaceKHR::isSupported(); } },
 #endif
 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
-	{ { VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME, VK_KHR_WAYLAND_SURFACE_SPEC_VERSION } },
+	{ { VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME, VK_KHR_WAYLAND_SURFACE_SPEC_VERSION }, [] { return vk::WaylandSurfaceKHR::isSupported(); } },
 #endif
 #ifdef VK_USE_PLATFORM_DIRECTFB_EXT
 	{ { VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME, VK_EXT_DIRECTFB_SURFACE_SPEC_VERSION } },
diff --git a/src/WSI/CMakeLists.txt b/src/WSI/CMakeLists.txt
index f324582..3429ed6 100644
--- a/src/WSI/CMakeLists.txt
+++ b/src/WSI/CMakeLists.txt
@@ -41,10 +41,12 @@
         )
     endif()
 
-    if(WAYLAND)
+    if(HAVE_WAYLAND_CLIENT_H)
         list(APPEND WSI_SRC_FILES
             WaylandSurfaceKHR.cpp
             WaylandSurfaceKHR.hpp
+            libWaylandClient.cpp
+            libWaylandClient.hpp
         )
     endif()
 
diff --git a/src/WSI/WaylandSurfaceKHR.cpp b/src/WSI/WaylandSurfaceKHR.cpp
index e678d05..9ecf2dc 100644
--- a/src/WSI/WaylandSurfaceKHR.cpp
+++ b/src/WSI/WaylandSurfaceKHR.cpp
@@ -14,6 +14,7 @@
 
 #include "WaylandSurfaceKHR.hpp"
 
+#include "libWaylandClient.hpp"
 #include "Vulkan/VkDeviceMemory.hpp"
 #include "Vulkan/VkImage.hpp"
 
@@ -23,12 +24,17 @@
 
 namespace vk {
 
+bool WaylandSurfaceKHR::isSupported()
+{
+	return libWaylandClient.isPresent();
+}
+
 static void wl_registry_handle_global(void *data, struct wl_registry *registry, unsigned int name, const char *interface, unsigned int version)
 {
 	struct wl_shm **pshm = (struct wl_shm **)data;
 	if(!strcmp(interface, "wl_shm"))
 	{
-		*pshm = static_cast<struct wl_shm *>(wl_registry_bind(registry, name, &wl_shm_interface, 1));
+		*pshm = static_cast<struct wl_shm *>(libWaylandClient->wl_registry_bind(registry, name, libWaylandClient->wl_shm_interface, 1));
 	}
 }
 
@@ -42,9 +48,9 @@
     : display(pCreateInfo->display)
     , surface(pCreateInfo->surface)
 {
-	struct wl_registry *registry = wl_display_get_registry(display);
-	wl_registry_add_listener(registry, &wl_registry_listener, &shm);
-	wl_display_dispatch(display);
+	struct wl_registry *registry = libWaylandClient->wl_display_get_registry(display);
+	libWaylandClient->wl_registry_add_listener(registry, &wl_registry_listener, &shm);
+	libWaylandClient->wl_display_dispatch(display);
 }
 
 void WaylandSurfaceKHR::destroySurface(const VkAllocationCallbacks *pAllocator)
@@ -73,11 +79,11 @@
 	int fd = mkstemp(path);
 	const VkExtent3D &extent = image->getImage()->getExtent();
 	int stride = image->getImage()->rowPitchBytes(VK_IMAGE_ASPECT_COLOR_BIT, 0);
-	ftruncate(fd, extent.height * stride);
-	struct wl_shm_pool *pool = wl_shm_create_pool(shm, fd, extent.height * stride);
-	wlImage->buffer = wl_shm_pool_create_buffer(pool, 0, extent.width, extent.height, stride, WL_SHM_FORMAT_XRGB8888);
+	assert(ftruncate(fd, extent.height * stride) == 0);
+	struct wl_shm_pool *pool = libWaylandClient->wl_shm_create_pool(shm, fd, extent.height * stride);
+	wlImage->buffer = libWaylandClient->wl_shm_pool_create_buffer(pool, 0, extent.width, extent.height, stride, WL_SHM_FORMAT_XRGB8888);
 	wlImage->data = static_cast<uint8_t *>(mmap(NULL, extent.height * stride, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0));
-	wl_shm_pool_destroy(pool);
+	libWaylandClient->wl_shm_pool_destroy(pool);
 	close(fd);
 	imageMap[image] = wlImage;
 }
@@ -91,7 +97,7 @@
 		const VkExtent3D &extent = image->getImage()->getExtent();
 		int stride = image->getImage()->rowPitchBytes(VK_IMAGE_ASPECT_COLOR_BIT, 0);
 		munmap(wlImage->data, extent.height * stride);
-		wl_buffer_destroy(wlImage->buffer);
+		libWaylandClient->wl_buffer_destroy(wlImage->buffer);
 		delete wlImage;
 		imageMap.erase(it);
 	}
@@ -106,11 +112,11 @@
 		const VkExtent3D &extent = image->getImage()->getExtent();
 		int bufferRowPitch = image->getImage()->rowPitchBytes(VK_IMAGE_ASPECT_COLOR_BIT, 0);
 		image->getImage()->copyTo(reinterpret_cast<uint8_t *>(wlImage->data), bufferRowPitch);
-		wl_surface_attach(surface, wlImage->buffer, 0, 0);
-		wl_surface_damage(surface, 0, 0, extent.width, extent.height);
-		wl_surface_commit(surface);
-		wl_display_roundtrip(display);
-		wl_display_sync(display);
+		libWaylandClient->wl_surface_attach(surface, wlImage->buffer, 0, 0);
+		libWaylandClient->wl_surface_damage(surface, 0, 0, extent.width, extent.height);
+		libWaylandClient->wl_surface_commit(surface);
+		libWaylandClient->wl_display_roundtrip(display);
+		libWaylandClient->wl_display_sync(display);
 	}
 
 	return VK_SUCCESS;
diff --git a/src/WSI/WaylandSurfaceKHR.hpp b/src/WSI/WaylandSurfaceKHR.hpp
index 17abe89..8c7c064 100644
--- a/src/WSI/WaylandSurfaceKHR.hpp
+++ b/src/WSI/WaylandSurfaceKHR.hpp
@@ -34,6 +34,7 @@
 class WaylandSurfaceKHR : public SurfaceKHR, public ObjectBase<WaylandSurfaceKHR, VkSurfaceKHR>
 {
 public:
+	static bool isSupported();
 	WaylandSurfaceKHR(const VkWaylandSurfaceCreateInfoKHR *pCreateInfo, void *mem);
 
 	void destroySurface(const VkAllocationCallbacks *pAllocator) override;
diff --git a/src/WSI/libWaylandClient.cpp b/src/WSI/libWaylandClient.cpp
new file mode 100644
index 0000000..b0dc1af
--- /dev/null
+++ b/src/WSI/libWaylandClient.cpp
@@ -0,0 +1,68 @@
+// Copyright 2021 The SwiftShader Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "libWaylandClient.hpp"
+
+#include "System/SharedLibrary.hpp"
+
+#include <memory>
+
+LibWaylandClientExports::LibWaylandClientExports(void *libwl)
+{
+	getFuncAddress(libwl, "wl_display_dispatch", &wl_display_dispatch);
+	getFuncAddress(libwl, "wl_display_get_registry", &wl_display_get_registry);
+	getFuncAddress(libwl, "wl_display_roundtrip", &wl_display_roundtrip);
+	getFuncAddress(libwl, "wl_display_sync", &wl_display_sync);
+
+	getFuncAddress(libwl, "wl_registry_add_listener", &wl_registry_add_listener);
+	getFuncAddress(libwl, "wl_registry_bind", &wl_registry_bind);
+
+	getFuncAddress(libwl, "wl_buffer_destroy", &wl_buffer_destroy);
+	getFuncAddress(libwl, "wl_shm_create_pool", &wl_shm_create_pool);
+	getFuncAddress(libwl, "wl_shm_pool_create_buffer", &wl_shm_pool_create_buffer);
+	getFuncAddress(libwl, "wl_shm_pool_destroy", &wl_shm_pool_destroy);
+
+	getFuncAddress(libwl, "wl_surface_attach", &wl_surface_attach);
+	getFuncAddress(libwl, "wl_surface_damage", &wl_surface_damage);
+	getFuncAddress(libwl, "wl_surface_commit", &wl_surface_commit);
+
+	wl_shm_interface = reinterpret_cast<const wl_interface *>(getProcAddress(libwl, "wl_shm_interface"));
+}
+
+LibWaylandClientExports *LibWaylandClient::operator->()
+{
+	return loadExports();
+}
+
+LibWaylandClientExports *LibWaylandClient::loadExports()
+{
+	static LibWaylandClientExports exports = [] {
+		void *libwl = nullptr;
+
+		if(getProcAddress(RTLD_DEFAULT, "wl_display_dispatch"))  // Search the global scope for pre-loaded Wayland client library.
+		{
+			libwl = RTLD_DEFAULT;
+		}
+		else
+		{
+			libwl = loadLibrary("libwayland-client.so.0");
+		}
+
+		return LibWaylandClientExports(libwl);
+	}();
+
+	return exports.wl_display_dispatch ? &exports : nullptr;
+}
+
+LibWaylandClient libWaylandClient;
diff --git a/src/WSI/libWaylandClient.hpp b/src/WSI/libWaylandClient.hpp
new file mode 100644
index 0000000..d0a31a2
--- /dev/null
+++ b/src/WSI/libWaylandClient.hpp
@@ -0,0 +1,62 @@
+// Copyright 2022 The SwiftShader Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef libWaylandClient_hpp
+#define libWaylandClient_hpp
+
+#include <wayland-client.h>
+
+struct LibWaylandClientExports
+{
+	LibWaylandClientExports() {}
+	LibWaylandClientExports(void *libwl);
+
+	int (*wl_display_dispatch)(wl_display *d) = nullptr;
+	wl_registry *(*wl_display_get_registry)(wl_display *d) = nullptr;
+	int (*wl_display_roundtrip)(wl_display *d) = nullptr;
+	wl_callback *(*wl_display_sync)(wl_display *d) = nullptr;
+
+	int (*wl_registry_add_listener)(wl_registry *r,
+	                                const wl_registry_listener *l, void *data) = nullptr;
+	void *(*wl_registry_bind)(wl_registry *r, uint32_t name, const wl_interface *i, uint32_t version) = nullptr;
+
+	void (*wl_buffer_destroy)(wl_buffer *b) = nullptr;
+	wl_shm_pool *(*wl_shm_create_pool)(wl_shm *shm, int32_t fd, int32_t size) = nullptr;
+	wl_buffer *(*wl_shm_pool_create_buffer)(wl_shm_pool *p, int32_t offset, int32_t width, int32_t height, int32_t stride, uint32_t format) = nullptr;
+	void (*wl_shm_pool_destroy)(wl_shm_pool *p) = nullptr;
+
+	void (*wl_surface_attach)(wl_surface *s, wl_buffer *b, int32_t x, int32_t y) = nullptr;
+	void (*wl_surface_damage)(wl_surface *s, int32_t x, int32_t y, int32_t width, int32_t height) = nullptr;
+	void (*wl_surface_commit)(wl_surface *s) = nullptr;
+
+	const wl_interface *wl_shm_interface = nullptr;
+};
+
+class LibWaylandClient
+{
+public:
+	bool isPresent()
+	{
+		return loadExports() != nullptr;
+	}
+
+	LibWaylandClientExports *operator->();
+
+private:
+	LibWaylandClientExports *loadExports();
+};
+
+extern LibWaylandClient libWaylandClient;
+
+#endif  // libWaylandClient_hpp
