From 2c614d362241c31883b09173ae1955384e951d2c Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Sun, 15 Nov 2020 10:46:57 +0200
Subject: [PATCH] Rework cmake install process

---
 SDK/C/CMakeLists.txt                     |  6 +++---
 SDK/CPP/CMakeLists.txt                   | 13 +++++++++++--
 SDK/CPP/public/CMakeLists.txt            |  3 +++
 applications/gui2/CMakeLists.txt         | 10 ++++++----
 applications/reconstruct2/CMakeLists.txt |  8 +++++---
 applications/vision/CMakeLists.txt       | 12 ++++++------
 components/control/cpp/CMakeLists.txt    | 10 +++++-----
 components/net/cpp/CMakeLists.txt        | 10 +++++-----
 8 files changed, 44 insertions(+), 28 deletions(-)

diff --git a/SDK/C/CMakeLists.txt b/SDK/C/CMakeLists.txt
index e4f0fadcb..6f816eeae 100644
--- a/SDK/C/CMakeLists.txt
+++ b/SDK/C/CMakeLists.txt
@@ -19,9 +19,9 @@ endif()
 
 target_link_libraries(ftl-dev ftlcommon ftlcodecs ftlrgbd ftlstreams Threads::Threads ${OpenCV_LIBS} ftlnet)
 
