From 2dc75a781af2a7dd6380d0bfa3e7b3b7d4932846 Mon Sep 17 00:00:00 2001 From: mwlasiuk Date: Thu, 18 Jun 2026 21:51:36 +0200 Subject: [PATCH 1/3] Modernize imgui and im* libraries setup --- cmake/imgui.cmake | 8 ++++++-- cmake/imguizmo.cmake | 3 ++- cmake/implot.cmake | 9 +++++---- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/cmake/imgui.cmake b/cmake/imgui.cmake index 0da72db6..48705eb0 100644 --- a/cmake/imgui.cmake +++ b/cmake/imgui.cmake @@ -18,8 +18,12 @@ set(IMGUI_HEADER_FILES ${IMGUI_LIBRARY_BACKEND_DIRECTORY}/imgui_impl_opengl2.h) set(IMGUI_FILES ${IMGUI_SOURCE_FILES} ${IMGUI_HEADER_FILES}) -add_definitions(-DImDrawIdx=unsigned\ int) -add_library(imgui STATIC ${IMGUI_FILES}) + +add_library(imgui STATIC) +target_sources(imgui PRIVATE ${IMGUI_FILES}) target_include_directories( imgui PRIVATE ${IMGUI_LIBRARY_DIRECTORY} ${IMGUI_LIBRARY_BACKEND_DIRECTORY} ${THIRDPARTY_DIRECTORY}/freeglut/include) + +# public : projects linking this library will use that definition +target_compile_definitions(imgui PUBLIC -DImDrawIdx=unsigned\ int) diff --git a/cmake/imguizmo.cmake b/cmake/imguizmo.cmake index a0104b72..b6988e46 100644 --- a/cmake/imguizmo.cmake +++ b/cmake/imguizmo.cmake @@ -19,7 +19,8 @@ set(IMGUIZMO_HEADER_FILES set(IMGUIZMO_FILES ${IMGUIZMO_SOURCE_FILES} ${IMGUIZMO_HEADER_FILES}) -add_library(imguizmo STATIC ${IMGUIZMO_FILES}) +add_library(imguizmo STATIC) +target_sources(imguizmo PRIVATE ${IMGUIZMO_FILES}) target_include_directories( imguizmo PRIVATE ${IMGUIZMO_LIBRARY_DIRECTORY} ${THIRDPARTY_DIRECTORY}/imgui) diff --git a/cmake/implot.cmake b/cmake/implot.cmake index 62984537..22097dd3 100644 --- a/cmake/implot.cmake +++ b/cmake/implot.cmake @@ -8,14 +8,15 @@ set(IMPLOT_SOURCE_FILES ${IMPLOT_LIBRARY_DIRECTORY}/implot_demo.cpp ) -set(IMGUI_HEADER_FILES - ${IMGUI_LIBRARY_DIRECTORY}/implot.h - ${IMGUI_LIBRARY_DIRECTORY}/implot_internal.h +set(IMPLOT_HEADER_FILES + ${IMPLOT_LIBRARY_DIRECTORY}/implot.h + ${IMPLOT_LIBRARY_DIRECTORY}/implot_internal.h ) set(IMPLOT_FILES ${IMPLOT_SOURCE_FILES} ${IMPLOT_HEADER_FILES}) -add_library(implot STATIC ${IMPLOT_FILES}) +add_library(implot STATIC) +target_sources(implot PRIVATE ${IMPLOT_FILES}) target_include_directories( implot PRIVATE ${IMPLOT_LIBRARY_DIRECTORY} ${IMPLOT_LIBRARY_BACKEND_DIRECTORY} ${THIRDPARTY_DIRECTORY}/imgui) From e1134435aac585bb7d064af3a0b01d7a8cae2cdf Mon Sep 17 00:00:00 2001 From: mwlasiuk Date: Thu, 18 Jun 2026 22:17:07 +0200 Subject: [PATCH 2/3] Move thirdparty configuration to separate file --- CMakeLists.txt | 154 ++--------------------------- cmake/dependencies.cmake | 204 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 212 insertions(+), 146 deletions(-) create mode 100644 cmake/dependencies.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 74a99aa6..ee236d2a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,152 +86,14 @@ include(cmake/imgui.cmake) include(cmake/imguizmo.cmake) include(cmake/implot.cmake) -add_subdirectory(${THIRDPARTY_DIRECTORY}/eigen) -set(EIGEN3_INCLUDE_DIR ${THIRDPARTY_DIRECTORY}/eigen) -MESSAGE(STATUS "Using bundled Eigen3 : ${EIGEN3_INCLUDE_DIR}") - -if (BUILD_WITH_BUNDLED_FREEGLUT) - set(FREEGLUT_BUILD_DEMOS - OFF - CACHE BOOL "" FORCE) - add_subdirectory(${THIRDPARTY_DIRECTORY}/freeglut) - set(FREEGLUT_INCLUDE_DIR ${THIRDPARTY_DIRECTORY}/freeglut/include) - set(FREEGLUT_LIBRARY freeglut) - # Suppress unused variable warnings from FreeGlut - if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") - target_compile_options(freeglut PRIVATE -Wno-unused-const-variable) - endif() - MESSAGE(STATUS "Using bundled FreeGlut") -else() - find_package(GLUT REQUIRED) - set(FREEGLUT_INCLUDE_DIR ${GLUT_INCLUDE_DIR}) - set(FREEGLUT_LIBRARY ${GLUT_glut_LIBRARY}) - MESSAGE(STATUS "FreeGlut include dir: ${FREEGLUT_INCLUDE_DIR}") -endif () - -if (BUILD_WITH_BUNDLED_GLEW) - if(APPLE) - # On modern macOS AGL framework is deprecated/removed. - # We point AGL_LIBRARY to OpenGL to trick the submodule into linking against a valid framework instead of failing. - find_library(AGL_LIBRARY OpenGL) - endif() - - add_subdirectory(${THIRDPARTY_DIRECTORY}/glew-cmake) - set(GLEW_INCLUDE_DIR ${THIRDPARTY_DIRECTORY}/glew-cmake/include) - set(GLEW_LIBRARY libglew_static) - - MESSAGE(STATUS "Using bundled GLEW") -else() - find_package(GLEW REQUIRED) - set(GLEW_INCLUDE_DIR ${GLEW_INCLUDE_DIRS}) - set(GLEW_LIBRARY ${GLEW_LIBRARIES}) - MESSAGE(STATUS "GLEW include dir: ${GLEW_INCLUDE_DIR}, GLEW library: ${GLEW_LIBRARY}") -endif() - -if (BUILD_WITH_BUNDLED_LIBLASZIP) - add_subdirectory(${THIRDPARTY_DIRECTORY}/LASzip) - set(LASZIP_INCLUDE_DIR ${THIRDPARTY_DIRECTORY}) - set(LASZIP_LIBRARY laszip) - MESSAGE(STATUS "Using bundled LASzip") - - if(APPLE) - target_compile_definitions(laszip PUBLIC off64_t=off_t) - endif() -else() - find_package(LASzip REQUIRED) - set(LASZIP_INCLUDE_DIR ${LASZIP_INCLUDE_DIR}) - set(LASZIP_LIBRARY ${LASZIP_LIBRARY}) - set(PLATFORM_LASZIP_LIB ${LASZIP_LIBRARY}) - MESSAGE(STATUS "LASzip include dir: ${LASZIP_INCLUDE_DIR}, LASzip library: ${LASZIP_LIBRARY}") -endif () - -# Download or Search for OpenCV -include(${THIRDPARTY_DIRECTORY_BINARY}/OpenCV/CMakeLists.txt) -find_package(OpenCV REQUIRED) -MESSAGE(STATUS "OpenCV include dir: ${OpenCV_INCLUDE_DIRS}, OpenCV librarys: ${OpenCV_LIBS}") - -# Download or Search for PROJ -include(${THIRDPARTY_DIRECTORY_BINARY}/Proj/CMakeLists.txt) -MESSAGE(STATUS "PROJ include dir: ${PROJ_INCLUDE_DIR}, PROJ library: ${PROJ_LIBRARY}") -MESSAGE(STATUS "PROJ implementation library: ${PROJ_IMPLIB}, PROJ database: ${PROJ_DB}") - -# Option to build with bundled oneTBB -if (BUILD_WITH_BUNDLED_ONETBB) - # Disable oneTBB components we don't need - set(TBB_TEST OFF CACHE BOOL "" FORCE) - set(TBB_EXAMPLES OFF CACHE BOOL "" FORCE) - set(TBB_STRICT OFF CACHE BOOL "" FORCE) - set(TBBMALLOC_BUILD OFF CACHE BOOL "" FORCE) - set(TBB_CPF OFF CACHE BOOL "" FORCE) - - add_subdirectory(${THIRDPARTY_DIRECTORY}/oneTBB) - MESSAGE(STATUS "Using bundled oneTBB from: ${THIRDPARTY_DIRECTORY}/oneTBB") -else() - # Find TBB from system - find_package(TBB REQUIRED) - MESSAGE(STATUS "Found system TBB") -endif() - -# Add unordered_dense header-only library -add_subdirectory(${THIRDPARTY_DIRECTORY}/unordered_dense) -MESSAGE(STATUS "Using bundled unordered_dense from: ${THIRDPARTY_DIRECTORY}/unordered_dense") - -# Add spdlog logging library -set(SPDLOG_BUILD_PIC ON CACHE BOOL "Build spdlog with position-independent code") -add_subdirectory(${THIRDPARTY_DIRECTORY}/spdlog) -MESSAGE(STATUS "Using bundled spdlog from: ${THIRDPARTY_DIRECTORY}/spdlog") - -# Add UTL header-only utility library -add_subdirectory(${THIRDPARTY_DIRECTORY}/UTL) -MESSAGE(STATUS "Using bundled UTL from: ${THIRDPARTY_DIRECTORY}/UTL") - -# ---- Profiler backend ---- -if(HDMAPPING_PROFILER STREQUAL "TRACY") - include(FetchContent) - FetchContent_Declare(tracy - GIT_REPOSITORY https://github.com/wolfpld/tracy.git - GIT_TAG v0.13.1 - GIT_SHALLOW TRUE - ) - set(TRACY_ENABLE ON CACHE BOOL "" FORCE) - set(TRACY_ON_DEMAND ON CACHE BOOL "" FORCE) - FetchContent_MakeAvailable(tracy) - message(STATUS "HDMapping profiler: Tracy v0.13.1 (on-demand)") -elseif(HDMAPPING_PROFILER STREQUAL "UTL") - message(STATUS "HDMapping profiler: UTL") -else() - message(STATUS "HDMapping profiler: NONE (disabled)") -endif() - -if(BUILD_WITH_PYBIND) - message(STATUS "BUILD_WITH_PYBIND is enabled: fetching pybind.") - include(FetchContent) - set(pybind11_SOURCE_DIR "${CMAKE_BINARY_DIR}/3rdparty/pybind11-src") - set(pybind11_BINARY_DIR "${CMAKE_BINARY_DIR}/3rdparty/pybind11-build") - FetchContent_Declare( - pybind11 - GIT_REPOSITORY https://github.com/pybind/pybind11 - GIT_TAG v2.12.1 - SOURCE_DIR ${pybind11_SOURCE_DIR} - BINARY_DIR ${pybind11_BINARY_DIR} - ) - FetchContent_GetProperties(pybind11) - if(NOT pybind11_POPULATED) - FetchContent_MakeAvailable(pybind11) - endif() - add_subdirectory(pybind) -else() - message(STATUS "BUILD_WITH_PYBIND is disabled.") -endif() - - -add_subdirectory(${THIRDPARTY_DIRECTORY}/vqf/vqf/cpp) -add_subdirectory(${THIRDPARTY_DIRECTORY}/Fusion/Fusion) - -add_subdirectory(${EXTERNAL_LIBRARIES_DIRECTORY}/plycpp) -add_subdirectory(${EXTERNAL_LIBRARIES_DIRECTORY}/wgs84_do_puwg92) -add_subdirectory(${EXTERNAL_LIBRARIES_DIRECTORY}/WGS84toCartesian) - +# ============================================================================ +# Configure all dependencies (3rdparty and external libraries) +# ============================================================================ +include(cmake/dependencies.cmake) + +# ============================================================================ +# Core Library +# ============================================================================ add_subdirectory(core) set(CORE_LIBRARIES core) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake new file mode 100644 index 00000000..172be2da --- /dev/null +++ b/cmake/dependencies.cmake @@ -0,0 +1,204 @@ +# cmake/dependencies.cmake +# Extract 3rdparty and external library configuration +# Included from root CMakeLists.txt + +include_guard() + +message(STATUS "==== Configuring Dependencies ====") + +# ============================================================================ +# Graphics Libraries (Bundled or System) +# ============================================================================ + +# Eigen3 - Linear algebra library (bundled) +add_subdirectory(${THIRDPARTY_DIRECTORY}/eigen) +set(EIGEN3_INCLUDE_DIR ${THIRDPARTY_DIRECTORY}/eigen) +message(STATUS "Using bundled Eigen3 : ${EIGEN3_INCLUDE_DIR}") + +# FreeGLUT - OpenGL utilities +if (BUILD_WITH_BUNDLED_FREEGLUT) + set(FREEGLUT_BUILD_DEMOS OFF CACHE BOOL "" FORCE) + add_subdirectory(${THIRDPARTY_DIRECTORY}/freeglut) + set(FREEGLUT_INCLUDE_DIR ${THIRDPARTY_DIRECTORY}/freeglut/include) + set(FREEGLUT_LIBRARY freeglut) + + # Suppress unused variable warnings from FreeGlut + if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + target_compile_options(freeglut PRIVATE -Wno-unused-const-variable) + endif() + message(STATUS "Using bundled FreeGlut") +else() + find_package(GLUT REQUIRED) + set(FREEGLUT_INCLUDE_DIR ${GLUT_INCLUDE_DIR}) + set(FREEGLUT_LIBRARY ${GLUT_glut_LIBRARY}) + message(STATUS "FreeGlut include dir: ${FREEGLUT_INCLUDE_DIR}") +endif() + +# GLEW - OpenGL extension loader +if (BUILD_WITH_BUNDLED_GLEW) + if(APPLE) + # On modern macOS AGL framework is deprecated/removed. + # Point AGL_LIBRARY to OpenGL to trick the submodule into linking against a valid framework + find_library(AGL_LIBRARY OpenGL) + endif() + + add_subdirectory(${THIRDPARTY_DIRECTORY}/glew-cmake) + set(GLEW_INCLUDE_DIR ${THIRDPARTY_DIRECTORY}/glew-cmake/include) + set(GLEW_LIBRARY libglew_static) + message(STATUS "Using bundled GLEW") +else() + find_package(GLEW REQUIRED) + set(GLEW_INCLUDE_DIR ${GLEW_INCLUDE_DIRS}) + set(GLEW_LIBRARY ${GLEW_LIBRARIES}) + message(STATUS "GLEW include dir: ${GLEW_INCLUDE_DIR}, GLEW library: ${GLEW_LIBRARY}") +endif() + +# ============================================================================ +# Point Cloud & LiDAR Libraries +# ============================================================================ + +# LASzip - LAS file compression +if (BUILD_WITH_BUNDLED_LIBLASZIP) + add_subdirectory(${THIRDPARTY_DIRECTORY}/LASzip) + set(LASZIP_INCLUDE_DIR ${THIRDPARTY_DIRECTORY}) + set(LASZIP_LIBRARY laszip) + message(STATUS "Using bundled LASzip") + + if(APPLE) + target_compile_definitions(laszip PUBLIC off64_t=off_t) + endif() +else() + find_package(LASzip REQUIRED) + set(LASZIP_INCLUDE_DIR ${LASZIP_INCLUDE_DIR}) + set(LASZIP_LIBRARY ${LASZIP_LIBRARY}) + set(PLATFORM_LASZIP_LIB ${LASZIP_LIBRARY}) + message(STATUS "LASzip include dir: ${LASZIP_INCLUDE_DIR}, LASzip library: ${LASZIP_LIBRARY}") +endif() + +# ============================================================================ +# Computer Vision & Geospatial Libraries (Pre-downloaded) +# ============================================================================ + +# OpenCV - Computer vision library +include(${THIRDPARTY_DIRECTORY_BINARY}/OpenCV/CMakeLists.txt) +find_package(OpenCV REQUIRED) +message(STATUS "OpenCV include dir: ${OpenCV_INCLUDE_DIRS}, OpenCV libs: ${OpenCV_LIBS}") + +# PROJ - Cartographic projections library +include(${THIRDPARTY_DIRECTORY_BINARY}/Proj/CMakeLists.txt) +message(STATUS "PROJ include dir: ${PROJ_INCLUDE_DIR}, PROJ library: ${PROJ_LIBRARY}") +message(STATUS "PROJ implementation library: ${PROJ_IMPLIB}, PROJ database: ${PROJ_DB}") + +# ============================================================================ +# Threading & Performance Libraries +# ============================================================================ + +# oneTBB - Intel Threading Building Blocks (Bundled or System) +if (BUILD_WITH_BUNDLED_ONETBB) + # Disable oneTBB components we don't need + set(TBB_TEST OFF CACHE BOOL "" FORCE) + set(TBB_EXAMPLES OFF CACHE BOOL "" FORCE) + set(TBB_STRICT OFF CACHE BOOL "" FORCE) + set(TBBMALLOC_BUILD OFF CACHE BOOL "" FORCE) + set(TBB_CPF OFF CACHE BOOL "" FORCE) + + add_subdirectory(${THIRDPARTY_DIRECTORY}/oneTBB) + message(STATUS "Using bundled oneTBB from: ${THIRDPARTY_DIRECTORY}/oneTBB") +else() + find_package(TBB REQUIRED) + message(STATUS "Found system TBB") +endif() + +# ============================================================================ +# Header-Only & Utility Libraries +# ============================================================================ + +# unordered_dense - Hash map library +add_subdirectory(${THIRDPARTY_DIRECTORY}/unordered_dense) +message(STATUS "Using bundled unordered_dense from: ${THIRDPARTY_DIRECTORY}/unordered_dense") + +# spdlog - Logging library +set(SPDLOG_BUILD_PIC ON CACHE BOOL "Build spdlog with position-independent code") +add_subdirectory(${THIRDPARTY_DIRECTORY}/spdlog) +message(STATUS "Using bundled spdlog from: ${THIRDPARTY_DIRECTORY}/spdlog") + +# UTL - Header-only utility library +add_subdirectory(${THIRDPARTY_DIRECTORY}/UTL) +message(STATUS "Using bundled UTL from: ${THIRDPARTY_DIRECTORY}/UTL") + +# ============================================================================ +# IMGui & Visualization Libraries +# ============================================================================ + +# Note: imgui, imguizmo, implot are configured separately in: +# cmake/imgui.cmake, cmake/imguizmo.cmake, cmake/implot.cmake + +# VQF - Vector Quaternion Filter +add_subdirectory(${THIRDPARTY_DIRECTORY}/vqf/vqf/cpp) +message(STATUS "Using bundled VQF from: ${THIRDPARTY_DIRECTORY}/vqf/vqf/cpp") + +# Fusion - AHRS filter implementation +add_subdirectory(${THIRDPARTY_DIRECTORY}/Fusion/Fusion) +message(STATUS "Using bundled Fusion from: ${THIRDPARTY_DIRECTORY}/Fusion/Fusion") + +# ============================================================================ +# Profiler Backend - Optional +# ============================================================================ + +if(HDMAPPING_PROFILER STREQUAL "TRACY") + include(FetchContent) + FetchContent_Declare(tracy + GIT_REPOSITORY https://github.com/wolfpld/tracy.git + GIT_TAG v0.13.1 + GIT_SHALLOW TRUE + ) + set(TRACY_ENABLE ON CACHE BOOL "" FORCE) + set(TRACY_ON_DEMAND ON CACHE BOOL "" FORCE) + FetchContent_MakeAvailable(tracy) + message(STATUS "HDMapping profiler: Tracy v0.13.1 (on-demand)") +elseif(HDMAPPING_PROFILER STREQUAL "UTL") + message(STATUS "HDMapping profiler: UTL") +else() + message(STATUS "HDMapping profiler: NONE (disabled)") +endif() + +# ============================================================================ +# Python Bindings - Optional +# ============================================================================ + +if(BUILD_WITH_PYBIND) + message(STATUS "BUILD_WITH_PYBIND is enabled: fetching pybind11") + include(FetchContent) + set(pybind11_SOURCE_DIR "${CMAKE_BINARY_DIR}/3rdparty/pybind11-src") + set(pybind11_BINARY_DIR "${CMAKE_BINARY_DIR}/3rdparty/pybind11-build") + FetchContent_Declare( + pybind11 + GIT_REPOSITORY https://github.com/pybind/pybind11 + GIT_TAG v2.12.1 + SOURCE_DIR ${pybind11_SOURCE_DIR} + BINARY_DIR ${pybind11_BINARY_DIR} + ) + FetchContent_GetProperties(pybind11) + if(NOT pybind11_POPULATED) + FetchContent_MakeAvailable(pybind11) + endif() + add_subdirectory(pybind) +else() + message(STATUS "BUILD_WITH_PYBIND is disabled") +endif() + +# ============================================================================ +# External Coordinate Transformation Libraries +# ============================================================================ + +# Custom WGS84 projection utilities +add_subdirectory(${EXTERNAL_LIBRARIES_DIRECTORY}/plycpp) +message(STATUS "Using external library: plycpp") + +add_subdirectory(${EXTERNAL_LIBRARIES_DIRECTORY}/wgs84_do_puwg92) +message(STATUS "Using external library: wgs84_do_puwg92") + +add_subdirectory(${EXTERNAL_LIBRARIES_DIRECTORY}/WGS84toCartesian) +message(STATUS "Using external library: WGS84toCartesian") + +message(STATUS "==== Dependencies Configuration Complete ====") From d006e4c9f41335c94e6ee01264f26e00048bdeed Mon Sep 17 00:00:00 2001 From: mwlasiuk Date: Sat, 20 Jun 2026 11:08:43 +0200 Subject: [PATCH 3/3] Remove commented out codes --- apps/lidar_odometry_step_1/lidar_odometry_utils_optimizers.cpp | 1 - core/CMakeLists.txt | 2 -- 2 files changed, 3 deletions(-) diff --git a/apps/lidar_odometry_step_1/lidar_odometry_utils_optimizers.cpp b/apps/lidar_odometry_step_1/lidar_odometry_utils_optimizers.cpp index d99e818d..f246ad75 100644 --- a/apps/lidar_odometry_step_1/lidar_odometry_utils_optimizers.cpp +++ b/apps/lidar_odometry_step_1/lidar_odometry_utils_optimizers.cpp @@ -13,7 +13,6 @@ const double DEG_TO_RAD = M_PI / 180.0f; const double RAD_TO_DEG = 180.0f / M_PI; -// extern std::vector> global_tmp; namespace { //! Structure holds block of Hessian from observations to be sumed diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 4482eab5..15793f8d 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -25,8 +25,6 @@ set(CORE_BASE_SOURCES src/registration_plane_feature.cpp src/session.cpp # # src/utils.cpp # TODO(mwlasiuk) : broken AF ... - # ${EXTERNAL_LIBRARIES_DIRECTORY}/src/wgs84_do_puwg92.cc - # ${EXTERNAL_LIBRARIES_DIRECTORY}/src/plycpp.cpp ) set(CORE_GUI_SOURCES