diff --git a/CMakeLists.txt b/CMakeLists.txt index 847a8256e..bedc8229f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,6 +28,7 @@ elseif(CMAKE_SYSTEM_NAME MATCHES "Generic") endif() set(Libname "zenohpico") + if(BUILD_SHARED_LIBS) add_library(${Libname} SHARED) else() @@ -48,6 +49,7 @@ if(NOT CMAKE_C_STANDARD) message(STATUS "Setting C99 as the C Standard") endif() endif() + set(CMAKE_C_STANDARD_REQUIRED TRUE) add_definition(ZENOH_C_STANDARD=${CMAKE_C_STANDARD}) @@ -59,6 +61,7 @@ set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE RELEASE) endif() + string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE) if(CMAKE_SYSTEM_NAME MATCHES "Linux") @@ -119,22 +122,41 @@ elseif(CMAKE_BUILD_TYPE MATCHES "RELEASE") endif() endif() -file(GLOB_RECURSE PublicHeaders "include/*.h") +file(GLOB_RECURSE PublicHeaders + "include/zenoh-pico/api/*.h" + "include/zenoh-pico/collections/*.h" + "include/zenoh-pico/link/*.h" + "include/zenoh-pico/net/*.h" + "include/zenoh-pico/protocol/*.h" + "include/zenoh-pico/session/*.h" + "include/zenoh-pico/transport/*.h" + "include/zenoh-pico/utils/*.h" + "include/zenoh-pico/config.h" +) target_include_directories(${Libname} PUBLIC ${PROJECT_SOURCE_DIR}/include) -file(GLOB_RECURSE Sources "src/*.c") +file(GLOB_RECURSE Sources + "src/api/*.c" + "src/collections/*.c" + "src/link/*.c" + "src/net/*.c" + "src/protocol/*.c" + "src/session/*.c" + "src/transport/*.c" + "src/utils/*.c" +) if(WITH_ZEPHYR) - file (GLOB Sources_Zephyr "src/system/zephyr/*.c") + file(GLOB Sources_Zephyr "src/system/zephyr/*.c") list(APPEND Sources ${Sources_Zephyr}) elseif(CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "Darwin" OR CMAKE_SYSTEM_NAME MATCHES "BSD") - file (GLOB Sources_Unix "src/system/unix/*.c") + file(GLOB Sources_Unix "src/system/unix/*.c") list(APPEND Sources ${Sources_Unix}) elseif(CMAKE_SYSTEM_NAME MATCHES "Emscripten") - file (GLOB Sources_Emscripten "src/system/emscripten/*.c") + file(GLOB Sources_Emscripten "src/system/emscripten/*.c") list(APPEND Sources ${Sources_Emscripten}) elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") - file (GLOB Sources_Windows "src/system/windows/*.c") + file(GLOB Sources_Windows "src/system/windows/*.c") list(APPEND Sources ${Sources_Windows}) endif() @@ -157,177 +179,175 @@ endif() # Build tests, examples, intallation only when project is root # if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) - -option(PACKAGING "Use option on Linux to produce Debian and RPM packages." OFF) -option(BUILD_EXAMPLES "Use this to also build the examples." ON) -option(BUILD_TOOLS "Use this to also build the tools." OFF) -option(BUILD_TESTING "Use this to also build tests." ON) -option(BUILD_INTEGRATION "Use this to also build integration tests." OFF) - -message(STATUS "Produce Debian and RPM packages: ${PACKAGING}") -message(STATUS "Build examples: ${BUILD_EXAMPLES}") -message(STATUS "Build tools: ${BUILD_TOOLS}") -message(STATUS "Build tests: ${BUILD_TESTING}") -message(STATUS "Build integration: ${BUILD_INTEGRATION}") - -install(TARGETS ${Libname} - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - COMPONENT Library -) -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/zenoh-pico.h - DESTINATION include - COMPONENT Headers -) -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/zenoh-pico - DESTINATION include - COMPONENT Headers -) - -if(BUILD_EXAMPLES) - add_subdirectory(examples) -endif() - -if(UNIX OR MSVC) - if(BUILD_TOOLS) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/tools) - add_executable(z_keyexpr_canonizer ${PROJECT_SOURCE_DIR}/tools/z_keyexpr_canonizer.c) - target_link_libraries(z_keyexpr_canonizer ${Libname}) + option(PACKAGING "Use option on Linux to produce Debian and RPM packages." OFF) + option(BUILD_EXAMPLES "Use this to also build the examples." ON) + option(BUILD_TOOLS "Use this to also build the tools." OFF) + option(BUILD_TESTING "Use this to also build tests." ON) + option(BUILD_INTEGRATION "Use this to also build integration tests." OFF) + + message(STATUS "Produce Debian and RPM packages: ${PACKAGING}") + message(STATUS "Build examples: ${BUILD_EXAMPLES}") + message(STATUS "Build tools: ${BUILD_TOOLS}") + message(STATUS "Build tests: ${BUILD_TESTING}") + message(STATUS "Build integration: ${BUILD_INTEGRATION}") + + install(TARGETS ${Libname} + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + COMPONENT Library + ) + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/zenoh-pico.h + DESTINATION include + COMPONENT Headers + ) + install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/zenoh-pico + DESTINATION include + COMPONENT Headers + ) + + if(BUILD_EXAMPLES) + add_subdirectory(examples) endif() - if(BUILD_TESTING) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/tests") - - add_executable(z_data_struct_test ${PROJECT_SOURCE_DIR}/tests/z_data_struct_test.c) - add_executable(z_endpoint_test ${PROJECT_SOURCE_DIR}/tests/z_endpoint_test.c) - add_executable(z_iobuf_test ${PROJECT_SOURCE_DIR}/tests/z_iobuf_test.c) - add_executable(z_msgcodec_test ${PROJECT_SOURCE_DIR}/tests/z_msgcodec_test.c) - add_executable(z_keyexpr_test ${PROJECT_SOURCE_DIR}/tests/z_keyexpr_test.c) - add_executable(z_api_null_drop_test ${PROJECT_SOURCE_DIR}/tests/z_api_null_drop_test.c) - add_executable(z_api_double_drop_test ${PROJECT_SOURCE_DIR}/tests/z_api_double_drop_test.c) - - target_link_libraries(z_data_struct_test ${Libname}) - target_link_libraries(z_endpoint_test ${Libname}) - target_link_libraries(z_iobuf_test ${Libname}) - target_link_libraries(z_msgcodec_test ${Libname}) - target_link_libraries(z_keyexpr_test ${Libname}) - target_link_libraries(z_api_null_drop_test ${Libname}) - target_link_libraries(z_api_double_drop_test ${Libname}) - - enable_testing() - add_test(z_data_struct_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/z_data_struct_test) - add_test(z_endpoint_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/z_endpoint_test) - add_test(z_iobuf_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/z_iobuf_test) - add_test(z_msgcodec_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/z_msgcodec_test) - add_test(z_keyexpr_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/z_keyexpr_test) - add_test(z_api_null_drop_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/z_api_null_drop_test) - add_test(z_api_double_drop_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/z_api_double_drop_test) - endif() - - if(BUILD_MULTICAST) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/tests") - - if(CMAKE_C_STANDARD MATCHES "11") - add_executable(z_peer_multicast_test ${PROJECT_SOURCE_DIR}/tests/z_peer_multicast_test.c) - target_link_libraries(z_peer_multicast_test ${Libname}) + if(UNIX OR MSVC) + if(BUILD_TOOLS) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/tools) + add_executable(z_keyexpr_canonizer ${PROJECT_SOURCE_DIR}/tools/z_keyexpr_canonizer.c) + target_link_libraries(z_keyexpr_canonizer ${Libname}) + endif() - configure_file(${PROJECT_SOURCE_DIR}/tests/multicast.sh ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/multicast.sh COPYONLY) + if(BUILD_TESTING) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/tests") + + add_executable(z_data_struct_test ${PROJECT_SOURCE_DIR}/tests/z_data_struct_test.c) + add_executable(z_endpoint_test ${PROJECT_SOURCE_DIR}/tests/z_endpoint_test.c) + add_executable(z_iobuf_test ${PROJECT_SOURCE_DIR}/tests/z_iobuf_test.c) + add_executable(z_msgcodec_test ${PROJECT_SOURCE_DIR}/tests/z_msgcodec_test.c) + add_executable(z_keyexpr_test ${PROJECT_SOURCE_DIR}/tests/z_keyexpr_test.c) + add_executable(z_api_null_drop_test ${PROJECT_SOURCE_DIR}/tests/z_api_null_drop_test.c) + add_executable(z_api_double_drop_test ${PROJECT_SOURCE_DIR}/tests/z_api_double_drop_test.c) + + target_link_libraries(z_data_struct_test ${Libname}) + target_link_libraries(z_endpoint_test ${Libname}) + target_link_libraries(z_iobuf_test ${Libname}) + target_link_libraries(z_msgcodec_test ${Libname}) + target_link_libraries(z_keyexpr_test ${Libname}) + target_link_libraries(z_api_null_drop_test ${Libname}) + target_link_libraries(z_api_double_drop_test ${Libname}) enable_testing() - add_test(z_peer_multicast_test bash ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/multicast.sh z_peer_multicast_test) + add_test(z_data_struct_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/z_data_struct_test) + add_test(z_endpoint_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/z_endpoint_test) + add_test(z_iobuf_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/z_iobuf_test) + add_test(z_msgcodec_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/z_msgcodec_test) + add_test(z_keyexpr_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/z_keyexpr_test) + add_test(z_api_null_drop_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/z_api_null_drop_test) + add_test(z_api_double_drop_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/z_api_double_drop_test) endif() - endif() - if(BUILD_INTEGRATION) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/tests") + if(BUILD_MULTICAST) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/tests") - if(CMAKE_C_STANDARD MATCHES "11") - add_executable(z_client_test ${PROJECT_SOURCE_DIR}/tests/z_client_test.c) - add_executable(z_api_alignment_test ${PROJECT_SOURCE_DIR}/tests/z_api_alignment_test.c) - add_executable(z_session_test ${PROJECT_SOURCE_DIR}/tests/z_session_test.c) + if(CMAKE_C_STANDARD MATCHES "11") + add_executable(z_peer_multicast_test ${PROJECT_SOURCE_DIR}/tests/z_peer_multicast_test.c) + target_link_libraries(z_peer_multicast_test ${Libname}) - target_link_libraries(z_client_test ${Libname}) - target_link_libraries(z_api_alignment_test ${Libname}) - target_link_libraries(z_session_test ${Libname}) + configure_file(${PROJECT_SOURCE_DIR}/tests/multicast.sh ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/multicast.sh COPYONLY) - configure_file(${PROJECT_SOURCE_DIR}/tests/routed.sh ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/routed.sh COPYONLY) - configure_file(${PROJECT_SOURCE_DIR}/tests/api.sh ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/api.sh COPYONLY) - - enable_testing() - add_test(z_client_test bash ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/routed.sh z_client_test) - add_test(z_api_alignment_test bash ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/api.sh z_api_alignment_test) - add_test(z_session_test bash ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/api.sh z_session_test) + enable_testing() + add_test(z_peer_multicast_test bash ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/multicast.sh z_peer_multicast_test) + endif() endif() - endif() -endif() -# For packaging -if(PACKAGING) - set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}/packages") - - set(CPACK_COMPONENTS_ALL Library Headers) - set(CPACK_COMPONENT_LIBRARY_GROUP "lib") - set(CPACK_COMPONENT_HEADERS_GROUP "dev") - set(CPACK_COMPONENT_HEADERS_DEPENDS Library) - - set(CPACK_PACKAGE_CHECKSUM MD5) - set(CPACK_PACKAGE_VENDOR "The Eclipse Foundation") - 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_COMPONENT_LIB_DESCRIPTION "The C client library for Eclipse zenoh targeting pico devices") - set(CPACK_COMPONENT_DEV_DESCRIPTION "${CPACK_COMPONENT_LIB_DESCRIPTION} - devel files") - - # Sources package - set(CPACK_SOURCE_GENERATOR "TGZ") - set(CPACK_SOURCE_IGNORE_FILES "/.git/;/.github/;/build/;/crossbuilds/") - set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-src-${PROJECT_VERSION}") - - if(PACKAGING MATCHES "DEB") - if(NOT DEBARCH) - set(DEBARCH ${CMAKE_SYSTEM_PROCESSOR}) - endif() + if(BUILD_INTEGRATION) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/tests") - message(STATUS "Configure DEB packaging for Linux ${DEBARCH}") + if(CMAKE_C_STANDARD MATCHES "11") + add_executable(z_client_test ${PROJECT_SOURCE_DIR}/tests/z_client_test.c) + add_executable(z_api_alignment_test ${PROJECT_SOURCE_DIR}/tests/z_api_alignment_test.c) + add_executable(z_session_test ${PROJECT_SOURCE_DIR}/tests/z_session_test.c) - if(CPACK_GENERATOR) - set(CPACK_GENERATOR "${CPACK_GENERATOR};DEB") - else() - set(CPACK_GENERATOR "DEB") - endif() + target_link_libraries(z_client_test ${Libname}) + target_link_libraries(z_api_alignment_test ${Libname}) + target_link_libraries(z_session_test ${Libname}) - # DEB package - set(CPACK_DEBIAN_PACKAGE_MAINTAINER "ZettaScale Zenoh Team, ") - set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${DEBARCH}) - set(CPACK_DEB_COMPONENT_INSTALL ON) - set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT) - set(CPACK_DEBIAN_LIB_PACKAGE_NAME ${PROJECT_NAME}) # avoid "-lib" suffix for "lib" package - set(CPACK_DEBIAN_LIB_PACKAGE_DEPENDS "libc6 (>=2.12)") - set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "${CPACK_DEBIAN_LIB_PACKAGE_NAME} (=${PROJECT_VERSION})") - endif() + configure_file(${PROJECT_SOURCE_DIR}/tests/routed.sh ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/routed.sh COPYONLY) + configure_file(${PROJECT_SOURCE_DIR}/tests/api.sh ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/api.sh COPYONLY) - if(PACKAGING MATCHES "RPM") - if(NOT RPMARCH) - set(RPMARCH ${CMAKE_SYSTEM_PROCESSOR}) + enable_testing() + add_test(z_client_test bash ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/routed.sh z_client_test) + add_test(z_api_alignment_test bash ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/api.sh z_api_alignment_test) + add_test(z_session_test bash ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/api.sh z_session_test) + endif() endif() + endif() - message(STATUS "Configure RPM packaging for Linux ${RPMARCH}") + # For packaging + if(PACKAGING) + set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}/packages") + + set(CPACK_COMPONENTS_ALL Library Headers) + set(CPACK_COMPONENT_LIBRARY_GROUP "lib") + set(CPACK_COMPONENT_HEADERS_GROUP "dev") + set(CPACK_COMPONENT_HEADERS_DEPENDS Library) + + set(CPACK_PACKAGE_CHECKSUM MD5) + set(CPACK_PACKAGE_VENDOR "The Eclipse Foundation") + 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_COMPONENT_LIB_DESCRIPTION "The C client library for Eclipse zenoh targeting pico devices") + set(CPACK_COMPONENT_DEV_DESCRIPTION "${CPACK_COMPONENT_LIB_DESCRIPTION} - devel files") + + # Sources package + set(CPACK_SOURCE_GENERATOR "TGZ") + set(CPACK_SOURCE_IGNORE_FILES "/.git/;/.github/;/build/;/crossbuilds/") + set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-src-${PROJECT_VERSION}") + + if(PACKAGING MATCHES "DEB") + if(NOT DEBARCH) + set(DEBARCH ${CMAKE_SYSTEM_PROCESSOR}) + endif() + + message(STATUS "Configure DEB packaging for Linux ${DEBARCH}") + + if(CPACK_GENERATOR) + set(CPACK_GENERATOR "${CPACK_GENERATOR};DEB") + else() + set(CPACK_GENERATOR "DEB") + endif() + + # DEB package + set(CPACK_DEBIAN_PACKAGE_MAINTAINER "ZettaScale Zenoh Team, ") + set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${DEBARCH}) + set(CPACK_DEB_COMPONENT_INSTALL ON) + set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT) + set(CPACK_DEBIAN_LIB_PACKAGE_NAME ${PROJECT_NAME}) # avoid "-lib" suffix for "lib" package + set(CPACK_DEBIAN_LIB_PACKAGE_DEPENDS "libc6 (>=2.12)") + set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "${CPACK_DEBIAN_LIB_PACKAGE_NAME} (=${PROJECT_VERSION})") + endif() - if(CPACK_GENERATOR) - set(CPACK_GENERATOR "${CPACK_GENERATOR};RPM") - else() - set(CPACK_GENERATOR "RPM") + if(PACKAGING MATCHES "RPM") + if(NOT RPMARCH) + set(RPMARCH ${CMAKE_SYSTEM_PROCESSOR}) + endif() + + message(STATUS "Configure RPM packaging for Linux ${RPMARCH}") + + if(CPACK_GENERATOR) + set(CPACK_GENERATOR "${CPACK_GENERATOR};RPM") + else() + set(CPACK_GENERATOR "RPM") + endif() + + # RPM package + set(CPACK_RPM_PACKAGE_ARCHITECTURE ${RPMARCH}) + set(CPACK_RPM_COMPONENT_INSTALL ON) + set(CPACK_RPM_FILE_NAME RPM-DEFAULT) + set(CPACK_RPM_LIB_PACKAGE_NAME ${PROJECT_NAME}) # avoid "-lib" suffix for "lib" package + set(CPACK_RPM_DEV_PACKAGE_REQUIRES "${CPACK_RPM_LIB_PACKAGE_NAME} = ${PROJECT_VERSION}") endif() - # RPM package - set(CPACK_RPM_PACKAGE_ARCHITECTURE ${RPMARCH}) - set(CPACK_RPM_COMPONENT_INSTALL ON) - set(CPACK_RPM_FILE_NAME RPM-DEFAULT) - set(CPACK_RPM_LIB_PACKAGE_NAME ${PROJECT_NAME}) # avoid "-lib" suffix for "lib" package - set(CPACK_RPM_DEV_PACKAGE_REQUIRES "${CPACK_RPM_LIB_PACKAGE_NAME} = ${PROJECT_VERSION}") + include(CPack) endif() - - include(CPack) -endif() - endif()