Verified Commit cd8383a0 authored by Alberto Miranda's avatar Alberto Miranda ♨️
Browse files

Add configuration profiles to dl_dep.sh

parent 3fae104e
Loading
Loading
Loading
Loading
+262 −222
Original line number Diff line number Diff line
@@ -28,43 +28,19 @@
################################################################################

COMMON_CURL_FLAGS="--silent --fail --show-error --location -O"
COMMON_GIT_FLAGS="--quiet --single-branch"
COMMON_GIT_FLAGS="--quiet --single-branch -c advice.detachedHead=false"
PATCH_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PATCH_DIR="${PATCH_DIR}/patches"
DEPENDENCY=""
NA_LAYER=""
DEP_CONFIG=""
VERBOSE=false

VALID_DEP_OPTIONS="mogon2 mogon1 ngio direct all ci"

MOGON1_DEPS=(
    "zstd" "lz4" "snappy" "capstone" "ofi-verbs" "mercury" "argobots" "margo" "rocksdb"
    "syscall_intercept" "date"
)

MOGON2_DEPS=(
    "bzip2" "zstd" "lz4" "snappy" "capstone" "ofi-experimental" "mercury" "argobots" "margo" "rocksdb-experimental"
    "syscall_intercept" "date" "psm2"
)

NGIO_DEPS=(
    "zstd" "lz4" "snappy" "capstone" "ofi-experimental" "mercury" "argobots" "margo" "rocksdb"
    "syscall_intercept" "date" "psm2" "agios"

)
DIRECT_DEPS=(
    "ofi" "mercury" "argobots" "margo" "rocksdb" "syscall_intercept" "date"
)

ALL_DEPS=(
    "bzip2" "zstd" "lz4" "snappy" "capstone" "bmi" "ofi" "mercury" "argobots" "margo" "rocksdb"
    "syscall_intercept" "date" "agios"
)

CI_DEPS=(
    "ofi" "mercury" "argobots" "margo" "rocksdb" "syscall_intercept" "date" "agios"
)
DEFAULT_PROFILE="default"
DEFAULT_VERSION="latest"
PROFILES_DIR="${PWD}/profiles"
SOURCES_FILE="${PROFILES_DIR}/sources.list"
declare -a PROFILE_DEP_NAMES
declare -A PROFILE_WGETDEPS PROFILE_CLONEDEPS PROFILE_SOURCES
declare -A PROFILE_CLONEDEPS_ARGS PROFILE_CLONEDEPS_PATCHES

# Stop all backround jobs on interruption.
# "kill -- -$$" sends a SIGTERM to the whole process group,
@@ -85,61 +61,171 @@ error_exit() {
    exit "${2:-1}" ## Return a code specified by $2 or 1 by default.
}

