From 8ba6a72a70ef6ca645d8c13b36cf39ec1d52fb31 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 1 Jul 2019 14:55:53 +0100 Subject: [PATCH] Don't rely on awk/sed in cmake build. Closes #1430 * It's theoretically possible to have a bash shell without awk or sed available (though very strange), so we can use cmake string processing & configure_file to get the same effect. --- CMakeLists.txt | 26 ++++++++++--------- renderdoc/driver/vulkan/CMakeLists.txt | 16 ++++++------ renderdoc/driver/vulkan/renderdoc.json | 6 ++--- .../driver/vulkan/renderdoc_vulkan.vcxproj | 2 +- renderdoc/driver/vulkan/vk_posix.cpp | 10 +++---- 5 files changed, 31 insertions(+), 29 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 75ead2615..813d103bb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -188,24 +188,26 @@ endif() message(STATUS "Calculating version") -execute_process( - COMMAND awk "{ if (/_MAJOR [0-9]/) { print $3 } }" renderdoc/api/replay/version.h - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE RENDERDOC_VERSION_MAJOR - OUTPUT_STRIP_TRAILING_WHITESPACE - ) +file(READ ${CMAKE_SOURCE_DIR}/renderdoc/api/replay/version.h VERSION_CONTENTS) -execute_process( - COMMAND awk "{ if (/_MINOR [0-9]/) { print $3 } }" renderdoc/api/replay/version.h - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE RENDERDOC_VERSION_MINOR - OUTPUT_STRIP_TRAILING_WHITESPACE - ) +string(REGEX MATCH "_MAJOR [0-9]+" MAJOR_VERSION_LINE "${VERSION_CONTENTS}") +string(REGEX MATCH "[0-9]+" RENDERDOC_VERSION_MAJOR "${MAJOR_VERSION_LINE}") + +string(REGEX MATCH "_MINOR [0-9]+" MINOR_VERSION_LINE "${VERSION_CONTENTS}") +string(REGEX MATCH "[0-9]+" RENDERDOC_VERSION_MINOR "${MINOR_VERSION_LINE}") set(RENDERDOC_VERSION "${RENDERDOC_VERSION_MAJOR}.${RENDERDOC_VERSION_MINOR}") message(STATUS "Building RenderDoc version ${RENDERDOC_VERSION}") +if(RENDERDOC_VERSION_MAJOR STREQUAL "") + message(FATAL_ERROR "Couldn't calculate major version") +endif() + +if(RENDERDOC_VERSION_MINOR STREQUAL "") + message(FATAL_ERROR "Couldn't calculate minor version") +endif() + if(APPLE) message(STATUS "Disabling GLES driver on apple") set(ENABLE_GLES OFF CACHE BOOL "" FORCE) diff --git a/renderdoc/driver/vulkan/CMakeLists.txt b/renderdoc/driver/vulkan/CMakeLists.txt index 04198cf9f..f5aede826 100644 --- a/renderdoc/driver/vulkan/CMakeLists.txt +++ b/renderdoc/driver/vulkan/CMakeLists.txt @@ -91,12 +91,12 @@ elseif(ENABLE_GGP) list(APPEND sources vk_posix.cpp vk_ggp.cpp) add_definitions(-DVK_USE_PLATFORM_GGP) + set(VULKAN_LAYER_MODULE_PATH "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/${LIB_SUBFOLDER_TRAIL_SLASH}librenderdoc.so") + set(json_in ${CMAKE_CURRENT_SOURCE_DIR}/renderdoc.json) set(json_out ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/renderdoc_capture.json) - add_custom_command(OUTPUT ${json_out} - COMMAND sed '{s%\\[MAJOR\\]%${RENDERDOC_VERSION_MAJOR}%\; s%\\[MINOR\\]%${RENDERDOC_VERSION_MINOR}%\; s%...renderdoc.dll%${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/${LIB_SUBFOLDER_TRAIL_SLASH}librenderdoc.so%}' < ${json_in} > ${json_out} - DEPENDS ${json_in}) - add_custom_target(generate-json ALL DEPENDS ${json_out}) + + configure_file(${json_in} ${json_out}) install (FILES ${json_out} DESTINATION ${VULKAN_LAYER_FOLDER}) elseif(UNIX) @@ -110,12 +110,12 @@ elseif(UNIX) add_definitions(-DVK_USE_PLATFORM_XCB_KHR) endif() + set(VULKAN_LAYER_MODULE_PATH "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/${LIB_SUBFOLDER_TRAIL_SLASH}librenderdoc.so") + set(json_in ${CMAKE_CURRENT_SOURCE_DIR}/renderdoc.json) set(json_out ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/renderdoc_capture.json) - add_custom_command(OUTPUT ${json_out} - COMMAND sed '{s%\\[MAJOR\\]%${RENDERDOC_VERSION_MAJOR}%\; s%\\[MINOR\\]%${RENDERDOC_VERSION_MINOR}%\; s%...renderdoc.dll%${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/${LIB_SUBFOLDER_TRAIL_SLASH}librenderdoc.so%}' < ${json_in} > ${json_out} - DEPENDS ${json_in}) - add_custom_target(generate-json ALL DEPENDS ${json_out}) + + configure_file(${json_in} ${json_out}) install (FILES ${json_out} DESTINATION ${VULKAN_LAYER_FOLDER}) endif() diff --git a/renderdoc/driver/vulkan/renderdoc.json b/renderdoc/driver/vulkan/renderdoc.json index 9930852ca..f13e1fea9 100644 --- a/renderdoc/driver/vulkan/renderdoc.json +++ b/renderdoc/driver/vulkan/renderdoc.json @@ -3,9 +3,9 @@ "layer" : { "name": "VK_LAYER_RENDERDOC_Capture", "type": "GLOBAL", - "library_path": ".\\renderdoc.dll", + "library_path": "@VULKAN_LAYER_MODULE_PATH@", "api_version": "1.1.73", - "implementation_version": "[MINOR]", + "implementation_version": "@RENDERDOC_VERSION_MINOR@", "description": "Debugging capture layer for RenderDoc", "functions": { "vkGetInstanceProcAddr": "VK_LAYER_RENDERDOC_CaptureGetInstanceProcAddr", @@ -37,7 +37,7 @@ "ENABLE_VULKAN_RENDERDOC_CAPTURE": "1" }, "disable_environment": { - "DISABLE_VULKAN_RENDERDOC_CAPTURE_[MAJOR]_[MINOR]": "1" + "DISABLE_VULKAN_RENDERDOC_CAPTURE_@RENDERDOC_VERSION_MAJOR@_@RENDERDOC_VERSION_MINOR@": "1" } } } diff --git a/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj b/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj index 2d038d7c6..bf6b80525 100644 --- a/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj +++ b/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj @@ -220,7 +220,7 @@ - $([System.IO.File]::ReadAllText('$(ProjectDir)renderdoc.json').Replace('[MAJOR]', '$(MajorVersion)').Replace('[MINOR]', '$(MinorVersion)')) + $([System.IO.File]::ReadAllText('$(ProjectDir)renderdoc.json').Replace('@RENDERDOC_VERSION_MAJOR@', '$(MajorVersion)').Replace('@RENDERDOC_VERSION_MINOR@', '$(MinorVersion)').Replace('@VULKAN_LAYER_MODULE_PATH@', '.\\renderdoc.dll')) diff --git a/renderdoc/driver/vulkan/vk_posix.cpp b/renderdoc/driver/vulkan/vk_posix.cpp index ba7863481..4f4cbf1f4 100644 --- a/renderdoc/driver/vulkan/vk_posix.cpp +++ b/renderdoc/driver/vulkan/vk_posix.cpp @@ -228,13 +228,13 @@ static std::string GenerateJSON(const std::string &sopath) std::string json = std::string(txt, txt + len); - const char dllPathString[] = ".\\\\renderdoc.dll"; + const char modulePathString[] = "@VULKAN_LAYER_MODULE_PATH@"; - size_t idx = json.find(dllPathString); + size_t idx = json.find(modulePathString); - json = json.substr(0, idx) + sopath + json.substr(idx + sizeof(dllPathString) - 1); + json = json.substr(0, idx) + sopath + json.substr(idx + sizeof(modulePathString) - 1); - const char majorString[] = "[MAJOR]"; + const char majorString[] = "@RENDERDOC_VERSION_MAJOR@"; idx = json.find(majorString); while(idx != std::string::npos) @@ -245,7 +245,7 @@ static std::string GenerateJSON(const std::string &sopath) idx = json.find(majorString); } - const char minorString[] = "[MINOR]"; + const char minorString[] = "@RENDERDOC_VERSION_MINOR@"; idx = json.find(minorString); while(idx != std::string::npos)