From dba47505bd0f4f71a4238bae22c8b837ebfe56a1 Mon Sep 17 00:00:00 2001 From: Michael Migliore Date: Wed, 20 Nov 2024 08:58:14 +0100 Subject: [PATCH] Add CMake build system --- CMakeLists.txt | 70 ++++++++++++++++++++++++++++++++++++++++ README.md | 4 +-- cmake/spzConfig.cmake.in | 8 +++++ src/cc/splat-types.h | 1 + 4 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 cmake/spzConfig.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..5f7132b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,70 @@ +cmake_minimum_required(VERSION 3.10) + +project(spz + DESCRIPTION "A 3D Gaussians format" + LANGUAGES C CXX + VERSION 0.1) + +include(GNUInstallDirs) + +# zlib is required to build the project +find_package(ZLIB REQUIRED) + +set(spz_sources + "${CMAKE_CURRENT_SOURCE_DIR}/src/cc/load-spz.cc" + "${CMAKE_CURRENT_SOURCE_DIR}/src/cc/splat-c-types.cc" + "${CMAKE_CURRENT_SOURCE_DIR}/src/cc/splat-types.cc" +) + +set(spz_headers + "${CMAKE_CURRENT_SOURCE_DIR}/src/cc/load-spz.h" + "${CMAKE_CURRENT_SOURCE_DIR}/src/cc/splat-c-types.h" + "${CMAKE_CURRENT_SOURCE_DIR}/src/cc/splat-types.h" +) + +# create the library and configure it +add_library(spz ${spz_sources}) + +target_link_libraries(spz PRIVATE ZLIB::ZLIB) + +target_include_directories(spz + PUBLIC $ + INTERFACE $ +) + +set_target_properties(spz PROPERTIES + PUBLIC_HEADER "${spz_headers}" +) + +# Installation + +## Install spzConfig.cmake spz::spz target can be found when calling find_package(spz) +include(CMakePackageConfigHelpers) +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/spzConfig.cmake.in" + "${CMAKE_BINARY_DIR}/cmake/spzConfig.cmake" + INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/spz") +write_basic_package_version_file( + "${CMAKE_BINARY_DIR}/cmake/spzConfigVersion.cmake" + VERSION "${spz_VERSION}" + COMPATIBILITY SameMajorVersion) +install( + FILES + "${CMAKE_BINARY_DIR}/cmake/spzConfig.cmake" + "${CMAKE_BINARY_DIR}/cmake/spzConfigVersion.cmake" + DESTINATION + "${CMAKE_INSTALL_LIBDIR}/cmake/spz" +) + +install(TARGETS spz + EXPORT spzTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +install(EXPORT spzTargets + NAMESPACE spz:: + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/spz" +) diff --git a/README.md b/README.md index 3b8d800..2b52077 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,8 @@ with minimal visual differences between the two. ### C++ -Requires `libz` as the only dependent library, otherwise the code is completely self-contained. No -build system is provided (bring your own build). +Requires `libz` as the only dependent library, otherwise the code is completely self-contained. +A CMake build system is provided for convenience. ## API diff --git a/cmake/spzConfig.cmake.in b/cmake/spzConfig.cmake.in new file mode 100644 index 0000000..3ec38c7 --- /dev/null +++ b/cmake/spzConfig.cmake.in @@ -0,0 +1,8 @@ +@PACKAGE_INIT@ + +include(${CMAKE_CURRENT_LIST_DIR}/spzConfigVersion.cmake) +message(STATUS "Found spz ${PACKAGE_VERSION}") + +include(${CMAKE_CURRENT_LIST_DIR}/spzTargets.cmake) + +check_required_components(spz) diff --git a/src/cc/splat-types.h b/src/cc/splat-types.h index 07a97b9..86bb8f4 100644 --- a/src/cc/splat-types.h +++ b/src/cc/splat-types.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include