mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-27 14:35:52 +00:00
Add xrpld build option and Conan package test (#5052)
* Make xrpld target optional * Add job to test Conan recipe * [fold] address review comments * [fold] Enable tests in workflows * [fold] Rename with_xrpld option * [fold] Fix grep expression
This commit is contained in:
2
.github/actions/build/action.yml
vendored
2
.github/actions/build/action.yml
vendored
@@ -20,6 +20,8 @@ runs:
|
|||||||
${{ inputs.generator && format('-G "{0}"', inputs.generator) || '' }} \
|
${{ inputs.generator && format('-G "{0}"', inputs.generator) || '' }} \
|
||||||
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake \
|
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake \
|
||||||
-DCMAKE_BUILD_TYPE=${{ inputs.configuration }} \
|
-DCMAKE_BUILD_TYPE=${{ inputs.configuration }} \
|
||||||
|
-Dtests=TRUE \
|
||||||
|
-Dxrpld=TRUE \
|
||||||
${{ inputs.cmake-args }} \
|
${{ inputs.cmake-args }} \
|
||||||
..
|
..
|
||||||
- name: build
|
- name: build
|
||||||
|
|||||||
2
.github/actions/dependencies/action.yml
vendored
2
.github/actions/dependencies/action.yml
vendored
@@ -50,6 +50,8 @@ runs:
|
|||||||
conan install \
|
conan install \
|
||||||
--output-folder . \
|
--output-folder . \
|
||||||
--build missing \
|
--build missing \
|
||||||
|
--options tests=True \
|
||||||
|
--options xrpld=True \
|
||||||
--settings build_type=${{ inputs.configuration }} \
|
--settings build_type=${{ inputs.configuration }} \
|
||||||
..
|
..
|
||||||
- name: upload dependencies to remote
|
- name: upload dependencies to remote
|
||||||
|
|||||||
50
.github/workflows/nix.yml
vendored
50
.github/workflows/nix.yml
vendored
@@ -232,3 +232,53 @@ jobs:
|
|||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
attempt_limit: 5
|
attempt_limit: 5
|
||||||
attempt_delay: 210000 # in milliseconds
|
attempt_delay: 210000 # in milliseconds
|
||||||
|
|
||||||
|
conan:
|
||||||
|
needs: dependencies
|
||||||
|
runs-on: [self-hosted, heavy]
|
||||||
|
container: rippleci/rippled-build-ubuntu:aaf5e3e
|
||||||
|
env:
|
||||||
|
build_dir: .build
|
||||||
|
configuration: Release
|
||||||
|
steps:
|
||||||
|
- name: download cache
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: linux-gcc-${{ env.configuration }}
|
||||||
|
- name: extract cache
|
||||||
|
run: |
|
||||||
|
mkdir -p ~/.conan
|
||||||
|
tar -xzf conan.tar -C ~/.conan
|
||||||
|
- name: check environment
|
||||||
|
run: |
|
||||||
|
env | sort
|
||||||
|
echo ${PATH} | tr ':' '\n'
|
||||||
|
conan --version
|
||||||
|
cmake --version
|
||||||
|
- name: checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: dependencies
|
||||||
|
uses: ./.github/actions/dependencies
|
||||||
|
env:
|
||||||
|
CONAN_URL: http://18.143.149.228:8081/artifactory/api/conan/conan-non-prod
|
||||||
|
with:
|
||||||
|
configuration: ${{ env.configuration }}
|
||||||
|
- name: export
|
||||||
|
run: |
|
||||||
|
version=$(conan inspect --raw version .)
|
||||||
|
reference="xrpl/${version}@local/test"
|
||||||
|
conan remove -f ${reference} || true
|
||||||
|
conan export . local/test
|
||||||
|
echo "reference=${reference}" >> "${GITHUB_ENV}"
|
||||||
|
- name: build
|
||||||
|
run: |
|
||||||
|
cd examples/example
|
||||||
|
mkdir ${build_dir}
|
||||||
|
cd ${build_dir}
|
||||||
|
conan install .. --output-folder . \
|
||||||
|
--require-override ${reference} --build missing
|
||||||
|
cmake .. \
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=./build/${configuration}/generators/conan_toolchain.cmake \
|
||||||
|
-DCMAKE_BUILD_TYPE=${configuration}
|
||||||
|
cmake --build .
|
||||||
|
./example | grep '^[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+'
|
||||||
|
|||||||
@@ -91,57 +91,59 @@ target_link_libraries(xrpl.libxrpl
|
|||||||
xxHash::xxhash
|
xxHash::xxhash
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(rippled)
|
if(xrpld)
|
||||||
if(unity)
|
add_executable(rippled)
|
||||||
set_target_properties(rippled PROPERTIES UNITY_BUILD ON)
|
if(unity)
|
||||||
endif()
|
set_target_properties(rippled PROPERTIES UNITY_BUILD ON)
|
||||||
if(tests)
|
endif()
|
||||||
target_compile_definitions(rippled PUBLIC ENABLE_TESTS)
|
if(tests)
|
||||||
endif()
|
target_compile_definitions(rippled PUBLIC ENABLE_TESTS)
|
||||||
target_include_directories(rippled
|
endif()
|
||||||
PRIVATE
|
target_include_directories(rippled
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
|
PRIVATE
|
||||||
)
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
|
||||||
|
)
|
||||||
|
|
||||||
file(GLOB_RECURSE sources CONFIGURE_DEPENDS
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/xrpld/*.cpp"
|
|
||||||
)
|
|
||||||
target_sources(rippled PRIVATE ${sources})
|
|
||||||
|
|
||||||
if(tests)
|
|
||||||
file(GLOB_RECURSE sources CONFIGURE_DEPENDS
|
file(GLOB_RECURSE sources CONFIGURE_DEPENDS
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/test/*.cpp"
|
"${CMAKE_CURRENT_SOURCE_DIR}/src/xrpld/*.cpp"
|
||||||
)
|
)
|
||||||
target_sources(rippled PRIVATE ${sources})
|
target_sources(rippled PRIVATE ${sources})
|
||||||
endif()
|
|
||||||
|
|
||||||
target_link_libraries(rippled
|
if(tests)
|
||||||
Ripple::boost
|
file(GLOB_RECURSE sources CONFIGURE_DEPENDS
|
||||||
Ripple::opts
|
"${CMAKE_CURRENT_SOURCE_DIR}/src/test/*.cpp"
|
||||||
Ripple::libs
|
)
|
||||||
xrpl.libxrpl
|
target_sources(rippled PRIVATE ${sources})
|
||||||
)
|
endif()
|
||||||
exclude_if_included(rippled)
|
|
||||||
# define a macro for tests that might need to
|
|
||||||
# be exluded or run differently in CI environment
|
|
||||||
if(is_ci)
|
|
||||||
target_compile_definitions(rippled PRIVATE RIPPLED_RUNNING_IN_CI)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if(reporting)
|
target_link_libraries(rippled
|
||||||
set(suffix -reporting)
|
Ripple::boost
|
||||||
set_target_properties(rippled PROPERTIES OUTPUT_NAME rippled-reporting)
|
Ripple::opts
|
||||||
get_target_property(BIN_NAME rippled OUTPUT_NAME)
|
Ripple::libs
|
||||||
message(STATUS "Reporting mode build: rippled renamed ${BIN_NAME}")
|
xrpl.libxrpl
|
||||||
target_compile_definitions(rippled PRIVATE RIPPLED_REPORTING)
|
)
|
||||||
endif()
|
exclude_if_included(rippled)
|
||||||
|
# define a macro for tests that might need to
|
||||||
|
# be exluded or run differently in CI environment
|
||||||
|
if(is_ci)
|
||||||
|
target_compile_definitions(rippled PRIVATE RIPPLED_RUNNING_IN_CI)
|
||||||
|
endif ()
|
||||||
|
|
||||||
# any files that don't play well with unity should be added here
|
if(reporting)
|
||||||
if(tests)
|
set(suffix -reporting)
|
||||||
set_source_files_properties(
|
set_target_properties(rippled PROPERTIES OUTPUT_NAME rippled-reporting)
|
||||||
# these two seem to produce conflicts in beast teardown template methods
|
get_target_property(BIN_NAME rippled OUTPUT_NAME)
|
||||||
src/test/rpc/ValidatorRPC_test.cpp
|
message(STATUS "Reporting mode build: rippled renamed ${BIN_NAME}")
|
||||||
src/test/rpc/ShardArchiveHandler_test.cpp
|
target_compile_definitions(rippled PRIVATE RIPPLED_REPORTING)
|
||||||
src/test/ledger/Invariants_test.cpp
|
endif()
|
||||||
PROPERTIES SKIP_UNITY_BUILD_INCLUSION TRUE)
|
|
||||||
|
# any files that don't play well with unity should be added here
|
||||||
|
if(tests)
|
||||||
|
set_source_files_properties(
|
||||||
|
# these two seem to produce conflicts in beast teardown template methods
|
||||||
|
src/test/rpc/ValidatorRPC_test.cpp
|
||||||
|
src/test/rpc/ShardArchiveHandler_test.cpp
|
||||||
|
src/test/ledger/Invariants_test.cpp
|
||||||
|
PROPERTIES SKIP_UNITY_BUILD_INCLUSION TRUE)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -21,6 +21,13 @@ install(
|
|||||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(NOT WIN32)
|
||||||
|
install(
|
||||||
|
CODE "file(CREATE_LINK xrpl \
|
||||||
|
\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/ripple SYMBOLIC)"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
install (EXPORT RippleExports
|
install (EXPORT RippleExports
|
||||||
FILE RippleTargets.cmake
|
FILE RippleTargets.cmake
|
||||||
NAMESPACE Ripple::
|
NAMESPACE Ripple::
|
||||||
@@ -31,14 +38,9 @@ write_basic_package_version_file (
|
|||||||
VERSION ${rippled_version}
|
VERSION ${rippled_version}
|
||||||
COMPATIBILITY SameMajorVersion)
|
COMPATIBILITY SameMajorVersion)
|
||||||
|
|
||||||
if (is_root_project)
|
if (is_root_project AND TARGET rippled)
|
||||||
install (TARGETS rippled RUNTIME DESTINATION bin)
|
install (TARGETS rippled RUNTIME DESTINATION bin)
|
||||||
set_target_properties(rippled PROPERTIES INSTALL_RPATH_USE_LINK_PATH ON)
|
set_target_properties(rippled PROPERTIES INSTALL_RPATH_USE_LINK_PATH ON)
|
||||||
install (
|
|
||||||
FILES
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/cmake/RippleConfig.cmake
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/RippleConfigVersion.cmake
|
|
||||||
DESTINATION lib/cmake/ripple)
|
|
||||||
# sample configs should not overwrite existing files
|
# sample configs should not overwrite existing files
|
||||||
# install if-not-exists workaround as suggested by
|
# install if-not-exists workaround as suggested by
|
||||||
# https://cmake.org/Bug/view.php?id=12646
|
# https://cmake.org/Bug/view.php?id=12646
|
||||||
@@ -53,18 +55,16 @@ if (is_root_project)
|
|||||||
copy_if_not_exists(\"${CMAKE_CURRENT_SOURCE_DIR}/cfg/rippled-example.cfg\" etc rippled.cfg)
|
copy_if_not_exists(\"${CMAKE_CURRENT_SOURCE_DIR}/cfg/rippled-example.cfg\" etc rippled.cfg)
|
||||||
copy_if_not_exists(\"${CMAKE_CURRENT_SOURCE_DIR}/cfg/validators-example.txt\" etc validators.txt)
|
copy_if_not_exists(\"${CMAKE_CURRENT_SOURCE_DIR}/cfg/validators-example.txt\" etc validators.txt)
|
||||||
")
|
")
|
||||||
|
if(NOT WIN32)
|
||||||
|
install(
|
||||||
|
CODE "file(CREATE_LINK rippled${suffix} \
|
||||||
|
\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/xrpld${suffix} SYMBOLIC)"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if(NOT WIN32)
|
install (
|
||||||
install(
|
FILES
|
||||||
CODE "file(CREATE_LINK xrpl \
|
${CMAKE_CURRENT_SOURCE_DIR}/cmake/RippleConfig.cmake
|
||||||
\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/ripple SYMBOLIC)"
|
${CMAKE_CURRENT_BINARY_DIR}/RippleConfigVersion.cmake
|
||||||
)
|
DESTINATION lib/cmake/ripple)
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT WIN32)
|
|
||||||
install(
|
|
||||||
CODE "file(CREATE_LINK rippled${suffix} \
|
|
||||||
\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/xrpld${suffix} SYMBOLIC)"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ ProcessorCount(PROCESSOR_COUNT)
|
|||||||
|
|
||||||
option(assert "Enables asserts, even in release builds" OFF)
|
option(assert "Enables asserts, even in release builds" OFF)
|
||||||
|
|
||||||
|
option(xrpld "Build xrpld" ON)
|
||||||
|
|
||||||
option(reporting "Build rippled with reporting mode enabled" OFF)
|
option(reporting "Build rippled with reporting mode enabled" OFF)
|
||||||
|
|
||||||
option(tests "Build tests" ON)
|
option(tests "Build tests" ON)
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ class Xrpl(ConanFile):
|
|||||||
'static': [True, False],
|
'static': [True, False],
|
||||||
'tests': [True, False],
|
'tests': [True, False],
|
||||||
'unity': [True, False],
|
'unity': [True, False],
|
||||||
|
'xrpld': [True, False],
|
||||||
}
|
}
|
||||||
|
|
||||||
requires = [
|
requires = [
|
||||||
@@ -47,8 +48,9 @@ class Xrpl(ConanFile):
|
|||||||
'rocksdb': True,
|
'rocksdb': True,
|
||||||
'shared': False,
|
'shared': False,
|
||||||
'static': True,
|
'static': True,
|
||||||
'tests': True,
|
'tests': False,
|
||||||
'unity': False,
|
'unity': False,
|
||||||
|
'xrpld': False,
|
||||||
|
|
||||||
'cassandra-cpp-driver/*:shared': False,
|
'cassandra-cpp-driver/*:shared': False,
|
||||||
'cassandra-cpp-driver/*:use_atomic': None,
|
'cassandra-cpp-driver/*:use_atomic': None,
|
||||||
@@ -142,6 +144,7 @@ class Xrpl(ConanFile):
|
|||||||
tc.variables['BUILD_SHARED_LIBS'] = self.options.shared
|
tc.variables['BUILD_SHARED_LIBS'] = self.options.shared
|
||||||
tc.variables['static'] = self.options.static
|
tc.variables['static'] = self.options.static
|
||||||
tc.variables['unity'] = self.options.unity
|
tc.variables['unity'] = self.options.unity
|
||||||
|
tc.variables['xrpld'] = self.options.xrpld
|
||||||
tc.generate()
|
tc.generate()
|
||||||
|
|
||||||
def build(self):
|
def build(self):
|
||||||
|
|||||||
16
examples/example/CMakeLists.txt
Normal file
16
examples/example/CMakeLists.txt
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.21)
|
||||||
|
|
||||||
|
set(name example)
|
||||||
|
set(version 0.1.0)
|
||||||
|
|
||||||
|
project(
|
||||||
|
${name}
|
||||||
|
VERSION ${version}
|
||||||
|
LANGUAGES CXX
|
||||||
|
)
|
||||||
|
|
||||||
|
find_package(xrpl REQUIRED)
|
||||||
|
|
||||||
|
add_executable(example)
|
||||||
|
target_sources(example PRIVATE src/example.cpp)
|
||||||
|
target_link_libraries(example PRIVATE xrpl::libxrpl)
|
||||||
59
examples/example/conanfile.py
Normal file
59
examples/example/conanfile.py
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
from conan import ConanFile, conan_version
|
||||||
|
from conan.tools.cmake import CMake, cmake_layout
|
||||||
|
|
||||||
|
class Example(ConanFile):
|
||||||
|
|
||||||
|
def set_name(self):
|
||||||
|
if self.name is None:
|
||||||
|
self.name = 'example'
|
||||||
|
|
||||||
|
def set_version(self):
|
||||||
|
if self.version is None:
|
||||||
|
self.version = '0.1.0'
|
||||||
|
|
||||||
|
license = 'ISC'
|
||||||
|
author = 'John Freeman <jfreeman08@gmail.com>'
|
||||||
|
|
||||||
|
settings = 'os', 'compiler', 'build_type', 'arch'
|
||||||
|
options = {'shared': [True, False], 'fPIC': [True, False]}
|
||||||
|
default_options = {
|
||||||
|
'shared': False,
|
||||||
|
'fPIC': True,
|
||||||
|
'xrpl:xrpld': False,
|
||||||
|
}
|
||||||
|
|
||||||
|
requires = ['xrpl/2.2.0-rc1@jfreeman/nodestore']
|
||||||
|
generators = ['CMakeDeps', 'CMakeToolchain']
|
||||||
|
|
||||||
|
exports_sources = [
|
||||||
|
'CMakeLists.txt',
|
||||||
|
'cmake/*',
|
||||||
|
'external/*',
|
||||||
|
'include/*',
|
||||||
|
'src/*',
|
||||||
|
]
|
||||||
|
|
||||||
|
# For out-of-source build.
|
||||||
|
# https://docs.conan.io/en/latest/reference/build_helpers/cmake.html#configure
|
||||||
|
no_copy_source = True
|
||||||
|
|
||||||
|
def layout(self):
|
||||||
|
cmake_layout(self)
|
||||||
|
|
||||||
|
def config_options(self):
|
||||||
|
if self.settings.os == 'Windows':
|
||||||
|
del self.options.fPIC
|
||||||
|
|
||||||
|
def build(self):
|
||||||
|
cmake = CMake(self)
|
||||||
|
cmake.configure(variables={'BUILD_TESTING': 'NO'})
|
||||||
|
cmake.build()
|
||||||
|
|
||||||
|
def package(self):
|
||||||
|
cmake = CMake(self)
|
||||||
|
cmake.install()
|
||||||
|
|
||||||
|
def package_info(self):
|
||||||
|
path = f'{self.package_folder}/share/{self.name}/cpp_info.py'
|
||||||
|
with open(path, 'r') as file:
|
||||||
|
exec(file.read(), {}, {'self': self.cpp_info})
|
||||||
8
examples/example/src/example.cpp
Normal file
8
examples/example/src/example.cpp
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
#include <xrpl/protocol/BuildInfo.h>
|
||||||
|
|
||||||
|
int main(int argc, char const** argv) {
|
||||||
|
std::printf("%s\n", ripple::BuildInfo::getVersionString().c_str());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user