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:
John Freeman
2024-07-11 17:04:30 -05:00
committed by GitHub
parent e8602b81fa
commit f3bcc651c7
10 changed files with 210 additions and 66 deletions

View File

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

View File

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

View File

@@ -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:]]\+'

View File

@@ -91,6 +91,7 @@ target_link_libraries(xrpl.libxrpl
xxHash::xxhash xxHash::xxhash
) )
if(xrpld)
add_executable(rippled) add_executable(rippled)
if(unity) if(unity)
set_target_properties(rippled PROPERTIES UNITY_BUILD ON) set_target_properties(rippled PROPERTIES UNITY_BUILD ON)
@@ -145,3 +146,4 @@ if(tests)
src/test/ledger/Invariants_test.cpp src/test/ledger/Invariants_test.cpp
PROPERTIES SKIP_UNITY_BUILD_INCLUSION TRUE) PROPERTIES SKIP_UNITY_BUILD_INCLUSION TRUE)
endif() endif()
endif()

View File

@@ -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)
") ")
endif ()
if(NOT WIN32)
install(
CODE "file(CREATE_LINK xrpl \
\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/ripple SYMBOLIC)"
)
endif()
if(NOT WIN32) if(NOT WIN32)
install( install(
CODE "file(CREATE_LINK rippled${suffix} \ CODE "file(CREATE_LINK rippled${suffix} \
\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/xrpld${suffix} SYMBOLIC)" \${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/xrpld${suffix} SYMBOLIC)"
) )
endif() endif()
endif ()
install (
FILES
${CMAKE_CURRENT_SOURCE_DIR}/cmake/RippleConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/RippleConfigVersion.cmake
DESTINATION lib/cmake/ripple)

View File

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

View File

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

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

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

View 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;
}