From 467453bd0b693b8f57ed8789a0e9abb9c14a7918 Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nicolas.pope@utu.fi> Date: Mon, 20 Jan 2020 13:48:35 +0200 Subject: [PATCH] Resolve #280 windows gui compilation --- .gitlab-ci.yml | 5 +++-- .gitmodules | 3 +++ CMakeLists.txt | 38 +++++++++++++++++++++++++++------ applications/gui/CMakeLists.txt | 9 +++++++- ext/nanogui | 1 + 5 files changed, 47 insertions(+), 9 deletions(-) create mode 100644 .gitmodules create mode 160000 ext/nanogui diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 35916ad80..4fcf1d06d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,6 +5,7 @@ # Perhaps relevant in future https://gitlab.com/gitlab-org/gitlab-ce/issues/47063 variables: + GIT_SUBMODULE_STRATEGY: recursive CMAKE_ARGS_WINDOWS: '-DCMAKE_GENERATOR_PLATFORM=x64 -DNVPIPE_DIR="D:/Build/NvPipe" -DEigen3_DIR="C:/Program Files (x86)/Eigen3/share/eigen3/cmake" -DOpenCV_DIR="D:/Build/opencv-4.1.1" -DCUDA_TOOLKIT_ROOT_DIR="C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1"' stages: @@ -50,8 +51,8 @@ webserver-deploy: - 'call "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Auxiliary/Build/vcvars64.bat"' - mkdir build - cd build - - echo cmake %CMAKE_ARGS% %CMAKE_ARGS_WINDOWS% .. - - cmake %CMAKE_ARGS% %CMAKE_ARGS_WINDOWS% .. + - echo cmake %CMAKE_ARGS% %CMAKE_ARGS_WINDOWS% -DNANOGUI_DIR="C:/Program Files (x86)/NanoGUI" .. + - cmake %CMAKE_ARGS% %CMAKE_ARGS_WINDOWS% -DNANOGUI_DIR="C:/Program Files (x86)/NanoGUI" .. - devenv ftl.utu.fi.sln /build Release - rmdir /q /s "%DEPLOY_DIR%/%CI_COMMIT_REF_SLUG%" - mkdir "%DEPLOY_DIR%/%CI_COMMIT_REF_SLUG%" diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..1c1bd9b62 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "ext/nanogui"] + path = ext/nanogui + url = https://github.com/wjakob/nanogui.git diff --git a/CMakeLists.txt b/CMakeLists.txt index e2ab0ac60..19f41d1b5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,7 @@ option(WITH_FIXSTARS "Use Fixstars libSGM if available" ON) option(BUILD_VISION "Enable the vision component" ON) option(BUILD_RECONSTRUCT "Enable the reconstruction component" ON) option(BUILD_RENDERER "Enable the renderer component" ON) +option(BUILD_GUI "Enable the GUI" ON) option(BUILD_CALIBRATION "Enable the calibration component" OFF) set(THREADS_PREFER_PTHREAD_FLAG ON) @@ -92,14 +93,39 @@ else() set(REALSENSE_LIBRARY "") endif() +if (BUILD_GUI) + #find_library( NANOGUI_LIBRARY NAMES nanogui libnanogui PATHS ${NANOGUI_DIR} PATH_SUFFIXES lib) + #if (NANOGUI_LIBRARY) + # set(HAVE_NANOGUI TRUE) + # add_library(nanogui UNKNOWN IMPORTED) + # #set_property(TARGET nanogui PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${NANOGUI_EXTRA_INCS}) + # set_property(TARGET nanogui PROPERTY IMPORTED_LOCATION ${NANOGUI_LIBRARY}) + # message(STATUS "Found NanoGUI: ${NANOGUI_LIBRARY}") + + # if(WIN32) + # # Find include + # find_path(NANOGUI_INCLUDE_DIRS + # NAMES nanogui/nanogui.h + # PATHS "C:/Program Files/NanoGUI" "C:/Program Files (x86)/NanoGUI" ${NANOGUI_DIR} + # PATH_SUFFIXES include + # ) + # set_property(TARGET nanogui PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${NANOGUI_INCLUDE_DIRS}) + # endif() + #endif() -find_library( NANOGUI_LIBRARY NAMES nanogui libnanogui) -if (NANOGUI_LIBRARY) set(HAVE_NANOGUI TRUE) - add_library(nanogui UNKNOWN IMPORTED) - #set_property(TARGET nanogui PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${NANOGUI_EXTRA_INCS}) - set_property(TARGET nanogui PROPERTY IMPORTED_LOCATION ${NANOGUI_LIBRARY}) - message(STATUS "Found NanoGUI: ${NANOGUI_LIBRARY}") + + # Disable building extras we won't need (pure C++ project) + set(NANOGUI_BUILD_SHARED OFF CACHE BOOL " " FORCE) + set(NANOGUI_BUILD_EXAMPLE OFF CACHE BOOL " " FORCE) + set(NANOGUI_BUILD_PYTHON OFF CACHE BOOL " " FORCE) + set(NANOGUI_INSTALL OFF CACHE BOOL " " FORCE) + + # Add the configurations from nanogui + add_subdirectory(ext/nanogui) + + # For reliability of parallel build, make the NanoGUI targets dependencies + set_property(TARGET glfw glfw_objects nanogui PROPERTY FOLDER "dependencies") endif() find_library( NVPIPE_LIBRARY NAMES NvPipe libNvPipe PATHS ${NVPIPE_DIR} PATH_SUFFIXES lib) diff --git a/applications/gui/CMakeLists.txt b/applications/gui/CMakeLists.txt index 65d7964d5..cbb25e837 100644 --- a/applications/gui/CMakeLists.txt +++ b/applications/gui/CMakeLists.txt @@ -20,10 +20,17 @@ if (HAVE_OPENVR) list(APPEND GUISRC "src/vr.cpp") endif() +# Various preprocessor definitions have been generated by NanoGUI +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-gui ${GUISRC}) target_include_directories(ftl-gui PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> + $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/ext/nanogui/include> $<INSTALL_INTERFACE:include> PRIVATE src) @@ -32,6 +39,6 @@ target_include_directories(ftl-gui PUBLIC #endif() #target_include_directories(cv-node PUBLIC ${PROJECT_SOURCE_DIR}/include) -target_link_libraries(ftl-gui ftlcommon ftlctrl ftlrgbd ftlstreams ftlrender Threads::Threads ${OpenCV_LIBS} ${OPENVR_LIBRARIES} glog::glog ftlnet nanogui GL) +target_link_libraries(ftl-gui ftlcommon ftlctrl ftlrgbd ftlstreams ftlrender Threads::Threads ${OpenCV_LIBS} ${OPENVR_LIBRARIES} glog::glog ftlnet nanogui ${NANOGUI_EXTRA_LIBS}) diff --git a/ext/nanogui b/ext/nanogui new file mode 160000 index 000000000..e9ec8a1a9 --- /dev/null +++ b/ext/nanogui @@ -0,0 +1 @@ +Subproject commit e9ec8a1a9861cf578d9c6e85a6420080aa715c03 -- GitLab