Make the ICD manifest use a relative path to the library

Change-Id: I61aff0500bfeafd00a0a2b4ba8df2cb8c1f1e282
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/33217
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Paul Thomson <paulthomson@google.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5fae661..e67b96c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2006,6 +2006,18 @@
         COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/
         COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libvk_swiftshader> ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/
     )
+
+    # The vk_swiftshader_icd.json manifest file will point to ICD_LIBRARY_PATH.
+    # Set ICD_LIBRARY_PATH to be a relative path similar to "./libvk_swiftshader.so", so both files can be moved.
+    # A relative path is relative to the manifest file.
+    # Note that the library name is always "libvk_swiftshader"; we do not use the platform-specific prefix.
+    set(ICD_LIBRARY_PATH "libvk_swiftshader${CMAKE_SHARED_LIBRARY_SUFFIX}")
+    if(WIN32)
+        # The path is output to a JSON file, which requires backslashes to be escaped.
+        set(ICD_LIBRARY_PATH ".\\${ICD_LIBRARY_PATH}")
+    else()
+        set(ICD_LIBRARY_PATH "./${ICD_LIBRARY_PATH}")
+    endif()
     configure_file(
         "${VULKAN_DIR}/vk_swiftshader_icd.json.tmpl"
         "${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/vk_swiftshader_icd.json")
diff --git a/src/Vulkan/vk_swiftshader_icd.json.tmpl b/src/Vulkan/vk_swiftshader_icd.json.tmpl
index 5de880d..79a8d4f 100644
--- a/src/Vulkan/vk_swiftshader_icd.json.tmpl
+++ b/src/Vulkan/vk_swiftshader_icd.json.tmpl
@@ -1,7 +1,7 @@
 {

   "file_format_version": "1.0.0",

   "ICD": {

-    "library_path": "${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/${CMAKE_SHARED_LIBRARY_PREFIX}vk_swiftshader${CMAKE_SHARED_LIBRARY_SUFFIX}",

+    "library_path": "${ICD_LIBRARY_PATH}",

     "api_version": "1.0.5"

   }

 }