Skip to content

Commit

Permalink
Merge pull request #24 from anira-project/packaging
Browse files Browse the repository at this point in the history
Packaging for Debian / Right SONAME for Linux
  • Loading branch information
faressc authored Jan 24, 2025
2 parents 41ae70a + 1f7fb6a commit bea0e07
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 3 deletions.
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,7 @@ FetchContent_MakeAvailable(concurrentqueue)
add_library(${PROJECT_NAME})

# enable position independent code because otherwise the static library cannot be linked into a shared library
set_target_properties(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)

set_target_properties(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON VERSION ${CMAKE_PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR})
# add an alias so that the project can be used with add_subdirectory
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})

Expand Down Expand Up @@ -246,6 +245,7 @@ endif()

if(ANIRA_WITH_INSTALL)
include(cmake/install.cmake)
include(cmake/package.cmake)
endif()

# ==============================================================================
Expand Down
1 change: 1 addition & 0 deletions Config.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ message(STATUS "Configuring anira")
set(ANIRA_WITH_LIBTORCH @ANIRA_WITH_LIBTORCH@)
set(ANIRA_WITH_BENCHMARK @ANIRA_WITH_BENCHMARK@)
set(ANIRA_WITH_TESTS @ANIRA_WITH_TESTS@)
set(ANIRA_VERSION @ANIRA_VERSION@)

find_package(concurrentqueue REQUIRED)

Expand Down
16 changes: 15 additions & 1 deletion cmake/install.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -72,27 +72,34 @@ endif()
# the variant with PUBLIC_HEADER property unfortunately does not preserve the folder structure therefore we use the simple install directory command
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/anira
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
COMPONENT dev
)

# install the target and create export-set
install(TARGETS ${PROJECT_NAME}
EXPORT "aniraTargets"
# these get default values from GNUInstallDirs
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} # .dll files
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} # .dll files
COMPONENT runtime
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # .so or .dylib files
COMPONENT runtime NAMELINK_COMPONENT dev
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # .lib files
COMPONENT dev
)

# libtorch has cmake config files that we can use to install the library later with find_package and then just link to it
if(ANIRA_WITH_LIBTORCH)
install(DIRECTORY "${LIBTORCH_ROOTDIR}/include/"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
COMPONENT deps-backends
)
install(DIRECTORY "${LIBTORCH_ROOTDIR}/lib/"
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
COMPONENT deps-backends
)
install(DIRECTORY "${LIBTORCH_ROOTDIR}/share/cmake/"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake"
COMPONENT deps-backends
)
endif()

Expand All @@ -101,23 +108,28 @@ if(ANIRA_WITH_ONNXRUNTIME)
if(UNIX AND NOT APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l")
install(DIRECTORY "${ONNXRUNTIME_ROOTDIR}/include/onnxruntime/"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
COMPONENT deps-backends
)
else()
install(DIRECTORY "${ONNXRUNTIME_ROOTDIR}/include/"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
COMPONENT deps-backends
)
endif()
install(DIRECTORY "${ONNXRUNTIME_ROOTDIR}/lib/"
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
COMPONENT deps-backends
)
endif()

if(ANIRA_WITH_TFLITE)
install(DIRECTORY "${TENSORFLOWLITE_ROOTDIR}/include/"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
COMPONENT deps-backends
)
install(DIRECTORY "${TENSORFLOWLITE_ROOTDIR}/lib/"
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
COMPONENT deps-backends
)
endif()

Expand All @@ -130,6 +142,7 @@ endif()
install(EXPORT "aniraTargets"
NAMESPACE ${PROJECT_NAME}::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
COMPONENT dev
)

include(CMakePackageConfigHelpers)
Expand All @@ -152,4 +165,5 @@ install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/aniraConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/aniraConfigVersion.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
COMPONENT dev
)
75 changes: 75 additions & 0 deletions cmake/package.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# to package:
# go into the build dir
# call "cpack -G DEB"
# sometimes it needs to be called twice...
# after installing with "apt install ./libanira*.deb" update the ld cache with "ldconfig"

set(CPACK_THREADS 10)

set(CPACK_PACKAGE_NAME "lib${PROJECT_NAME}")
set(CPACK_DEBIAN_PACKAGE_NAME ${CPACK_PACKAGE_NAME})
set(CPACK_PACKAGE_VENDOR "anira-project")
set(CPACK_VERBATIM_VARIABLES YES)

set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})

#TODO maybe change this to outside of buildtree?
set(CPACK_OUTPUT_FILE_PREFIX "${CMAKE_BINARY_DIR}/packages")

set(CPACK_PACKAGING_INSTALL_PREFIX "/usr/local")

set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})

set(CPACK_PACKAGE_CONTACT "fares.schulz@tu-berlin.de")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Fares Schulz <${CPACK_PACKAGE_CONTACT}>")

set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md")

#TODO add all actual deps
#TODO add changelog
#TODO add copyright file

set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)

# each group (or component, if not in group) is built as a seperate package
set(CPACK_COMPONENTS_GROUPING ONE_PER_GROUP)
set(CPACK_DEB_COMPONENT_INSTALL YES)

# setup components
cpack_add_component(runtime REQUIRED)
cpack_add_component(dev DEPENDS runtime)

# group all dependency components
cpack_add_component(deps-backends GROUP deps)
cpack_add_component(Devel GROUP deps)
cpack_add_component(Unspecified GROUP deps)

if (ANIRA_WITH_BENCHMARK)
cpack_add_component(gtest GROUP deps)
cpack_add_component(gmock GROUP deps)
endif()

# remove -runtime suffix of runtime package, add major version number instead
set(CPACK_DEBIAN_RUNTIME_PACKAGE_NAME ${CPACK_PACKAGE_NAME}${PROJECT_VERSION_MAJOR})

# automatically generete dependencies between components
set(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS ON)

set(CPACK_DEBIAN_RUNTIME_PACKAGE_SECTION libs)
set(CPACK_DEBIAN_DEV_PACKAGE_SECTION libdevel)

# extremely slow, and doesn't work for the deps package
set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS ON)

# fix unstripped-binary-or-object error (probably to remove unwanted debug symbols)
set(CPACK_STRIP_FILES YES)

# set package descriptions, cmake variables
set(CPACK_DEBIAN_RUNTIME_DESCRIPTION "library for real-time inference of neural networks")
set(CPACK_DEBIAN_DEV_DESCRIPTION "header files for libanira${PROJECT_VERSION_MAJOR}")
set(CPACK_DEBIAN_DEPS_DESCRIPTION "misc deps for libanira${PROJECT_VERSION_MAJOR}")

include(CPack)

0 comments on commit bea0e07

Please sign in to comment.