From 54a58e479f4d63e62e9118637cd92a2013a4fb95 Mon Sep 17 00:00:00 2001 From: Lubosz Sarnecki Date: Thu, 15 Aug 2019 16:07:01 +0200 Subject: [PATCH 1/2] cmake: Add option to build with system jsoncpp. This patch adds the CMake build option `USE_SYSTEM_JSONCPP`, which instead of using the internal `jsoncpp.cpp` links against the system installed jsoncpp library. This results in a `libopenvr_api.so` that is only 115K instead of 301K on my system. Distributions like Debian will prefer this behaviour, since it will give them the possibility to maintain version and security issues for jsoncpp in one place. This behaviour can be enabled by ``` cmake -DUSE_SYSTEM_JSONCPP=True . ``` When the flag is not set, the build will behave like it did before. I tested this patch using the system wide jsoncpp successfully with xrdesktop. --- CMakeLists.txt | 1 + src/CMakeLists.txt | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8956cdad..1150c53d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,6 +28,7 @@ option(BUILD_UNIVERSAL "Builds the shared or framework as a universal (fat, 32- option(BUILD_OSX_I386 "Builds the shared or framework as a 32-bit binary, even on a 64-bit platform" OFF) option(USE_LIBCXX "Uses libc++ instead of libstdc++" ON) option(USE_CUSTOM_LIBCXX "Uses a custom libc++" OFF) +option(USE_SYSTEM_JSONCPP "Uses the system installed jsoncpp." OFF) add_definitions( -DVR_API_PUBLIC ) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b83710af..a7b64db9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -34,8 +34,14 @@ endif() # Set the source group and files. set(CORE_FILES openvr_api_public.cpp - jsoncpp.cpp ) + +if(NOT USE_SYSTEM_JSONCPP) + set(JSON_CPP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../thirdparty/jsoncpp) + include_directories(${JSON_CPP_DIR}) + list(APPEND CORE_FILES ${JSON_CPP_DIR}/jsoncpp.cpp) +endif() + set(VRCORE_FILES vrcore/dirtools_public.cpp vrcore/envvartools_public.cpp @@ -100,6 +106,10 @@ if(USE_CUSTOM_LIBCXX) set(EXTRA_LIBS ${EXTRA_LIBS} c++ c++abi) endif() +if(USE_SYSTEM_JSONCPP) + list(APPEND EXTRA_LIBS jsoncpp) +endif() + target_link_libraries(${LIBNAME} ${EXTRA_LIBS} ${CMAKE_DL_LIBS}) target_include_directories(${LIBNAME} PUBLIC ${OPENVR_HEADER_DIR}) From a7a6995d1d6f9ee1a17a3741661156f9706c40ce Mon Sep 17 00:00:00 2001 From: Lubosz Sarnecki Date: Thu, 15 Aug 2019 15:05:34 +0200 Subject: [PATCH 2/2] thirdparty: Move jsoncpp to thridparty directory. Even though the previous patch in this patch set enabled the build with a system wide jsoncpp and worked for me, it still left the internal jsoncpp includes in the include path, since the includes were placed in `CMAKE_CURRENT_SOURCE_DIR`. This could cause problems on other systems when trying to build with a system wide jsoncpp. In order to remove the internal json.h from the include path, I moved all jsoncpp files into a thridparty directory amd include it in the case of `USE_SYSTEM_JSONCPP` not being set. --- {src => thirdparty/jsoncpp}/json/json-forwards.h | 0 {src => thirdparty/jsoncpp}/json/json.h | 0 {src => thirdparty/jsoncpp}/jsoncpp.cpp | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename {src => thirdparty/jsoncpp}/json/json-forwards.h (100%) rename {src => thirdparty/jsoncpp}/json/json.h (100%) rename {src => thirdparty/jsoncpp}/jsoncpp.cpp (100%) diff --git a/src/json/json-forwards.h b/thirdparty/jsoncpp/json/json-forwards.h similarity index 100% rename from src/json/json-forwards.h rename to thirdparty/jsoncpp/json/json-forwards.h diff --git a/src/json/json.h b/thirdparty/jsoncpp/json/json.h similarity index 100% rename from src/json/json.h rename to thirdparty/jsoncpp/json/json.h diff --git a/src/jsoncpp.cpp b/thirdparty/jsoncpp/jsoncpp.cpp similarity index 100% rename from src/jsoncpp.cpp rename to thirdparty/jsoncpp/jsoncpp.cpp