From caf8bd6b05480c6f7355875d81c8414e5bb1f396 Mon Sep 17 00:00:00 2001 From: Jayden Grubb Date: Mon, 10 Nov 2025 22:58:37 +1000 Subject: [PATCH] Add cmake install commands --- CMakeLists.txt | 6 ++++ editor/CMakeLists.txt | 4 ++- engine/CMakeLists.txt | 52 +++++++++++++++++++++++++++++-- engine/cmake/nova-config.cmake.in | 5 +++ 4 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 engine/cmake/nova-config.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 6bf9109..66d362c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,6 +19,7 @@ endif() set(NOVA_SANITIZERS "" CACHE STRING "Sanitizers to enable (address, undefined, leak)") set(NOVA_WERROR OFF CACHE BOOL "Treat compiler warnings as errors") +set(NOVA_ENABLE_INSTALL ON CACHE BOOL "Enable installation targets") add_compile_definitions( NOVA_VERSION_MAJOR=${PROJECT_VERSION_MAJOR} @@ -87,5 +88,10 @@ else() message(FATAL_ERROR "Unsupported platform") endif() +if (NOVA_ENABLE_INSTALL) + include(CMakePackageConfigHelpers) + include(GNUInstallDirs) +endif() + add_subdirectory(engine) add_subdirectory(editor) diff --git a/editor/CMakeLists.txt b/editor/CMakeLists.txt index c0ed851..20e57cc 100644 --- a/editor/CMakeLists.txt +++ b/editor/CMakeLists.txt @@ -15,5 +15,7 @@ target_include_directories(nova-editor ) target_link_libraries(nova-editor - PUBLIC nova + PUBLIC nova::nova ) + +# TODO: Install nova-editor diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index 9d49283..ef82dea 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -10,10 +10,58 @@ list(TRANSFORM NOVA_ENGINE_SRC PREPEND ${CMAKE_CURRENT_SOURCE_DIR}/src/) add_library(nova SHARED ${NOVA_ENGINE_SRC}) target_include_directories(nova - PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src + PUBLIC + $ + $ + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src ) set_target_properties(nova PROPERTIES DEFINE_SYMBOL NOVA_EXPORT_SYMBOLS ) + +add_library(nova::nova ALIAS nova) + +if (NOVA_ENABLE_INSTALL) + configure_package_config_file( + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/nova-config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/nova-config.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/nova + ) + + write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/nova-config-version.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion + ) + + install( + TARGETS nova + EXPORT nova-targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + ) + + install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/nova + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.hpp" + ) + + install( + EXPORT nova-targets + FILE nova-targets.cmake + NAMESPACE nova:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/nova + ) + + install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/nova-config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/nova-config-version.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/nova + ) +endif() diff --git a/engine/cmake/nova-config.cmake.in b/engine/cmake/nova-config.cmake.in new file mode 100644 index 0000000..792cd61 --- /dev/null +++ b/engine/cmake/nova-config.cmake.in @@ -0,0 +1,5 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/nova-targets.cmake") + +check_required_components(nova)