list_dependencies() {
list_versions() {

    if [[ ! -d "${PROFILES_DIR}" ]]; then
        echo "Directory '${PROFILES_DIR}' does not exist. No profiles available."
        exit 1
    fi

    declare -A versions

    echo "Available dependencies: "
    while IFS= read -r -d '' filename; do
        id="$(basename $(dirname ${filename}))"
        profile="$(basename ${filename%%.specs})"

    echo -n "  Mogon 1: "
    for d in "${MOGON1_DEPS[@]}"; do
        echo -n "$d "
    done
    echo
    echo -n "  Mogon 2: "
    for d in "${MOGON2_DEPS[@]}"; do
        echo -n "$d "
    done
    echo
    echo -n "  NGIO: "
    for d in "${NGIO_DEPS[@]}"; do
        echo -n "$d "
    done
    echo
    echo -n "  Direct GekkoFS dependencies: "
    for d in "${DIRECT_DEPS[@]}"; do
        echo -n "$d "
        versions[$id]+="${profile} "
    done < <(find -L "${PROFILES_DIR}" -type f -name "*.specs" -print0 | sort -z) 

    echo -e "Available versions and configuration profiles:\n"

    for id in "${!versions[@]}"; do
        echo "  ${id}:"
        echo -e "    ${versions[${id}]}\n"
    done
    echo
    echo -n "  All: "
    for d in "${ALL_DEPS[@]}"; do
        echo -n "$d "

    exit 0
}

list_profiles() {

    local TAG=$1

    if [[ "$TAG" =~ ^(.*):(.*)$ ]]; then
        PROFILE="${BASH_REMATCH[1]}.specs"

        if [[ -n ${BASH_REMATCH[2]} ]]; then
            VERSION="${BASH_REMATCH[2]}"
        else
            VERSION="latest"
        fi

    else
        VERSION="${TAG}"
    fi

    if [[ ! -d "${PROFILES_DIR}" ]]; then
        echo "Directory '${PROFILES_DIR}' does not exist. No configuration profiles found."
        exit 1
    fi

    if [[ ! -d "${PROFILES_DIR}/${VERSION}" ]]; then
        echo "Version ${VERSION} does not exist. No configuration profiles found."
        exit 1
    fi

    echo -e "Configuration profiles for '${VERSION}':\n"

    find "${PROFILES_DIR}/${VERSION}/${PROFILE}" -type f -name "*.specs" -print0 | sort -z | while IFS= read -r -d '' filename; do
        basename=$(basename "${filename}")
        version=$(basename $(dirname "${filename}"))
        profile="${basename%.*}"

        echo "* ${profile}:${version} (${filename})"

        source "${filename}"

        if [[ -n "${comment}" ]]; then
            echo -e "\n  ${comment}\n"
        fi

        for d in "${order[@]}";
        do
            if [[ -n ${wgetdeps[${d}]} ]]; then
                echo "    ${d}: ${wgetdeps[${d}]}"
            elif [[ -n ${clonedeps[${d}]} ]]; then
                echo "    ${d}: ${clonedeps[${d}]}"
            else
                echo "    ${d}: ???"
            fi
        done
    echo
    echo -n "  ci: "
    for d in "${CI_DEPS[@]}"; do
        echo -n "$d "

        echo ""

        unset wgetdeps
        unset clonedeps
        unset clonedeps_args
        unset clonedeps_patches
        unset comment
        unset order
    done
    echo
    exit 0

}

check_dependency() {
    local DEP=$1
load_profile() {

    local profile=$1
    local version=$2
    shift
    local DEP_CONFIG=("$@")
    # ignore template when specific dependency is set
    if [[ -n "${DEPENDENCY}" ]]; then
        # check if specific dependency was set and return from function
        if echo "${DEPENDENCY}" | grep -q "${DEP}"; then
            return

    # make sure we are in a known state
    PROFILE_DEP_NAMES=()
    PROFILE_CLONEDEPS=()
    PROFILE_CLONEDEPS_ARGS=()
    PROFILE_CLONEDEPS_PATCHES=()
    PROFILE_WGETDEPS=()

    local filename="${PROFILES_DIR}/${version}/${profile}.specs"

    if [[ ! -f "${filename}" ]]; then
        echo "Profile '${profile}:${version}' does not exist."
        exit 1
    fi
    else
        # if not check if dependency is part of dependency config
        for e in "${DEP_CONFIG[@]}"; do
            if [[ "${DEP}" == "${e}" ]]; then
                return

    source "${filename}"

    # some checks
    if [[ -z "${wgetdeps[*]}" && -z "${clonedeps[*]}" ]]; then
        echo "Profile '${profile}' is invalid."
        exit 1
    fi

    if [[ -z "${order[*]}" ]]; then
        echo "Profile '${profile}' is invalid."
        exit 1
    fi

    if [[ "$((${#wgetdeps[@]}+${#clonedeps[@]}))" -ne "${#order[@]}" ]]; then
        echo "Profile '${profile}' is invalid."
        exit 1
    fi

    # propagate results outside of function
    for i in "${!order[@]}"; do
        PROFILE_DEP_NAMES[$i]="${order[${i}]}"
    done

    for k in "${!clonedeps[@]}"; do
        PROFILE_CLONEDEPS["${k}"]="${clonedeps[${k}]}"
    done

    for k in "${!clonedeps_args[@]}"; do
        PROFILE_CLONEDEPS_ARGS["${k}"]="${clonedeps_args[${k}]}"
    done

    for k in "${!clonedeps_patches[@]}"; do
        PROFILE_CLONEDEPS_PATCHES["${k}"]="${clonedeps_patches[${k}]}"
    done

    for k in "${!wgetdeps[@]}"; do
        PROFILE_WGETDEPS["${k}"]="${wgetdeps[${k}]}"
    done
}

load_sources() {

    if [[ ! -f "${SOURCES_FILE}" ]]; then
        echo "Missing dependency sources at '${SOURCES_FILE}'."
        exit 1
    fi
    false

    source "${SOURCES_FILE}"

    # propagate sources outside of function
    for k in "${!sources[@]}"; do
        PROFILE_SOURCES["${k}"]="${sources[${k}]}"
    done
}

clonedeps() {
@@ -166,7 +252,7 @@ clonedeps() {
        ACTION="Cloned"
    fi
    # fix the version
    cd "${SOURCE}/${FOLDER}" && git checkout -qf ${COMMIT}
    cd "${SOURCE}/${FOLDER}" && git checkout -qf "${COMMIT}"
    echo "${ACTION} '${REPO}' to '${FOLDER}' with commit '[${COMMIT}]' and flags '${GIT_FLAGS}'"

    # apply patch if provided
@@ -191,7 +277,7 @@ wgetdeps() {
    fi
    mkdir -p "${SOURCE}/${FOLDER}"
    cd "${SOURCE}"
    FILENAME=$(basename $URL)
    FILENAME="$(basename $URL)"
    if [[ -f "${SOURCE}/$FILENAME" ]]; then
        rm -f "${SOURCE}/$FILENAME"
    fi
@@ -203,8 +289,11 @@ wgetdeps() {

usage_short() {
    echo "
usage: dl_dep.sh [-h] [-l] [-n <NAPLUGIN>] [-c <CONFIG>] [-d <DEPENDENCY>]
                    source_path
usage: dl_dep.sh [-h]
                 [-l [[PROFILE_NAME:]VERSION]]
                 [-p PROFILE_NAME[:VERSION]]
                 [-d DEPENDENCY_NAME[[@PROFILE_NAME][:VERSION]]
                 DESTINATION_PATH
	"
}

@@ -215,51 +304,61 @@ help_msg() {
This script gets all GekkoFS dependency sources (excluding the fs itself)

positional arguments:
        source_path              path where the dependency downloads are put
        DESTINATION_PATH        path where dependencies should be downloaded


optional arguments:
        -h, --help              shows this help message and exits
        -l, --list-dependencies
                                list dependencies available for download with descriptions
        -n <NAPLUGIN>, --na <NAPLUGIN>
                                network layer that is used for communication. Valid: {bmi,ofi,all}
                                defaults to 'ofi'
        -c <CONFIG>, --config <CONFIG>
                                allows additional configurations, e.g., for specific clusters
                                supported values: {mogon2, mogon1, ngio, direct, all, ci}
                                defaults to 'direct'
        -d <DEPENDENCY>, --dependency <DEPENDENCY>
                                download a specific dependency and ignore --config setting. If unspecified
                                all dependencies are built and installed based on set --config setting.
                                Multiple dependencies are supported: Pass a space-separated string (e.g., \"ofi mercury\"
        -l, --list-dependencies [[PROFILE_NAME:]VERSION]
                                list dependency configuration profiles available for download
        -p, --profile PROFILE_NAME[:VERSION]
                                allows downloading a pre-defined set of dependencies as defined
                                in ${PROFILES_DIR}/PROFILE_NAME.specs. This is useful to 
                                deploy specific library versions and/or configurations,
                                using a recognizable name. Optionally, PROFILE_NAME may include
                                a specific version for the profile, e.g. 'mogon2:latest' or
                                'ngio:0.8.0', which will download the dependencies defined for
                                that specific version. If unspecified, the 'default:latest' profile
                                will be used, which should include all the possible dependencies.
        -d, --dependency DEPENDENCY_NAME[[@PROFILE_NAME][:VERSION]]
                                build and install a specific dependency, ignoring any --profile
                                option provided. If PROFILE_NAME is unspecified, the 'default'
                                profile will be used. Similarly, if VERSION is unspecified, the
                                'latest' version of the specified profile will be used.
        -v, --verbose           Increase download verbosity
        "
}

# load default profile for now, might be overridden later
load_profile "${DEFAULT_PROFILE}" "${DEFAULT_VERSION}"

# load source URLs for dependencies
load_sources

POSITIONAL=()
while [[ $# -gt 0 ]]; do
    key="$1"

    case ${key} in
    -n | --na)
        NA_LAYER="$2"
        shift # past argument
        shift # past value
        ;;
    -c | --config)
    -p | --profile)
        if [[ -z "$2" ]]; then
            echo "ERROR: Missing argument for -c/--config option"
            echo "ERROR: Missing argument for -p/--profile option"
            exit 1
        fi
        if ! echo "$VALID_DEP_OPTIONS" | grep -q "$2"; then
            echo "ERROR: Invalid argument for -c/--config option"
            exit 1

        if [[ "$2" =~ ^(.*):(.*)$ ]]; then
            PROFILE_NAME="${BASH_REMATCH[1]}"
            PROFILE_VERSION="${BASH_REMATCH[2]}"
        else
            PROFILE_NAME="$2"
            PROFILE_VERSION="${DEFAULT_VERSION}"
        fi
        TMP_DEP_CONF="$2"

        load_profile "${PROFILE_NAME}" "${PROFILE_VERSION}"
        shift # past argument
        shift # past value
        ;;

    -d | --dependency)
        if [[ -z "$2" ]]; then
            echo "ERROR: Missing argument for -d/--dependency option"
@@ -270,7 +369,13 @@ while [[ $# -gt 0 ]]; do
        shift # past value
        ;;
    -l | --list-dependencies)
        list_dependencies

        if [[ -z "$2" ]]; then
            list_versions
        else
            list_profiles "$2"
        fi

        exit
        ;;
    -h | --help)
@@ -297,143 +402,78 @@ if [[ -z ${1+x} ]]; then
fi
SOURCE="$(readlink -mn "${1}")"

# optional arguments
if [[ "${NA_LAYER}" == "" ]]; then
    echo "Defaulting NAPLUGIN to 'ofi'"
    NA_LAYER="ofi"
fi

# enable predefined dependency template
case ${TMP_DEP_CONF} in
mogon1)
    DEP_CONFIG=("${MOGON1_DEPS[@]}")
    [[ -z "${DEPENDENCY}" ]] && echo "'Mogon1' dependencies are downloaded"
    ;;
mogon2)
    DEP_CONFIG=("${MOGON2_DEPS[@]}")
    [[ -z "${DEPENDENCY}" ]] && echo "'Mogon2' dependencies are downloaded"
    ;;
ngio)
    DEP_CONFIG=("${NGIO_DEPS[@]}")
    [[ -z "${DEPENDENCY}" ]] && echo "'NGIO' dependencies are downloaded"
    ;;
all)
    DEP_CONFIG=("${ALL_DEPS[@]}")
    [[ -z "${DEPENDENCY}" ]] && echo "'All' dependencies are downloaded"
    ;;
ci)
    DEP_CONFIG=("${CI_DEPS[@]}")
    [[ -z "${DEPENDENCY}" ]] && echo "'CI' dependencies are downloaded"
    ;;
direct | *)
    DEP_CONFIG=("${DIRECT_DEPS[@]}")
    [[ -z "${DEPENDENCY}" ]] && echo "'Direct' GekkoFS dependencies are downloaded (default)"
    ;;
