diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ffd85ad5d..2b2243d34 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -161,22 +161,25 @@ jobs: run: | rm -rf ./build mkdir -p ./build && cd ./build - cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-armv7-unknown-linux-gnueabihf.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON .. + cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-armv7-unknown-linux-gnueabihf.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON -DZENOHC_BUILD_ZENOHD=ON .. cmake --build . --target examples + cmake --build . --target zenohd - name: Cross compile for x86_64-unknown-linux-gnu run: | rm -rf ./build mkdir -p ./build && cd ./build - cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-x86_64-unknown-linux-gnu.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON .. + cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-x86_64-unknown-linux-gnu.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON -DZENOHC_BUILD_ZENOHD=ON .. cmake --build . --target examples + cmake --build . --target zenohd - name: Cross compile for x86_64-pc-windows-gnu run: | rm -rf ./build mkdir -p ./build && cd ./build - cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-x86_64-pc-windows-gnu.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON .. + cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-x86_64-pc-windows-gnu.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON -DZENOHC_BUILD_ZENOHD=ON .. cmake --build . --target examples + cmake --build . --target zenohd cross-compile-ubuntu: name: Cross compile on ubuntu-latest @@ -217,43 +220,49 @@ jobs: run: | rm -rf ./build mkdir -p ./build && cd ./build - cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-arm-unknown-linux-gnueabi.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON .. + cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-arm-unknown-linux-gnueabi.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON -DZENOHC_BUILD_ZENOHD=ON .. cmake --build . --target examples + cmake --build . --target zenohd - name: Cross compile for arm-unknown-linux-gnueabihf run: | rm -rf ./build mkdir -p ./build && cd ./build - cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-arm-unknown-linux-gnueabihf.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON .. + cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-arm-unknown-linux-gnueabihf.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON -DZENOHC_BUILD_ZENOHD=ON .. cmake --build . --target examples + cmake --build . --target zenohd - name: Cross compile for aarch64-unknown-linux-gnu run: | rm -rf ./build mkdir -p ./build && cd ./build - cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-aarch64-unknown-linux-gnu.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON .. + cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-aarch64-unknown-linux-gnu.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON -DZENOHC_BUILD_ZENOHD=ON .. cmake --build . --target examples + cmake --build . --target zenohd - name: Cross compile for aarch64-unknown-linux-musl run: | rm -rf ./build mkdir -p ./build && cd ./build - cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-aarch64-unknown-linux-musl.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON .. + cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-aarch64-unknown-linux-musl.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON -DZENOHC_BUILD_ZENOHD=ON .. cmake --build . --target examples + cmake --build . --target zenohd - name: Cross compile for x86_64-unknown-linux-musl run: | rm -rf ./build mkdir -p ./build && cd ./build - cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-x86_64-unknown-linux-musl.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON .. + cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-x86_64-unknown-linux-musl.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON -DZENOHC_BUILD_ZENOHD=ON .. cmake --build . --target examples + cmake --build . --target zenohd - name: Cross compile for x86_64-pc-windows-gnu run: | rm -rf ./build mkdir -p ./build && cd ./build - cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-x86_64-pc-windows-gnu.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON .. + cmake -DCMAKE_TOOLCHAIN_FILE="../ci/toolchains/TC-x86_64-pc-windows-gnu.cmake" -DZENOHC_BUILD_WITH_SHARED_MEMORY=ON -DZENOHC_BUILD_WITH_UNSTABLE_API=ON -DZENOHC_BUILD_ZENOHD=ON .. cmake --build . --target examples + cmake --build . --target zenohd markdown_lint: runs-on: ubuntu-latest diff --git a/CMakeLists.txt b/CMakeLists.txt index da6be5e66..5aa3c8dda 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,6 +35,7 @@ declare_cache_var(ZENOHC_CARGO_CHANNEL "" STRING "Cargo channel parameter. Shoul declare_cache_var(ZENOHC_CARGO_FLAGS "" STRING "Additional cargo flags") declare_cache_var(BUILD_SHARED_LIBS TRUE BOOL "Alias zenohc::lib target to zenohc::shared if TRUE, to zenohc::static if FALSE") declare_cache_var(ZENOHC_TREAT_WARNING_AS_ERROR OFF BOOL "Whether to treat compilation warnings as errors") +declare_cache_var(ZENOHC_BUILD_ZENOHD OFF BOOL "Build zenohd") set(CMAKE_COMPILE_WARNING_AS_ERROR ${ZENOHC_TREAT_WARNING_AS_ERROR}) set(project_version "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") @@ -217,9 +218,11 @@ set_genexpr_condition(cargo_flags DEBUG $ "--manifest-path=${cargo_toml_dir_debug}/Cargo.toml" "--release;--manifest-path=${cargo_toml_dir_release}/Cargo.toml") set(cargo_flags ${cargo_flags} ${ZENOHC_CARGO_FLAGS}) +set(zenohd_cargo_flags ${ZENOHC_CARGO_FLAGS}) if(ZENOHC_BUILD_WITH_SHARED_MEMORY) set(cargo_flags ${cargo_flags} --features=shared-memory) + set(zenohd_cargo_flags ${zenohd_cargo_flags} --features=zenoh/shared-memory) elseif("${cargo_flags}" MATCHES ^.*shared-memory.*$) set(ZENOHC_BUILD_WITH_SHARED_MEMORY TRUE) message(STATUS "Due to ZENOHC_CARGO_FLAGS setting ZENOHC_BUILD_WITH_SHARED_MEMORY = TRUE") @@ -227,6 +230,7 @@ endif() if(ZENOHC_BUILD_WITH_UNSTABLE_API) set(cargo_flags ${cargo_flags} --features=unstable) + set(zenohd_cargo_flags ${zenohd_cargo_flags} --features=zenoh/unstable) elseif("${cargo_flags}" MATCHES ^.*unstable.*$) set(ZENOHC_BUILD_WITH_UNSTABLE_API TRUE) message(STATUS "Due to ZENOHC_CARGO_FLAGS setting ZENOHC_BUILD_WITH_UNSTABLE_API = TRUE") @@ -235,6 +239,7 @@ endif() if(NOT(ZENOHC_CUSTOM_TARGET STREQUAL "")) set(cargo_flags ${cargo_flags} --target=${ZENOHC_CUSTOM_TARGET}) + set(zenohd_cargo_flags ${zenohd_cargo_flags} --target=${ZENOHC_CUSTOM_TARGET}) endif() status_print(cargo_flags) @@ -311,6 +316,49 @@ else() add_library(zenohc::lib ALIAS zenohc_static) endif() +if (ZENOHC_BUILD_ZENOHD) + file(READ ${cargo_toml_dir}/Cargo.toml cargo_toml) + string(REGEX MATCH "zenoh *= *{([^}]*)" zenoh_info ${cargo_toml}) + set(zenoh_info ${CMAKE_MATCH_1}) + if (${zenoh_info} MATCHES "version *= *[\"']([^,}\"']*)") + set(zenohd_cargo_flags ${zenohd_cargo_flags} "--version=${CMAKE_MATCH_1}") + endif() + if (${zenoh_info} MATCHES "git *= *[\"']([^,}\"']*)") + set(zenohd_cargo_flags ${zenohd_cargo_flags} "--git=${CMAKE_MATCH_1}") + endif() + if (${zenoh_info} MATCHES "branch *= *[\"']([^,}\"']*)") + set(zenohd_cargo_flags ${zenohd_cargo_flags} "--branch=${CMAKE_MATCH_1}") + endif() + if (${zenoh_info} MATCHES "rev *= *[\"']([^,}\"']*)") + set(zenohd_cargo_flags ${zenohd_cargo_flags} "--rev=${CMAKE_MATCH_1}") + endif() + + add_custom_target( + zenohd ALL + DEPENDS zenohd_build + ) + add_executable(zenohc::zenohd IMPORTED) + add_dependencies(zenohc::zenohd zenohd) + set_target_properties(zenohc::zenohd + PROPERTIES + IMPORTED_GLOBAL TRUE + IMPORTED_LOCATION_DEBUG ${cargo_binary_dir_debug}/zenohd/bin/zenohd + IMPORTED_LOCATION_RELEASE ${cargo_binary_dir_release}/zenohd/bin/zenohd + IMPORTED_LOCATION_MINSIZEREL ${cargo_binary_dir_release}/zenohd/bin/zenohd + IMPORTED_LOCATION_RELWITHDEBINFO ${cargo_binary_dir_release}/zenohd/bin/zenohd + ) + set_genexpr_condition(zenohd_dir DEBUG $ ${cargo_binary_dir_debug}/zenohd ${cargo_binary_dir_release}/zenohd) + add_custom_command( + OUTPUT zenohd_build + COMMAND ${CMAKE_COMMAND} -E echo \"RUSTFLAGS = $$RUSTFLAGS\" + COMMAND ${CMAKE_COMMAND} -E echo \"cargo ${ZENOHC_CARGO_CHANNEL} install zenohd --root ${zenohd_dir} ${zenohd_cargo_flags}\" + COMMAND cargo ${ZENOHC_CARGO_CHANNEL} install zenohd --root ${zenohd_dir} ${zenohd_cargo_flags} + VERBATIM + COMMAND_EXPAND_LISTS + DEPENDS "${rust_sources}" + ) +endif() + # # Components included only if project is the root project diff --git a/install/CMakeLists.txt b/install/CMakeLists.txt index 85c8543b6..adf83b57d 100644 --- a/install/CMakeLists.txt +++ b/install/CMakeLists.txt @@ -40,6 +40,11 @@ function(install_zenohc_lib configurations property_postfix package_name) get_target_property(NATIVE_STATIC_LIBS zenohc::static INTERFACE_LINK_LIBRARIES) get_filename_component(STATICLIB ${staticlib_path} NAME) install(FILES ${staticlib_path} DESTINATION ${CMAKE_INSTALL_LIBDIR} CONFIGURATIONS ${configurations} COMPONENT dev) + + if (ZENOHC_BUILD_ZENOHD) + get_target_property(zenohd_path zenohc::zenohd IMPORTED_LOCATION_${property_postfix}) + install(PROGRAMS ${zenohd_path} DESTINATION ${CMAKE_INSTALL_BINDIR} CONFIGURATIONS ${configurations} COMPONENT lib) + endif() set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/${package_name}") @@ -47,7 +52,7 @@ function(install_zenohc_lib configurations property_postfix package_name) configure_package_config_file( "PackageConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${package_name}_${property_postfix}Config.cmake" - PATH_VARS CMAKE_INSTALL_INCLUDEDIR CMAKE_INSTALL_LIBDIR ZENOHC_INSTALL_DYLIBDIR + PATH_VARS CMAKE_INSTALL_INCLUDEDIR CMAKE_INSTALL_LIBDIR ZENOHC_INSTALL_DYLIBDIR CMAKE_INSTALL_BINDIR INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}") # Generate Version.cmake @@ -69,11 +74,8 @@ function(install_zenohc_lib configurations property_postfix package_name) CONFIGURATIONS ${configurations} RENAME ${package_name}ConfigVersion.cmake COMPONENT dev) - - endfunction() - # # Install headers # diff --git a/install/PackageConfig.cmake.in b/install/PackageConfig.cmake.in index 670f5385a..69b39ae74 100644 --- a/install/PackageConfig.cmake.in +++ b/install/PackageConfig.cmake.in @@ -16,6 +16,7 @@ set(ZENOHC_BUILD_WITH_UNSTABLE_API @ZENOHC_BUILD_WITH_UNSTABLE_API@) set(ZENOHC_BUILD_WITH_SHARED_MEMORY @ZENOHC_BUILD_WITH_SHARED_MEMORY@) +set(ZENOHC_BUILD_ZENOHD @ZENOHC_BUILD_ZENOHD@) if(NOT TARGET __zenohc_shared) @@ -41,6 +42,15 @@ if(NOT TARGET __zenohc_static) ) endif() +if(ZENOHC_BUILD_ZENOHD AND (NOT TARGET __zenohd)) + add_executable(__zenohd IMPORTED) + set_target_properties(__zenohd + PROPERTIES + IMPORTED_LOCATION "@PACKAGE_CMAKE_INSTALL_BINDIR@/zenohd" + ) + add_executable(zenohc::zenohd ALIAS __zenohd) +endif() + if(NOT TARGET zenohc::lib) if(@BUILD_SHARED_LIBS@) add_library(zenohc::lib ALIAS __zenohc_shared)