CMake Refactor and Github Actions Hook

This commit is contained in:
Michael Legleux
2022-01-05 07:36:56 -08:00
committed by GitHub
parent aa65d1669d
commit 2f0b3235ee
11 changed files with 105 additions and 104 deletions

15
.github/workflows/clio_ci.yml vendored Normal file
View File

@@ -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 }}"}}'

6
CMake/deps/Boost.cmake Normal file
View File

@@ -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})

View File

@@ -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 <BINARY_DIR>/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()

View File

@@ -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 <BINARY_DIR>/${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 <SOURCE_DIR>/lib/${CMAKE_STATIC_LIBRARY_PREFIX}krb5.a
BUILD_BYPRODUCTS <SOURCE_DIR>/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()

17
CMake/deps/gtest.cmake Normal file
View File

@@ -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)

15
CMake/deps/rippled.cmake Normal file
View File

@@ -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?

View File

@@ -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
)

View File

@@ -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")

5
CMake/settings.cmake Normal file
View File

@@ -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")

1
CMake/version-config.h Normal file
View File

@@ -0,0 +1 @@
#define VERSION "@PROJECT_VERSION@"

View File

@@ -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")