esac

# sanity checks
if [[ "${NA_LAYER}" == "bmi" || "${NA_LAYER}" == "ofi" || "${NA_LAYER}" == "all" ]]; then
    echo NAPLUGIN = "${NA_LAYER}"
else
    echo "ERROR: No valid plugin selected"
    usage_short
    exit 1
fi

echo "Source path is set to  \"${SOURCE}\""
echo "------------------------------------"

mkdir -p "${SOURCE}"

## Third party dependencies
## download dependencies
for dep in "${PROFILE_DEP_NAMES[@]}"; do

# get zstd for fast compression in rocksdb
if check_dependency "zstd" "${DEP_CONFIG[@]}"; then
    wgetdeps "zstd" "https://github.com/facebook/zstd/archive/v1.3.2.tar.gz" &
fi
    if [[ ! -z "${PROFILE_WGETDEPS[${dep}]:-}" ]]; then

# get zlib for rocksdb
if check_dependency "lz4" "${DEP_CONFIG[@]}"; then
    wgetdeps "lz4" "https://github.com/lz4/lz4/archive/v1.8.0.tar.gz" &
fi
        # dependency names can include a TAG after a colon (e.g. ofi:verbs),
        # remove it
        dep_id=${dep%%:*}

# get snappy for rocksdb
if check_dependency "snappy" "${DEP_CONFIG[@]}"; then
    wgetdeps "snappy" "https://github.com/google/snappy/archive/1.1.7.tar.gz" &
