diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 87629b4b062be318626c217a978931863269eab8..917108978d4e7e8dda2c4bc50c03f348fe8c1f3b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,6 @@ # Compilation of scord and execution of tests -image: bscstorage/scord:0.1.0 +image: bscstorage/scord:0.2.0-wip stages: - build diff --git a/CMakeLists.txt b/CMakeLists.txt index c3db076a6c66d66b139c9c53779f9f9699517366..67f87693e075ce4c992db8c295074d438bf8e300 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -253,6 +253,11 @@ endif () ### variables. mark_variables_as_advanced(REGEX "^(FETCHCONTENT|fmt|FMT|spdlog|SPDLOG)_.*$") +### redisplusplus check +message(STATUS "[${PROJECT_NAME}] Checking for Redis Plus Plus") +find_package(RedisPlusPlus 1.3.3 REQUIRED) + + # ############################################################################## # Process subdirectories # ############################################################################## diff --git a/cmake/FindRedisPlusPlus.cmake b/cmake/FindRedisPlusPlus.cmake new file mode 100644 index 0000000000000000000000000000000000000000..38e337d8415dea3599a430e4224ae34884cce649 --- /dev/null +++ b/cmake/FindRedisPlusPlus.cmake @@ -0,0 +1,117 @@ +################################################################################ +# Copyright 2021-2022, Barcelona Supercomputing Center (BSC), Spain # +# # +# This software was partially supported by the EuroHPC-funded project ADMIRE # +# (Project ID: 956748, https://www.admire-eurohpc.eu). # +# # +# This file is part of scord. # +# # +# scord is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# scord is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with scord. If not, see . # +# # +# SPDX-License-Identifier: GPL-3.0-or-later # +################################################################################ + +#[=======================================================================[.rst: +FindRedisPlusPlus +--------- + +Find RedisPlusPlus include dirs and libraries. + +Use this module by invoking find_package with the form:: + + find_package(RedisPlusPlus + [version] [EXACT] # Minimum or EXACT version e.g. 0.6.2 + [REQUIRED] # Fail with error if yaml-cpp is not found + ) + +Imported Targets +^^^^^^^^^^^^^^^^ + +This module provides the following imported targets, if found: + +``RedisPlusPlus::RedisPlusPlus`` + The RedisPlusPlus library + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables: + +``RedisPlusPlus_FOUND`` + True if the system has the RedisPlusPlus library. +``RedisPlusPlus_VERSION`` + The version of the RedisPlusPlus library which was found. +``RedisPlusPlus_INCLUDE_DIRS`` + Include directories needed to use RedisPlusPlus. +``RedisPlusPlus_LIBRARIES`` + Libraries needed to link to RedisPlusPlus. + +Cache Variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``RedisPlusPlus_INCLUDE_DIR`` + The directory containing ``redis++.h``. +``RedisPlusPlus_LIBRARY`` + The path to the RedisPlusPlus library. + +#]=======================================================================] + + +find_package(PkgConfig) +pkg_check_modules(PC_RedisPlusPlus QUIET redisplusplus) + +find_path(RedisPlusPlus_INCLUDE_DIR + NAMES sw/redis++/redis++.h + PATHS ${PC_RedisPlusPlus_INCLUDE_DIRS} + PATH_SUFFIXES RedisPlusPlus +) + +find_library(RedisPlusPlus_LIBRARY + NAMES redis++ + PATHS ${PC_RedisPlusPlus_LIBRARY_DIRS} +) + +mark_as_advanced( + RedisPlusPlus_INCLUDE_DIR + RedisPlusPlus_LIBRARY +) + +set(RedisPlusPlus_VERSION ${PC_RedisPlusPlus_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(RedisPlusPlus + FOUND_VAR RedisPlusPlus_FOUND + REQUIRED_VARS + RedisPlusPlus_LIBRARY + RedisPlusPlus_INCLUDE_DIR + VERSION_VAR RedisPlusPlus_VERSION +) + +if(RedisPlusPlus_FOUND) + set(RedisPlusPlus_LIBRARIES ${RedisPlusPlus_LIBRARY}) + set(RedisPlusPlus_INCLUDE_DIRS ${RedisPlusPlus_INCLUDE_DIR}) + set(RedisPlusPlus_DEFINITIONS ${PC_RedisPlusPlus_CFLAGS_OTHER}) +endif() + +if(RedisPlusPlus_FOUND AND NOT TARGET RedisPlusPlus::RedisPlusPlus) + add_library(RedisPlusPlus::RedisPlusPlus UNKNOWN IMPORTED) + set_target_properties(RedisPlusPlus::RedisPlusPlus PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" + IMPORTED_LOCATION "${RedisPlusPlus_LIBRARY}" + INTERFACE_COMPILE_DEFINITIONS "${PC_RedisPlusPlus_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${RedisPlusPlus_INCLUDE_DIR}" +) +endif() diff --git a/docker/0.1.0/Makefile b/docker/0.1.0/Makefile index eca883294bf1514e4a584f4d4ea95231c20b04ee..d353b79c791a535b23405834c0d208a3b0728a69 100644 --- a/docker/0.1.0/Makefile +++ b/docker/0.1.0/Makefile @@ -1,4 +1,4 @@ .PHONY: all all: - docker build -t gekkofs/scord:0.1.0 . + docker build -t bscstorage/scord:0.1.0 . diff --git a/docker/0.2.0-wip/Dockerfile b/docker/0.2.0-wip/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..9a4f269b5db73ce7ce9a33de16464d4b09b5233e --- /dev/null +++ b/docker/0.2.0-wip/Dockerfile @@ -0,0 +1,109 @@ +FROM debian:bullseye-slim + +LABEL Description="Debian-based environment suitable to build scord" + +ENV INSTALL_PATH /usr/local + + +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + git \ + curl \ + ca-certificates \ + libtool \ + pkg-config \ + make \ + automake \ + gcc \ + g++ \ + procps \ + # AGIOS dependencies + libconfig-dev \ + # Mercury dependencies + libltdl-dev \ + lbzip2 \ + # Margo dependencies \ + libjson-c-dev \ + # GekkoFS dependencies + libboost-program-options-dev \ + uuid-dev \ + python3 \ + libyaml-dev libcurl4-openssl-dev procps \ + # genopts dependencies + python3-venv libhiredis-dev && \ + # install cmake 3.14 since it's needed for some dependencies + curl -OL https://github.com/Kitware/CMake/releases/download/v3.23.1/cmake-3.23.1-Linux-x86_64.sh && \ + chmod u+x ./cmake-3.23.1-Linux-x86_64.sh && \ + ./cmake-3.23.1-Linux-x86_64.sh --skip-license --prefix=${INSTALL_PATH} && \ + # Clean apt cache to reduce image layer size + rm -rf /var/lib/apt/lists/* && \ + # Clean apt caches of packages + apt-get clean && apt-get autoclean && \ + rm ./cmake-3.23.1-Linux-x86_64.sh && \ + cmake --version && \ + curl -OL https://github.com/jbeder/yaml-cpp/archive/refs/tags/yaml-cpp-0.6.2.tar.gz && \ + tar -xzf yaml-cpp-0.6.2.tar.gz && \ + cd yaml-cpp-yaml-cpp-0.6.2 && \ + mkdir build && \ + cd build && \ + cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_PATH} .. && \ + make -j install && \ + cd && \ + rm -rf yaml-cpp-yaml-cpp-0.6.2 && \ + mkdir deps && \ + cd deps && \ + git clone https://github.com/jbeder/yaml-cpp --recurse-submodules && \ + git clone https://github.com/json-c/json-c --recurse-submodules && \ + git clone https://github.com/ofiwg/libfabric --recurse-submodules && \ + git clone https://github.com/pmodels/argobots --recurse-submodules && \ + git clone https://github.com/mercury-hpc/mercury --recurse-submodules && \ + git clone https://github.com/mochi-hpc/mochi-margo --recurse-submodules && \ + git clone https://github.com/sewenew/redis-plus-plus --recurse-submodules && \ + export LD_LIBRARY_PATH=${INSTALL_PATH}/lib:${INSTALL_PATH}/lib64 && \ + export PKG_CONFIG_PATH=${INSTALL_PATH}/lib/pkgconfig:${INSTALL_PATH}/lib64/pkgconfig && \ + cd && \ + cd deps/yaml-cpp && \ + mkdir build && \ + cd build && \ + cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_PATH} -DYAML_CPP_BUILD_TESTS=OFF .. && \ + make -j install && \ + cd ../../ && \ + cd argobots && \ + ./autogen.sh && \ + ./configure --prefix=${INSTALL_PATH} && \ + make install -j && \ + cd .. && \ + cd libfabric && \ + ./autogen.sh && \ + ./configure --prefix=${INSTALL_PATH} && \ + make install -j && \ + cd .. && \ + cd mercury && \ + mkdir build && \ + cd build && \ + cmake -DMERCURY_USE_SELF_FORWARD:BOOL=ON -DBUILD_TESTING:BOOL=ON -DMERCURY_USE_BOOST_PP:BOOL=ON -DCMAKE_INSTALL_PREFIX=${INSTALL_PATH} -DBUILD_SHARED_LIBS:BOOL=ON -DNA_USE_OFI:BOOL=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE:STRING=Release .. && \ + make install -j && \ + cd ../.. && \ + cd json-c && \ + mkdir build && \ + cd build && \ + cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_PATH} .. && \ + make install -j && \ + cd ../../ && \ + cd mochi-margo && \ + ./prepare.sh && \ + PKG_CONFIG_PATH=${INSTALL_PATH}/lib/pkgconfig:${INSTALL_PATH}/lib64/pkgconfig ./configure --prefix=${INSTALL_PATH} && \ + make -j install && \ + cd && \ + cd deps/redis-plus-plus && \ + mkdir build && \ + cd build && \ + cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_PATH} .. && \ + make install -j && \ + cd ../../ && \ + cd && \ + rm -rf deps && \ + # Clean apt cache to reduce image layer size + rm -rf /var/lib/apt/lists/* && \ + # Clean apt caches of packages + apt-get clean && apt-get autoclean diff --git a/docker/0.2.0-wip/Makefile b/docker/0.2.0-wip/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..67260f17f04526b2682ca43598609c5b09e72b3f --- /dev/null +++ b/docker/0.2.0-wip/Makefile @@ -0,0 +1,4 @@ +.PHONY: all + +all: + docker build -t bscstorage/scord:0.2.0-wip . diff --git a/src/scord-ctl/CMakeLists.txt b/src/scord-ctl/CMakeLists.txt index 26dfc86b2fac4342ebd342c0736c427b141b8e8d..26ea4e213caa71846416d948b35ae251cd1481ad 100644 --- a/src/scord-ctl/CMakeLists.txt +++ b/src/scord-ctl/CMakeLists.txt @@ -36,7 +36,7 @@ target_include_directories( target_link_libraries( scord-ctl PRIVATE common::config common::logger common::network::rpc_server - scord_ctl_private_rpcs fmt::fmt Boost::program_options + scord_ctl_private_rpcs fmt::fmt Boost::program_options RedisPlusPlus::RedisPlusPlus ) install(TARGETS scord DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/src/scord/CMakeLists.txt b/src/scord/CMakeLists.txt index b7d7d6d134332229c77aa71e931696ac24c4f068..aad2746c192ee9fc800ec9b2c058c21df4d8d8c4 100644 --- a/src/scord/CMakeLists.txt +++ b/src/scord/CMakeLists.txt @@ -67,6 +67,7 @@ target_link_libraries( scord_private_rpcs fmt::fmt Boost::program_options + RedisPlusPlus::RedisPlusPlus ) install(TARGETS scord DESTINATION ${CMAKE_INSTALL_BINDIR})