Blob Blame History Raw
From 64febd4c1fd8f15b7aabcd68c99eca0e629ddd38 Mon Sep 17 00:00:00 2001
From: baldurk <baldurk@baldurk.org>
Date: Tue, 26 Sep 2017 11:00:17 +0100
Subject: [PATCH] Add support for specifying a subfolder under the lib/ target.
 Refs #750

* This allows a buidler to customise from e.g. /usr/lib/librenderdoc.so
  to /usr/lib/renderdoc/librenderdoc.so - which is harmless since the
  library is 'private' and not intended to be linked against directly.
---
 CMakeLists.txt                             | 14 ++++++++++++++
 qrenderdoc/CMakeLists.txt                  |  3 +++
 qrenderdoc/Code/pyrenderdoc/CMakeLists.txt |  2 +-
 qrenderdoc/qrenderdoc.pro                  |  2 +-
 renderdoc/CMakeLists.txt                   |  2 +-
 renderdoc/driver/vulkan/CMakeLists.txt     |  2 +-
 renderdoc/os/posix/posix_process.cpp       |  9 +++++++++
 renderdoc/os/posix/posix_stringio.cpp      | 13 +++++++++++--
 renderdoccmd/CMakeLists.txt                |  2 +-
 9 files changed, 42 insertions(+), 7 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 44d3bf70..fce5fa56 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -40,6 +40,20 @@ set(RENDERDOC_PLUGINS_PATH "" CACHE STRING "Path to RenderDoc plugins folder aft
 set(RENDERDOC_APK_PATH "" CACHE STRING "Path to RenderDocCmd.apk after installation of RenderDoc on host (either absolute or relative to binary)")
 set(RENDERDOC_LAYER_PATH "" CACHE STRING "Path to ABI directories (i.e. lib in lib/armeabi-v7a/libVkLayer_GLES_RenderDoc.so) after installation of RenderDoc on host (either absolute or relative to dir)")
 
+set(LIB_SUFFIX "" CACHE STRING "Suffix for 'lib' folder in target directory structure. E.g. set to '64' to use /usr/local/lib64 instead of /usr/local/lib.")
+set(LIB_SUBFOLDER "" CACHE STRING "Subfolder under the 'lib' folder in target directory structure. E.g. set to 'renderdoc' to use /usr/local/lib/renderdoc instead of /usr/local/lib.")
+
+if(NOT LIB_SUFFIX STREQUAL "")
+    add_definitions(-DRENDERDOC_LIB_SUFFIX=${LIB_SUFFIX})
+endif()
+
+set(LIB_SUBFOLDER_TRAIL_SLASH "")
+
+if(NOT LIB_SUBFOLDER STREQUAL "")
+    add_definitions(-DRENDERDOC_LIB_SUBFOLDER=${LIB_SUBFOLDER})
+    set(LIB_SUBFOLDER_TRAIL_SLASH "${LIB_SUBFOLDER}/")
+endif()
+
 if(BUILD_VERSION_STABLE)
     add_definitions(-DRENDERDOC_STABLE_BUILD=1)
 endif()
diff --git a/qrenderdoc/CMakeLists.txt b/qrenderdoc/CMakeLists.txt
index 2df9ffa5..516a5a59 100644
--- a/qrenderdoc/CMakeLists.txt
+++ b/qrenderdoc/CMakeLists.txt
@@ -102,6 +102,9 @@ file(WRITE
      "QMAKE_CXXFLAGS+=${QMAKE_CXXFLAGS}\n"
      "QMAKE_LFLAGS+=${QMAKE_LDFLAGS}\n"
      "\n"
+     "LIB_SUFFIX=${LIB_SUFFIX}\n"
+     "LIB_SUBFOLDER_TRAIL_SLASH=${LIB_SUBFOLDER_TRAIL_SLASH}\n"
+     "\n"
      # search for -lrenderdoc here
      "LIBS+=-L${CMAKE_RUNTIME_OUTPUT_DIRECTORY}\n"
      "\n"
diff --git a/qrenderdoc/Code/pyrenderdoc/CMakeLists.txt b/qrenderdoc/Code/pyrenderdoc/CMakeLists.txt
index 15109454..02aabb43 100644
--- a/qrenderdoc/Code/pyrenderdoc/CMakeLists.txt
+++ b/qrenderdoc/Code/pyrenderdoc/CMakeLists.txt
@@ -33,7 +33,7 @@ set(MODULE_DEFINES
 # Set up rpath to find librenderdoc.so
 set(CMAKE_SKIP_BUILD_RPATH TRUE)
 set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
-set(CMAKE_INSTALL_RPATH "$ORIGIN/:$ORIGIN/../lib/")
+set(CMAKE_INSTALL_RPATH "$ORIGIN/:$ORIGIN/../lib${LIB_SUFFIX}/${LIB_SUBFOLDER_TRAIL_SLASH}")
 
 # Add python library
 set (CMAKE_SHARED_LINKER_FLAGS "${PYTHON_LIBRARY} ${CMAKE_SHARED_LINKER_FLAGS}")
diff --git a/qrenderdoc/qrenderdoc.pro b/qrenderdoc/qrenderdoc.pro
index 5a8123b6..a7392965 100644
--- a/qrenderdoc/qrenderdoc.pro
+++ b/qrenderdoc/qrenderdoc.pro
@@ -115,7 +115,7 @@ win32 {
 
 	# Link against the core library
 	LIBS += -lrenderdoc
-	QMAKE_LFLAGS += '-Wl,-rpath,\'\$$ORIGIN\',-rpath,\'\$$ORIGIN/../lib\''
+	QMAKE_LFLAGS += '-Wl,-rpath,\'\$$ORIGIN\',-rpath,\'\$$ORIGIN/../lib'$$LIB_SUFFIX'/'$$LIB_SUBFOLDER_TRAIL_SLASH'\''
 
 	# Add the SWIG files that were generated in cmake
 	SOURCES += $$CMAKE_DIR/qrenderdoc/renderdoc_python.cxx
diff --git a/renderdoc/CMakeLists.txt b/renderdoc/CMakeLists.txt
index 6f997ab4..6c2b44b5 100644
--- a/renderdoc/CMakeLists.txt
+++ b/renderdoc/CMakeLists.txt
@@ -315,7 +315,7 @@ if(ANDROID)
     set_target_properties(renderdoc PROPERTIES LINK_FLAGS "-Wl,--build-id")
 endif()
 
-install (TARGETS renderdoc DESTINATION lib${LIB_SUFFIX})
+install (TARGETS renderdoc DESTINATION lib${LIB_SUFFIX}/${LIB_SUBFOLDER})
 
 # Copy in application API header to include
 install (FILES api/app/renderdoc_app.h DESTINATION include RENAME renderdoc.h)
diff --git a/renderdoc/driver/vulkan/CMakeLists.txt b/renderdoc/driver/vulkan/CMakeLists.txt
index 9ddd2ba7..1e0ab656 100644
--- a/renderdoc/driver/vulkan/CMakeLists.txt
+++ b/renderdoc/driver/vulkan/CMakeLists.txt
@@ -65,7 +65,7 @@ elseif(UNIX)
     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}/librenderdoc.so%}' < ${json_in} > ${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})
 
diff --git a/renderdoc/os/posix/posix_process.cpp b/renderdoc/os/posix/posix_process.cpp
index 774b871a..9e452a65 100644
--- a/renderdoc/os/posix/posix_process.cpp
+++ b/renderdoc/os/posix/posix_process.cpp
@@ -493,6 +493,15 @@ uint32_t Process::LaunchAndInjectIntoProcess(const char *app, const char *workin
     FileIO::GetExecutableFilename(binpath);
     binpath = dirname(binpath);
     libpath = binpath + "/../lib";
+
+// point to the right customiseable path
+#if defined(RENDERDOC_LIB_SUFFIX)
+    libpath += STRINGIZE(RENDERDOC_LIB_SUFFIX);
+#endif
+
+#if defined(RENDERDOC_LIB_SUBFOLDER)
+    libpath += "/" STRINGIZE(RENDERDOC_LIB_SUBFOLDER);
+#endif
   }
 
   string optstr;
diff --git a/renderdoc/os/posix/posix_stringio.cpp b/renderdoc/os/posix/posix_stringio.cpp
index eceea025..a9185a68 100644
--- a/renderdoc/os/posix/posix_stringio.cpp
+++ b/renderdoc/os/posix/posix_stringio.cpp
@@ -153,8 +153,17 @@ string GetReplayAppFilename()
   }
 
   // if it's not in the same directory, try in a sibling /bin
-  // e.g. /foo/bar/lib/librenderdoc.so -> /foo/bar/bin/qrenderdoc
-  replay = path + "/../bin/qrenderdoc";
+  //
+  // start from our path
+  replay = path + "/";
+
+// if there's a custom lib subfolder, go up one (e.g. /usr/lib/renderdoc/librenderdoc.so)
+#if defined(RENDERDOC_LIB_SUBFOLDER)
+  replay += "../";
+#endif
+
+  // leave the lib/ folder, and go into bin/
+  replay += "../bin/qrenderdoc";
 
   f = FileIO::fopen(replay.c_str(), "r");
   if(f)
diff --git a/renderdoccmd/CMakeLists.txt b/renderdoccmd/CMakeLists.txt
index c748dccd..aa8975a1 100644
--- a/renderdoccmd/CMakeLists.txt
+++ b/renderdoccmd/CMakeLists.txt
@@ -45,7 +45,7 @@ if(ANDROID)
 else()
     set(CMAKE_SKIP_BUILD_RPATH TRUE)
     set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
-    set(CMAKE_INSTALL_RPATH "$ORIGIN/:$ORIGIN/../lib/")
+    set(CMAKE_INSTALL_RPATH "$ORIGIN/:$ORIGIN/../lib${LIB_SUFFIX}/${LIB_SUBFOLDER_TRAIL_SLASH}")
     set(CMAKE_EXE_LINKER_FLAGS "${LINKER_FLAGS}")
 
     add_executable(renderdoccmd ${sources})
-- 
2.13.5