fi
        # find required version for dependency
        dep_version="${PROFILE_WGETDEPS[${dep}]}"

# get bzip2 for rocksdb
if check_dependency "bzip2" "${DEP_CONFIG[@]}"; then
    wgetdeps "bzip2" "https://sourceforge.net/projects/bzip2/files/bzip2-1.0.6.tar.gz" &
fi
        # build URL for dependency
        dep_url="${PROFILE_SOURCES[${dep_id}]}"

# get capstone for syscall-intercept
if check_dependency "capstone" "${DEP_CONFIG[@]}"; then
    wgetdeps "capstone" "https://github.com/aquynh/capstone/archive/4.0.1.tar.gz" &
        if [[ -z "${dep_url}" ]]; then
            echo "Missing source URL for '${dep_id}'. Verify ${SOURCES_FILE}."
            exit 1
        fi

## Direct GekkoFS dependencies
        dep_url="${dep_url/\{\{VERSION\}\}/${dep_version}}"

# get BMI
if check_dependency "bmi" "${DEP_CONFIG[@]}"; then
    if [ "${NA_LAYER}" == "bmi" ] || [ "${NA_LAYER}" == "all" ]; then
        clonedeps "bmi" "https://xgitlab.cels.anl.gov/sds/bmi.git" "81ad0575fc57a69269a16208417cbcbefa51f9ea" &
    fi