-install(TARGETS ftl-dev
-    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
-	PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+#install(TARGETS ftl-dev
+#    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+#	PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 	
 add_subdirectory(examples/image_write)
 add_subdirectory(examples/video_write)
diff --git a/SDK/CPP/CMakeLists.txt b/SDK/CPP/CMakeLists.txt
index 123671c2b..385497500 100644
--- a/SDK/CPP/CMakeLists.txt
+++ b/SDK/CPP/CMakeLists.txt
@@ -37,15 +37,24 @@ target_link_libraries(voltu ftlcommon ftldata ftlctrl ftlrgbd ftlstreams ftlrend
 
 set(SDK_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/sdk")
 
+if (WIN32)
+	install(TARGETS voltu RUNTIME COMPONENT runtime)
+else()
+	install(TARGETS voltu LIBRARY COMPONENT runtime)
+endif()
+
+set(voltu_sdk_DESTDIR ${CMAKE_CURRENT_BINARY_DIR}/lib/voltu_sdk_install)
+
 ExternalProject_Add(
 	voltu_sdk
 	SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/public"
 	BINARY_DIR ${SDK_BINARY_DIR}
-	INSTALL_COMMAND ""
 	BUILD_ALWAYS true
-	CMAKE_ARGS -DOpenCV_DIR=${OpenCV_DIR} -DWITH_PYTHON=True
+	CMAKE_ARGS -DOpenCV_DIR=${OpenCV_DIR} -DWITH_PYTHON=True -DCMAKE_INSTALL_PREFIX=${voltu_sdk_DESTDIR}
 )
 
+install(DIRECTORY ${voltu_sdk_DESTDIR}/ DESTINATION ${CMAKE_INSTALL_PREFIX})
+
 if (BUILD_TESTS)
 	add_subdirectory(tests)
 endif()
diff --git a/SDK/CPP/public/CMakeLists.txt b/SDK/CPP/public/CMakeLists.txt
index 94b928b5f..25770980f 100644
--- a/SDK/CPP/public/CMakeLists.txt
+++ b/SDK/CPP/public/CMakeLists.txt
@@ -52,6 +52,9 @@ target_include_directories(voltu_sdk
 	PUBLIC include)
 target_link_libraries(voltu_sdk ${OS_LIBS} Threads::Threads ${OPTIONAL_DEPENDENCIES} Eigen3::Eigen)
 
+install(TARGETS voltu_sdk ARCHIVE)
+install(DIRECTORY include/voltu DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+
 add_executable(voltu_basic_test
 	samples/basic_test/main.cpp
 )
diff --git a/applications/gui2/CMakeLists.txt b/applications/gui2/CMakeLists.txt
index 783aba56a..4993b84f2 100644
--- a/applications/gui2/CMakeLists.txt
+++ b/applications/gui2/CMakeLists.txt
@@ -65,9 +65,9 @@ add_definitions(${NANOGUI_EXTRA_DEFS})
 # On top of adding the path to nanogui/include, you may need extras
 include_directories(${NANOGUI_EXTRA_INCS})
 
-add_executable(ftl-gui2 ${GUI2SRC})
+add_executable(voltu-ui ${GUI2SRC})
 
-target_include_directories(ftl-gui2 PUBLIC
+target_include_directories(voltu-ui PUBLIC
 	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
 	$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/ext/nanogui/include>
 	$<INSTALL_INTERFACE:include>
@@ -78,6 +78,8 @@ target_include_directories(ftl-gui2 PUBLIC
 #endif()
 
 #target_include_directories(cv-node PUBLIC ${PROJECT_SOURCE_DIR}/include)
-target_link_libraries(ftl-gui2 ftlcommon ftldata ftlctrl ftlrgbd ftlstreams ftlrender ftldisparity Threads::Threads ${OpenCV_LIBS} openvr ftlnet nanogui ${NANOGUI_EXTRA_LIBS} ceres nvidia-ml)
+target_link_libraries(voltu-ui ftlcommon ftldata ftlctrl ftlrgbd ftlstreams ftlrender ftldisparity Threads::Threads ${OpenCV_LIBS} openvr ftlnet nanogui ${NANOGUI_EXTRA_LIBS} ceres nvidia-ml)
 
-target_precompile_headers(ftl-gui2 REUSE_FROM ftldata)
+target_precompile_headers(voltu-ui REUSE_FROM ftldata)
+
+install(TARGETS voltu-ui RUNTIME COMPONENT gui)
diff --git a/applications/reconstruct2/CMakeLists.txt b/applications/reconstruct2/CMakeLists.txt
index a001f2553..9eb5f208c 100644
--- a/applications/reconstruct2/CMakeLists.txt
+++ b/applications/reconstruct2/CMakeLists.txt
@@ -6,7 +6,7 @@ set(REPSRC
 	src/main.cpp
 )
 
-add_executable(ftl-reconstruct2 ${REPSRC})
+add_executable(voltu-fusion ${REPSRC})
 
 #target_include_directories(ftl-reconstruct PUBLIC
 #	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
@@ -14,8 +14,10 @@ add_executable(ftl-reconstruct2 ${REPSRC})
 #	PRIVATE src)
 
 if (CUDA_FOUND)
-set_property(TARGET ftl-reconstruct2 PROPERTY CUDA_SEPARABLE_COMPILATION ON)
+set_property(TARGET voltu-fusion PROPERTY CUDA_SEPARABLE_COMPILATION ON)
 endif()
 
 #target_include_directories(cv-node PUBLIC ${PROJECT_SOURCE_DIR}/include)
-target_link_libraries(ftl-reconstruct2 ftlcommon ftlrgbd Threads::Threads ${OpenCV_LIBS} ftlctrl ftlnet ftlrender ftloperators ftlstreams ftlaudio)
+target_link_libraries(voltu-fusion ftlcommon ftlrgbd Threads::Threads ${OpenCV_LIBS} ftlctrl ftlnet ftlrender ftloperators ftlstreams ftlaudio)
+
+install(TARGETS voltu-fusion RUNTIME COMPONENT reconstruct)
diff --git a/applications/vision/CMakeLists.txt b/applications/vision/CMakeLists.txt
index 9341fab23..bdd0a80ee 100644
--- a/applications/vision/CMakeLists.txt
+++ b/applications/vision/CMakeLists.txt
@@ -9,19 +9,19 @@ set(CVNODESRC
 	#src/middlebury.cpp
 )
 
-add_executable(ftl-vision ${CVNODESRC})
-install(TARGETS ftl-vision DESTINATION bin COMPONENT vision)
+add_executable(voltu-vision ${CVNODESRC})
+install(TARGETS voltu-vision RUNTIME COMPONENT vision)
 
-target_include_directories(ftl-vision PUBLIC
+target_include_directories(voltu-vision PUBLIC
 	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
 	$<INSTALL_INTERFACE:include>
 	PRIVATE src)
 
 if (CUDA_FOUND)
-set_property(TARGET ftl-vision PROPERTY CUDA_SEPARABLE_COMPILATION OFF)
+set_property(TARGET voltu-vision PROPERTY CUDA_SEPARABLE_COMPILATION OFF)
 endif()
 
 #target_include_directories(cv-node PUBLIC ${PROJECT_SOURCE_DIR}/include)
-target_link_libraries(ftl-vision ftlrgbd ftlcommon ftlstreams ftlctrl ${OpenCV_LIBS} ${CUDA_LIBRARIES} ftlnet ftlaudio)
+target_link_libraries(voltu-vision ftlrgbd ftlcommon ftlstreams ftlctrl ${OpenCV_LIBS} ${CUDA_LIBRARIES} ftlnet ftlaudio)
 
-target_precompile_headers(ftl-vision REUSE_FROM ftldata)
+target_precompile_headers(voltu-vision REUSE_FROM ftldata)
diff --git a/components/control/cpp/CMakeLists.txt b/components/control/cpp/CMakeLists.txt
index 3f6d4a299..d50bdee98 100644
--- a/components/control/cpp/CMakeLists.txt
+++ b/components/control/cpp/CMakeLists.txt
@@ -8,10 +8,10 @@ target_include_directories(ftlctrl PUBLIC
 	PRIVATE src)
 target_link_libraries(ftlctrl ftlcommon ftlnet Eigen3::Eigen)
 
-install(TARGETS ftlctrl EXPORT ftlctrl-config
-	ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
-	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
-install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+#install(TARGETS ftlctrl EXPORT ftlctrl-config
+#	ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+#	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+#	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+#install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT development)
 
 #ADD_SUBDIRECTORY(test)
diff --git a/components/net/cpp/CMakeLists.txt b/components/net/cpp/CMakeLists.txt
index 04e89bdfe..896a7b64e 100644
--- a/components/net/cpp/CMakeLists.txt
+++ b/components/net/cpp/CMakeLists.txt
@@ -20,11 +20,11 @@ target_link_libraries(ftlnet ftlctrl ftlcommon Threads::Threads glog::glog ${UUI
 
 target_precompile_headers(ftlnet REUSE_FROM ftlcommon)
 
-install(TARGETS ftlnet EXPORT ftlnet-config
-	ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
-	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
-install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+#install(TARGETS ftlnet EXPORT ftlnet-config
+#	ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+#	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+#	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+#install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT development)
 
 
 if (BUILD_TESTS)
-- 
GitLab