From b4c4176819b508978583b7ebf66306171807a8e6 Mon Sep 17 00:00:00 2001 From: Julius Michaelis Date: Sun, 14 Apr 2024 22:36:13 +0900 Subject: [PATCH 1/4] CMakeLists: install built binaries --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e9f7e8..523c53d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -161,6 +161,7 @@ add_library(gsplat_cpu vendor/gsplat-cpu/gsplat_cpu.cpp) target_include_directories(gsplat_cpu PRIVATE ${TORCH_INCLUDE_DIRS}) add_executable(opensplat opensplat.cpp point_io.cpp nerfstudio.cpp model.cpp kdtree_tensor.cpp spherical_harmonics.cpp cv_utils.cpp utils.cpp project_gaussians.cpp rasterize_gaussians.cpp ssim.cpp optim_scheduler.cpp colmap.cpp opensfm.cpp input_data.cpp tensor_math.cpp) +install(TARGETS opensplat DESTINATION bin) set_property(TARGET opensplat PROPERTY CXX_STANDARD 17) target_include_directories(opensplat PRIVATE ${PROJECT_SOURCE_DIR}/vendor/glm ${GPU_INCLUDE_DIRS}) target_link_libraries(opensplat PUBLIC ${STDPPFS_LIBRARY} ${GPU_LIBRARIES} ${GSPLAT_LIBS} ${TORCH_LIBRARIES} ${OpenCV_LIBS}) @@ -177,6 +178,7 @@ endif() if(OPENSPLAT_BUILD_SIMPLE_TRAINER) add_executable(simple_trainer simple_trainer.cpp project_gaussians.cpp rasterize_gaussians.cpp cv_utils.cpp) + install(TARGETS simple_trainer DESTINATION bin) target_include_directories(simple_trainer PRIVATE ${PROJECT_SOURCE_DIR}/vendor/glm ${GPU_INCLUDE_DIRS}) target_link_libraries(simple_trainer PUBLIC ${GPU_LIBRARIES} ${GSPLAT_LIBS} ${TORCH_LIBRARIES} ${OpenCV_LIBS}) if (NOT WIN32) From ae5ebf5a7f229fb0022aa714230f96a4ea7ff1f3 Mon Sep 17 00:00:00 2001 From: Julius Michaelis Date: Sun, 14 Apr 2024 22:36:13 +0900 Subject: [PATCH 2/4] Make it easy to unvendor --- CMakeLists.txt | 14 ++++++++++++-- gsplat.hpp | 10 +++++----- kdtree_tensor.hpp | 2 +- nerfstudio.cpp | 2 +- nerfstudio.hpp | 2 +- opensfm.cpp | 2 +- opensfm.hpp | 2 +- opensplat.cpp | 4 ++-- point_io.hpp | 2 +- simple_trainer.cpp | 2 +- vendor/gsplat/helpers.cuh | 4 ++-- vendor/{json => nlohmann}/LICENSE.txt | 0 vendor/{json => nlohmann}/json.hpp | 0 vendor/{json => nlohmann}/json_fwd.hpp | 0 14 files changed, 28 insertions(+), 18 deletions(-) rename vendor/{json => nlohmann}/LICENSE.txt (100%) rename vendor/{json => nlohmann}/json.hpp (100%) rename vendor/{json => nlohmann}/json_fwd.hpp (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 523c53d..742efdd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -163,7 +163,12 @@ target_include_directories(gsplat_cpu PRIVATE ${TORCH_INCLUDE_DIRS}) add_executable(opensplat opensplat.cpp point_io.cpp nerfstudio.cpp model.cpp kdtree_tensor.cpp spherical_harmonics.cpp cv_utils.cpp utils.cpp project_gaussians.cpp rasterize_gaussians.cpp ssim.cpp optim_scheduler.cpp colmap.cpp opensfm.cpp input_data.cpp tensor_math.cpp) install(TARGETS opensplat DESTINATION bin) set_property(TARGET opensplat PROPERTY CXX_STANDARD 17) -target_include_directories(opensplat PRIVATE ${PROJECT_SOURCE_DIR}/vendor/glm ${GPU_INCLUDE_DIRS}) +target_include_directories(opensplat PRIVATE + ${PROJECT_SOURCE_DIR}/vendor/glm + ${PROJECT_SOURCE_DIR}/vendor/nanoflann + ${PROJECT_SOURCE_DIR}/vendor + ${GPU_INCLUDE_DIRS} +) target_link_libraries(opensplat PUBLIC ${STDPPFS_LIBRARY} ${GPU_LIBRARIES} ${GSPLAT_LIBS} ${TORCH_LIBRARIES} ${OpenCV_LIBS}) if (NOT WIN32) target_link_libraries(opensplat PUBLIC pthread) @@ -179,7 +184,12 @@ endif() if(OPENSPLAT_BUILD_SIMPLE_TRAINER) add_executable(simple_trainer simple_trainer.cpp project_gaussians.cpp rasterize_gaussians.cpp cv_utils.cpp) install(TARGETS simple_trainer DESTINATION bin) - target_include_directories(simple_trainer PRIVATE ${PROJECT_SOURCE_DIR}/vendor/glm ${GPU_INCLUDE_DIRS}) + target_include_directories(simple_trainer PRIVATE + ${PROJECT_SOURCE_DIR}/vendor/glm + ${PROJECT_SOURCE_DIR}/vendor/nanoflann + ${PROJECT_SOURCE_DIR}/vendor + ${GPU_INCLUDE_DIRS} + ) target_link_libraries(simple_trainer PUBLIC ${GPU_LIBRARIES} ${GSPLAT_LIBS} ${TORCH_LIBRARIES} ${OpenCV_LIBS}) if (NOT WIN32) target_link_libraries(simple_trainer PUBLIC pthread) diff --git a/gsplat.hpp b/gsplat.hpp index fa887af..ef474a9 100644 --- a/gsplat.hpp +++ b/gsplat.hpp @@ -1,16 +1,16 @@ #ifndef GSPLAT_H #define GSPLAT_H -#include "vendor/gsplat/config.h" +#include #if defined(USE_HIP) || defined(USE_CUDA) -#include "vendor/gsplat/bindings.h" +#include #endif #if defined(USE_MPS) -#include "vendor/gsplat-metal/bindings.h" +#include #endif -#include "vendor/gsplat-cpu/bindings.h" +#include -#endif \ No newline at end of file +#endif diff --git a/kdtree_tensor.hpp b/kdtree_tensor.hpp index d6f6015..4f602e3 100644 --- a/kdtree_tensor.hpp +++ b/kdtree_tensor.hpp @@ -2,7 +2,7 @@ #define KDTREE_TENSOR #include -#include "vendor/nanoflann/nanoflann.hpp" +#include struct PointsTensor { torch::Tensor tensor; diff --git a/nerfstudio.cpp b/nerfstudio.cpp index 52264cc..f82d111 100644 --- a/nerfstudio.cpp +++ b/nerfstudio.cpp @@ -1,6 +1,6 @@ #include #include -#include "vendor/json/json.hpp" +#include #include "nerfstudio.hpp" #include "point_io.hpp" #include "cv_utils.hpp" diff --git a/nerfstudio.hpp b/nerfstudio.hpp index 9ceb352..d4d05fc 100644 --- a/nerfstudio.hpp +++ b/nerfstudio.hpp @@ -5,8 +5,8 @@ #include #include #include +#include #include "input_data.hpp" -#include "vendor/json/json_fwd.hpp" using json = nlohmann::json; diff --git a/opensfm.cpp b/opensfm.cpp index 5f7c53d..ad7a72e 100644 --- a/opensfm.cpp +++ b/opensfm.cpp @@ -1,6 +1,6 @@ #include #include -#include "vendor/json/json.hpp" +#include #include "opensfm.hpp" #include "point_io.hpp" #include "cv_utils.hpp" diff --git a/opensfm.hpp b/opensfm.hpp index 34c6e38..2b7863a 100644 --- a/opensfm.hpp +++ b/opensfm.hpp @@ -6,8 +6,8 @@ #include #include #include +#include #include "input_data.hpp" -#include "vendor/json/json_fwd.hpp" using json = nlohmann::json; diff --git a/opensplat.cpp b/opensplat.cpp index 5819b81..470e6f2 100644 --- a/opensplat.cpp +++ b/opensplat.cpp @@ -1,10 +1,10 @@ #include -#include "vendor/json/json.hpp" +#include #include "opensplat.hpp" #include "input_data.hpp" #include "utils.hpp" #include "cv_utils.hpp" -#include "vendor/cxxopts.hpp" +#include namespace fs = std::filesystem; using namespace torch::indexing; diff --git a/point_io.hpp b/point_io.hpp index a2d79f7..3982a00 100644 --- a/point_io.hpp +++ b/point_io.hpp @@ -12,7 +12,7 @@ #include #endif -#include "vendor/nanoflann/nanoflann.hpp" +#include struct XYZ { float x; diff --git a/simple_trainer.cpp b/simple_trainer.cpp index 4a31762..93bc443 100644 --- a/simple_trainer.cpp +++ b/simple_trainer.cpp @@ -16,7 +16,7 @@ #include "rasterize_gaussians.hpp" #include "constants.hpp" #include "cv_utils.hpp" -#include "vendor/cxxopts.hpp" +#include using namespace torch::indexing; namespace fs = std::filesystem; diff --git a/vendor/gsplat/helpers.cuh b/vendor/gsplat/helpers.cuh index 843ec52..d867f34 100644 --- a/vendor/gsplat/helpers.cuh +++ b/vendor/gsplat/helpers.cuh @@ -6,8 +6,8 @@ #include #endif -#include "../glm/glm/glm.hpp" -#include "../glm/glm/gtc/type_ptr.hpp" +#include +#include #include inline __device__ float ndc2pix(const float x, const float W, const float cx) { diff --git a/vendor/json/LICENSE.txt b/vendor/nlohmann/LICENSE.txt similarity index 100% rename from vendor/json/LICENSE.txt rename to vendor/nlohmann/LICENSE.txt diff --git a/vendor/json/json.hpp b/vendor/nlohmann/json.hpp similarity index 100% rename from vendor/json/json.hpp rename to vendor/nlohmann/json.hpp diff --git a/vendor/json/json_fwd.hpp b/vendor/nlohmann/json_fwd.hpp similarity index 100% rename from vendor/json/json_fwd.hpp rename to vendor/nlohmann/json_fwd.hpp From b2ca5510c1e7e1dec0f375cb9f8cacb02294ab09 Mon Sep 17 00:00:00 2001 From: Julius Michaelis Date: Fri, 19 Apr 2024 21:44:13 +0900 Subject: [PATCH 3/4] Unvendor, use CMake's FetchContent --- CMakeLists.txt | 45 +- Dockerfile | 1 + vendor/cxxopts.hpp | 2828 -- vendor/glm/LICENSE.txt | 54 - vendor/glm/glm/CMakeLists.txt | 78 - vendor/glm/glm/common.hpp | 539 - vendor/glm/glm/detail/_features.hpp | 394 - vendor/glm/glm/detail/_fixes.hpp | 27 - vendor/glm/glm/detail/_noise.hpp | 81 - vendor/glm/glm/detail/_swizzle.hpp | 804 - vendor/glm/glm/detail/_swizzle_func.hpp | 682 - vendor/glm/glm/detail/_vectorize.hpp | 162 - vendor/glm/glm/detail/compute_common.hpp | 50 - .../glm/detail/compute_vector_relational.hpp | 30 - vendor/glm/glm/detail/func_common.inl | 792 - vendor/glm/glm/detail/func_common_simd.inl | 231 - vendor/glm/glm/detail/func_exponential.inl | 152 - .../glm/glm/detail/func_exponential_simd.inl | 37 - vendor/glm/glm/detail/func_geometric.inl | 243 - vendor/glm/glm/detail/func_geometric_simd.inl | 163 - vendor/glm/glm/detail/func_integer.inl | 372 - vendor/glm/glm/detail/func_integer_simd.inl | 65 - vendor/glm/glm/detail/func_matrix.inl | 443 - vendor/glm/glm/detail/func_matrix_simd.inl | 252 - vendor/glm/glm/detail/func_packing.inl | 189 - vendor/glm/glm/detail/func_packing_simd.inl | 6 - vendor/glm/glm/detail/func_trigonometric.inl | 197 - .../glm/detail/func_trigonometric_simd.inl | 0 .../glm/glm/detail/func_vector_relational.inl | 87 - .../detail/func_vector_relational_simd.inl | 6 - vendor/glm/glm/detail/glm.cpp | 263 - vendor/glm/glm/detail/qualifier.hpp | 229 - vendor/glm/glm/detail/setup.hpp | 1198 - vendor/glm/glm/detail/type_float.hpp | 68 - vendor/glm/glm/detail/type_half.hpp | 16 - vendor/glm/glm/detail/type_half.inl | 241 - vendor/glm/glm/detail/type_mat2x2.hpp | 177 - vendor/glm/glm/detail/type_mat2x2.inl | 536 - vendor/glm/glm/detail/type_mat2x3.hpp | 159 - vendor/glm/glm/detail/type_mat2x3.inl | 510 - vendor/glm/glm/detail/type_mat2x4.hpp | 161 - vendor/glm/glm/detail/type_mat2x4.inl | 520 - vendor/glm/glm/detail/type_mat3x2.hpp | 167 - vendor/glm/glm/detail/type_mat3x2.inl | 532 - vendor/glm/glm/detail/type_mat3x3.hpp | 184 - vendor/glm/glm/detail/type_mat3x3.inl | 601 - vendor/glm/glm/detail/type_mat3x4.hpp | 166 - vendor/glm/glm/detail/type_mat3x4.inl | 578 - vendor/glm/glm/detail/type_mat4x2.hpp | 171 - vendor/glm/glm/detail/type_mat4x2.inl | 574 - vendor/glm/glm/detail/type_mat4x3.hpp | 171 - vendor/glm/glm/detail/type_mat4x3.inl | 598 - vendor/glm/glm/detail/type_mat4x4.hpp | 189 - vendor/glm/glm/detail/type_mat4x4.inl | 706 - vendor/glm/glm/detail/type_mat4x4_simd.inl | 6 - vendor/glm/glm/detail/type_quat.hpp | 193 - vendor/glm/glm/detail/type_quat.inl | 421 - vendor/glm/glm/detail/type_quat_simd.inl | 208 - vendor/glm/glm/detail/type_vec1.hpp | 308 - vendor/glm/glm/detail/type_vec1.inl | 553 - vendor/glm/glm/detail/type_vec2.hpp | 402 - vendor/glm/glm/detail/type_vec2.inl | 915 - vendor/glm/glm/detail/type_vec3.hpp | 435 - vendor/glm/glm/detail/type_vec3.inl | 1070 - vendor/glm/glm/detail/type_vec4.hpp | 508 - vendor/glm/glm/detail/type_vec4.inl | 1142 - vendor/glm/glm/detail/type_vec4_simd.inl | 788 - vendor/glm/glm/exponential.hpp | 110 - vendor/glm/glm/ext.hpp | 255 - vendor/glm/glm/ext/_matrix_vectorize.hpp | 128 - vendor/glm/glm/ext/matrix_clip_space.hpp | 522 - vendor/glm/glm/ext/matrix_clip_space.inl | 555 - vendor/glm/glm/ext/matrix_common.hpp | 39 - vendor/glm/glm/ext/matrix_common.inl | 34 - vendor/glm/glm/ext/matrix_double2x2.hpp | 23 - .../glm/ext/matrix_double2x2_precision.hpp | 49 - vendor/glm/glm/ext/matrix_double2x3.hpp | 18 - .../glm/ext/matrix_double2x3_precision.hpp | 31 - vendor/glm/glm/ext/matrix_double2x4.hpp | 18 - .../glm/ext/matrix_double2x4_precision.hpp | 31 - vendor/glm/glm/ext/matrix_double3x2.hpp | 18 - .../glm/ext/matrix_double3x2_precision.hpp | 31 - vendor/glm/glm/ext/matrix_double3x3.hpp | 23 - .../glm/ext/matrix_double3x3_precision.hpp | 49 - vendor/glm/glm/ext/matrix_double3x4.hpp | 18 - .../glm/ext/matrix_double3x4_precision.hpp | 31 - vendor/glm/glm/ext/matrix_double4x2.hpp | 18 - .../glm/ext/matrix_double4x2_precision.hpp | 31 - vendor/glm/glm/ext/matrix_double4x3.hpp | 18 - .../glm/ext/matrix_double4x3_precision.hpp | 31 - vendor/glm/glm/ext/matrix_double4x4.hpp | 23 - .../glm/ext/matrix_double4x4_precision.hpp | 49 - vendor/glm/glm/ext/matrix_float2x2.hpp | 23 - .../glm/glm/ext/matrix_float2x2_precision.hpp | 49 - vendor/glm/glm/ext/matrix_float2x3.hpp | 18 - .../glm/glm/ext/matrix_float2x3_precision.hpp | 31 - vendor/glm/glm/ext/matrix_float2x4.hpp | 18 - .../glm/glm/ext/matrix_float2x4_precision.hpp | 31 - vendor/glm/glm/ext/matrix_float3x2.hpp | 18 - .../glm/glm/ext/matrix_float3x2_precision.hpp | 31 - vendor/glm/glm/ext/matrix_float3x3.hpp | 23 - .../glm/glm/ext/matrix_float3x3_precision.hpp | 49 - vendor/glm/glm/ext/matrix_float3x4.hpp | 18 - .../glm/glm/ext/matrix_float3x4_precision.hpp | 31 - vendor/glm/glm/ext/matrix_float4x2.hpp | 18 - .../glm/glm/ext/matrix_float4x2_precision.hpp | 31 - vendor/glm/glm/ext/matrix_float4x3.hpp | 18 - .../glm/glm/ext/matrix_float4x3_precision.hpp | 31 - vendor/glm/glm/ext/matrix_float4x4.hpp | 23 - .../glm/glm/ext/matrix_float4x4_precision.hpp | 49 - vendor/glm/glm/ext/matrix_int2x2.hpp | 38 - vendor/glm/glm/ext/matrix_int2x2_sized.hpp | 70 - vendor/glm/glm/ext/matrix_int2x3.hpp | 33 - vendor/glm/glm/ext/matrix_int2x3_sized.hpp | 49 - vendor/glm/glm/ext/matrix_int2x4.hpp | 33 - vendor/glm/glm/ext/matrix_int2x4_sized.hpp | 49 - vendor/glm/glm/ext/matrix_int3x2.hpp | 33 - vendor/glm/glm/ext/matrix_int3x2_sized.hpp | 49 - vendor/glm/glm/ext/matrix_int3x3.hpp | 38 - vendor/glm/glm/ext/matrix_int3x3_sized.hpp | 70 - vendor/glm/glm/ext/matrix_int3x4.hpp | 33 - vendor/glm/glm/ext/matrix_int3x4_sized.hpp | 49 - vendor/glm/glm/ext/matrix_int4x2.hpp | 33 - vendor/glm/glm/ext/matrix_int4x2_sized.hpp | 49 - vendor/glm/glm/ext/matrix_int4x3.hpp | 33 - vendor/glm/glm/ext/matrix_int4x3_sized.hpp | 49 - vendor/glm/glm/ext/matrix_int4x4.hpp | 38 - vendor/glm/glm/ext/matrix_int4x4_sized.hpp | 70 - vendor/glm/glm/ext/matrix_integer.hpp | 91 - vendor/glm/glm/ext/matrix_integer.inl | 38 - vendor/glm/glm/ext/matrix_projection.hpp | 149 - vendor/glm/glm/ext/matrix_projection.inl | 106 - vendor/glm/glm/ext/matrix_relational.hpp | 132 - vendor/glm/glm/ext/matrix_relational.inl | 88 - vendor/glm/glm/ext/matrix_transform.hpp | 171 - vendor/glm/glm/ext/matrix_transform.inl | 207 - vendor/glm/glm/ext/matrix_uint2x2.hpp | 38 - vendor/glm/glm/ext/matrix_uint2x2_sized.hpp | 70 - vendor/glm/glm/ext/matrix_uint2x3.hpp | 33 - vendor/glm/glm/ext/matrix_uint2x3_sized.hpp | 49 - vendor/glm/glm/ext/matrix_uint2x4.hpp | 33 - vendor/glm/glm/ext/matrix_uint2x4_sized.hpp | 49 - vendor/glm/glm/ext/matrix_uint3x2.hpp | 33 - vendor/glm/glm/ext/matrix_uint3x2_sized.hpp | 49 - vendor/glm/glm/ext/matrix_uint3x3.hpp | 38 - vendor/glm/glm/ext/matrix_uint3x3_sized.hpp | 70 - vendor/glm/glm/ext/matrix_uint3x4.hpp | 33 - vendor/glm/glm/ext/matrix_uint3x4_sized.hpp | 49 - vendor/glm/glm/ext/matrix_uint4x2.hpp | 33 - vendor/glm/glm/ext/matrix_uint4x2_sized.hpp | 49 - vendor/glm/glm/ext/matrix_uint4x3.hpp | 33 - vendor/glm/glm/ext/matrix_uint4x3_sized.hpp | 49 - vendor/glm/glm/ext/matrix_uint4x4.hpp | 38 - vendor/glm/glm/ext/matrix_uint4x4_sized.hpp | 70 - vendor/glm/glm/ext/quaternion_common.hpp | 135 - vendor/glm/glm/ext/quaternion_common.inl | 144 - vendor/glm/glm/ext/quaternion_common_simd.inl | 18 - vendor/glm/glm/ext/quaternion_double.hpp | 39 - .../glm/ext/quaternion_double_precision.hpp | 42 - vendor/glm/glm/ext/quaternion_exponential.hpp | 63 - vendor/glm/glm/ext/quaternion_exponential.inl | 89 - vendor/glm/glm/ext/quaternion_float.hpp | 39 - .../glm/ext/quaternion_float_precision.hpp | 36 - vendor/glm/glm/ext/quaternion_geometric.hpp | 70 - vendor/glm/glm/ext/quaternion_geometric.inl | 36 - vendor/glm/glm/ext/quaternion_relational.hpp | 62 - vendor/glm/glm/ext/quaternion_relational.inl | 35 - vendor/glm/glm/ext/quaternion_transform.hpp | 47 - vendor/glm/glm/ext/quaternion_transform.inl | 24 - .../glm/glm/ext/quaternion_trigonometric.hpp | 63 - .../glm/glm/ext/quaternion_trigonometric.inl | 37 - vendor/glm/glm/ext/scalar_common.hpp | 181 - vendor/glm/glm/ext/scalar_common.inl | 170 - vendor/glm/glm/ext/scalar_constants.hpp | 40 - vendor/glm/glm/ext/scalar_constants.inl | 24 - vendor/glm/glm/ext/scalar_int_sized.hpp | 70 - vendor/glm/glm/ext/scalar_integer.hpp | 92 - vendor/glm/glm/ext/scalar_integer.inl | 243 - vendor/glm/glm/ext/scalar_packing.hpp | 32 - vendor/glm/glm/ext/scalar_packing.inl | 0 vendor/glm/glm/ext/scalar_reciprocal.hpp | 135 - vendor/glm/glm/ext/scalar_reciprocal.inl | 107 - vendor/glm/glm/ext/scalar_relational.hpp | 68 - vendor/glm/glm/ext/scalar_relational.inl | 40 - vendor/glm/glm/ext/scalar_uint_sized.hpp | 70 - vendor/glm/glm/ext/scalar_ulp.hpp | 77 - vendor/glm/glm/ext/scalar_ulp.inl | 284 - vendor/glm/glm/ext/vector_bool1.hpp | 30 - vendor/glm/glm/ext/vector_bool1_precision.hpp | 34 - vendor/glm/glm/ext/vector_bool2.hpp | 18 - vendor/glm/glm/ext/vector_bool2_precision.hpp | 31 - vendor/glm/glm/ext/vector_bool3.hpp | 18 - vendor/glm/glm/ext/vector_bool3_precision.hpp | 31 - vendor/glm/glm/ext/vector_bool4.hpp | 18 - vendor/glm/glm/ext/vector_bool4_precision.hpp | 31 - vendor/glm/glm/ext/vector_common.hpp | 228 - vendor/glm/glm/ext/vector_common.inl | 147 - vendor/glm/glm/ext/vector_double1.hpp | 31 - .../glm/glm/ext/vector_double1_precision.hpp | 36 - vendor/glm/glm/ext/vector_double2.hpp | 18 - .../glm/glm/ext/vector_double2_precision.hpp | 31 - vendor/glm/glm/ext/vector_double3.hpp | 18 - .../glm/glm/ext/vector_double3_precision.hpp | 34 - vendor/glm/glm/ext/vector_double4.hpp | 18 - .../glm/glm/ext/vector_double4_precision.hpp | 35 - vendor/glm/glm/ext/vector_float1.hpp | 31 - .../glm/glm/ext/vector_float1_precision.hpp | 36 - vendor/glm/glm/ext/vector_float2.hpp | 18 - .../glm/glm/ext/vector_float2_precision.hpp | 31 - vendor/glm/glm/ext/vector_float3.hpp | 18 - .../glm/glm/ext/vector_float3_precision.hpp | 31 - vendor/glm/glm/ext/vector_float4.hpp | 18 - .../glm/glm/ext/vector_float4_precision.hpp | 31 - vendor/glm/glm/ext/vector_int1.hpp | 32 - vendor/glm/glm/ext/vector_int1_sized.hpp | 49 - vendor/glm/glm/ext/vector_int2.hpp | 18 - vendor/glm/glm/ext/vector_int2_sized.hpp | 49 - vendor/glm/glm/ext/vector_int3.hpp | 18 - vendor/glm/glm/ext/vector_int3_sized.hpp | 49 - vendor/glm/glm/ext/vector_int4.hpp | 18 - vendor/glm/glm/ext/vector_int4_sized.hpp | 49 - vendor/glm/glm/ext/vector_integer.hpp | 149 - vendor/glm/glm/ext/vector_integer.inl | 85 - vendor/glm/glm/ext/vector_packing.hpp | 32 - vendor/glm/glm/ext/vector_packing.inl | 0 vendor/glm/glm/ext/vector_reciprocal.hpp | 135 - vendor/glm/glm/ext/vector_reciprocal.inl | 105 - vendor/glm/glm/ext/vector_relational.hpp | 107 - vendor/glm/glm/ext/vector_relational.inl | 75 - vendor/glm/glm/ext/vector_uint1.hpp | 32 - vendor/glm/glm/ext/vector_uint1_sized.hpp | 49 - vendor/glm/glm/ext/vector_uint2.hpp | 18 - vendor/glm/glm/ext/vector_uint2_sized.hpp | 49 - vendor/glm/glm/ext/vector_uint3.hpp | 18 - vendor/glm/glm/ext/vector_uint3_sized.hpp | 49 - vendor/glm/glm/ext/vector_uint4.hpp | 18 - vendor/glm/glm/ext/vector_uint4_sized.hpp | 49 - vendor/glm/glm/ext/vector_ulp.hpp | 112 - vendor/glm/glm/ext/vector_ulp.inl | 74 - vendor/glm/glm/fwd.hpp | 1233 - vendor/glm/glm/geometric.hpp | 116 - vendor/glm/glm/glm.hpp | 137 - vendor/glm/glm/gtc/bitfield.hpp | 266 - vendor/glm/glm/gtc/bitfield.inl | 626 - vendor/glm/glm/gtc/color_space.hpp | 56 - vendor/glm/glm/gtc/color_space.inl | 84 - vendor/glm/glm/gtc/constants.hpp | 165 - vendor/glm/glm/gtc/constants.inl | 167 - vendor/glm/glm/gtc/epsilon.hpp | 60 - vendor/glm/glm/gtc/epsilon.inl | 80 - vendor/glm/glm/gtc/integer.hpp | 43 - vendor/glm/glm/gtc/integer.inl | 33 - vendor/glm/glm/gtc/matrix_access.hpp | 60 - vendor/glm/glm/gtc/matrix_access.inl | 62 - vendor/glm/glm/gtc/matrix_integer.hpp | 433 - vendor/glm/glm/gtc/matrix_inverse.hpp | 50 - vendor/glm/glm/gtc/matrix_inverse.inl | 118 - vendor/glm/glm/gtc/matrix_transform.hpp | 36 - vendor/glm/glm/gtc/matrix_transform.inl | 3 - vendor/glm/glm/gtc/noise.hpp | 61 - vendor/glm/glm/gtc/noise.inl | 807 - vendor/glm/glm/gtc/packing.hpp | 728 - vendor/glm/glm/gtc/packing.inl | 938 - vendor/glm/glm/gtc/quaternion.hpp | 173 - vendor/glm/glm/gtc/quaternion.inl | 208 - vendor/glm/glm/gtc/quaternion_simd.inl | 0 vendor/glm/glm/gtc/random.hpp | 82 - vendor/glm/glm/gtc/random.inl | 303 - vendor/glm/glm/gtc/reciprocal.hpp | 24 - vendor/glm/glm/gtc/round.hpp | 160 - vendor/glm/glm/gtc/round.inl | 155 - vendor/glm/glm/gtc/type_aligned.hpp | 1315 - vendor/glm/glm/gtc/type_precision.hpp | 2094 -- vendor/glm/glm/gtc/type_precision.inl | 6 - vendor/glm/glm/gtc/type_ptr.hpp | 230 - vendor/glm/glm/gtc/type_ptr.inl | 386 - vendor/glm/glm/gtc/ulp.hpp | 155 - vendor/glm/glm/gtc/ulp.inl | 173 - vendor/glm/glm/gtc/vec1.hpp | 30 - vendor/glm/glm/gtx/associated_min_max.hpp | 207 - vendor/glm/glm/gtx/associated_min_max.inl | 354 - vendor/glm/glm/gtx/bit.hpp | 98 - vendor/glm/glm/gtx/bit.inl | 92 - vendor/glm/glm/gtx/closest_point.hpp | 49 - vendor/glm/glm/gtx/closest_point.inl | 45 - vendor/glm/glm/gtx/color_encoding.hpp | 54 - vendor/glm/glm/gtx/color_encoding.inl | 45 - vendor/glm/glm/gtx/color_space.hpp | 72 - vendor/glm/glm/gtx/color_space.inl | 141 - vendor/glm/glm/gtx/color_space_YCoCg.hpp | 60 - vendor/glm/glm/gtx/color_space_YCoCg.inl | 107 - vendor/glm/glm/gtx/common.hpp | 76 - vendor/glm/glm/gtx/common.inl | 125 - vendor/glm/glm/gtx/compatibility.hpp | 133 - vendor/glm/glm/gtx/compatibility.inl | 62 - vendor/glm/glm/gtx/component_wise.hpp | 69 - vendor/glm/glm/gtx/component_wise.inl | 127 - vendor/glm/glm/gtx/dual_quaternion.hpp | 274 - vendor/glm/glm/gtx/dual_quaternion.inl | 352 - vendor/glm/glm/gtx/easing.hpp | 219 - vendor/glm/glm/gtx/easing.inl | 436 - vendor/glm/glm/gtx/euler_angles.hpp | 335 - vendor/glm/glm/gtx/euler_angles.inl | 899 - vendor/glm/glm/gtx/extend.hpp | 42 - vendor/glm/glm/gtx/extend.inl | 48 - vendor/glm/glm/gtx/extended_min_max.hpp | 137 - vendor/glm/glm/gtx/extended_min_max.inl | 138 - vendor/glm/glm/gtx/exterior_product.hpp | 45 - vendor/glm/glm/gtx/exterior_product.inl | 26 - vendor/glm/glm/gtx/fast_exponential.hpp | 95 - vendor/glm/glm/gtx/fast_exponential.inl | 136 - vendor/glm/glm/gtx/fast_square_root.hpp | 98 - vendor/glm/glm/gtx/fast_square_root.inl | 75 - vendor/glm/glm/gtx/fast_trigonometry.hpp | 79 - vendor/glm/glm/gtx/fast_trigonometry.inl | 142 - vendor/glm/glm/gtx/float_notmalize.inl | 13 - vendor/glm/glm/gtx/functions.hpp | 56 - vendor/glm/glm/gtx/functions.inl | 30 - vendor/glm/glm/gtx/gradient_paint.hpp | 53 - vendor/glm/glm/gtx/gradient_paint.inl | 36 - .../glm/glm/gtx/handed_coordinate_space.hpp | 50 - .../glm/glm/gtx/handed_coordinate_space.inl | 26 - vendor/glm/glm/gtx/hash.hpp | 142 - vendor/glm/glm/gtx/hash.inl | 175 - vendor/glm/glm/gtx/integer.hpp | 76 - vendor/glm/glm/gtx/integer.inl | 185 - vendor/glm/glm/gtx/intersect.hpp | 92 - vendor/glm/glm/gtx/intersect.inl | 200 - vendor/glm/glm/gtx/io.hpp | 201 - vendor/glm/glm/gtx/io.inl | 440 - vendor/glm/glm/gtx/log_base.hpp | 48 - vendor/glm/glm/gtx/log_base.inl | 16 - vendor/glm/glm/gtx/matrix_cross_product.hpp | 47 - vendor/glm/glm/gtx/matrix_cross_product.inl | 37 - vendor/glm/glm/gtx/matrix_decompose.hpp | 52 - vendor/glm/glm/gtx/matrix_decompose.inl | 234 - vendor/glm/glm/gtx/matrix_factorisation.hpp | 69 - vendor/glm/glm/gtx/matrix_factorisation.inl | 84 - vendor/glm/glm/gtx/matrix_interpolation.hpp | 60 - vendor/glm/glm/gtx/matrix_interpolation.inl | 146 - vendor/glm/glm/gtx/matrix_major_storage.hpp | 119 - vendor/glm/glm/gtx/matrix_major_storage.inl | 166 - vendor/glm/glm/gtx/matrix_operation.hpp | 103 - vendor/glm/glm/gtx/matrix_operation.inl | 176 - vendor/glm/glm/gtx/matrix_query.hpp | 77 - vendor/glm/glm/gtx/matrix_query.inl | 119 - vendor/glm/glm/gtx/matrix_transform_2d.hpp | 81 - vendor/glm/glm/gtx/matrix_transform_2d.inl | 68 - vendor/glm/glm/gtx/mixed_product.hpp | 41 - vendor/glm/glm/gtx/mixed_product.inl | 15 - vendor/glm/glm/gtx/norm.hpp | 88 - vendor/glm/glm/gtx/norm.inl | 95 - vendor/glm/glm/gtx/normal.hpp | 41 - vendor/glm/glm/gtx/normal.inl | 15 - vendor/glm/glm/gtx/normalize_dot.hpp | 49 - vendor/glm/glm/gtx/normalize_dot.inl | 16 - vendor/glm/glm/gtx/number_precision.hpp | 61 - vendor/glm/glm/gtx/number_precision.inl | 6 - vendor/glm/glm/gtx/optimum_pow.hpp | 54 - vendor/glm/glm/gtx/optimum_pow.inl | 22 - vendor/glm/glm/gtx/orthonormalize.hpp | 49 - vendor/glm/glm/gtx/orthonormalize.inl | 29 - vendor/glm/glm/gtx/pca.hpp | 115 - vendor/glm/glm/gtx/pca.inl | 343 - vendor/glm/glm/gtx/perpendicular.hpp | 41 - vendor/glm/glm/gtx/perpendicular.inl | 10 - vendor/glm/glm/gtx/polar_coordinates.hpp | 48 - vendor/glm/glm/gtx/polar_coordinates.inl | 36 - vendor/glm/glm/gtx/projection.hpp | 43 - vendor/glm/glm/gtx/projection.inl | 10 - vendor/glm/glm/gtx/quaternion.hpp | 174 - vendor/glm/glm/gtx/quaternion.inl | 159 - vendor/glm/glm/gtx/range.hpp | 98 - vendor/glm/glm/gtx/raw_data.hpp | 51 - vendor/glm/glm/gtx/raw_data.inl | 2 - vendor/glm/glm/gtx/rotate_normalized_axis.hpp | 68 - vendor/glm/glm/gtx/rotate_normalized_axis.inl | 58 - vendor/glm/glm/gtx/rotate_vector.hpp | 123 - vendor/glm/glm/gtx/rotate_vector.inl | 187 - vendor/glm/glm/gtx/scalar_multiplication.hpp | 82 - vendor/glm/glm/gtx/scalar_relational.hpp | 36 - vendor/glm/glm/gtx/scalar_relational.inl | 88 - vendor/glm/glm/gtx/spline.hpp | 65 - vendor/glm/glm/gtx/spline.inl | 60 - vendor/glm/glm/gtx/std_based_type.hpp | 68 - vendor/glm/glm/gtx/std_based_type.inl | 6 - vendor/glm/glm/gtx/string_cast.hpp | 46 - vendor/glm/glm/gtx/string_cast.inl | 492 - vendor/glm/glm/gtx/texture.hpp | 46 - vendor/glm/glm/gtx/texture.inl | 17 - vendor/glm/glm/gtx/transform.hpp | 60 - vendor/glm/glm/gtx/transform.inl | 23 - vendor/glm/glm/gtx/transform2.hpp | 89 - vendor/glm/glm/gtx/transform2.inl | 125 - vendor/glm/glm/gtx/type_aligned.hpp | 982 - vendor/glm/glm/gtx/type_aligned.inl | 6 - vendor/glm/glm/gtx/type_trait.hpp | 85 - vendor/glm/glm/gtx/type_trait.inl | 61 - vendor/glm/glm/gtx/vec_swizzle.hpp | 2786 -- vendor/glm/glm/gtx/vector_angle.hpp | 57 - vendor/glm/glm/gtx/vector_angle.inl | 45 - vendor/glm/glm/gtx/vector_query.hpp | 66 - vendor/glm/glm/gtx/vector_query.inl | 154 - vendor/glm/glm/gtx/wrap.hpp | 37 - vendor/glm/glm/gtx/wrap.inl | 6 - vendor/glm/glm/integer.hpp | 212 - vendor/glm/glm/mat2x2.hpp | 9 - vendor/glm/glm/mat2x3.hpp | 9 - vendor/glm/glm/mat2x4.hpp | 9 - vendor/glm/glm/mat3x2.hpp | 9 - vendor/glm/glm/mat3x3.hpp | 8 - vendor/glm/glm/mat3x4.hpp | 8 - vendor/glm/glm/mat4x2.hpp | 9 - vendor/glm/glm/mat4x3.hpp | 8 - vendor/glm/glm/mat4x4.hpp | 9 - vendor/glm/glm/matrix.hpp | 161 - vendor/glm/glm/packing.hpp | 173 - vendor/glm/glm/simd/common.h | 240 - vendor/glm/glm/simd/exponential.h | 20 - vendor/glm/glm/simd/geometric.h | 124 - vendor/glm/glm/simd/integer.h | 115 - vendor/glm/glm/simd/matrix.h | 1028 - vendor/glm/glm/simd/neon.h | 155 - vendor/glm/glm/simd/packing.h | 8 - vendor/glm/glm/simd/platform.h | 409 - vendor/glm/glm/simd/trigonometric.h | 9 - vendor/glm/glm/simd/vector_relational.h | 8 - vendor/glm/glm/trigonometric.hpp | 210 - vendor/glm/glm/vec2.hpp | 14 - vendor/glm/glm/vec3.hpp | 14 - vendor/glm/glm/vec4.hpp | 15 - vendor/glm/glm/vector_relational.hpp | 121 - vendor/nanoflann/nanoflann.hpp | 2427 -- vendor/nlohmann/LICENSE.txt | 21 - vendor/nlohmann/json.hpp | 24766 ---------------- vendor/nlohmann/json_fwd.hpp | 176 - 436 files changed, 41 insertions(+), 94045 deletions(-) delete mode 100644 vendor/cxxopts.hpp delete mode 100644 vendor/glm/LICENSE.txt delete mode 100644 vendor/glm/glm/CMakeLists.txt delete mode 100644 vendor/glm/glm/common.hpp delete mode 100644 vendor/glm/glm/detail/_features.hpp delete mode 100644 vendor/glm/glm/detail/_fixes.hpp delete mode 100644 vendor/glm/glm/detail/_noise.hpp delete mode 100644 vendor/glm/glm/detail/_swizzle.hpp delete mode 100644 vendor/glm/glm/detail/_swizzle_func.hpp delete mode 100644 vendor/glm/glm/detail/_vectorize.hpp delete mode 100644 vendor/glm/glm/detail/compute_common.hpp delete mode 100644 vendor/glm/glm/detail/compute_vector_relational.hpp delete mode 100644 vendor/glm/glm/detail/func_common.inl delete mode 100644 vendor/glm/glm/detail/func_common_simd.inl delete mode 100644 vendor/glm/glm/detail/func_exponential.inl delete mode 100644 vendor/glm/glm/detail/func_exponential_simd.inl delete mode 100644 vendor/glm/glm/detail/func_geometric.inl delete mode 100644 vendor/glm/glm/detail/func_geometric_simd.inl delete mode 100644 vendor/glm/glm/detail/func_integer.inl delete mode 100644 vendor/glm/glm/detail/func_integer_simd.inl delete mode 100644 vendor/glm/glm/detail/func_matrix.inl delete mode 100644 vendor/glm/glm/detail/func_matrix_simd.inl delete mode 100644 vendor/glm/glm/detail/func_packing.inl delete mode 100644 vendor/glm/glm/detail/func_packing_simd.inl delete mode 100644 vendor/glm/glm/detail/func_trigonometric.inl delete mode 100644 vendor/glm/glm/detail/func_trigonometric_simd.inl delete mode 100644 vendor/glm/glm/detail/func_vector_relational.inl delete mode 100644 vendor/glm/glm/detail/func_vector_relational_simd.inl delete mode 100644 vendor/glm/glm/detail/glm.cpp delete mode 100644 vendor/glm/glm/detail/qualifier.hpp delete mode 100644 vendor/glm/glm/detail/setup.hpp delete mode 100644 vendor/glm/glm/detail/type_float.hpp delete mode 100644 vendor/glm/glm/detail/type_half.hpp delete mode 100644 vendor/glm/glm/detail/type_half.inl delete mode 100644 vendor/glm/glm/detail/type_mat2x2.hpp delete mode 100644 vendor/glm/glm/detail/type_mat2x2.inl delete mode 100644 vendor/glm/glm/detail/type_mat2x3.hpp delete mode 100644 vendor/glm/glm/detail/type_mat2x3.inl delete mode 100644 vendor/glm/glm/detail/type_mat2x4.hpp delete mode 100644 vendor/glm/glm/detail/type_mat2x4.inl delete mode 100644 vendor/glm/glm/detail/type_mat3x2.hpp delete mode 100644 vendor/glm/glm/detail/type_mat3x2.inl delete mode 100644 vendor/glm/glm/detail/type_mat3x3.hpp delete mode 100644 vendor/glm/glm/detail/type_mat3x3.inl delete mode 100644 vendor/glm/glm/detail/type_mat3x4.hpp delete mode 100644 vendor/glm/glm/detail/type_mat3x4.inl delete mode 100644 vendor/glm/glm/detail/type_mat4x2.hpp delete mode 100644 vendor/glm/glm/detail/type_mat4x2.inl delete mode 100644 vendor/glm/glm/detail/type_mat4x3.hpp delete mode 100644 vendor/glm/glm/detail/type_mat4x3.inl delete mode 100644 vendor/glm/glm/detail/type_mat4x4.hpp delete mode 100644 vendor/glm/glm/detail/type_mat4x4.inl delete mode 100644 vendor/glm/glm/detail/type_mat4x4_simd.inl delete mode 100644 vendor/glm/glm/detail/type_quat.hpp delete mode 100644 vendor/glm/glm/detail/type_quat.inl delete mode 100644 vendor/glm/glm/detail/type_quat_simd.inl delete mode 100644 vendor/glm/glm/detail/type_vec1.hpp delete mode 100644 vendor/glm/glm/detail/type_vec1.inl delete mode 100644 vendor/glm/glm/detail/type_vec2.hpp delete mode 100644 vendor/glm/glm/detail/type_vec2.inl delete mode 100644 vendor/glm/glm/detail/type_vec3.hpp delete mode 100644 vendor/glm/glm/detail/type_vec3.inl delete mode 100644 vendor/glm/glm/detail/type_vec4.hpp delete mode 100644 vendor/glm/glm/detail/type_vec4.inl delete mode 100644 vendor/glm/glm/detail/type_vec4_simd.inl delete mode 100644 vendor/glm/glm/exponential.hpp delete mode 100644 vendor/glm/glm/ext.hpp delete mode 100644 vendor/glm/glm/ext/_matrix_vectorize.hpp delete mode 100644 vendor/glm/glm/ext/matrix_clip_space.hpp delete mode 100644 vendor/glm/glm/ext/matrix_clip_space.inl delete mode 100644 vendor/glm/glm/ext/matrix_common.hpp delete mode 100644 vendor/glm/glm/ext/matrix_common.inl delete mode 100644 vendor/glm/glm/ext/matrix_double2x2.hpp delete mode 100644 vendor/glm/glm/ext/matrix_double2x2_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_double2x3.hpp delete mode 100644 vendor/glm/glm/ext/matrix_double2x3_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_double2x4.hpp delete mode 100644 vendor/glm/glm/ext/matrix_double2x4_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_double3x2.hpp delete mode 100644 vendor/glm/glm/ext/matrix_double3x2_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_double3x3.hpp delete mode 100644 vendor/glm/glm/ext/matrix_double3x3_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_double3x4.hpp delete mode 100644 vendor/glm/glm/ext/matrix_double3x4_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_double4x2.hpp delete mode 100644 vendor/glm/glm/ext/matrix_double4x2_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_double4x3.hpp delete mode 100644 vendor/glm/glm/ext/matrix_double4x3_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_double4x4.hpp delete mode 100644 vendor/glm/glm/ext/matrix_double4x4_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float2x2.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float2x2_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float2x3.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float2x3_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float2x4.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float2x4_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float3x2.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float3x2_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float3x3.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float3x3_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float3x4.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float3x4_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float4x2.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float4x2_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float4x3.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float4x3_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float4x4.hpp delete mode 100644 vendor/glm/glm/ext/matrix_float4x4_precision.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int2x2.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int2x2_sized.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int2x3.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int2x3_sized.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int2x4.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int2x4_sized.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int3x2.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int3x2_sized.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int3x3.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int3x3_sized.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int3x4.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int3x4_sized.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int4x2.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int4x2_sized.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int4x3.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int4x3_sized.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int4x4.hpp delete mode 100644 vendor/glm/glm/ext/matrix_int4x4_sized.hpp delete mode 100644 vendor/glm/glm/ext/matrix_integer.hpp delete mode 100644 vendor/glm/glm/ext/matrix_integer.inl delete mode 100644 vendor/glm/glm/ext/matrix_projection.hpp delete mode 100644 vendor/glm/glm/ext/matrix_projection.inl delete mode 100644 vendor/glm/glm/ext/matrix_relational.hpp delete mode 100644 vendor/glm/glm/ext/matrix_relational.inl delete mode 100644 vendor/glm/glm/ext/matrix_transform.hpp delete mode 100644 vendor/glm/glm/ext/matrix_transform.inl delete mode 100644 vendor/glm/glm/ext/matrix_uint2x2.hpp delete mode 100644 vendor/glm/glm/ext/matrix_uint2x2_sized.hpp delete mode 100644 vendor/glm/glm/ext/matrix_uint2x3.hpp delete mode 100644 vendor/glm/glm/ext/matrix_uint2x3_sized.hpp delete mode 100644 vendor/glm/glm/ext/matrix_uint2x4.hpp delete mode 100644 vendor/glm/glm/ext/matrix_uint2x4_sized.hpp delete mode 100644 vendor/glm/glm/ext/matrix_uint3x2.hpp delete mode 100644 vendor/glm/glm/ext/matrix_uint3x2_sized.hpp delete mode 100644 vendor/glm/glm/ext/matrix_uint3x3.hpp delete mode 100644 vendor/glm/glm/ext/matrix_uint3x3_sized.hpp delete mode 100644 vendor/glm/glm/ext/matrix_uint3x4.hpp delete mode 100644 vendor/glm/glm/ext/matrix_uint3x4_sized.hpp delete mode 100644 vendor/glm/glm/ext/matrix_uint4x2.hpp delete mode 100644 vendor/glm/glm/ext/matrix_uint4x2_sized.hpp delete mode 100644 vendor/glm/glm/ext/matrix_uint4x3.hpp delete mode 100644 vendor/glm/glm/ext/matrix_uint4x3_sized.hpp delete mode 100644 vendor/glm/glm/ext/matrix_uint4x4.hpp delete mode 100644 vendor/glm/glm/ext/matrix_uint4x4_sized.hpp delete mode 100644 vendor/glm/glm/ext/quaternion_common.hpp delete mode 100644 vendor/glm/glm/ext/quaternion_common.inl delete mode 100644 vendor/glm/glm/ext/quaternion_common_simd.inl delete mode 100644 vendor/glm/glm/ext/quaternion_double.hpp delete mode 100644 vendor/glm/glm/ext/quaternion_double_precision.hpp delete mode 100644 vendor/glm/glm/ext/quaternion_exponential.hpp delete mode 100644 vendor/glm/glm/ext/quaternion_exponential.inl delete mode 100644 vendor/glm/glm/ext/quaternion_float.hpp delete mode 100644 vendor/glm/glm/ext/quaternion_float_precision.hpp delete mode 100644 vendor/glm/glm/ext/quaternion_geometric.hpp delete mode 100644 vendor/glm/glm/ext/quaternion_geometric.inl delete mode 100644 vendor/glm/glm/ext/quaternion_relational.hpp delete mode 100644 vendor/glm/glm/ext/quaternion_relational.inl delete mode 100644 vendor/glm/glm/ext/quaternion_transform.hpp delete mode 100644 vendor/glm/glm/ext/quaternion_transform.inl delete mode 100644 vendor/glm/glm/ext/quaternion_trigonometric.hpp delete mode 100644 vendor/glm/glm/ext/quaternion_trigonometric.inl delete mode 100644 vendor/glm/glm/ext/scalar_common.hpp delete mode 100644 vendor/glm/glm/ext/scalar_common.inl delete mode 100644 vendor/glm/glm/ext/scalar_constants.hpp delete mode 100644 vendor/glm/glm/ext/scalar_constants.inl delete mode 100644 vendor/glm/glm/ext/scalar_int_sized.hpp delete mode 100644 vendor/glm/glm/ext/scalar_integer.hpp delete mode 100644 vendor/glm/glm/ext/scalar_integer.inl delete mode 100644 vendor/glm/glm/ext/scalar_packing.hpp delete mode 100644 vendor/glm/glm/ext/scalar_packing.inl delete mode 100644 vendor/glm/glm/ext/scalar_reciprocal.hpp delete mode 100644 vendor/glm/glm/ext/scalar_reciprocal.inl delete mode 100644 vendor/glm/glm/ext/scalar_relational.hpp delete mode 100644 vendor/glm/glm/ext/scalar_relational.inl delete mode 100644 vendor/glm/glm/ext/scalar_uint_sized.hpp delete mode 100644 vendor/glm/glm/ext/scalar_ulp.hpp delete mode 100644 vendor/glm/glm/ext/scalar_ulp.inl delete mode 100644 vendor/glm/glm/ext/vector_bool1.hpp delete mode 100644 vendor/glm/glm/ext/vector_bool1_precision.hpp delete mode 100644 vendor/glm/glm/ext/vector_bool2.hpp delete mode 100644 vendor/glm/glm/ext/vector_bool2_precision.hpp delete mode 100644 vendor/glm/glm/ext/vector_bool3.hpp delete mode 100644 vendor/glm/glm/ext/vector_bool3_precision.hpp delete mode 100644 vendor/glm/glm/ext/vector_bool4.hpp delete mode 100644 vendor/glm/glm/ext/vector_bool4_precision.hpp delete mode 100644 vendor/glm/glm/ext/vector_common.hpp delete mode 100644 vendor/glm/glm/ext/vector_common.inl delete mode 100644 vendor/glm/glm/ext/vector_double1.hpp delete mode 100644 vendor/glm/glm/ext/vector_double1_precision.hpp delete mode 100644 vendor/glm/glm/ext/vector_double2.hpp delete mode 100644 vendor/glm/glm/ext/vector_double2_precision.hpp delete mode 100644 vendor/glm/glm/ext/vector_double3.hpp delete mode 100644 vendor/glm/glm/ext/vector_double3_precision.hpp delete mode 100644 vendor/glm/glm/ext/vector_double4.hpp delete mode 100644 vendor/glm/glm/ext/vector_double4_precision.hpp delete mode 100644 vendor/glm/glm/ext/vector_float1.hpp delete mode 100644 vendor/glm/glm/ext/vector_float1_precision.hpp delete mode 100644 vendor/glm/glm/ext/vector_float2.hpp delete mode 100644 vendor/glm/glm/ext/vector_float2_precision.hpp delete mode 100644 vendor/glm/glm/ext/vector_float3.hpp delete mode 100644 vendor/glm/glm/ext/vector_float3_precision.hpp delete mode 100644 vendor/glm/glm/ext/vector_float4.hpp delete mode 100644 vendor/glm/glm/ext/vector_float4_precision.hpp delete mode 100644 vendor/glm/glm/ext/vector_int1.hpp delete mode 100644 vendor/glm/glm/ext/vector_int1_sized.hpp delete mode 100644 vendor/glm/glm/ext/vector_int2.hpp delete mode 100644 vendor/glm/glm/ext/vector_int2_sized.hpp delete mode 100644 vendor/glm/glm/ext/vector_int3.hpp delete mode 100644 vendor/glm/glm/ext/vector_int3_sized.hpp delete mode 100644 vendor/glm/glm/ext/vector_int4.hpp delete mode 100644 vendor/glm/glm/ext/vector_int4_sized.hpp delete mode 100644 vendor/glm/glm/ext/vector_integer.hpp delete mode 100644 vendor/glm/glm/ext/vector_integer.inl delete mode 100644 vendor/glm/glm/ext/vector_packing.hpp delete mode 100644 vendor/glm/glm/ext/vector_packing.inl delete mode 100644 vendor/glm/glm/ext/vector_reciprocal.hpp delete mode 100644 vendor/glm/glm/ext/vector_reciprocal.inl delete mode 100644 vendor/glm/glm/ext/vector_relational.hpp delete mode 100644 vendor/glm/glm/ext/vector_relational.inl delete mode 100644 vendor/glm/glm/ext/vector_uint1.hpp delete mode 100644 vendor/glm/glm/ext/vector_uint1_sized.hpp delete mode 100644 vendor/glm/glm/ext/vector_uint2.hpp delete mode 100644 vendor/glm/glm/ext/vector_uint2_sized.hpp delete mode 100644 vendor/glm/glm/ext/vector_uint3.hpp delete mode 100644 vendor/glm/glm/ext/vector_uint3_sized.hpp delete mode 100644 vendor/glm/glm/ext/vector_uint4.hpp delete mode 100644 vendor/glm/glm/ext/vector_uint4_sized.hpp delete mode 100644 vendor/glm/glm/ext/vector_ulp.hpp delete mode 100644 vendor/glm/glm/ext/vector_ulp.inl delete mode 100644 vendor/glm/glm/fwd.hpp delete mode 100644 vendor/glm/glm/geometric.hpp delete mode 100644 vendor/glm/glm/glm.hpp delete mode 100644 vendor/glm/glm/gtc/bitfield.hpp delete mode 100644 vendor/glm/glm/gtc/bitfield.inl delete mode 100644 vendor/glm/glm/gtc/color_space.hpp delete mode 100644 vendor/glm/glm/gtc/color_space.inl delete mode 100644 vendor/glm/glm/gtc/constants.hpp delete mode 100644 vendor/glm/glm/gtc/constants.inl delete mode 100644 vendor/glm/glm/gtc/epsilon.hpp delete mode 100644 vendor/glm/glm/gtc/epsilon.inl delete mode 100644 vendor/glm/glm/gtc/integer.hpp delete mode 100644 vendor/glm/glm/gtc/integer.inl delete mode 100644 vendor/glm/glm/gtc/matrix_access.hpp delete mode 100644 vendor/glm/glm/gtc/matrix_access.inl delete mode 100644 vendor/glm/glm/gtc/matrix_integer.hpp delete mode 100644 vendor/glm/glm/gtc/matrix_inverse.hpp delete mode 100644 vendor/glm/glm/gtc/matrix_inverse.inl delete mode 100644 vendor/glm/glm/gtc/matrix_transform.hpp delete mode 100644 vendor/glm/glm/gtc/matrix_transform.inl delete mode 100644 vendor/glm/glm/gtc/noise.hpp delete mode 100644 vendor/glm/glm/gtc/noise.inl delete mode 100644 vendor/glm/glm/gtc/packing.hpp delete mode 100644 vendor/glm/glm/gtc/packing.inl delete mode 100644 vendor/glm/glm/gtc/quaternion.hpp delete mode 100644 vendor/glm/glm/gtc/quaternion.inl delete mode 100644 vendor/glm/glm/gtc/quaternion_simd.inl delete mode 100644 vendor/glm/glm/gtc/random.hpp delete mode 100644 vendor/glm/glm/gtc/random.inl delete mode 100644 vendor/glm/glm/gtc/reciprocal.hpp delete mode 100644 vendor/glm/glm/gtc/round.hpp delete mode 100644 vendor/glm/glm/gtc/round.inl delete mode 100644 vendor/glm/glm/gtc/type_aligned.hpp delete mode 100644 vendor/glm/glm/gtc/type_precision.hpp delete mode 100644 vendor/glm/glm/gtc/type_precision.inl delete mode 100644 vendor/glm/glm/gtc/type_ptr.hpp delete mode 100644 vendor/glm/glm/gtc/type_ptr.inl delete mode 100644 vendor/glm/glm/gtc/ulp.hpp delete mode 100644 vendor/glm/glm/gtc/ulp.inl delete mode 100644 vendor/glm/glm/gtc/vec1.hpp delete mode 100644 vendor/glm/glm/gtx/associated_min_max.hpp delete mode 100644 vendor/glm/glm/gtx/associated_min_max.inl delete mode 100644 vendor/glm/glm/gtx/bit.hpp delete mode 100644 vendor/glm/glm/gtx/bit.inl delete mode 100644 vendor/glm/glm/gtx/closest_point.hpp delete mode 100644 vendor/glm/glm/gtx/closest_point.inl delete mode 100644 vendor/glm/glm/gtx/color_encoding.hpp delete mode 100644 vendor/glm/glm/gtx/color_encoding.inl delete mode 100644 vendor/glm/glm/gtx/color_space.hpp delete mode 100644 vendor/glm/glm/gtx/color_space.inl delete mode 100644 vendor/glm/glm/gtx/color_space_YCoCg.hpp delete mode 100644 vendor/glm/glm/gtx/color_space_YCoCg.inl delete mode 100644 vendor/glm/glm/gtx/common.hpp delete mode 100644 vendor/glm/glm/gtx/common.inl delete mode 100644 vendor/glm/glm/gtx/compatibility.hpp delete mode 100644 vendor/glm/glm/gtx/compatibility.inl delete mode 100644 vendor/glm/glm/gtx/component_wise.hpp delete mode 100644 vendor/glm/glm/gtx/component_wise.inl delete mode 100644 vendor/glm/glm/gtx/dual_quaternion.hpp delete mode 100644 vendor/glm/glm/gtx/dual_quaternion.inl delete mode 100644 vendor/glm/glm/gtx/easing.hpp delete mode 100644 vendor/glm/glm/gtx/easing.inl delete mode 100644 vendor/glm/glm/gtx/euler_angles.hpp delete mode 100644 vendor/glm/glm/gtx/euler_angles.inl delete mode 100644 vendor/glm/glm/gtx/extend.hpp delete mode 100644 vendor/glm/glm/gtx/extend.inl delete mode 100644 vendor/glm/glm/gtx/extended_min_max.hpp delete mode 100644 vendor/glm/glm/gtx/extended_min_max.inl delete mode 100644 vendor/glm/glm/gtx/exterior_product.hpp delete mode 100644 vendor/glm/glm/gtx/exterior_product.inl delete mode 100644 vendor/glm/glm/gtx/fast_exponential.hpp delete mode 100644 vendor/glm/glm/gtx/fast_exponential.inl delete mode 100644 vendor/glm/glm/gtx/fast_square_root.hpp delete mode 100644 vendor/glm/glm/gtx/fast_square_root.inl delete mode 100644 vendor/glm/glm/gtx/fast_trigonometry.hpp delete mode 100644 vendor/glm/glm/gtx/fast_trigonometry.inl delete mode 100644 vendor/glm/glm/gtx/float_notmalize.inl delete mode 100644 vendor/glm/glm/gtx/functions.hpp delete mode 100644 vendor/glm/glm/gtx/functions.inl delete mode 100644 vendor/glm/glm/gtx/gradient_paint.hpp delete mode 100644 vendor/glm/glm/gtx/gradient_paint.inl delete mode 100644 vendor/glm/glm/gtx/handed_coordinate_space.hpp delete mode 100644 vendor/glm/glm/gtx/handed_coordinate_space.inl delete mode 100644 vendor/glm/glm/gtx/hash.hpp delete mode 100644 vendor/glm/glm/gtx/hash.inl delete mode 100644 vendor/glm/glm/gtx/integer.hpp delete mode 100644 vendor/glm/glm/gtx/integer.inl delete mode 100644 vendor/glm/glm/gtx/intersect.hpp delete mode 100644 vendor/glm/glm/gtx/intersect.inl delete mode 100644 vendor/glm/glm/gtx/io.hpp delete mode 100644 vendor/glm/glm/gtx/io.inl delete mode 100644 vendor/glm/glm/gtx/log_base.hpp delete mode 100644 vendor/glm/glm/gtx/log_base.inl delete mode 100644 vendor/glm/glm/gtx/matrix_cross_product.hpp delete mode 100644 vendor/glm/glm/gtx/matrix_cross_product.inl delete mode 100644 vendor/glm/glm/gtx/matrix_decompose.hpp delete mode 100644 vendor/glm/glm/gtx/matrix_decompose.inl delete mode 100644 vendor/glm/glm/gtx/matrix_factorisation.hpp delete mode 100644 vendor/glm/glm/gtx/matrix_factorisation.inl delete mode 100644 vendor/glm/glm/gtx/matrix_interpolation.hpp delete mode 100644 vendor/glm/glm/gtx/matrix_interpolation.inl delete mode 100644 vendor/glm/glm/gtx/matrix_major_storage.hpp delete mode 100644 vendor/glm/glm/gtx/matrix_major_storage.inl delete mode 100644 vendor/glm/glm/gtx/matrix_operation.hpp delete mode 100644 vendor/glm/glm/gtx/matrix_operation.inl delete mode 100644 vendor/glm/glm/gtx/matrix_query.hpp delete mode 100644 vendor/glm/glm/gtx/matrix_query.inl delete mode 100644 vendor/glm/glm/gtx/matrix_transform_2d.hpp delete mode 100644 vendor/glm/glm/gtx/matrix_transform_2d.inl delete mode 100644 vendor/glm/glm/gtx/mixed_product.hpp delete mode 100644 vendor/glm/glm/gtx/mixed_product.inl delete mode 100644 vendor/glm/glm/gtx/norm.hpp delete mode 100644 vendor/glm/glm/gtx/norm.inl delete mode 100644 vendor/glm/glm/gtx/normal.hpp delete mode 100644 vendor/glm/glm/gtx/normal.inl delete mode 100644 vendor/glm/glm/gtx/normalize_dot.hpp delete mode 100644 vendor/glm/glm/gtx/normalize_dot.inl delete mode 100644 vendor/glm/glm/gtx/number_precision.hpp delete mode 100644 vendor/glm/glm/gtx/number_precision.inl delete mode 100644 vendor/glm/glm/gtx/optimum_pow.hpp delete mode 100644 vendor/glm/glm/gtx/optimum_pow.inl delete mode 100644 vendor/glm/glm/gtx/orthonormalize.hpp delete mode 100644 vendor/glm/glm/gtx/orthonormalize.inl delete mode 100644 vendor/glm/glm/gtx/pca.hpp delete mode 100644 vendor/glm/glm/gtx/pca.inl delete mode 100644 vendor/glm/glm/gtx/perpendicular.hpp delete mode 100644 vendor/glm/glm/gtx/perpendicular.inl delete mode 100644 vendor/glm/glm/gtx/polar_coordinates.hpp delete mode 100644 vendor/glm/glm/gtx/polar_coordinates.inl delete mode 100644 vendor/glm/glm/gtx/projection.hpp delete mode 100644 vendor/glm/glm/gtx/projection.inl delete mode 100644 vendor/glm/glm/gtx/quaternion.hpp delete mode 100644 vendor/glm/glm/gtx/quaternion.inl delete mode 100644 vendor/glm/glm/gtx/range.hpp delete mode 100644 vendor/glm/glm/gtx/raw_data.hpp delete mode 100644 vendor/glm/glm/gtx/raw_data.inl delete mode 100644 vendor/glm/glm/gtx/rotate_normalized_axis.hpp delete mode 100644 vendor/glm/glm/gtx/rotate_normalized_axis.inl delete mode 100644 vendor/glm/glm/gtx/rotate_vector.hpp delete mode 100644 vendor/glm/glm/gtx/rotate_vector.inl delete mode 100644 vendor/glm/glm/gtx/scalar_multiplication.hpp delete mode 100644 vendor/glm/glm/gtx/scalar_relational.hpp delete mode 100644 vendor/glm/glm/gtx/scalar_relational.inl delete mode 100644 vendor/glm/glm/gtx/spline.hpp delete mode 100644 vendor/glm/glm/gtx/spline.inl delete mode 100644 vendor/glm/glm/gtx/std_based_type.hpp delete mode 100644 vendor/glm/glm/gtx/std_based_type.inl delete mode 100644 vendor/glm/glm/gtx/string_cast.hpp delete mode 100644 vendor/glm/glm/gtx/string_cast.inl delete mode 100644 vendor/glm/glm/gtx/texture.hpp delete mode 100644 vendor/glm/glm/gtx/texture.inl delete mode 100644 vendor/glm/glm/gtx/transform.hpp delete mode 100644 vendor/glm/glm/gtx/transform.inl delete mode 100644 vendor/glm/glm/gtx/transform2.hpp delete mode 100644 vendor/glm/glm/gtx/transform2.inl delete mode 100644 vendor/glm/glm/gtx/type_aligned.hpp delete mode 100644 vendor/glm/glm/gtx/type_aligned.inl delete mode 100644 vendor/glm/glm/gtx/type_trait.hpp delete mode 100644 vendor/glm/glm/gtx/type_trait.inl delete mode 100644 vendor/glm/glm/gtx/vec_swizzle.hpp delete mode 100644 vendor/glm/glm/gtx/vector_angle.hpp delete mode 100644 vendor/glm/glm/gtx/vector_angle.inl delete mode 100644 vendor/glm/glm/gtx/vector_query.hpp delete mode 100644 vendor/glm/glm/gtx/vector_query.inl delete mode 100644 vendor/glm/glm/gtx/wrap.hpp delete mode 100644 vendor/glm/glm/gtx/wrap.inl delete mode 100644 vendor/glm/glm/integer.hpp delete mode 100644 vendor/glm/glm/mat2x2.hpp delete mode 100644 vendor/glm/glm/mat2x3.hpp delete mode 100644 vendor/glm/glm/mat2x4.hpp delete mode 100644 vendor/glm/glm/mat3x2.hpp delete mode 100644 vendor/glm/glm/mat3x3.hpp delete mode 100644 vendor/glm/glm/mat3x4.hpp delete mode 100644 vendor/glm/glm/mat4x2.hpp delete mode 100644 vendor/glm/glm/mat4x3.hpp delete mode 100644 vendor/glm/glm/mat4x4.hpp delete mode 100644 vendor/glm/glm/matrix.hpp delete mode 100644 vendor/glm/glm/packing.hpp delete mode 100644 vendor/glm/glm/simd/common.h delete mode 100644 vendor/glm/glm/simd/exponential.h delete mode 100644 vendor/glm/glm/simd/geometric.h delete mode 100644 vendor/glm/glm/simd/integer.h delete mode 100644 vendor/glm/glm/simd/matrix.h delete mode 100644 vendor/glm/glm/simd/neon.h delete mode 100644 vendor/glm/glm/simd/packing.h delete mode 100644 vendor/glm/glm/simd/platform.h delete mode 100644 vendor/glm/glm/simd/trigonometric.h delete mode 100644 vendor/glm/glm/simd/vector_relational.h delete mode 100644 vendor/glm/glm/trigonometric.hpp delete mode 100644 vendor/glm/glm/vec2.hpp delete mode 100644 vendor/glm/glm/vec3.hpp delete mode 100644 vendor/glm/glm/vec4.hpp delete mode 100644 vendor/glm/glm/vector_relational.hpp delete mode 100644 vendor/nanoflann/nanoflann.hpp delete mode 100644 vendor/nlohmann/LICENSE.txt delete mode 100644 vendor/nlohmann/json.hpp delete mode 100644 vendor/nlohmann/json_fwd.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 742efdd..819d1b8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,35 @@ set(OPENCV_DIR "OPENCV_DIR-NOTFOUND" CACHE PATH "Path to the OPENCV installation set(OPENSPLAT_MAX_CUDA_COMPATIBILITY OFF CACHE BOOL "Build for maximum CUDA device compatibility") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +# Don't complain about the override from NANOFLANN_BUILD_EXAMPLES +set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) +# Use time-of-extraction for FetchContent'ed files modification time +if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0") + cmake_policy(SET CMP0135 NEW) +endif() +include(FetchContent) +FetchContent_Declare(nlohmann_json + URL https://github.com/nlohmann/json/releases/download/v3.11.3/json.tar.xz + URL_HASH SHA256=d6c65aca6b1ed68e7a182f4757257b107ae403032760ed6ef121c9d55e81757d +) +set(NANOFLANN_BUILD_EXAMPLES OFF) +FetchContent_Declare(nanoflann + GIT_REPOSITORY https://github.com/jlblancoc/nanoflann.git + GIT_TAG 923c2ac16a955317054c296d298425d33c0cb9de # 1.5.5 +) +FetchContent_Declare(cxxopts + GIT_REPOSITORY https://github.com/jarro2783/cxxopts.git + GIT_TAG 3bf268481da8208d171d8908e6491459de3651d7 # 3.2.0 +) +FetchContent_MakeAvailable(nlohmann_json nanoflann cxxopts) +if((GPU_RUNTIME STREQUAL "CUDA") OR (GPU_RUNTIME STREQUAL "HIP")) + FetchContent_Declare(glm + GIT_REPOSITORY https://github.com/g-truc/glm.git + GIT_TAG 0af55ccecd98d4e5a8d1fad7de25ba429d60e863 # 1.0.1 + ) + FetchContent_MakeAvailable(glm) +endif() + if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE) endif() @@ -125,10 +154,10 @@ if((GPU_RUNTIME STREQUAL "CUDA") OR (GPU_RUNTIME STREQUAL "HIP")) target_compile_definitions(gsplat PRIVATE USE_HIP __HIP_PLATFORM_AMD__) endif() target_include_directories(gsplat PRIVATE - ${PROJECT_SOURCE_DIR}/vendor/glm ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES} ${TORCH_INCLUDE_DIRS} ) + target_link_libraries(gsplat PUBLIC glm::glm-header-only) set_target_properties(gsplat PROPERTIES LINKER_LANGUAGE CXX) elseif(GPU_RUNTIME STREQUAL "MPS") add_library(gsplat vendor/gsplat-metal/gsplat_metal.mm) @@ -164,12 +193,15 @@ add_executable(opensplat opensplat.cpp point_io.cpp nerfstudio.cpp model.cpp kdt install(TARGETS opensplat DESTINATION bin) set_property(TARGET opensplat PROPERTY CXX_STANDARD 17) target_include_directories(opensplat PRIVATE - ${PROJECT_SOURCE_DIR}/vendor/glm - ${PROJECT_SOURCE_DIR}/vendor/nanoflann ${PROJECT_SOURCE_DIR}/vendor ${GPU_INCLUDE_DIRS} ) target_link_libraries(opensplat PUBLIC ${STDPPFS_LIBRARY} ${GPU_LIBRARIES} ${GSPLAT_LIBS} ${TORCH_LIBRARIES} ${OpenCV_LIBS}) +target_link_libraries(opensplat PRIVATE + nlohmann_json::nlohmann_json + cxxopts::cxxopts + nanoflann::nanoflann +) if (NOT WIN32) target_link_libraries(opensplat PUBLIC pthread) endif() @@ -185,12 +217,15 @@ if(OPENSPLAT_BUILD_SIMPLE_TRAINER) add_executable(simple_trainer simple_trainer.cpp project_gaussians.cpp rasterize_gaussians.cpp cv_utils.cpp) install(TARGETS simple_trainer DESTINATION bin) target_include_directories(simple_trainer PRIVATE - ${PROJECT_SOURCE_DIR}/vendor/glm - ${PROJECT_SOURCE_DIR}/vendor/nanoflann ${PROJECT_SOURCE_DIR}/vendor ${GPU_INCLUDE_DIRS} ) target_link_libraries(simple_trainer PUBLIC ${GPU_LIBRARIES} ${GSPLAT_LIBS} ${TORCH_LIBRARIES} ${OpenCV_LIBS}) + target_link_libraries(simple_trainer PRIVATE + nlohmann_json::nlohmann_json + cxxopts::cxxopts + nanoflann::nanoflann + ) if (NOT WIN32) target_link_libraries(simple_trainer PUBLIC pthread) endif() diff --git a/Dockerfile b/Dockerfile index 6e60974..8713073 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,6 +23,7 @@ RUN apt-get update && \ apt-get install -y \ build-essential \ cmake \ + git \ ninja-build \ libopencv-dev \ unzip \ diff --git a/vendor/cxxopts.hpp b/vendor/cxxopts.hpp deleted file mode 100644 index 6721342..0000000 --- a/vendor/cxxopts.hpp +++ /dev/null @@ -1,2828 +0,0 @@ -/* - -Copyright (c) 2014-2022 Jarryd Beck - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -// vim: ts=2:sw=2:expandtab - -#ifndef CXXOPTS_HPP_INCLUDED -#define CXXOPTS_HPP_INCLUDED - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef CXXOPTS_NO_EXCEPTIONS -#include -#endif - -#if defined(__GNUC__) && !defined(__clang__) -# if (__GNUC__ * 10 + __GNUC_MINOR__) < 49 -# define CXXOPTS_NO_REGEX true -# endif -#endif -#if defined(_MSC_VER) && !defined(__clang__) -#define CXXOPTS_LINKONCE_CONST __declspec(selectany) extern -#define CXXOPTS_LINKONCE __declspec(selectany) extern -#else -#define CXXOPTS_LINKONCE_CONST -#define CXXOPTS_LINKONCE -#endif - -#ifndef CXXOPTS_NO_REGEX -# include -#endif // CXXOPTS_NO_REGEX - -// Nonstandard before C++17, which is coincidentally what we also need for -#ifdef __has_include -# if __has_include() -# include -# ifdef __cpp_lib_optional -# define CXXOPTS_HAS_OPTIONAL -# endif -# endif -#endif - -#if __cplusplus >= 201603L -#define CXXOPTS_NODISCARD [[nodiscard]] -#else -#define CXXOPTS_NODISCARD -#endif - -#ifndef CXXOPTS_VECTOR_DELIMITER -#define CXXOPTS_VECTOR_DELIMITER ',' -#endif - -#define CXXOPTS__VERSION_MAJOR 3 -#define CXXOPTS__VERSION_MINOR 1 -#define CXXOPTS__VERSION_PATCH 1 - -#if (__GNUC__ < 10 || (__GNUC__ == 10 && __GNUC_MINOR__ < 1)) && __GNUC__ >= 6 - #define CXXOPTS_NULL_DEREF_IGNORE -#endif - -#if defined(__GNUC__) -#define DO_PRAGMA(x) _Pragma(#x) -#define CXXOPTS_DIAGNOSTIC_PUSH DO_PRAGMA(GCC diagnostic push) -#define CXXOPTS_DIAGNOSTIC_POP DO_PRAGMA(GCC diagnostic pop) -#define CXXOPTS_IGNORE_WARNING(x) DO_PRAGMA(GCC diagnostic ignored x) -#else -// define other compilers here if needed -#define CXXOPTS_DIAGNOSTIC_PUSH -#define CXXOPTS_DIAGNOSTIC_POP -#define CXXOPTS_IGNORE_WARNING(x) -#endif - -#ifdef CXXOPTS_NO_RTTI -#define CXXOPTS_RTTI_CAST static_cast -#else -#define CXXOPTS_RTTI_CAST dynamic_cast -#endif - -namespace cxxopts { -static constexpr struct { - uint8_t major, minor, patch; -} version = { - CXXOPTS__VERSION_MAJOR, - CXXOPTS__VERSION_MINOR, - CXXOPTS__VERSION_PATCH -}; -} // namespace cxxopts - -//when we ask cxxopts to use Unicode, help strings are processed using ICU, -//which results in the correct lengths being computed for strings when they -//are formatted for the help output -//it is necessary to make sure that can be found by the -//compiler, and that icu-uc is linked in to the binary. - -#ifdef CXXOPTS_USE_UNICODE -#include - -namespace cxxopts { - -using String = icu::UnicodeString; - -inline -String -toLocalString(std::string s) -{ - return icu::UnicodeString::fromUTF8(std::move(s)); -} - -// GNU GCC with -Weffc++ will issue a warning regarding the upcoming class, we want to silence it: -// warning: base class 'class std::enable_shared_from_this' has accessible non-virtual destructor -CXXOPTS_DIAGNOSTIC_PUSH -CXXOPTS_IGNORE_WARNING("-Wnon-virtual-dtor") -// This will be ignored under other compilers like LLVM clang. -class UnicodeStringIterator -{ - public: - - using iterator_category = std::forward_iterator_tag; - using value_type = int32_t; - using difference_type = std::ptrdiff_t; - using pointer = value_type*; - using reference = value_type&; - - UnicodeStringIterator(const icu::UnicodeString* string, int32_t pos) - : s(string) - , i(pos) - { - } - - value_type - operator*() const - { - return s->char32At(i); - } - - bool - operator==(const UnicodeStringIterator& rhs) const - { - return s == rhs.s && i == rhs.i; - } - - bool - operator!=(const UnicodeStringIterator& rhs) const - { - return !(*this == rhs); - } - - UnicodeStringIterator& - operator++() - { - ++i; - return *this; - } - - UnicodeStringIterator - operator+(int32_t v) - { - return UnicodeStringIterator(s, i + v); - } - - private: - const icu::UnicodeString* s; - int32_t i; -}; -CXXOPTS_DIAGNOSTIC_POP - -inline -String& -stringAppend(String&s, String a) -{ - return s.append(std::move(a)); -} - -inline -String& -stringAppend(String& s, std::size_t n, UChar32 c) -{ - for (std::size_t i = 0; i != n; ++i) - { - s.append(c); - } - - return s; -} - -template -String& -stringAppend(String& s, Iterator begin, Iterator end) -{ - while (begin != end) - { - s.append(*begin); - ++begin; - } - - return s; -} - -inline -std::size_t -stringLength(const String& s) -{ - return s.length(); -} - -inline -std::string -toUTF8String(const String& s) -{ - std::string result; - s.toUTF8String(result); - - return result; -} - -inline -bool -empty(const String& s) -{ - return s.isEmpty(); -} - -} // namespace cxxopts - -namespace std { - -inline -cxxopts::UnicodeStringIterator -begin(const icu::UnicodeString& s) -{ - return cxxopts::UnicodeStringIterator(&s, 0); -} - -inline -cxxopts::UnicodeStringIterator -end(const icu::UnicodeString& s) -{ - return cxxopts::UnicodeStringIterator(&s, s.length()); -} - -} // namespace std - -//ifdef CXXOPTS_USE_UNICODE -#else - -namespace cxxopts { - -using String = std::string; - -template -T -toLocalString(T&& t) -{ - return std::forward(t); -} - -inline -std::size_t -stringLength(const String& s) -{ - return s.length(); -} - -inline -String& -stringAppend(String&s, const String& a) -{ - return s.append(a); -} - -inline -String& -stringAppend(String& s, std::size_t n, char c) -{ - return s.append(n, c); -} - -template -String& -stringAppend(String& s, Iterator begin, Iterator end) -{ - return s.append(begin, end); -} - -template -std::string -toUTF8String(T&& t) -{ - return std::forward(t); -} - -inline -bool -empty(const std::string& s) -{ - return s.empty(); -} - -} // namespace cxxopts - -//ifdef CXXOPTS_USE_UNICODE -#endif - -namespace cxxopts { - -namespace { -#ifdef _WIN32 -CXXOPTS_LINKONCE_CONST std::string LQUOTE("\'"); -CXXOPTS_LINKONCE_CONST std::string RQUOTE("\'"); -#else -CXXOPTS_LINKONCE_CONST std::string LQUOTE("‘"); -CXXOPTS_LINKONCE_CONST std::string RQUOTE("’"); -#endif -} // namespace - -// GNU GCC with -Weffc++ will issue a warning regarding the upcoming class, we -// want to silence it: warning: base class 'class -// std::enable_shared_from_this' has accessible non-virtual -// destructor This will be ignored under other compilers like LLVM clang. -CXXOPTS_DIAGNOSTIC_PUSH -CXXOPTS_IGNORE_WARNING("-Wnon-virtual-dtor") - -// some older versions of GCC warn under this warning -CXXOPTS_IGNORE_WARNING("-Weffc++") -class Value : public std::enable_shared_from_this -{ - public: - - virtual ~Value() = default; - - virtual - std::shared_ptr - clone() const = 0; - - virtual void - parse(const std::string& text) const = 0; - - virtual void - parse() const = 0; - - virtual bool - has_default() const = 0; - - virtual bool - is_container() const = 0; - - virtual bool - has_implicit() const = 0; - - virtual std::string - get_default_value() const = 0; - - virtual std::string - get_implicit_value() const = 0; - - virtual std::shared_ptr - default_value(const std::string& value) = 0; - - virtual std::shared_ptr - implicit_value(const std::string& value) = 0; - - virtual std::shared_ptr - no_implicit_value() = 0; - - virtual bool - is_boolean() const = 0; -}; - -CXXOPTS_DIAGNOSTIC_POP - -namespace exceptions { - -class exception : public std::exception -{ - public: - explicit exception(std::string message) - : m_message(std::move(message)) - { - } - - CXXOPTS_NODISCARD - const char* - what() const noexcept override - { - return m_message.c_str(); - } - - private: - std::string m_message; -}; - -class specification : public exception -{ - public: - - explicit specification(const std::string& message) - : exception(message) - { - } -}; - -class parsing : public exception -{ - public: - explicit parsing(const std::string& message) - : exception(message) - { - } -}; - -class option_already_exists : public specification -{ - public: - explicit option_already_exists(const std::string& option) - : specification("Option " + LQUOTE + option + RQUOTE + " already exists") - { - } -}; - -class invalid_option_format : public specification -{ - public: - explicit invalid_option_format(const std::string& format) - : specification("Invalid option format " + LQUOTE + format + RQUOTE) - { - } -}; - -class invalid_option_syntax : public parsing { - public: - explicit invalid_option_syntax(const std::string& text) - : parsing("Argument " + LQUOTE + text + RQUOTE + - " starts with a - but has incorrect syntax") - { - } -}; - -class no_such_option : public parsing -{ - public: - explicit no_such_option(const std::string& option) - : parsing("Option " + LQUOTE + option + RQUOTE + " does not exist") - { - } -}; - -class missing_argument : public parsing -{ - public: - explicit missing_argument(const std::string& option) - : parsing( - "Option " + LQUOTE + option + RQUOTE + " is missing an argument" - ) - { - } -}; - -class option_requires_argument : public parsing -{ - public: - explicit option_requires_argument(const std::string& option) - : parsing( - "Option " + LQUOTE + option + RQUOTE + " requires an argument" - ) - { - } -}; - -class gratuitous_argument_for_option : public parsing -{ - public: - gratuitous_argument_for_option - ( - const std::string& option, - const std::string& arg - ) - : parsing( - "Option " + LQUOTE + option + RQUOTE + - " does not take an argument, but argument " + - LQUOTE + arg + RQUOTE + " given" - ) - { - } -}; - -class requested_option_not_present : public parsing -{ - public: - explicit requested_option_not_present(const std::string& option) - : parsing("Option " + LQUOTE + option + RQUOTE + " not present") - { - } -}; - -class option_has_no_value : public exception -{ - public: - explicit option_has_no_value(const std::string& option) - : exception( - !option.empty() ? - ("Option " + LQUOTE + option + RQUOTE + " has no value") : - "Option has no value") - { - } -}; - -class incorrect_argument_type : public parsing -{ - public: - explicit incorrect_argument_type - ( - const std::string& arg - ) - : parsing( - "Argument " + LQUOTE + arg + RQUOTE + " failed to parse" - ) - { - } -}; - -} // namespace exceptions - - -template -void throw_or_mimic(const std::string& text) -{ - static_assert(std::is_base_of::value, - "throw_or_mimic only works on std::exception and " - "deriving classes"); - -#ifndef CXXOPTS_NO_EXCEPTIONS - // If CXXOPTS_NO_EXCEPTIONS is not defined, just throw - throw T{text}; -#else - // Otherwise manually instantiate the exception, print what() to stderr, - // and exit - T exception{text}; - std::cerr << exception.what() << std::endl; - std::exit(EXIT_FAILURE); -#endif -} - -using OptionNames = std::vector; - -namespace values { - -namespace parser_tool { - -struct IntegerDesc -{ - std::string negative = ""; - std::string base = ""; - std::string value = ""; -}; -struct ArguDesc { - std::string arg_name = ""; - bool grouping = false; - bool set_value = false; - std::string value = ""; -}; - -#ifdef CXXOPTS_NO_REGEX -inline IntegerDesc SplitInteger(const std::string &text) -{ - if (text.empty()) - { - throw_or_mimic(text); - } - IntegerDesc desc; - const char *pdata = text.c_str(); - if (*pdata == '-') - { - pdata += 1; - desc.negative = "-"; - } - if (strncmp(pdata, "0x", 2) == 0) - { - pdata += 2; - desc.base = "0x"; - } - if (*pdata != '\0') - { - desc.value = std::string(pdata); - } - else - { - throw_or_mimic(text); - } - return desc; -} - -inline bool IsTrueText(const std::string &text) -{ - const char *pdata = text.c_str(); - if (*pdata == 't' || *pdata == 'T') - { - pdata += 1; - if (strncmp(pdata, "rue\0", 4) == 0) - { - return true; - } - } - else if (strncmp(pdata, "1\0", 2) == 0) - { - return true; - } - return false; -} - -inline bool IsFalseText(const std::string &text) -{ - const char *pdata = text.c_str(); - if (*pdata == 'f' || *pdata == 'F') - { - pdata += 1; - if (strncmp(pdata, "alse\0", 5) == 0) - { - return true; - } - } - else if (strncmp(pdata, "0\0", 2) == 0) - { - return true; - } - return false; -} - -inline OptionNames split_option_names(const std::string &text) -{ - OptionNames split_names; - - std::string::size_type token_start_pos = 0; - auto length = text.length(); - - if (length == 0) - { - throw_or_mimic(text); - } - - while (token_start_pos < length) { - const auto &npos = std::string::npos; - auto next_non_space_pos = text.find_first_not_of(' ', token_start_pos); - if (next_non_space_pos == npos) { - throw_or_mimic(text); - } - token_start_pos = next_non_space_pos; - auto next_delimiter_pos = text.find(',', token_start_pos); - if (next_delimiter_pos == token_start_pos) { - throw_or_mimic(text); - } - if (next_delimiter_pos == npos) { - next_delimiter_pos = length; - } - auto token_length = next_delimiter_pos - token_start_pos; - // validate the token itself matches the regex /([:alnum:][-_[:alnum:]]*/ - { - const char* option_name_valid_chars = - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz" - "0123456789" - "_-.?"; - - if (!std::isalnum(text[token_start_pos], std::locale::classic()) || - text.find_first_not_of(option_name_valid_chars, token_start_pos) < next_delimiter_pos) { - throw_or_mimic(text); - } - } - split_names.emplace_back(text.substr(token_start_pos, token_length)); - token_start_pos = next_delimiter_pos + 1; - } - return split_names; -} - -inline ArguDesc ParseArgument(const char *arg, bool &matched) -{ - ArguDesc argu_desc; - const char *pdata = arg; - matched = false; - if (strncmp(pdata, "--", 2) == 0) - { - pdata += 2; - if (isalnum(*pdata, std::locale::classic())) - { - argu_desc.arg_name.push_back(*pdata); - pdata += 1; - while (isalnum(*pdata, std::locale::classic()) || *pdata == '-' || *pdata == '_') - { - argu_desc.arg_name.push_back(*pdata); - pdata += 1; - } - if (argu_desc.arg_name.length() > 1) - { - if (*pdata == '=') - { - argu_desc.set_value = true; - pdata += 1; - if (*pdata != '\0') - { - argu_desc.value = std::string(pdata); - } - matched = true; - } - else if (*pdata == '\0') - { - matched = true; - } - } - } - } - else if (strncmp(pdata, "-", 1) == 0) - { - pdata += 1; - argu_desc.grouping = true; - while (isalnum(*pdata, std::locale::classic())) - { - argu_desc.arg_name.push_back(*pdata); - pdata += 1; - } - matched = !argu_desc.arg_name.empty() && *pdata == '\0'; - } - return argu_desc; -} - -#else // CXXOPTS_NO_REGEX - -namespace { -CXXOPTS_LINKONCE -std::basic_regex integer_pattern - ("(-)?(0x)?([0-9a-zA-Z]+)|((0x)?0)"); -CXXOPTS_LINKONCE -std::basic_regex truthy_pattern - ("(t|T)(rue)?|1"); -CXXOPTS_LINKONCE -std::basic_regex falsy_pattern - ("(f|F)(alse)?|0"); -CXXOPTS_LINKONCE -std::basic_regex option_matcher - ("--([[:alnum:]][-_[:alnum:]\\.]+)(=(.*))?|-([[:alnum:]].*)"); -CXXOPTS_LINKONCE -std::basic_regex option_specifier - ("([[:alnum:]][-_[:alnum:]\\.]*)(,[ ]*[[:alnum:]][-_[:alnum:]]*)*"); -CXXOPTS_LINKONCE -std::basic_regex option_specifier_separator(", *"); - -} // namespace - -inline IntegerDesc SplitInteger(const std::string &text) -{ - std::smatch match; - std::regex_match(text, match, integer_pattern); - - if (match.length() == 0) - { - throw_or_mimic(text); - } - - IntegerDesc desc; - desc.negative = match[1]; - desc.base = match[2]; - desc.value = match[3]; - - if (match.length(4) > 0) - { - desc.base = match[5]; - desc.value = "0"; - return desc; - } - - return desc; -} - -inline bool IsTrueText(const std::string &text) -{ - std::smatch result; - std::regex_match(text, result, truthy_pattern); - return !result.empty(); -} - -inline bool IsFalseText(const std::string &text) -{ - std::smatch result; - std::regex_match(text, result, falsy_pattern); - return !result.empty(); -} - -// Gets the option names specified via a single, comma-separated string, -// and returns the separate, space-discarded, non-empty names -// (without considering which or how many are single-character) -inline OptionNames split_option_names(const std::string &text) -{ - if (!std::regex_match(text.c_str(), option_specifier)) - { - throw_or_mimic(text); - } - - OptionNames split_names; - - constexpr int use_non_matches { -1 }; - auto token_iterator = std::sregex_token_iterator( - text.begin(), text.end(), option_specifier_separator, use_non_matches); - std::copy(token_iterator, std::sregex_token_iterator(), std::back_inserter(split_names)); - return split_names; -} - -inline ArguDesc ParseArgument(const char *arg, bool &matched) -{ - std::match_results result; - std::regex_match(arg, result, option_matcher); - matched = !result.empty(); - - ArguDesc argu_desc; - if (matched) { - argu_desc.arg_name = result[1].str(); - argu_desc.set_value = result[2].length() > 0; - argu_desc.value = result[3].str(); - if (result[4].length() > 0) - { - argu_desc.grouping = true; - argu_desc.arg_name = result[4].str(); - } - } - - return argu_desc; -} - -#endif // CXXOPTS_NO_REGEX -#undef CXXOPTS_NO_REGEX -} // namespace parser_tool - -namespace detail { - -template -struct SignedCheck; - -template -struct SignedCheck -{ - template - void - operator()(bool negative, U u, const std::string& text) - { - if (negative) - { - if (u > static_cast((std::numeric_limits::min)())) - { - throw_or_mimic(text); - } - } - else - { - if (u > static_cast((std::numeric_limits::max)())) - { - throw_or_mimic(text); - } - } - } -}; - -template -struct SignedCheck -{ - template - void - operator()(bool, U, const std::string&) const {} -}; - -template -void -check_signed_range(bool negative, U value, const std::string& text) -{ - SignedCheck::is_signed>()(negative, value, text); -} - -} // namespace detail - -template -void -checked_negate(R& r, T&& t, const std::string&, std::true_type) -{ - // if we got to here, then `t` is a positive number that fits into - // `R`. So to avoid MSVC C4146, we first cast it to `R`. - // See https://github.com/jarro2783/cxxopts/issues/62 for more details. - r = static_cast(-static_cast(t-1)-1); -} - -template -void -checked_negate(R&, T&&, const std::string& text, std::false_type) -{ - throw_or_mimic(text); -} - -template -void -integer_parser(const std::string& text, T& value) -{ - parser_tool::IntegerDesc int_desc = parser_tool::SplitInteger(text); - - using US = typename std::make_unsigned::type; - constexpr bool is_signed = std::numeric_limits::is_signed; - - const bool negative = int_desc.negative.length() > 0; - const uint8_t base = int_desc.base.length() > 0 ? 16 : 10; - const std::string & value_match = int_desc.value; - - US result = 0; - - for (char ch : value_match) - { - US digit = 0; - - if (ch >= '0' && ch <= '9') - { - digit = static_cast(ch - '0'); - } - else if (base == 16 && ch >= 'a' && ch <= 'f') - { - digit = static_cast(ch - 'a' + 10); - } - else if (base == 16 && ch >= 'A' && ch <= 'F') - { - digit = static_cast(ch - 'A' + 10); - } - else - { - throw_or_mimic(text); - } - - const US next = static_cast(result * base + digit); - if (result > next) - { - throw_or_mimic(text); - } - - result = next; - } - - detail::check_signed_range(negative, result, text); - - if (negative) - { - checked_negate(value, result, text, std::integral_constant()); - } - else - { - value = static_cast(result); - } -} - -template -void stringstream_parser(const std::string& text, T& value) -{ - std::stringstream in(text); - in >> value; - if (!in) { - throw_or_mimic(text); - } -} - -template ::value>::type* = nullptr - > -void parse_value(const std::string& text, T& value) -{ - integer_parser(text, value); -} - -inline -void -parse_value(const std::string& text, bool& value) -{ - if (parser_tool::IsTrueText(text)) - { - value = true; - return; - } - - if (parser_tool::IsFalseText(text)) - { - value = false; - return; - } - - throw_or_mimic(text); -} - -inline -void -parse_value(const std::string& text, std::string& value) -{ - value = text; -} - -// The fallback parser. It uses the stringstream parser to parse all types -// that have not been overloaded explicitly. It has to be placed in the -// source code before all other more specialized templates. -template ::value>::type* = nullptr - > -void -parse_value(const std::string& text, T& value) { - stringstream_parser(text, value); -} - -template -void -parse_value(const std::string& text, std::vector& value) -{ - if (text.empty()) { - T v; - parse_value(text, v); - value.emplace_back(std::move(v)); - return; - } - std::stringstream in(text); - std::string token; - while(!in.eof() && std::getline(in, token, CXXOPTS_VECTOR_DELIMITER)) { - T v; - parse_value(token, v); - value.emplace_back(std::move(v)); - } -} - -#ifdef CXXOPTS_HAS_OPTIONAL -template -void -parse_value(const std::string& text, std::optional& value) -{ - T result; - parse_value(text, result); - value = std::move(result); -} -#endif - -inline -void parse_value(const std::string& text, char& c) -{ - if (text.length() != 1) - { - throw_or_mimic(text); - } - - c = text[0]; -} - -template -struct type_is_container -{ - static constexpr bool value = false; -}; - -template -struct type_is_container> -{ - static constexpr bool value = true; -}; - -template -class abstract_value : public Value -{ - using Self = abstract_value; - - public: - abstract_value() - : m_result(std::make_shared()) - , m_store(m_result.get()) - { - } - - explicit abstract_value(T* t) - : m_store(t) - { - } - - ~abstract_value() override = default; - - abstract_value& operator=(const abstract_value&) = default; - - abstract_value(const abstract_value& rhs) - { - if (rhs.m_result) - { - m_result = std::make_shared(); - m_store = m_result.get(); - } - else - { - m_store = rhs.m_store; - } - - m_default = rhs.m_default; - m_implicit = rhs.m_implicit; - m_default_value = rhs.m_default_value; - m_implicit_value = rhs.m_implicit_value; - } - - void - parse(const std::string& text) const override - { - parse_value(text, *m_store); - } - - bool - is_container() const override - { - return type_is_container::value; - } - - void - parse() const override - { - parse_value(m_default_value, *m_store); - } - - bool - has_default() const override - { - return m_default; - } - - bool - has_implicit() const override - { - return m_implicit; - } - - std::shared_ptr - default_value(const std::string& value) override - { - m_default = true; - m_default_value = value; - return shared_from_this(); - } - - std::shared_ptr - implicit_value(const std::string& value) override - { - m_implicit = true; - m_implicit_value = value; - return shared_from_this(); - } - - std::shared_ptr - no_implicit_value() override - { - m_implicit = false; - return shared_from_this(); - } - - std::string - get_default_value() const override - { - return m_default_value; - } - - std::string - get_implicit_value() const override - { - return m_implicit_value; - } - - bool - is_boolean() const override - { - return std::is_same::value; - } - - const T& - get() const - { - if (m_store == nullptr) - { - return *m_result; - } - return *m_store; - } - - protected: - std::shared_ptr m_result{}; - T* m_store{}; - - bool m_default = false; - bool m_implicit = false; - - std::string m_default_value{}; - std::string m_implicit_value{}; -}; - -template -class standard_value : public abstract_value -{ - public: - using abstract_value::abstract_value; - - CXXOPTS_NODISCARD - std::shared_ptr - clone() const override - { - return std::make_shared>(*this); - } -}; - -template <> -class standard_value : public abstract_value -{ - public: - ~standard_value() override = default; - - standard_value() - { - set_default_and_implicit(); - } - - explicit standard_value(bool* b) - : abstract_value(b) - { - m_implicit = true; - m_implicit_value = "true"; - } - - std::shared_ptr - clone() const override - { - return std::make_shared>(*this); - } - - private: - - void - set_default_and_implicit() - { - m_default = true; - m_default_value = "false"; - m_implicit = true; - m_implicit_value = "true"; - } -}; - -} // namespace values - -template -std::shared_ptr -value() -{ - return std::make_shared>(); -} - -template -std::shared_ptr -value(T& t) -{ - return std::make_shared>(&t); -} - -class OptionAdder; - -CXXOPTS_NODISCARD -inline -const std::string& -first_or_empty(const OptionNames& long_names) -{ - static const std::string empty{""}; - return long_names.empty() ? empty : long_names.front(); -} - -class OptionDetails -{ - public: - OptionDetails - ( - std::string short_, - OptionNames long_, - String desc, - std::shared_ptr val - ) - : m_short(std::move(short_)) - , m_long(std::move(long_)) - , m_desc(std::move(desc)) - , m_value(std::move(val)) - , m_count(0) - { - m_hash = std::hash{}(first_long_name() + m_short); - } - - OptionDetails(const OptionDetails& rhs) - : m_desc(rhs.m_desc) - , m_value(rhs.m_value->clone()) - , m_count(rhs.m_count) - { - } - - OptionDetails(OptionDetails&& rhs) = default; - - CXXOPTS_NODISCARD - const String& - description() const - { - return m_desc; - } - - CXXOPTS_NODISCARD - const Value& - value() const { - return *m_value; - } - - CXXOPTS_NODISCARD - std::shared_ptr - make_storage() const - { - return m_value->clone(); - } - - CXXOPTS_NODISCARD - const std::string& - short_name() const - { - return m_short; - } - - CXXOPTS_NODISCARD - const std::string& - first_long_name() const - { - return first_or_empty(m_long); - } - - CXXOPTS_NODISCARD - const std::string& - essential_name() const - { - return m_long.empty() ? m_short : m_long.front(); - } - - CXXOPTS_NODISCARD - const OptionNames & - long_names() const - { - return m_long; - } - - std::size_t - hash() const - { - return m_hash; - } - - private: - std::string m_short{}; - OptionNames m_long{}; - String m_desc{}; - std::shared_ptr m_value{}; - int m_count; - - std::size_t m_hash{}; -}; - -struct HelpOptionDetails -{ - std::string s; - OptionNames l; - String desc; - bool has_default; - std::string default_value; - bool has_implicit; - std::string implicit_value; - std::string arg_help; - bool is_container; - bool is_boolean; -}; - -struct HelpGroupDetails -{ - std::string name{}; - std::string description{}; - std::vector options{}; -}; - -class OptionValue -{ - public: - void - parse - ( - const std::shared_ptr& details, - const std::string& text - ) - { - ensure_value(details); - ++m_count; - m_value->parse(text); - m_long_names = &details->long_names(); - } - - void - parse_default(const std::shared_ptr& details) - { - ensure_value(details); - m_default = true; - m_long_names = &details->long_names(); - m_value->parse(); - } - - void - parse_no_value(const std::shared_ptr& details) - { - m_long_names = &details->long_names(); - } - -#if defined(CXXOPTS_NULL_DEREF_IGNORE) -CXXOPTS_DIAGNOSTIC_PUSH -CXXOPTS_IGNORE_WARNING("-Wnull-dereference") -#endif - - CXXOPTS_NODISCARD - std::size_t - count() const noexcept - { - return m_count; - } - -#if defined(CXXOPTS_NULL_DEREF_IGNORE) -CXXOPTS_DIAGNOSTIC_POP -#endif - - // TODO: maybe default options should count towards the number of arguments - CXXOPTS_NODISCARD - bool - has_default() const noexcept - { - return m_default; - } - - template - const T& - as() const - { - if (m_value == nullptr) { - throw_or_mimic( - m_long_names == nullptr ? "" : first_or_empty(*m_long_names)); - } - - return CXXOPTS_RTTI_CAST&>(*m_value).get(); - } - - private: - void - ensure_value(const std::shared_ptr& details) - { - if (m_value == nullptr) - { - m_value = details->make_storage(); - } - } - - - const OptionNames * m_long_names = nullptr; - // Holding this pointer is safe, since OptionValue's only exist in key-value pairs, - // where the key has the string we point to. - std::shared_ptr m_value{}; - std::size_t m_count = 0; - bool m_default = false; -}; - -class KeyValue -{ - public: - KeyValue(std::string key_, std::string value_) noexcept - : m_key(std::move(key_)) - , m_value(std::move(value_)) - { - } - - CXXOPTS_NODISCARD - const std::string& - key() const - { - return m_key; - } - - CXXOPTS_NODISCARD - const std::string& - value() const - { - return m_value; - } - - template - T - as() const - { - T result; - values::parse_value(m_value, result); - return result; - } - - private: - std::string m_key; - std::string m_value; -}; - -using ParsedHashMap = std::unordered_map; -using NameHashMap = std::unordered_map; - -class ParseResult -{ - public: - class Iterator - { - public: - using iterator_category = std::forward_iterator_tag; - using value_type = KeyValue; - using difference_type = void; - using pointer = const KeyValue*; - using reference = const KeyValue&; - - Iterator() = default; - Iterator(const Iterator&) = default; - -// GCC complains about m_iter not being initialised in the member -// initializer list -CXXOPTS_DIAGNOSTIC_PUSH -CXXOPTS_IGNORE_WARNING("-Weffc++") - Iterator(const ParseResult *pr, bool end=false) - : m_pr(pr) - { - if (end) - { - m_sequential = false; - m_iter = m_pr->m_defaults.end(); - } - else - { - m_sequential = true; - m_iter = m_pr->m_sequential.begin(); - - if (m_iter == m_pr->m_sequential.end()) - { - m_sequential = false; - m_iter = m_pr->m_defaults.begin(); - } - } - } -CXXOPTS_DIAGNOSTIC_POP - - Iterator& operator++() - { - ++m_iter; - if(m_sequential && m_iter == m_pr->m_sequential.end()) - { - m_sequential = false; - m_iter = m_pr->m_defaults.begin(); - return *this; - } - return *this; - } - - Iterator operator++(int) - { - Iterator retval = *this; - ++(*this); - return retval; - } - - bool operator==(const Iterator& other) const - { - return (m_sequential == other.m_sequential) && (m_iter == other.m_iter); - } - - bool operator!=(const Iterator& other) const - { - return !(*this == other); - } - - const KeyValue& operator*() - { - return *m_iter; - } - - const KeyValue* operator->() - { - return m_iter.operator->(); - } - - private: - const ParseResult* m_pr; - std::vector::const_iterator m_iter; - bool m_sequential = true; - }; - - ParseResult() = default; - ParseResult(const ParseResult&) = default; - - ParseResult(NameHashMap&& keys, ParsedHashMap&& values, std::vector sequential, - std::vector default_opts, std::vector&& unmatched_args) - : m_keys(std::move(keys)) - , m_values(std::move(values)) - , m_sequential(std::move(sequential)) - , m_defaults(std::move(default_opts)) - , m_unmatched(std::move(unmatched_args)) - { - } - - ParseResult& operator=(ParseResult&&) = default; - ParseResult& operator=(const ParseResult&) = default; - - Iterator - begin() const - { - return Iterator(this); - } - - Iterator - end() const - { - return Iterator(this, true); - } - - std::size_t - count(const std::string& o) const - { - auto iter = m_keys.find(o); - if (iter == m_keys.end()) - { - return 0; - } - - auto viter = m_values.find(iter->second); - - if (viter == m_values.end()) - { - return 0; - } - - return viter->second.count(); - } - - const OptionValue& - operator[](const std::string& option) const - { - auto iter = m_keys.find(option); - - if (iter == m_keys.end()) - { - throw_or_mimic(option); - } - - auto viter = m_values.find(iter->second); - - if (viter == m_values.end()) - { - throw_or_mimic(option); - } - - return viter->second; - } - - const std::vector& - arguments() const - { - return m_sequential; - } - - const std::vector& - unmatched() const - { - return m_unmatched; - } - - const std::vector& - defaults() const - { - return m_defaults; - } - - const std::string - arguments_string() const - { - std::string result; - for(const auto& kv: m_sequential) - { - result += kv.key() + " = " + kv.value() + "\n"; - } - for(const auto& kv: m_defaults) - { - result += kv.key() + " = " + kv.value() + " " + "(default)" + "\n"; - } - return result; - } - - private: - NameHashMap m_keys{}; - ParsedHashMap m_values{}; - std::vector m_sequential{}; - std::vector m_defaults{}; - std::vector m_unmatched{}; -}; - -struct Option -{ - Option - ( - std::string opts, - std::string desc, - std::shared_ptr value = ::cxxopts::value(), - std::string arg_help = "" - ) - : opts_(std::move(opts)) - , desc_(std::move(desc)) - , value_(std::move(value)) - , arg_help_(std::move(arg_help)) - { - } - - std::string opts_; - std::string desc_; - std::shared_ptr value_; - std::string arg_help_; -}; - -using OptionMap = std::unordered_map>; -using PositionalList = std::vector; -using PositionalListIterator = PositionalList::const_iterator; - -class OptionParser -{ - public: - OptionParser(const OptionMap& options, const PositionalList& positional, bool allow_unrecognised) - : m_options(options) - , m_positional(positional) - , m_allow_unrecognised(allow_unrecognised) - { - } - - ParseResult - parse(int argc, const char* const* argv); - - bool - consume_positional(const std::string& a, PositionalListIterator& next); - - void - checked_parse_arg - ( - int argc, - const char* const* argv, - int& current, - const std::shared_ptr& value, - const std::string& name - ); - - void - add_to_option(OptionMap::const_iterator iter, const std::string& option, const std::string& arg); - - void - parse_option - ( - const std::shared_ptr& value, - const std::string& name, - const std::string& arg = "" - ); - - void - parse_default(const std::shared_ptr& details); - - void - parse_no_value(const std::shared_ptr& details); - - private: - - void finalise_aliases(); - - const OptionMap& m_options; - const PositionalList& m_positional; - - std::vector m_sequential{}; - std::vector m_defaults{}; - bool m_allow_unrecognised; - - ParsedHashMap m_parsed{}; - NameHashMap m_keys{}; -}; - -class Options -{ - public: - - explicit Options(std::string program_name, std::string help_string = "") - : m_program(std::move(program_name)) - , m_help_string(toLocalString(std::move(help_string))) - , m_custom_help("[OPTION...]") - , m_positional_help("positional parameters") - , m_show_positional(false) - , m_allow_unrecognised(false) - , m_width(76) - , m_tab_expansion(false) - , m_options(std::make_shared()) - { - } - - Options& - positional_help(std::string help_text) - { - m_positional_help = std::move(help_text); - return *this; - } - - Options& - custom_help(std::string help_text) - { - m_custom_help = std::move(help_text); - return *this; - } - - Options& - show_positional_help() - { - m_show_positional = true; - return *this; - } - - Options& - allow_unrecognised_options() - { - m_allow_unrecognised = true; - return *this; - } - - Options& - set_width(std::size_t width) - { - m_width = width; - return *this; - } - - Options& - set_tab_expansion(bool expansion=true) - { - m_tab_expansion = expansion; - return *this; - } - - ParseResult - parse(int argc, const char* const* argv); - - OptionAdder - add_options(std::string group = ""); - - void - add_options - ( - const std::string& group, - std::initializer_list