fi
        wgetdeps "${dep_id}" "${dep_url}" &

# get libfabric
if [ "${NA_LAYER}" == "ofi" ] || [ "${NA_LAYER}" == "all" ]; then
    if check_dependency "ofi-experimental" "${DEP_CONFIG[@]}"; then
        clonedeps "libfabric" "https://github.com/ofiwg/libfabric.git" "" "-b v1.9.1" &
    elif check_dependency "ofi-verbs" "${DEP_CONFIG[@]}"; then
        # libibverbs 1.2.1-1 used on mogon 1i (installed on system) which is linked to libfabric
        # libfabric 1.8 random RPCs fail to be send. 1.9 RPC client cannot be started when in an MPI environment
        clonedeps "libfabric" "https://github.com/ofiwg/libfabric.git" "" "-b v1.7.2" &
    elif check_dependency "ofi" "${DEP_CONFIG[@]}"; then
        clonedeps "libfabric" "https://github.com/ofiwg/libfabric.git" "" "-b v1.8.1" &
    fi
fi
    elif [[ ! -z "${PROFILE_CLONEDEPS[${dep}]:-}" ]]; then

if check_dependency "psm2" "${DEP_CONFIG[@]}"; then
    wgetdeps "psm2" "https://github.com/intel/opa-psm2/archive/PSM2_11.2.86.tar.gz" &
fi
        # dependency names can include a TAG after a colon (e.g. ofi:verbs),
        # remove it
        dep_id=${dep%%:*}

# get Mercury
if check_dependency "mercury" "${DEP_CONFIG[@]}"; then
    clonedeps "mercury" "https://github.com/mercury-hpc/mercury" "41caa143a07ed179a3149cac4af0dc7aa3f946fd" "--recurse-submodules" &
fi
        dep_args=""

# get Argobots
if check_dependency "argobots" "${DEP_CONFIG[@]}"; then
    wgetdeps "argobots" "https://github.com/pmodels/argobots/archive/v1.0rc1.tar.gz" &
fi
        # find required version for dependency
        dep_version="${PROFILE_CLONEDEPS[${dep}]}"

# get Margo
if check_dependency "margo" "${DEP_CONFIG[@]}"; then
    clonedeps "margo" "https://xgitlab.cels.anl.gov/sds/margo.git" "v0.6.3" &
        # version may be a commit hash, a tag or something like HEAD@BRANCH_NAME
        # if it's the latter, remove the @BRANCH_NAME
        if [[ "${dep_version}" =~ ^(.*)@(.*)$ ]]; then
            dep_args+="-b ${BASH_REMATCH[2]}"
            dep_version=${BASH_REMATCH[1]}
        fi

# get rocksdb
if check_dependency "rocksdb-experimental" "${DEP_CONFIG[@]}"; then
    wgetdeps "rocksdb" "https://github.com/facebook/rocksdb/archive/v6.11.4.tar.gz" &
elif check_dependency "rocksdb" "${DEP_CONFIG[@]}"; then
    wgetdeps "rocksdb" "https://github.com/facebook/rocksdb/archive/v6.2.2.tar.gz" &
fi
        # build URL for dependency
        dep_url="${PROFILE_SOURCES[${dep_id}]}"

