From 6e49a6f6b2a61ebbcb4f6f9c59533a6514ac2681 Mon Sep 17 00:00:00 2001 From: Michael <4115205+MelamudMichael@users.noreply.github.com> Date: Thu, 8 Feb 2024 17:27:10 +0200 Subject: [PATCH] Feature/first draft conan support (#8) * commiting * Update README.md * Update README.md * Update README.md * Update README.md * adding missing * updating * adjusting examples * Update README.md * Update README.md --------- Co-authored-by: Michael Melamud --- README.md | 44 ++++++++++++++++++------------ conanfile.py | 48 ++++++++++++++++++--------------- conaninfo/conanfile.txt | 13 ++++----- lib/CMakeLists.txt | 22 +++++++-------- samples/CMakeLists.txt | 3 ++- samples/conaninfo/conanfile.txt | 14 +++++----- samples/pubsub/CMakeLists.txt | 30 ++++++++++++--------- samples/rpc/CMakeLists.txt | 27 +++++++++++-------- 8 files changed, 113 insertions(+), 88 deletions(-) diff --git a/README.md b/README.md index 7b6578c..bdd42ad 100644 --- a/README.md +++ b/README.md @@ -12,47 +12,57 @@ This module contains the implementation for pub-sub and RPC API`s defined in the ### Requirements: - Compiler: GCC/G++ 11 or Clang 13 - Ubuntu 22.04 -- conan : 1.59 +- conan : 1.59 or latest 2.X #### Zenoh dependencies -At first to make it working, you have to install zenoh-c , using the following instructions https://github.com/eclipse-zenoh/zenoh-c/tree/master +1. install up-cpp library https://github.com/eclipse-uprotocol/up-cpp +2. install zenoh-c , using the following instructions https://github.com/eclipse-zenoh/zenoh-c/tree/master ``` $ git clone https://github.com/eclipse-uprotocol/up-client-zenoh-cpp.git ``` +## How to Use the Library +To add up-cpp to your conan build dependencies, simply add the following to your conanfile.txt: +``` +[requires] +up-cpp/0.1 +up-cpp-client-zenoh/0.1 +protobuf/3.21.12 + +[generators] +CMakeDeps +CMakeToolchain + +[layout] +cmake_layout -#### Building locally +``` +**NOTE:** If using conan version 1.59 Ensure that the conan profile is configured to use ABI 11 (libstdc++11: New ABI.) standards according to https://docs.conan.io/en/1.60/howtos/manage_gcc_abi.html +### Building locally ``` $ cd up-cpp-client-zenoh -$ mkdir build -$ cd build -$ conan install ../conaninfo -$ cmake ../ +$ conan install conaninfo/ --output-folder=. +$ cd build/Release +$ cmake ../../ -DCMAKE_TOOLCHAIN_FILE=generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release $ make -j ``` #### Creating conan package locally -ensure that the conan profile is configured to use ABI 11 (libstdc++11: New ABI.) standards according to https://docs.conan.io/en/1.60/howtos/manage_gcc_abi.html ``` $ cd up-cpp-client-zenoh -$ conan create . --build=missing +$ conan create . ``` - #### Compiling sample apps - -ensure that the conan profile is configured to use ABI 11 (libstdc++11: New ABI.) standards according to https://docs.conan.io/en/1.60/howtos/manage_gcc_abi.html ``` $ cd up-cpp-client-zenoh -$ cd samples -$ mkdir build -$ cd build -$ conan install ../conaninfo -$ cmake ../ +$ conan install samples/conaninfo/ --output-folder=. +$ cd build/Release +$ cmake ../../ -DCMAKE_TOOLCHAIN_FILE=generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release $ make -j ``` diff --git a/conanfile.py b/conanfile.py index 3f2fb40..de1d6e4 100644 --- a/conanfile.py +++ b/conanfile.py @@ -1,35 +1,39 @@ -from conan import ConanFile, tools -from conans import ConanFile, CMake +from conan import ConanFile +from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout +from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, replace_in_file, rm, rmdir +import os -from conan.tools.cmake import CMakeToolchain, CMake, cmake_layout -import shutil - -class up_client_zenog_cpp(ConanFile): +class UpClientZenoh(ConanFile): name = "up-client-zenoh-cpp" - version = "0.1" - - # Optional metadata + package_type = "library" license = "Apache-2.0 license" - url = "https://github.com/eclipse-uprotocol/up-client-zenoh-cpp" + homepage = "https://github.com/eclipse-uprotocol" + url = "https://github.com/conan-io/conan-center-index" description = "C++ uLink Library for zenoh transport" - + topics = ("ulink client", "transport") # Binary configuration settings = "os", "compiler", "build_type", "arch" - options = {"shared": [True, False], "fPIC": [False, False]} - default_options = {"shared": True, "fPIC": False} - - # Sources are located in the same place as this recipe, copy them to the recipe - exports_sources = "CMakeLists.txt", "lib/*" - requires = [ - "up-cpp/0.1" - ] + options = {"shared": [True, False], "fPIC": [True, False]} + conan_version = None generators = "CMakeDeps" + version = "0.1" + exports_sources = "CMakeLists.txt", "lib/*" + + options = { + "shared": [True, False], + "fPIC": [True, False], + } + + default_options = { + "shared": False, + "fPIC": False, + } def requirements(self): self.requires("up-cpp/0.1") - - def layout(self): - cmake_layout(self) + self.requires("spdlog/1.13.0") + self.requires("fmt/10.2.1") + self.requires("protobuf/3.21.12") def generate(self): tc = CMakeToolchain(self) diff --git a/conaninfo/conanfile.txt b/conaninfo/conanfile.txt index 2c2a277..d4f5ad4 100644 --- a/conaninfo/conanfile.txt +++ b/conaninfo/conanfile.txt @@ -1,10 +1,11 @@ [requires] up-cpp/0.1 - +protobuf/3.21.12 +spdlog/1.13.0 + [generators] -cmake_paths -cmake_find_package +CMakeDeps +CMakeToolchain -[imports] -up-core-api, *.h -> ./up-core-api -include, *.h -> ./include \ No newline at end of file +[layout] +cmake_layout \ No newline at end of file diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 7b19742..d31fd79 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,29 +1,27 @@ cmake_minimum_required(VERSION 3.20) -project(up-client-zenoh-cpp_lib LANGUAGES CXX) +project(up-client-zenoh-cpp LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) -# Using the "cmake_find_package" and "cmake_paths" generators -if (EXISTS ${CMAKE_BINARY_DIR}/conan_paths.cmake) - include(${CMAKE_BINARY_DIR}/conan_paths.cmake) -endif() - -include_directories(include) -include_directories(${CMAKE_CURRENT_BINARY_DIR}/include) - find_library(ZENOH_LIB zenohc) find_package(up-cpp REQUIRED) +find_package(Protobuf REQUIRED) +find_package(spdlog REQUIRED) add_definitions(-DSPDLOG_FMT_EXTERNAL) add_library( - up-client-zenoh-cpp SHARED + ${PROJECT_NAME} SHARED src/zenohUTransport.cpp src/zenohRpcClient.cpp src/zenohSessionManager.cpp src/messageBuilder.cpp src/messageParser.cpp) -target_link_libraries(up-client-zenoh-cpp PRIVATE up-cpp::up-cpp ${ZENOH_LIB}) -INSTALL(TARGETS up-client-zenoh-cpp) +target_include_directories(${PROJECT_NAME} PRIVATE + ${up-cpp_INCLUDE_DIR} + include) + +target_link_libraries(${PROJECT_NAME} PRIVATE up-cpp::up-cpp ${ZENOH_LIB}) +INSTALL(TARGETS ${PROJECT_NAME}) INSTALL(DIRECTORY include DESTINATION .) \ No newline at end of file diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 6d124c0..2c7017f 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -1,4 +1,5 @@ -project(demo LANGUAGES CXX) +cmake_minimum_required(VERSION 3.20) +project(samples LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) diff --git a/samples/conaninfo/conanfile.txt b/samples/conaninfo/conanfile.txt index 6053d61..9efe70e 100644 --- a/samples/conaninfo/conanfile.txt +++ b/samples/conaninfo/conanfile.txt @@ -1,11 +1,13 @@ [requires] up-cpp/0.1 up-client-zenoh-cpp/0.1 - +protobuf/3.21.12 +spdlog/1.13.0 + [generators] -cmake_paths -cmake_find_package +CMakeDeps +CMakeToolchain + +[layout] +cmake_layout -[imports] -up-core-api, *.h -> ./up-core-api -include, *.h -> ./include \ No newline at end of file diff --git a/samples/pubsub/CMakeLists.txt b/samples/pubsub/CMakeLists.txt index 7b01838..59fc438 100644 --- a/samples/pubsub/CMakeLists.txt +++ b/samples/pubsub/CMakeLists.txt @@ -1,17 +1,14 @@ cmake_minimum_required(VERSION 3.20) -project(demo LANGUAGES CXX) +project(pubsub LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) -include(${CMAKE_BINARY_DIR}/conan_paths.cmake) - -include_directories(${CMAKE_CURRENT_BINARY_DIR}/include) - find_library(ZENOH_LIB zenohc) find_package(up-cpp REQUIRED) find_package(up-client-zenoh-cpp REQUIRED) find_package(fmt REQUIRED) find_package(spdlog REQUIRED) +find_package(Protobuf REQUIRED) add_definitions(-DSPDLOG_FMT_EXTERNAL) @@ -23,19 +20,26 @@ target_link_libraries( sub up-client-zenoh-cpp::up-client-zenoh-cpp up-cpp::up-cpp - ${ZENOH_LIB} - fmt - spdlog::spdlog) + fmt::fmt + spdlog::spdlog + ${ZENOH_LIB}) + +target_include_directories(sub PRIVATE + ${up-client-zenoh-cpp_INCLUDE_DIR} + ${spdlog_INCLUDE_DIR}) -#rpc client add_executable( pub src/main_pub.cpp) - + target_link_libraries( pub up-client-zenoh-cpp::up-client-zenoh-cpp up-cpp::up-cpp - ${ZENOH_LIB} - fmt - spdlog::spdlog) + fmt::fmt + spdlog::spdlog + ${ZENOH_LIB}) + +target_include_directories(pub PRIVATE + ${up-client-zenoh-cpp_INCLUDE_DIR} + ${spdlog_INCLUDE_DIR}) \ No newline at end of file diff --git a/samples/rpc/CMakeLists.txt b/samples/rpc/CMakeLists.txt index 919a368..6ec2f81 100644 --- a/samples/rpc/CMakeLists.txt +++ b/samples/rpc/CMakeLists.txt @@ -1,17 +1,14 @@ cmake_minimum_required(VERSION 3.20) -project(demo LANGUAGES CXX) +project(rpc LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) -include(${CMAKE_BINARY_DIR}/conan_paths.cmake) - -include_directories(${CMAKE_CURRENT_BINARY_DIR}/include) - find_library(ZENOH_LIB zenohc) find_package(up-cpp REQUIRED) find_package(up-client-zenoh-cpp REQUIRED) find_package(fmt REQUIRED) find_package(spdlog REQUIRED) +find_package(Protobuf REQUIRED) add_definitions(-DSPDLOG_FMT_EXTERNAL) @@ -23,9 +20,13 @@ target_link_libraries( rpc_server up-client-zenoh-cpp::up-client-zenoh-cpp up-cpp::up-cpp - ${ZENOH_LIB} - fmt - spdlog::spdlog) + fmt::fmt + spdlog::spdlog + ${ZENOH_LIB}) + +target_include_directories(rpc_server PRIVATE + ${up-client-zenoh-cpp_INCLUDE_DIR} + ${spdlog_INCLUDE_DIR}) #rpc client add_executable( @@ -36,6 +37,10 @@ target_link_libraries( rpc_client up-client-zenoh-cpp::up-client-zenoh-cpp up-cpp::up-cpp - ${ZENOH_LIB} - fmt - spdlog::spdlog) + fmt::fmt + spdlog::spdlog + ${ZENOH_LIB}) + +target_include_directories(rpc_client PRIVATE + ${up-client-zenoh-cpp_INCLUDE_DIR} + ${spdlog_INCLUDE_DIR}) \ No newline at end of file