diff --git a/bot/build.sh b/bot/build.sh index 5c9f1af0..e6879e86 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -161,16 +161,6 @@ EESSI_SOFTWARE_SUBDIR_OVERRIDE=${EESSI_SOFTWARE_SUBDIR_OVERRIDE:-${CPU_TARGET}} export EESSI_SOFTWARE_SUBDIR_OVERRIDE echo "bot/build.sh: EESSI_SOFTWARE_SUBDIR_OVERRIDE='${EESSI_SOFTWARE_SUBDIR_OVERRIDE}'" -# determine accelerator target (if any) from .architecture in ${JOB_CFG_FILE} -ACCEL_OVERRIDE=$(cfg_get_value "architecture" "accelerator") -if [[ -n "$ACCEL_OVERRIDE" ]]; then - # bot job config does not include accel subdirectory - export EESSI_ACCELERATOR_TARGET_OVERRIDE="accel/$ACCEL_OVERRIDE" -else - export EESSI_ACCELERATOR_TARGET_OVERRIDE="" -fi -echo "bot/build.sh: EESSI_ACCELERATOR_TARGET_OVERRIDE='${EESSI_ACCELERATOR_TARGET_OVERRIDE}'" - # Log the full lscpu and os-release info: lscpu > _bot_job${SLURM_JOB_ID}.lscpu cat /etc/os-release > _bot_job${SLURM_JOB_ID}.os @@ -259,11 +249,38 @@ fi # create tmp file for output of build step build_outerr=$(mktemp build.outerr.XXXX) -echo "Executing command to build software:" -echo "$software_layer_dir/eessi_container.sh ${COMMON_ARGS[@]} ${BUILD_STEP_ARGS[@]}" -echo " -- $software_layer_dir/install_software_layer.sh \"${INSTALL_SCRIPT_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${build_outerr}" -$software_layer_dir/eessi_container.sh "${COMMON_ARGS[@]}" "${BUILD_STEP_ARGS[@]}" \ - -- $software_layer_dir/install_software_layer.sh "${INSTALL_SCRIPT_ARGS[@]}" "$@" 2>&1 | tee -a ${build_outerr} +# determine accelerator target (if any) from .architecture in ${JOB_CFG_FILE} +ACCEL_OVERRIDES=$(cfg_get_value "architecture" "accelerator") +IFS='+' read -ra ACCEL_OVERRIDES_ARRAY <<< "$ACCEL_OVERRIDES" +# prepend accel/ to all array elements +EESSI_ACCELERATOR_TARGET_OVERRIDES=("${ACCEL_OVERRIDES_ARRAY[@]/#/accel/}") +if [[ -n "$ACCEL_OVERRIDES" ]]; then + for ACCEL_OVERRIDE in "${EESSI_ACCELERATOR_TARGET_OVERRIDES[@]}"; do + # bot job config does not include accel subdirectory + #export EESSI_ACCELERATOR_TARGET_OVERRIDE="accel/${ACCEL_OVERRIDE}" + #echo "bot/build.sh: EESSI_ACCELERATOR_TARGET_OVERRIDE='accel/${ACCEL_OVERRIDE}'" + export EESSI_ACCELERATOR_TARGET_OVERRIDE="${ACCEL_OVERRIDE}" + echo "bot/build.sh: EESSI_ACCELERATOR_TARGET_OVERRIDE='${ACCEL_OVERRIDE}'" + echo "Executing command to build software:" + echo "$software_layer_dir/eessi_container.sh ${COMMON_ARGS[@]} ${BUILD_STEP_ARGS[@]}" + echo " -- $software_layer_dir/install_software_layer.sh \"${INSTALL_SCRIPT_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${build_outerr}" + $software_layer_dir/eessi_container.sh "${COMMON_ARGS[@]}" "${BUILD_STEP_ARGS[@]}" \ + -- $software_layer_dir/install_software_layer.sh "${INSTALL_SCRIPT_ARGS[@]}" "$@" 2>&1 | tee -a ${build_outerr} + + # determine temporary directory to resume from for the next accelerator, + # as we want to combine all accelerator builds into a single tarball in the end + BUILD_TMPDIR=$(grep ' as tmp directory ' ${build_outerr} | cut -d ' ' -f 2) + BUILD_STEP_ARGS+=("--resume" "${BUILD_TMPDIR}") + done +else + export EESSI_ACCELERATOR_TARGET_OVERRIDE="" + echo "Executing command to build software:" + echo "$software_layer_dir/eessi_container.sh ${COMMON_ARGS[@]} ${BUILD_STEP_ARGS[@]}" + echo " -- $software_layer_dir/install_software_layer.sh \"${INSTALL_SCRIPT_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${build_outerr}" + $software_layer_dir/eessi_container.sh "${COMMON_ARGS[@]}" "${BUILD_STEP_ARGS[@]}" \ + -- $software_layer_dir/install_software_layer.sh "${INSTALL_SCRIPT_ARGS[@]}" "$@" 2>&1 | tee -a ${build_outerr} +fi +echo "bot/build.sh: EESSI_ACCELERATOR_TARGET_OVERRIDE='${EESSI_ACCELERATOR_TARGET_OVERRIDE}'" # prepare directory to store tarball of tmp for tarball step TARBALL_TMP_TARBALL_STEP_DIR=${PREVIOUS_TMP_DIR}/tarball_step @@ -291,14 +308,15 @@ else fi # to set EESSI_VERSION we need to source init/eessi_defaults now source $software_layer_dir/init/eessi_defaults -# Note: if ${EESSI_DEV_PROJECT} is defined (building for dev.eessi.io), then we +# Note: if ${EESSI_DEV_PROJECT} is defined (building for dev.eessi.io), then we # append the project (subdirectory) name to the end tarball name. This is information # then used at the ingestion stage. If ${EESSI_DEV_PROJECT} is not defined, nothing is # appended if [[ -z ${EESSI_ACCELERATOR_TARGET_OVERRIDE} ]]; then export TARBALL=$(printf "eessi-%s-software-%s-%s-%b%d.${tarball_extension}" ${EESSI_VERSION} ${EESSI_OS_TYPE} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE//\//-} ${EESSI_DEV_PROJECT:+$EESSI_DEV_PROJECT-} ${timestamp}) else - export TARBALL=$(printf "eessi-%s-software-%s-%s-%s-%b%d.${tarball_extension}" ${EESSI_VERSION} ${EESSI_OS_TYPE} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE//\//-} ${EESSI_ACCELERATOR_TARGET_OVERRIDE//\//-} ${EESSI_DEV_PROJECT:+$EESSI_DEV_PROJECT-} ${timestamp}) + #export TARBALL=$(printf "eessi-%s-software-%s-%s-%s-%b%d.${tarball_extension}" ${EESSI_VERSION} ${EESSI_OS_TYPE} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE//\//-} ${EESSI_ACCELERATOR_TARGET_OVERRIDE//\//-} ${EESSI_DEV_PROJECT:+$EESSI_DEV_PROJECT-} ${timestamp}) + export TARBALL=$(printf "eessi-%s-software-%s-%s-%s-%b%d.${tarball_extension}" ${EESSI_VERSION} ${EESSI_OS_TYPE} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE//\//-} accel ${EESSI_DEV_PROJECT:+$EESSI_DEV_PROJECT-} ${timestamp}) fi # Export EESSI_DEV_PROJECT to use it (if needed) when making tarball @@ -312,8 +330,8 @@ export EESSI_DEV_PROJECT=${EESSI_DEV_PROJECT} TMP_IN_CONTAINER=/tmp echo "Executing command to create tarball:" echo "$software_layer_dir/eessi_container.sh ${COMMON_ARGS[@]} ${TARBALL_STEP_ARGS[@]}" -echo " -- $software_layer_dir/create_tarball.sh ${TMP_IN_CONTAINER} ${EESSI_VERSION}${EESSI_SOFTWARE_LAYER_VERSION_SUFFIX} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} \"${EESSI_ACCELERATOR_TARGET_OVERRIDE}\" /eessi_bot_job/${TARBALL} 2>&1 | tee -a ${tar_outerr}" +echo " -- $software_layer_dir/create_tarball.sh ${TMP_IN_CONTAINER} ${EESSI_VERSION}${EESSI_SOFTWARE_LAYER_VERSION_SUFFIX} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} \"${EESSI_ACCELERATOR_TARGET_OVERRIDES[@]}\" /eessi_bot_job/${TARBALL} 2>&1 | tee -a ${tar_outerr}" $software_layer_dir/eessi_container.sh "${COMMON_ARGS[@]}" "${TARBALL_STEP_ARGS[@]}" \ - -- $software_layer_dir/create_tarball.sh ${TMP_IN_CONTAINER} ${EESSI_VERSION}${EESSI_SOFTWARE_LAYER_VERSION_SUFFIX} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} "${EESSI_ACCELERATOR_TARGET_OVERRIDE}" /eessi_bot_job/${TARBALL} 2>&1 | tee -a ${tar_outerr} + -- $software_layer_dir/create_tarball.sh ${TMP_IN_CONTAINER} ${EESSI_VERSION}${EESSI_SOFTWARE_LAYER_VERSION_SUFFIX} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} $(printf '%q ' "${EESSI_ACCELERATOR_TARGET_OVERRIDES[@]}") /eessi_bot_job/${TARBALL} 2>&1 | tee -a ${tar_outerr} exit 0 diff --git a/create_tarball.sh b/create_tarball.sh index d3251ba1..5f8dc8aa 100755 --- a/create_tarball.sh +++ b/create_tarball.sh @@ -11,7 +11,7 @@ fi eessi_tmpdir=$1 eessi_version=$2 cpu_arch_subdir=$3 -accel_subdir=$4 +accel_subdirs="$4" target_tarball=$5 tmpdir=`mktemp -d` @@ -64,11 +64,21 @@ fi # consider both CPU-only and accelerator subdirectories (if an accelerator was configured) sw_subdirs=${cpu_arch_subdir} -if [ -n "${accel_subdir}" ]; then - sw_subdirs="${sw_subdirs} ${cpu_arch_subdir}/${accel_subdir}" +echo "accel_subdirs 1: ${accel_subdirs}" +if [ -n "${accel_subdirs}" ]; then + # convert accel_subdirs into an array... + #read -r -a accel_subdirs <<< ${accel_subdirs} + #mapfile -t accel_subdirs <<< "$accel_subdirs" + eval "accel_subdirs=(${accel_subdirs})" + echo "accel_subdirs 2: ${accel_subdirs}" + # and prepend the cpu_arch_subdir to all elements + accel_subdirs="${accel_subdirs[@]/#/${cpu_arch_subdir}/}" + echo "accel_subdirs 3: ${accel_subdirs}" + sw_subdirs="${sw_subdirs} ${accel_subdirs[@]}" fi for subdir in ${sw_subdirs}; do + echo "subdir: ${subdir}" if [ -d ${eessi_version}/software/${os}/${subdir}/modules ]; then # module files find ${eessi_version}/software/${os}/${subdir}/modules -type f \! -name '.wh.*' >> ${files_list} diff --git a/easystacks/software.eessi.io/2025.06/accel/nvidia/eessi-2025.06-eb-5.3.0.yml b/easystacks/software.eessi.io/2025.06/accel/nvidia/eessi-2025.06-eb-5.3.0.yml new file mode 100644 index 00000000..66a4a1f9 --- /dev/null +++ b/easystacks/software.eessi.io/2025.06/accel/nvidia/eessi-2025.06-eb-5.3.0.yml @@ -0,0 +1,2 @@ +easyconfigs: + - pmt-1.3.1-GCCcore-13.3.0-CUDA-12.6.0.eb