# get syscall_intercept
if check_dependency "syscall_intercept" "${DEP_CONFIG[@]}"; then
    clonedeps "syscall_intercept" "https://github.com/pmem/syscall_intercept.git" "f7cebb7b7e7512a19b78a31ce236ad6ca22636dd" "" "syscall_intercept.patch" &
        if [[ -z "${dep_url}" ]]; then
            echo "Missing source URL for '${dep_id}'. Verify ${SOURCES_FILE}."
            exit 1
        fi

# get AGIOS
if check_dependency "agios" "${DEP_CONFIG[@]}"; then
    clonedeps "agios" "https://github.com/francielizanon/agios.git" "c26a6544200f823ebb8f890dd94e653d148bf226" "-b development" &
fi
        dep_url="${dep_url/\{\{VERSION\}\}/${dep_version}}"

# get date
if check_dependency "date" "${DEP_CONFIG[@]}"; then
    clonedeps "date" "https://github.com/HowardHinnant/date.git" "e7e1482087f58913b80a20b04d5c58d9d6d90155" &
        # check if extra args are required
        dep_args+="${PROFILE_CLONEDEPS_ARGS[${dep}]}"

        dep_patch=${PROFILE_CLONEDEPS_PATCHES[${dep}]}

        clonedeps "${dep}" "${dep_url}" "${dep_version}" "${dep_args}" "${dep_patch}" &

    else
        echo "Unknown dependency '${dep}'."
        exit 1
    fi
done

# Wait for all download to be completed
wait
echo "Done"

exit 0
+74 −0
Original line number Diff line number Diff line
################################################################################
# Copyright 2018-2021, Barcelona Supercomputing Center (BSC), Spain            #
# Copyright 2015-2021, Johannes Gutenberg Universitaet Mainz, Germany          #
#                                                                              #
# This software was partially supported by the                                 #
# EC H2020 funded project NEXTGenIO (Project ID: 671951, www.nextgenio.eu).    #
#                                                                              #
# This software was partially supported by the                                 #
# ADA-FS project under the SPPEXA project funded by the DFG.                   #
#                                                                              #
# This file is part of GekkoFS.                                                #
#                                                                              #
# GekkoFS 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.                                          #
#                                                                              #
# GekkoFS 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 GekkoFS.  If not, see <https://www.gnu.org/licenses/>.            #
#                                                                              #
# SPDX-License-Identifier: GPL-3.0-or-later                                    #
################################################################################

# vi: ft=bash

# Variables to be imported into the scripts
declare -A wgetdeps clonedeps clonedeps_args clonedeps_patches
declare -a order

# Comment that should be displayed when printing the profile
comment="All dependencies (except transport-specific and experimental)"

# Dependencies that must be downloaded directly
wgetdeps=(
    ["bzip2"]="1.0.6" 
    ["zstd"]="1.3.2" 
    ["lz4"]="1.8.0"
    ["snappy"]="1.1.7"
    ["capstone"]="4.0.1"
    ["argobots"]="1.0rc1"
    ["rocksdb"]="6.2.2"
)

# Dependencies that must be cloned
clonedeps=(
    ["bmi"]="81ad0575fc57a69269a16208417cbcbefa51f9ea"
    ["libfabric"]="HEAD@v1.8.1"
    ["mercury"]="41caa143a07ed179a3149cac4af0dc7aa3f946fd"
    ["margo"]="v0.6.3"
    ["syscall_intercept"]="f7cebb7b7e7512a19b78a31ce236ad6ca22636dd"
    ["date"]="e7e1482087f58913b80a20b04d5c58d9d6d90155"
    ["agios"]="c26a6544200f823ebb8f890dd94e653d148bf226@development"
)

# Extra arguments for git clone
clonedeps_args=(
    ["mercury"]="--recurse-submodules"
)

# Patches that should be applied post-clone
clonedeps_patches=(
    ["syscall_intercept"]="syscall_intercept.patch"
)

# Ordering that MUST be followed when downloading
order=(
    "bzip2" "zstd" "lz4" "snappy" "capstone" "bmi" "libfabric" "mercury" "argobots"
    "margo" "rocksdb" "syscall_intercept" "date" "agios"
)
+68 −0

File added.

Preview size limit exceeded, changes collapsed.

+79 −0

File added.

Preview size limit exceeded, changes collapsed.

+65 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading