From 2f0b3235eeda0cb7db6afa2fafbb3b83f426e81e Mon Sep 17 00:00:00 2001 From: Michael Legleux Date: Wed, 5 Jan 2022 07:36:56 -0800 Subject: [PATCH] CMake Refactor and Github Actions Hook --- .github/workflows/clio_ci.yml | 15 +++++ CMake/deps/Boost.cmake | 6 ++ {deps => CMake/deps}/Postgres.cmake | 23 +------ {deps => CMake/deps}/cassandra.cmake | 20 ++---- CMake/deps/gtest.cmake | 17 +++++ CMake/deps/rippled.cmake | 15 +++++ CMake/install/PostInstall.cmake | 4 ++ CMake/install/install.cmake | 7 ++ CMake/settings.cmake | 5 ++ CMake/version-config.h | 1 + CMakeLists.txt | 96 +++++++++------------------- 11 files changed, 105 insertions(+), 104 deletions(-) create mode 100644 .github/workflows/clio_ci.yml create mode 100644 CMake/deps/Boost.cmake rename {deps => CMake/deps}/Postgres.cmake (97%) rename {deps => CMake/deps}/cassandra.cmake (97%) create mode 100644 CMake/deps/gtest.cmake create mode 100644 CMake/deps/rippled.cmake create mode 100644 CMake/install/PostInstall.cmake create mode 100644 CMake/install/install.cmake create mode 100644 CMake/settings.cmake create mode 100644 CMake/version-config.h diff --git a/.github/workflows/clio_ci.yml b/.github/workflows/clio_ci.yml new file mode 100644 index 00000000..71ba1a04 --- /dev/null +++ b/.github/workflows/clio_ci.yml @@ -0,0 +1,15 @@ +name: Trigger clio-ci +on: [pull_request, push] +jobs: + dispatch_build_event: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Send build_packages repository_dispatch event to clio-ci + env: + GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }} + run: | + curl -H "Authorization: token $GITHUB_TOKEN" \ + -H 'Accept: application/vnd.github.v3+json' \ + "https://api.github.com/repos/legleux/clio-ci/dispatches" \ + -d '{"event_type": "build", "client_payload": {"SHA": "${{ github.sha }}"}}' \ No newline at end of file diff --git a/CMake/deps/Boost.cmake b/CMake/deps/Boost.cmake new file mode 100644 index 00000000..01495eb6 --- /dev/null +++ b/CMake/deps/Boost.cmake @@ -0,0 +1,6 @@ +set(Boost_USE_STATIC_LIBS ON) +set(Boost_USE_STATIC_RUNTIME ON) + +find_package(Boost 1.75 COMPONENTS filesystem log_setup log thread system REQUIRED) + +target_link_libraries(clio PUBLIC ${Boost_LIBRARIES}) diff --git a/deps/Postgres.cmake b/CMake/deps/Postgres.cmake similarity index 97% rename from deps/Postgres.cmake rename to CMake/deps/Postgres.cmake index b24a7798..f632b94c 100644 --- a/deps/Postgres.cmake +++ b/CMake/deps/Postgres.cmake @@ -1,16 +1,11 @@ - - find_package(PostgreSQL) if(NOT PostgreSQL_FOUND) message("find_package did not find postgres") - - find_library(postgres NAMES pq libpq libpq-dev pq-dev postgresql-devel) find_path(libpq-fe NAMES libpq-fe.h PATH_SUFFIXES postgresql pgsql include) if(NOT libpq-fe_FOUND OR NOT postgres_FOUND) message("No system installed Postgres found. Will build") - add_library(postgres SHARED IMPORTED GLOBAL) ExternalProject_Add(postgres_src PREFIX ${nih_cache_path} @@ -23,45 +18,29 @@ if(NOT PostgreSQL_FOUND) INSTALL_COMMAND "" BUILD_BYPRODUCTS /src/interfaces/libpq/${CMAKE_SHARED_LIBRARY_PREFIX}pq.so ) - - - ExternalProject_Get_Property (postgres_src SOURCE_DIR) ExternalProject_Get_Property (postgres_src BINARY_DIR) set (postgres_src_SOURCE_DIR "${SOURCE_DIR}") file (MAKE_DIRECTORY ${postgres_src_SOURCE_DIR}/src/include) file (MAKE_DIRECTORY ${postgres_src_SOURCE_DIR}/src/interfaces/libpq) - list(APPEND INCLUDE_DIRS ${SOURCE_DIR}/src/include) list(APPEND INCLUDE_DIRS ${SOURCE_DIR}/src/interfaces/libpq) - - set_target_properties (postgres PROPERTIES IMPORTED_LOCATION ${BINARY_DIR}/src/interfaces/libpq/${CMAKE_SHARED_LIBRARY_PREFIX}pq.so INTERFACE_INCLUDE_DIRECTORIES "${INCLUDE_DIRS}") add_dependencies(postgres postgres_src) - file(TO_CMAKE_PATH "${postgres_src_SOURCE_DIR}" postgres_src_SOURCE_DIR) - - target_link_libraries(clio PUBLIC postgres) + target_link_libraries(clio PUBLIC postgres) else() - message("Found system installed Postgres via find_libary") - target_include_directories(clio INTERFACE ${libpq-fe}) - target_link_libraries(clio INTERFACE ${postgres}) endif() - else() message("Found system installed Postgres via find_package") message("${PostgreSQL_INCLUDE_DIRS}") - include_directories(clio INTERFACE "${PostgreSQL_INCLUDE_DIRS}") - target_link_libraries(clio PUBLIC ${PostgreSQL_LIBRARIES}) endif() - - diff --git a/deps/cassandra.cmake b/CMake/deps/cassandra.cmake similarity index 97% rename from deps/cassandra.cmake rename to CMake/deps/cassandra.cmake index d34d7c79..fc1bcc4e 100644 --- a/deps/cassandra.cmake +++ b/CMake/deps/cassandra.cmake @@ -1,8 +1,8 @@ +find_package(ZLIB REQUIRED) + find_library(cassandra NAMES cassandra) if(NOT cassandra) - message("System installed Cassandra cpp driver not found. Will build") - find_library(zlib NAMES zlib1g-dev zlib-devel zlib z) if(NOT zlib) message("zlib not found. will build") @@ -14,28 +14,19 @@ if(NOT cassandra) INSTALL_COMMAND "" BUILD_BYPRODUCTS /${CMAKE_STATIC_LIBRARY_PREFIX}z.a ) - - ExternalProject_Get_Property (zlib_src SOURCE_DIR) ExternalProject_Get_Property (zlib_src BINARY_DIR) set (zlib_src_SOURCE_DIR "${SOURCE_DIR}") file (MAKE_DIRECTORY ${zlib_src_SOURCE_DIR}/include) - set_target_properties (zlib PROPERTIES IMPORTED_LOCATION ${BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}z.a INTERFACE_INCLUDE_DIRECTORIES ${SOURCE_DIR}/include) add_dependencies(zlib zlib_src) - file(TO_CMAKE_PATH "${zlib_src_SOURCE_DIR}" zlib_src_SOURCE_DIR) endif() - - - - find_library(krb5 NAMES krb5-dev libkrb5-dev) - if(NOT krb5) message("krb5 not found. will build") add_library(krb5 STATIC IMPORTED GLOBAL) @@ -48,23 +39,20 @@ if(NOT cassandra) BUILD_IN_SOURCE 1 BUILD_COMMAND make INSTALL_COMMAND "" - BUILD_BYPRODUCTS /lib/${CMAKE_STATIC_LIBRARY_PREFIX}krb5.a + BUILD_BYPRODUCTS /lib/${CMAKE_STATIC_LIBRARY_PREFIX}krb5.a ) message(${ep_lib_prefix}/krb5.a) - message(${CMAKE_STATIC_LIBRARY_PREFIX}krb5.a) - + message(${CMAKE_STATIC_LIBRARY_PREFIX}krb5.a) ExternalProject_Get_Property (krb5_src SOURCE_DIR) ExternalProject_Get_Property (krb5_src BINARY_DIR) set (krb5_src_SOURCE_DIR "${SOURCE_DIR}") file (MAKE_DIRECTORY ${krb5_src_SOURCE_DIR}/include) - set_target_properties (krb5 PROPERTIES IMPORTED_LOCATION ${SOURCE_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}krb5.a INTERFACE_INCLUDE_DIRECTORIES ${SOURCE_DIR}/include) add_dependencies(krb5 krb5_src) - file(TO_CMAKE_PATH "${krb5_src_SOURCE_DIR}" krb5_src_SOURCE_DIR) endif() diff --git a/CMake/deps/gtest.cmake b/CMake/deps/gtest.cmake new file mode 100644 index 00000000..b13415fb --- /dev/null +++ b/CMake/deps/gtest.cmake @@ -0,0 +1,17 @@ +FetchContent_Declare( + googletest + URL https://github.com/google/googletest/archive/609281088cfefc76f9d0ce82e1ff6c30cc3591e5.zip +) + +FetchContent_GetProperties(googletest) + +if(NOT googletest_POPULATED) + FetchContent_Populate(googletest) + add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR} EXCLUDE_FROM_ALL) +endif() + +target_link_libraries(clio_tests PUBLIC clio gtest_main) + +enable_testing() + +include(GoogleTest) \ No newline at end of file diff --git a/CMake/deps/rippled.cmake b/CMake/deps/rippled.cmake new file mode 100644 index 00000000..ca2ea0b4 --- /dev/null +++ b/CMake/deps/rippled.cmake @@ -0,0 +1,15 @@ +set(NIH_CACHE_ROOT "${CMAKE_CURRENT_BINARY_DIR}" CACHE INTERNAL "") +FetchContent_Declare(rippled + GIT_REPOSITORY https://github.com/cjcobb23/rippled.git + GIT_TAG clio + GIT_SHALLOW ON +) + +FetchContent_GetProperties(rippled) +if(NOT rippled_POPULATED) + FetchContent_Populate(rippled) + add_subdirectory(${rippled_SOURCE_DIR} ${rippled_BINARY_DIR} EXCLUDE_FROM_ALL) +endif() + +target_link_libraries(clio PUBLIC xrpl_core grpc_pbufs) +target_include_directories(clio PUBLIC ${rippled_SOURCE_DIR}/src ) # TODO: Seems like this shouldn't be needed? diff --git a/CMake/install/PostInstall.cmake b/CMake/install/PostInstall.cmake new file mode 100644 index 00000000..1b7191b1 --- /dev/null +++ b/CMake/install/PostInstall.cmake @@ -0,0 +1,4 @@ +execute_process( + COMMAND ln -s ${CMAKE_INSTALL_PREFIX}/${CLIO_INSTALL_DIR}/bin/clio_server /usr/local/bin/clio_server + COMMAND_ECHO STDOUT + ) \ No newline at end of file diff --git a/CMake/install/install.cmake b/CMake/install/install.cmake new file mode 100644 index 00000000..a1ee4b82 --- /dev/null +++ b/CMake/install/install.cmake @@ -0,0 +1,7 @@ +set(CLIO_INSTALL_DIR /opt/clio) +set(CMAKE_INSTALL_PREFIX ${CLIO_INSTALL_DIR}) + +install(TARGETS clio_server DESTINATION bin) +# install(TARGETS clio_tests DESTINATION bin) # NOTE: Do we want to install the tests? +install(FILES example-config.json DESTINATION etc/clio) +install(SCRIPT "${CMAKE_SOURCE_DIR}/CMake/install/PostInstall.cmake") diff --git a/CMake/settings.cmake b/CMake/settings.cmake new file mode 100644 index 00000000..d758986b --- /dev/null +++ b/CMake/settings.cmake @@ -0,0 +1,5 @@ +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-narrowing") \ No newline at end of file diff --git a/CMake/version-config.h b/CMake/version-config.h new file mode 100644 index 00000000..1e28545a --- /dev/null +++ b/CMake/version-config.h @@ -0,0 +1 @@ +#define VERSION "@PROJECT_VERSION@" \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index e143d012..cd1eb392 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,73 +1,30 @@ -set(CMAKE_VERBOSE_MAKEFILE TRUE) - -project(clio) cmake_minimum_required(VERSION 3.16) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -Wno-narrowing") -set(Boost_USE_STATIC_LIBS ON) -set(Boost_USE_MULTITHREADED ON) -set(Boost_USE_STATIC_RUNTIME ON) -if((NOT DEFINED BOOST_ROOT) AND(DEFINED ENV{BOOST_ROOT})) - set(BOOST_ROOT $ENV{BOOST_ROOT}) -endif() -file(TO_CMAKE_PATH "${BOOST_ROOT}" BOOST_ROOT) -find_package( Boost 1.75 COMPONENTS filesystem log_setup log thread system REQUIRED ) -message("Boost libraries: ${Boost_LIBRARIES}") +project(clio VERSION 0.1.0) + +option(VERBOSE "Verbose build" FALSE) +if(VERBOSE) + set(CMAKE_VERBOSE_MAKEFILE TRUE) + set(FETCHCONTENT_QUIET FALSE CACHE STRING "Verbose FetchContent()") +endif() + +add_library(clio) +target_include_directories(clio PUBLIC src) include(FetchContent) -FetchContent_Declare( - googletest - URL https://github.com/google/googletest/archive/609281088cfefc76f9d0ce82e1ff6c30cc3591e5.zip -) -FetchContent_MakeAvailable(googletest) +#include(CMake/deps/) # TODO: see if this works... +include(CMake/settings.cmake) +include(CMake/deps/rippled.cmake) +include(CMake/deps/Boost.cmake) +include(CMake/deps/cassandra.cmake) +include(CMake/deps/Postgres.cmake) -enable_testing() -include(GoogleTest) - -add_executable(clio_server - src/main.cpp -) -add_executable(clio_tests - unittests/main.cpp -) -add_library(clio) -include_directories(src) -list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/deps") - -message("Current binary dir: ${CMAKE_CURRENT_BINARY_DIR}") -message("Module path: ${CMAKE_MODULE_PATH}") - -set(FETCHCONTENT_QUIET FALSE) -set(NIH_CACHE_ROOT "${CMAKE_CURRENT_BINARY_DIR}" CACHE INTERNAL "") -FetchContent_Declare(rippled - GIT_REPOSITORY https://github.com/cjcobb23/rippled.git - GIT_TAG clio -) -FetchContent_MakeAvailable(rippled) - -target_link_libraries(clio PUBLIC xrpl_core grpc_pbufs) -add_dependencies(clio xrpl_core) -add_dependencies(clio grpc_pbufs) -get_target_property(grpc_includes grpc_pbufs INCLUDE_DIRECTORIES) - -message("GRPC includes: ${grpc_includes}") -message("Proto includes: ${proto_includes}") -message("Source dir: ${SOURCE_DIR}") -include_directories(${grpc_includes}) -include_directories(${SOURCE_DIR}/src) -include_directories(${SOURCE_DIR}/include) -get_target_property(xrpl_core_includes xrpl_core INCLUDE_DIRECTORIES) -message("XRPL core includes: ${xrpl_core_includes}") -include_directories(${xrpl_core_includes}) - -include(cassandra) -include(Postgres) +# configure_file(CMake/version-config.h include/version.h) # NOTE: Not used, but an idea how to handle versioning. target_sources(clio PRIVATE - ## Backend - src/backend/CassandraBackend.cpp - src/backend/PostgresBackend.cpp +## Backend +src/backend/CassandraBackend.cpp +src/backend/PostgresBackend.cpp src/backend/BackendInterface.cpp src/backend/Pg.cpp src/backend/DBHelpers.cpp @@ -112,9 +69,16 @@ target_sources(clio PRIVATE # Utility src/rpc/handlers/Random.cpp) -include_directories(${CMAKE_CURRENT_BINARY_DIR} ${Boost_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) -target_link_libraries(clio PUBLIC ${Boost_LIBRARIES}) +add_executable(clio_server src/main.cpp) target_link_libraries(clio_server PUBLIC clio) -target_link_libraries(clio_tests PUBLIC clio gtest_main) +#install(TARGETS clio_server DESTINATION bin) + +add_executable(clio_tests unittests/main.cpp) +include(CMake/deps/gtest.cmake) +## install(TARGETS clio_tests DESTINATION bin) # NOTE: Do we want to install the tests? + +#install(FILES example-config.json DESTINATION etc/clio) +include(CMake/install/install.cmake) gtest_discover_tests(clio_tests) +#install(SCRIPT "${CMAKE_SOURCE_DIR}/CMake/install/PostInstall.cmake")