diff --git a/CMakeLists.txt b/CMakeLists.txt index 5e2327b..315f665 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,8 +17,7 @@ set(RUST_TARGET_DIR "target/debug") file(GLOB_RECURSE CXXBRIDGE_HEADERS "${RUST_TARGET_DIR}/build/*lib.rs.h") file(GLOB_RECURSE CXXBRIDGE_SOURCES_ALL "${RUST_TARGET_DIR}/build/*lib.rs.cc") file(GLOB_RECURSE CXX_CORE_HEADER "${RUST_TARGET_DIR}/build/*/cxx.h") -file(GLOB RUST_STATIC_LIB "${RUST_TARGET_DIR}/libfluvio*.a") -list(GET RUST_STATIC_LIB 0 FLUVIO_STATIC_LIB) +set(FLUVIO_STATIC_LIB "${CMAKE_CURRENT_SOURCE_DIR}/${RUST_TARGET_DIR}/libfluvio_client_cpp.a") list(GET CXXBRIDGE_SOURCES_ALL 0 CXXBRIDGE_SOURCES) list(GET CXXBRIDGE_HEADERS 0 CXXBRIDGE_HEADER) @@ -27,71 +26,120 @@ list(GET CXX_CORE_HEADER 0 CXX_CORE_HDR) get_filename_component(CXX_CORE_DIR ${CXX_CORE_HDR} DIRECTORY) get_filename_component(CXX_ROOT_DIR ${CXX_CORE_DIR} DIRECTORY) -# Producer Test -add_executable(test_producer tests/test_producer.cpp ${CXXBRIDGE_SOURCES}) -target_include_directories(test_producer PRIVATE - ${CXXBRIDGE_HDR_DIR}/../.. - ${CXX_ROOT_DIR} +set(GENERATED_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated_include/fluvio_client_cpp) +file(MAKE_DIRECTORY ${GENERATED_INCLUDE_DIR}/rust) + +configure_file( + ${CXXBRIDGE_HEADER} + ${GENERATED_INCLUDE_DIR}/lib.rs.h + COPYONLY ) -target_link_libraries(test_producer PRIVATE - ${FLUVIO_STATIC_LIB} - pthread dl m + +configure_file( + ${CXX_CORE_HDR} + ${GENERATED_INCLUDE_DIR}/rust/cxx.h + COPYONLY ) -add_test(NAME fluvio_producer_test COMMAND test_producer) -# Consumer Test -add_executable(test_consumer tests/test_consumer.cpp ${CXXBRIDGE_SOURCES}) -target_include_directories(test_consumer PRIVATE - ${CXXBRIDGE_HDR_DIR}/../.. - ${CXX_ROOT_DIR} +add_library(fluvio_client_cpp STATIC ${CXXBRIDGE_SOURCES}) +add_library(ASTRAOS::fluvio_client_cpp ALIAS fluvio_client_cpp) + +target_link_libraries(fluvio_client_cpp + INTERFACE + $ + $ + pthread + ${CMAKE_DL_LIBS} ) -target_link_libraries(test_consumer PRIVATE - ${FLUVIO_STATIC_LIB} - pthread dl m + +target_include_directories(fluvio_client_cpp + PUBLIC + $ + $ + $ + + PRIVATE + ${CXXBRIDGE_HDR_DIR}/../.. + ${CXX_ROOT_DIR} ) + +# Producer Test +add_executable(test_producer tests/test_producer.cpp) +target_link_libraries(test_producer PRIVATE fluvio_client_cpp) +add_test(NAME fluvio_producer_test COMMAND test_producer) + +# Consumer Test +add_executable(test_consumer tests/test_consumer.cpp) +target_link_libraries(test_consumer PRIVATE fluvio_client_cpp) add_test(NAME fluvio_consumer_test COMMAND test_consumer) # Admin Test -add_executable(test_admin tests/test_admin.cpp ${CXXBRIDGE_SOURCES}) -target_include_directories(test_admin PRIVATE ${CXXBRIDGE_HDR_DIR}/../.. ${CXX_ROOT_DIR}) -target_link_libraries(test_admin PRIVATE - ${FLUVIO_STATIC_LIB} - pthread dl m -) +add_executable(test_admin tests/test_admin.cpp) +target_link_libraries(test_admin PRIVATE fluvio_client_cpp) add_test(NAME fluvio_admin_test COMMAND test_admin) # Config Test -add_executable(test_config tests/test_config.cpp ${CXXBRIDGE_SOURCES}) -target_include_directories(test_config PRIVATE ${CXXBRIDGE_HDR_DIR}/../.. ${CXX_ROOT_DIR}) -target_link_libraries(test_config PRIVATE - ${FLUVIO_STATIC_LIB} - pthread dl m -) +add_executable(test_config tests/test_config.cpp) +target_link_libraries(test_config PRIVATE fluvio_client_cpp) add_test(NAME fluvio_config_test COMMAND test_config) # Pure C Native Test add_executable(test_c tests/test_c.c) -target_include_directories(test_c PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) -target_link_libraries(test_c PRIVATE - ${FLUVIO_STATIC_LIB} - stdc++ pthread dl m -) +target_link_libraries(test_c PRIVATE fluvio_client_cpp) add_test(NAME fluvio_c_native_test COMMAND test_c) # Auth E2E CXX Test -add_executable(test_auth tests/test_auth.cpp ${CXXBRIDGE_SOURCES}) -target_include_directories(test_auth PRIVATE ${CXXBRIDGE_HDR_DIR}/../.. ${CXX_ROOT_DIR}) -target_link_libraries(test_auth PRIVATE - ${FLUVIO_STATIC_LIB} - pthread dl m -) +add_executable(test_auth tests/test_auth.cpp) +target_link_libraries(test_auth PRIVATE fluvio_client_cpp) add_test(NAME fluvio_auth_test COMMAND test_auth) # Auth E2E C Native Test add_executable(test_auth_c tests/test_auth_c.c) -target_include_directories(test_auth_c PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) -target_link_libraries(test_auth_c PRIVATE +target_link_libraries(test_auth_c PRIVATE fluvio_client_cpp) +add_test(NAME fluvio_auth_c_test COMMAND test_auth_c) + +# Installation +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) + +install(DIRECTORY + include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +install(DIRECTORY + ${CMAKE_CURRENT_BINARY_DIR}/generated_include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +install(FILES ${FLUVIO_STATIC_LIB} - stdc++ pthread dl m + DESTINATION ${CMAKE_INSTALL_LIBDIR} +) + +install(TARGETS fluvio_client_cpp + EXPORT fluvio_client_cppTargets + + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) + +install(EXPORT fluvio_client_cppTargets + FILE fluvio_client_cppTargets.cmake + NAMESPACE ASTRAOS:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/fluvio_client_cpp +) + +configure_package_config_file( + cmake/fluvio_client_cppConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/fluvio_client_cppConfig.cmake + INSTALL_DESTINATION + ${CMAKE_INSTALL_LIBDIR}/cmake/fluvio_client_cpp +) + +install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/fluvio_client_cppConfig.cmake + DESTINATION + ${CMAKE_INSTALL_LIBDIR}/cmake/fluvio_client_cpp ) -add_test(NAME fluvio_auth_c_test COMMAND test_auth_c) diff --git a/Cargo.toml b/Cargo.toml index 20c6d23..8c592d3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fluvio-client-cpp" -version = "0.1.0" +version = "0.2.0" edition = "2024" [lib] diff --git a/README.md b/README.md index 09fc2e9..3208b83 100644 --- a/README.md +++ b/README.md @@ -18,17 +18,24 @@ The public API follows the same object-oriented layout as the original Fluvio cl ## Installation -You can install the client effortlessly without compiling the heavy Rust toolchain by using `vcpkg`. +### vcpkg -```bash -vcpkg install fluvio-client-cpp -``` +> **Note** +> The vcpkg port is currently under development and is not yet available in the official vcpkg registry. + +Until then, use the CMake FetchContent method below. -In your `CMakeLists.txt`, simply find the package and link it: +You can build the library from source by fetching it during the CMake configure step and building it as part of your project: ```cmake -find_package(fluvio_client_cpp CONFIG REQUIRED) -target_link_libraries(main PRIVATE fluvio_client_cpp::fluvio_client_cpp) +include(FetchContent) +FetchContent_Declare( + fluvio_client_cpp + GIT_REPOSITORY https://github.com/ASTRAOS-de/fluvio-client-cpp.git +) +FetchContent_MakeAvailable(fluvio_client_cpp) + +target_link_libraries(main PRIVATE ASTRAOS::fluvio_client_cpp) ``` # Example Usage diff --git a/cmake/fluvio_client_cppConfig.cmake.in b/cmake/fluvio_client_cppConfig.cmake.in new file mode 100644 index 0000000..3e812b4 --- /dev/null +++ b/cmake/fluvio_client_cppConfig.cmake.in @@ -0,0 +1,3 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/fluvio_client_cppTargets.cmake") \ No newline at end of file diff --git a/fluvio_client_cppConfig.cmake b/fluvio_client_cppConfig.cmake deleted file mode 100644 index e29bd9d..0000000 --- a/fluvio_client_cppConfig.cmake +++ /dev/null @@ -1,10 +0,0 @@ -include(CMakeFindDependencyMacro) - -add_library(fluvio_client_cpp::fluvio_client_cpp STATIC IMPORTED) - -set_target_properties(fluvio_client_cpp::fluvio_client_cpp PROPERTIES - IMPORTED_LOCATION "${CMAKE_CURRENT_LIST_DIR}/target/debug/libfluvio_client_cpp.a" - INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_LIST_DIR}/include" -) - -set_property(TARGET fluvio_client_cpp::fluvio_client_cpp APPEND PROPERTY INTERFACE_LINK_LIBRARIES pthread dl m) diff --git a/include/fluvio.h b/include/fluvio_client_c/fluvio_client_c.h similarity index 100% rename from include/fluvio.h rename to include/fluvio_client_c/fluvio_client_c.h diff --git a/include/fluvio_client_cpp/fluvio_client_cpp.hpp b/include/fluvio_client_cpp/fluvio_client_cpp.hpp new file mode 100644 index 0000000..523a9e1 --- /dev/null +++ b/include/fluvio_client_cpp/fluvio_client_cpp.hpp @@ -0,0 +1,3 @@ +#pragma once + +#include "lib.rs.h" \ No newline at end of file diff --git a/tests/test_admin.cpp b/tests/test_admin.cpp index 95c6efa..e54b9c0 100644 --- a/tests/test_admin.cpp +++ b/tests/test_admin.cpp @@ -1,4 +1,4 @@ -#include "fluvio-client-cpp/src/lib.rs.h" +#include #include int main() { diff --git a/tests/test_auth.cpp b/tests/test_auth.cpp index 1d317e5..0cca3fc 100644 --- a/tests/test_auth.cpp +++ b/tests/test_auth.cpp @@ -1,6 +1,5 @@ -#include "fluvio-client-cpp/src/lib.rs.h" +#include #include -#include int main() { try { diff --git a/tests/test_auth_c.c b/tests/test_auth_c.c index b48db4c..9aea09a 100644 --- a/tests/test_auth_c.c +++ b/tests/test_auth_c.c @@ -1,4 +1,4 @@ -#include "fluvio.h" +#include #include int main() { diff --git a/tests/test_c.c b/tests/test_c.c index 00c4d78..0c69c90 100644 --- a/tests/test_c.c +++ b/tests/test_c.c @@ -1,4 +1,4 @@ -#include "fluvio.h" +#include #include #include diff --git a/tests/test_config.cpp b/tests/test_config.cpp index 6f81809..4156b58 100644 --- a/tests/test_config.cpp +++ b/tests/test_config.cpp @@ -1,4 +1,4 @@ -#include "fluvio-client-cpp/src/lib.rs.h" +#include #include int main() { diff --git a/tests/test_consumer.cpp b/tests/test_consumer.cpp index 6a39f6f..c357bb9 100644 --- a/tests/test_consumer.cpp +++ b/tests/test_consumer.cpp @@ -1,5 +1,4 @@ -#include "fluvio-client-cpp/src/lib.rs.h" -#include "rust/cxx.h" +#include #include int main() { diff --git a/tests/test_producer.cpp b/tests/test_producer.cpp index e20efc8..cb934fc 100644 --- a/tests/test_producer.cpp +++ b/tests/test_producer.cpp @@ -1,5 +1,4 @@ -#include "fluvio-client-cpp/src/lib.rs.h" -#include "rust/cxx.h" +#include #include int main() {