From 0886e9ca76552b8e325841e2b820b4563e5d5aba Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Thu, 27 Jul 2023 23:11:25 +0200 Subject: [PATCH] Add CMake build script --- CMakeLists.txt | 82 +++++++++++++++++++++++++++++++++++++++++++++++++ Config.cmake.in | 5 +++ 2 files changed, 87 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 Config.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..5b840eb --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,82 @@ +cmake_minimum_required(VERSION 3.10) + +project(heatshrink C) + +add_library(${PROJECT_NAME} heatshrink_decoder.c heatshrink_encoder.c) +add_library(${PROJECT_NAME}_dynalloc heatshrink_decoder.c heatshrink_encoder.c) + +find_library(MATH_LIBRARY m) # Business as usual +if(MATH_LIBRARY) + target_link_libraries(${PROJECT_NAME} PUBLIC ${MATH_LIBRARY}) +endif() + +target_include_directories(${PROJECT_NAME} PUBLIC $) +target_include_directories(${PROJECT_NAME}_dynalloc PUBLIC $) + +target_compile_definitions(${PROJECT_NAME} PUBLIC HEATSHRINK_DYNAMIC_ALLOC=0) +target_compile_definitions(${PROJECT_NAME}_dynalloc PUBLIC HEATSHRINK_DYNAMIC_ALLOC=1) + +if (UNIX) + add_executable(${PROJECT_NAME}_cmd heatshrink.c) + target_link_libraries(${PROJECT_NAME}_cmd ${PROJECT_NAME}_dynalloc) + set_target_properties(${PROJECT_NAME}_cmd PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) +endif () + +# Installation and export: + +include(CMakePackageConfigHelpers) + +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + VERSION 0.4.1 + COMPATIBILITY AnyNewerVersion +) + +set(_exported_targets ${PROJECT_NAME} ${PROJECT_NAME}_dynalloc) +if (UNIX) + list(APPEND _exported_targets ${PROJECT_NAME}_cmd) +endif () + +install(TARGETS ${_exported_targets} + EXPORT ${PROJECT_NAME}Targets +) + +export(EXPORT ${PROJECT_NAME}Targets + FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake" + NAMESPACE ${PROJECT_NAME}:: +) + +include(GNUInstallDirs) +set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) + +configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + INSTALL_DESTINATION ${ConfigPackageLocation} +) + +install( + FILES + heatshrink_common.h + heatshrink_config.h + heatshrink_encoder.h + heatshrink_decoder.h + DESTINATION + include/${PROJECT_NAME} + ) + +install(EXPORT ${PROJECT_NAME}Targets + FILE + ${PROJECT_NAME}Targets.cmake + NAMESPACE + ${PROJECT_NAME}:: + DESTINATION + ${ConfigPackageLocation} +) + +install( + FILES + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + DESTINATION + ${ConfigPackageLocation} +) diff --git a/Config.cmake.in b/Config.cmake.in new file mode 100644 index 0000000..0809ba9 --- /dev/null +++ b/Config.cmake.in @@ -0,0 +1,5 @@ +@PACKAGE_INIT@ + +if (EXISTS ${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake) + include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") +endif ()