Commit 8bc4df63 authored by Alberto Miranda's avatar Alberto Miranda ♨️
Browse files

Merge branch 'rnou/16-integrate-redis-plus-plus-in-build-system' into 'main'

Resolve "Integrate redis-plus-plus in build system"

Closes #16

See merge request !18
parents b01ac81f a05835c0
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
# Compilation of scord and execution of tests

image: bscstorage/scord:0.1.0
image: bscstorage/scord:0.2.0-wip

stages:
  - build
+5 −0
Original line number Diff line number Diff line
@@ -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
# ##############################################################################
+117 −0
Original line number Diff line number Diff line
################################################################################
# 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 <https://www.gnu.org/licenses/>.              #
#                                                                              #
# 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()
+1 −1
Original line number Diff line number Diff line
.PHONY: all

all:
	docker build -t gekkofs/scord:0.1.0 .
	docker build -t bscstorage/scord:0.1.0 .
+109 −0
Original line number Diff line number Diff line
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
Loading