From 47290c53124edda70686b9955ea0ab0e4b4066c8 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 3 Jul 2025 12:26:32 +0200 Subject: [PATCH 01/17] Make EESSI-extend support accelerator installations --- .../scripts/verify_eessi_environment.py | 4 +- .../workflows/tests_eessi_extend_module.yml | 45 ++++++++++++++++++- .github/workflows/tests_eessi_module.yml | 6 +-- EESSI-extend-easybuild.eb | 32 +++++++++---- run_in_compat_layer_env.sh | 4 +- 5 files changed, 74 insertions(+), 17 deletions(-) diff --git a/.github/workflows/scripts/verify_eessi_environment.py b/.github/workflows/scripts/verify_eessi_environment.py index cc006e70..9b580969 100644 --- a/.github/workflows/scripts/verify_eessi_environment.py +++ b/.github/workflows/scripts/verify_eessi_environment.py @@ -45,8 +45,8 @@ def check_env_endswith(var1, var2): check_env_equals("EESSI_ACCELERATOR_TARGET_OVERRIDE", "EESSI_ACCEL_SUBDIR") # special case is where EESSI_ACCELERATOR_TARGET_OVERRIDE may not match the final # accelerator architecture chosen. - # In CI we set FINAL_ACCELERATOR_PATH_EXPECTED to allow us to compare against an expected value. - check_env_equals("EESSI_ACCELERATOR_TARGET", "FINAL_ACCELERATOR_PATH_EXPECTED") + # In CI we set FINAL_ACCELERATOR_TARGET_EXPECTED to allow us to compare against an expected value. + check_env_equals("EESSI_ACCELERATOR_TARGET", "FINAL_ACCELERATOR_TARGET_EXPECTED") # verify the software paths that should exist check_env_endswith("EESSI_SOFTWARE_PATH", "EESSI_SOFTWARE_SUBDIR") check_env_endswith("EESSI_SITE_SOFTWARE_PATH", "EESSI_SOFTWARE_SUBDIR") diff --git a/.github/workflows/tests_eessi_extend_module.yml b/.github/workflows/tests_eessi_extend_module.yml index f304c48b..469994fe 100644 --- a/.github/workflows/tests_eessi_extend_module.yml +++ b/.github/workflows/tests_eessi_extend_module.yml @@ -72,6 +72,9 @@ jobs: module use "$MY_INSTALLATION_PATH"/modules/all check_disallowed_env_prefix EASYBUILD_ + # Set an environment variable to use when we want to target accelerators + export STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE="accel/nvidia/cc80" + # Configure for CVMFS install export EESSI_CVMFS_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild @@ -87,7 +90,16 @@ jobs: check_env_var "EASYBUILD_UMASK" "022" # unload and check the environment is clean again module unload EESSI-extend + # check an accerator installation + export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE + module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild + check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SOFTWARE_PATH" # installation path should be the same unless we ask for an explicit GPU installation + EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild + check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SOFTWARE_PATH}/accel/${EESSI_ACCELERATOR_TARGET_OVERRIDE}" # installation path should be the same unless we ask for an explicit GPU installation + # unload and make sure the environment is clean again + module unload EESSI-extend check_disallowed_env_prefix EASYBUILD_ + unset EESSI_ACCELERATOR_TARGET_OVERRIDE unset EESSI_CVMFS_INSTALL # Now configure for a site @@ -98,19 +110,38 @@ jobs: check_env_var "EASYBUILD_UMASK" "022" # unload and check the environment is clean again module unload EESSI-extend + # check an accelerator installation + export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE + module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild + check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SITE_SOFTWARE_PATH" # installation path should be the same unless we ask for an explicit GPU installation + EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild + check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SITE_SOFTWARE_PATH}/accel/${EESSI_ACCELERATOR_TARGET_OVERRIDE}" # installation path should be the same unless we ask for an explicit GPU installation + # unload and make sure the environment is clean again + module unload EESSI-extend check_disallowed_env_prefix EASYBUILD_ + unset EESSI_ACCELERATOR_TARGET_OVERRIDE unset EESSI_SITE_INSTALL # Now for a project export EESSI_PROJECT_INSTALL="$MY_INSTALLATION_PATH" module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild # check some specific envvars - check_env_var "EASYBUILD_INSTALLPATH" "$MY_INSTALLATION_PATH/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR" + export EXPECTED_INSTALLATION_PATH="$MY_INSTALLATION_PATH/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR" + check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" check_env_var "EASYBUILD_UMASK" "002" check_env_var "EASYBUILD_GROUP_WRITABLE_INSTALLDIR" "1" # unload and check the environment is clean again module unload EESSI-extend + # check an accerator installation + export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE + module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild + check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same unless we ask for an explicit GPU installation + EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild + check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same for project case + # unload and make sure the environment is clean again + module unload EESSI-extend check_disallowed_env_prefix EASYBUILD_ + unset EESSI_ACCELERATOR_TARGET_OVERRIDE unset EESSI_PROJECT_INSTALL # Now for a user @@ -118,10 +149,20 @@ jobs: mkdir -p $EESSI_USER_INSTALL # must exist module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild # check some specific envvars - check_env_var "EASYBUILD_INSTALLPATH" "$MY_INSTALLATION_PATH/$USER/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR" + export EXPECTED_INSTALLATION_PATH="$MY_INSTALLATION_PATH/$USER/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR" + check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" check_env_var "EASYBUILD_UMASK" "077" # unload and check the environment is clean again module unload EESSI-extend + # check an accerator installation + export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE + module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild + check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same unless we ask for an explicit GPU installation + EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild + check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same for user case + # unload and make sure the environment is clean again + module unload EESSI-extend check_disallowed_env_prefix EASYBUILD_ + unset EESSI_ACCELERATOR_TARGET_OVERRIDE unset EESSI_USER_INSTALL diff --git a/.github/workflows/tests_eessi_module.yml b/.github/workflows/tests_eessi_module.yml index d6c97a40..c13b182b 100644 --- a/.github/workflows/tests_eessi_module.yml +++ b/.github/workflows/tests_eessi_module.yml @@ -165,9 +165,9 @@ jobs: include: # For each override we expect a specific path (which may differ from the original due to overrides) - EESSI_ACCELERATOR_TARGET_OVERRIDE: accel/nvidia/cc80 - FINAL_ACCELERATOR_PATH_EXPECTED: accel/nvidia/cc80 + FINAL_ACCELERATOR_TARGET_EXPECTED: accel/nvidia/cc80 - EESSI_ACCELERATOR_TARGET_OVERRIDE: accel/nvidia/cc77 # deliberately chose a non-existent CUDA capability - FINAL_ACCELERATOR_PATH_EXPECTED: accel/nvidia/cc70 # this reverts to the fallback case (which does exist) + FINAL_ACCELERATOR_TARGET_EXPECTED: accel/nvidia/cc70 # this reverts to the fallback case (which does exist) steps: - name: Check out software-layer repository @@ -193,7 +193,7 @@ jobs: # Set our accelerator path overrides according to our matrix if [[ "${{matrix.EESSI_ACCELERATOR_TARGET_OVERRIDE}}" != "none" ]]; then export EESSI_ACCELERATOR_TARGET_OVERRIDE=${{matrix.EESSI_ACCELERATOR_TARGET_OVERRIDE}} - export FINAL_ACCELERATOR_PATH_EXPECTED=${{matrix.FINAL_ACCELERATOR_PATH_EXPECTED}} + export FINAL_ACCELERATOR_TARGET_EXPECTED=${{matrix.FINAL_ACCELERATOR_TARGET_EXPECTED}} fi # Turn on debug output in case we want to take a look diff --git a/EESSI-extend-easybuild.eb b/EESSI-extend-easybuild.eb index f74f36ac..db14c20f 100644 --- a/EESSI-extend-easybuild.eb +++ b/EESSI-extend-easybuild.eb @@ -35,6 +35,11 @@ description = """ If both EESSI_USER_INSTALL and EESSI_PROJECT_INSTALL are defined, both sets of installations are exposed, but new installations are created as user installations. + + Strict installation path checking is enforced by EESSI for EESSI and site + installations involving accelerators. In these cases, if you wish to create an + accelerator installation you must set the environement variable + EESSI_ACCELERATOR_INSTALL (and load/reload this module). """ toolchain = SYSTEM @@ -78,8 +83,21 @@ if (mode() == "load") then end end working_dir = os.getenv("WORKING_DIR") or pathJoin("/tmp", os.getenv("USER")) + -- Gather the EPREFIX to use as a sysroot sysroot = os.getenv("EESSI_EPREFIX") + +-- Check if we have GPU capabilities and configure CUDA compute capabilities +eessi_accelerator_target = os.getenv("EESSI_ACCELERATOR_TARGET") +if (eessi_accelerator_target ~= nil) then + cuda_compute_capability = string.match(eessi_accelerator_target, "^nvidia/cc([0-9][0-9])$") + if (cuda_compute_capability ~= nil) then + easybuild_cuda_compute_capabilities = cuda_compute_capability:sub(1, 1) .. "." .. cuda_compute_capability:sub(2, 2) + else + LmodError("Incorrect value for $EESSI_ACCELERATOR_TARGET: " .. eessi_accelerator_target) + end +end + -- Use an installation prefix that we _should_ have write access to if (os.getenv("EESSI_CVMFS_INSTALL") ~= nil) then -- Make sure no other EESSI install environment variables are set @@ -88,15 +106,9 @@ if (os.getenv("EESSI_CVMFS_INSTALL") ~= nil) then end eessi_cvmfs_install = true easybuild_installpath = os.getenv("EESSI_SOFTWARE_PATH") - eessi_accelerator_target = os.getenv("EESSI_ACCELERATOR_TARGET") - if (eessi_accelerator_target ~= nil) then - cuda_compute_capability = string.match(eessi_accelerator_target, "^nvidia/cc([0-9][0-9])$") - if (cuda_compute_capability ~= nil) then + -- enforce accelerator subdirectory usage for CVMFS installs (only if an accelerator install is requested) + if (eessi_accelerator_target ~= nil) and (cuda_compute_capability ~= nil) and (os.getenv("EESSI_ACCELERATOR_INSTALL") ~= nil) then easybuild_installpath = pathJoin(easybuild_installpath, 'accel', eessi_accelerator_target) - easybuild_cuda_compute_capabilities = cuda_compute_capability:sub(1, 1) .. "." .. cuda_compute_capability:sub(2, 2) - else - LmodError("Incorrect value for $EESSI_ACCELERATOR_TARGET: " .. eessi_accelerator_target) - end end elseif (os.getenv("EESSI_SITE_INSTALL") ~= nil) then -- Make sure no other EESSI install environment variables are set @@ -104,6 +116,10 @@ elseif (os.getenv("EESSI_SITE_INSTALL") ~= nil) then LmodError("You cannot use EESSI_SITE_INSTALL in combination with any other EESSI_*_INSTALL environment variables") end easybuild_installpath = os.getenv("EESSI_SITE_SOFTWARE_PATH") + -- enforce accelerator subdirectory usage for site installs (only if an accelerator install is requested) + if (eessi_accelerator_target ~= nil) and (cuda_compute_capability ~= nil) and (os.getenv("EESSI_ACCELERATOR_INSTALL") ~= nil) then + easybuild_installpath = pathJoin(easybuild_installpath, 'accel', eessi_accelerator_target) + end else -- Deal with user and project installs project_install = os.getenv("EESSI_PROJECT_INSTALL") diff --git a/run_in_compat_layer_env.sh b/run_in_compat_layer_env.sh index e9a49cbe..188420e6 100755 --- a/run_in_compat_layer_env.sh +++ b/run_in_compat_layer_env.sh @@ -29,8 +29,8 @@ fi if [ ! -z ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} ]; then INPUT="export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${EESSI_SOFTWARE_SUBDIR_OVERRIDE}; ${INPUT}" fi -if [ ! -z ${EESSI_ACCELERATOR_TARGET} ]; then - INPUT="export EESSI_ACCELERATOR_TARGET=${EESSI_ACCELERATOR_TARGET}; ${INPUT}" +if [ ! -z ${EESSI_ACCELERATOR_TARGET_OVERRIDE} ]; then + INPUT="export EESSI_ACCELERATOR_TARGET_OVERRIDE=${EESSI_ACCELERATOR_TARGET_OVERRIDE}; ${INPUT}" fi if [ ! -z ${EESSI_CVMFS_REPO_OVERRIDE} ]; then INPUT="export EESSI_CVMFS_REPO_OVERRIDE=${EESSI_CVMFS_REPO_OVERRIDE}; ${INPUT}" From f551ffe6fd4b4f31d3f3cb44f6efccf58e1f56f9 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 3 Jul 2025 12:37:01 +0200 Subject: [PATCH 02/17] Explicitly export environment variable --- .../workflows/tests_eessi_extend_module.yml | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests_eessi_extend_module.yml b/.github/workflows/tests_eessi_extend_module.yml index 469994fe..17d4dc03 100644 --- a/.github/workflows/tests_eessi_extend_module.yml +++ b/.github/workflows/tests_eessi_extend_module.yml @@ -74,6 +74,7 @@ jobs: # Set an environment variable to use when we want to target accelerators export STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE="accel/nvidia/cc80" + export STORED_CUDA_CC="80" # Configure for CVMFS install export EESSI_CVMFS_INSTALL=1 @@ -94,12 +95,15 @@ jobs: export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SOFTWARE_PATH" # installation path should be the same unless we ask for an explicit GPU installation - EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild + check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES "$STORED_CUDA_CC" + export EESSI_ACCELERATOR_INSTALL=1 + module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild # reload for an actual GPU installation check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SOFTWARE_PATH}/accel/${EESSI_ACCELERATOR_TARGET_OVERRIDE}" # installation path should be the same unless we ask for an explicit GPU installation # unload and make sure the environment is clean again module unload EESSI-extend check_disallowed_env_prefix EASYBUILD_ unset EESSI_ACCELERATOR_TARGET_OVERRIDE + unset EESSI_ACCELERATOR_INSTALL unset EESSI_CVMFS_INSTALL # Now configure for a site @@ -114,12 +118,15 @@ jobs: export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SITE_SOFTWARE_PATH" # installation path should be the same unless we ask for an explicit GPU installation - EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild + check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES "$STORED_CUDA_CC" + export EESSI_ACCELERATOR_INSTALL=1 + module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild # reload for an actual GPU installation check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SITE_SOFTWARE_PATH}/accel/${EESSI_ACCELERATOR_TARGET_OVERRIDE}" # installation path should be the same unless we ask for an explicit GPU installation # unload and make sure the environment is clean again module unload EESSI-extend check_disallowed_env_prefix EASYBUILD_ unset EESSI_ACCELERATOR_TARGET_OVERRIDE + unset EESSI_ACCELERATOR_INSTALL unset EESSI_SITE_INSTALL # Now for a project @@ -136,12 +143,15 @@ jobs: export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same unless we ask for an explicit GPU installation - EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild + check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES "$STORED_CUDA_CC" + export EESSI_ACCELERATOR_INSTALL=1 + module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild # reload for an GPU actual installation check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same for project case # unload and make sure the environment is clean again module unload EESSI-extend check_disallowed_env_prefix EASYBUILD_ unset EESSI_ACCELERATOR_TARGET_OVERRIDE + unset EESSI_ACCELERATOR_INSTALL unset EESSI_PROJECT_INSTALL # Now for a user @@ -158,11 +168,14 @@ jobs: export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same unless we ask for an explicit GPU installation - EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild + check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES "$STORED_CUDA_CC" + export EESSI_ACCELERATOR_INSTALL=1 + module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild # reload for an actual GPU installation check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same for user case # unload and make sure the environment is clean again module unload EESSI-extend check_disallowed_env_prefix EASYBUILD_ unset EESSI_ACCELERATOR_TARGET_OVERRIDE + unset EESSI_ACCELERATOR_INSTALL unset EESSI_USER_INSTALL From 889480a46a52ffd3f517254311199d601f0cf2d8 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 3 Jul 2025 12:40:56 +0200 Subject: [PATCH 03/17] Missing quote --- .github/workflows/tests_eessi_extend_module.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests_eessi_extend_module.yml b/.github/workflows/tests_eessi_extend_module.yml index 17d4dc03..1d1975c5 100644 --- a/.github/workflows/tests_eessi_extend_module.yml +++ b/.github/workflows/tests_eessi_extend_module.yml @@ -95,7 +95,7 @@ jobs: export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SOFTWARE_PATH" # installation path should be the same unless we ask for an explicit GPU installation - check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES "$STORED_CUDA_CC" + check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC" export EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild # reload for an actual GPU installation check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SOFTWARE_PATH}/accel/${EESSI_ACCELERATOR_TARGET_OVERRIDE}" # installation path should be the same unless we ask for an explicit GPU installation @@ -118,7 +118,7 @@ jobs: export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SITE_SOFTWARE_PATH" # installation path should be the same unless we ask for an explicit GPU installation - check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES "$STORED_CUDA_CC" + check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC" export EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild # reload for an actual GPU installation check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SITE_SOFTWARE_PATH}/accel/${EESSI_ACCELERATOR_TARGET_OVERRIDE}" # installation path should be the same unless we ask for an explicit GPU installation @@ -143,7 +143,7 @@ jobs: export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same unless we ask for an explicit GPU installation - check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES "$STORED_CUDA_CC" + check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC" export EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild # reload for an GPU actual installation check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same for project case @@ -168,7 +168,7 @@ jobs: export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same unless we ask for an explicit GPU installation - check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES "$STORED_CUDA_CC" + check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC" export EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild # reload for an actual GPU installation check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same for user case From c5e88302023ce5eb765233a78c5c67763d71d706 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 3 Jul 2025 13:59:35 +0200 Subject: [PATCH 04/17] Separate our the GPU checks --- .../workflows/tests_eessi_extend_module.yml | 98 ++++++++++++------- 1 file changed, 61 insertions(+), 37 deletions(-) diff --git a/.github/workflows/tests_eessi_extend_module.yml b/.github/workflows/tests_eessi_extend_module.yml index 1d1975c5..8042ea9f 100644 --- a/.github/workflows/tests_eessi_extend_module.yml +++ b/.github/workflows/tests_eessi_extend_module.yml @@ -72,10 +72,6 @@ jobs: module use "$MY_INSTALLATION_PATH"/modules/all check_disallowed_env_prefix EASYBUILD_ - # Set an environment variable to use when we want to target accelerators - export STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE="accel/nvidia/cc80" - export STORED_CUDA_CC="80" - # Configure for CVMFS install export EESSI_CVMFS_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild @@ -91,56 +87,93 @@ jobs: check_env_var "EASYBUILD_UMASK" "022" # unload and check the environment is clean again module unload EESSI-extend - # check an accerator installation + check_disallowed_env_prefix EASYBUILD_ + unset EESSI_CVMFS_INSTALL + + # Now configure for a site + export EESSI_SITE_INSTALL=1 + module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild + # check some specific envvars + check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SITE_SOFTWARE_PATH" + check_env_var "EASYBUILD_UMASK" "022" + # unload and check the environment is clean again + module unload EESSI-extend + check_disallowed_env_prefix EASYBUILD_ + unset EESSI_SITE_INSTALL + + # Now for a project + export EESSI_PROJECT_INSTALL="$MY_INSTALLATION_PATH" + module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild + # check some specific envvars + export EXPECTED_INSTALLATION_PATH="$MY_INSTALLATION_PATH/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR" + check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" + check_env_var "EASYBUILD_UMASK" "002" + check_env_var "EASYBUILD_GROUP_WRITABLE_INSTALLDIR" "1" + # unload and check the environment is clean again + module unload EESSI-extend + check_disallowed_env_prefix EASYBUILD_ + unset EESSI_PROJECT_INSTALL + + # Now for a user + export EESSI_USER_INSTALL="$MY_INSTALLATION_PATH/$USER" + mkdir -p $EESSI_USER_INSTALL # must exist + module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild + # check some specific envvars + export EXPECTED_INSTALLATION_PATH="$MY_INSTALLATION_PATH/$USER/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR" + check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" + check_env_var "EASYBUILD_UMASK" "077" + # unload and check the environment is clean again + module unload EESSI-extend + check_disallowed_env_prefix EASYBUILD_ + unset EESSI_USER_INSTALL + + - name: Run tests for EESSI-extend in the various GPU scenarios + run: | + export MY_INSTALLATION_PATH=/tmp/easybuild + + # Set an environment variable to use when we want to target accelerators + export STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE="accel/nvidia/cc80" + export STORED_CUDA_CC="80" + + # Let's start from a clean slate + module purge export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE + module load EESSI/${{matrix.EESSI_VERSION}} + # Access the installed EESSI-extend + module use "$MY_INSTALLATION_PATH"/modules/all + check_disallowed_env_prefix EASYBUILD_ + + # Configure for CVMFS install + export EESSI_CVMFS_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SOFTWARE_PATH" # installation path should be the same unless we ask for an explicit GPU installation check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC" export EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild # reload for an actual GPU installation - check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SOFTWARE_PATH}/accel/${EESSI_ACCELERATOR_TARGET_OVERRIDE}" # installation path should be the same unless we ask for an explicit GPU installation + check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SOFTWARE_PATH}/accel/${EESSI_ACCELERATOR_TARGET_OVERRIDE}" # unload and make sure the environment is clean again module unload EESSI-extend check_disallowed_env_prefix EASYBUILD_ - unset EESSI_ACCELERATOR_TARGET_OVERRIDE unset EESSI_ACCELERATOR_INSTALL unset EESSI_CVMFS_INSTALL # Now configure for a site export EESSI_SITE_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild - # check some specific envvars - check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SITE_SOFTWARE_PATH" - check_env_var "EASYBUILD_UMASK" "022" - # unload and check the environment is clean again - module unload EESSI-extend - # check an accelerator installation - export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE - module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SITE_SOFTWARE_PATH" # installation path should be the same unless we ask for an explicit GPU installation check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC" export EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild # reload for an actual GPU installation - check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SITE_SOFTWARE_PATH}/accel/${EESSI_ACCELERATOR_TARGET_OVERRIDE}" # installation path should be the same unless we ask for an explicit GPU installation + check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SITE_SOFTWARE_PATH}/accel/${EESSI_ACCELERATOR_TARGET_OVERRIDE}" # unload and make sure the environment is clean again module unload EESSI-extend check_disallowed_env_prefix EASYBUILD_ - unset EESSI_ACCELERATOR_TARGET_OVERRIDE unset EESSI_ACCELERATOR_INSTALL unset EESSI_SITE_INSTALL # Now for a project export EESSI_PROJECT_INSTALL="$MY_INSTALLATION_PATH" - module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild - # check some specific envvars - export EXPECTED_INSTALLATION_PATH="$MY_INSTALLATION_PATH/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR" - check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" - check_env_var "EASYBUILD_UMASK" "002" - check_env_var "EASYBUILD_GROUP_WRITABLE_INSTALLDIR" "1" - # unload and check the environment is clean again - module unload EESSI-extend - # check an accerator installation - export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE + export EXPECTED_INSTALLATION_PATH="$MY_INSTALLATION_PATH/$USER/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR" module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same unless we ask for an explicit GPU installation check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC" @@ -150,7 +183,6 @@ jobs: # unload and make sure the environment is clean again module unload EESSI-extend check_disallowed_env_prefix EASYBUILD_ - unset EESSI_ACCELERATOR_TARGET_OVERRIDE unset EESSI_ACCELERATOR_INSTALL unset EESSI_PROJECT_INSTALL @@ -160,12 +192,6 @@ jobs: module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild # check some specific envvars export EXPECTED_INSTALLATION_PATH="$MY_INSTALLATION_PATH/$USER/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR" - check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" - check_env_var "EASYBUILD_UMASK" "077" - # unload and check the environment is clean again - module unload EESSI-extend - # check an accerator installation - export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same unless we ask for an explicit GPU installation check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC" @@ -175,7 +201,5 @@ jobs: # unload and make sure the environment is clean again module unload EESSI-extend check_disallowed_env_prefix EASYBUILD_ - unset EESSI_ACCELERATOR_TARGET_OVERRIDE unset EESSI_ACCELERATOR_INSTALL - unset EESSI_USER_INSTALL - + unset EESSI_USER_INSTALL From 132ab4d5017fa5d3a52c2b02892d1c74fa251a03 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 3 Jul 2025 14:03:50 +0200 Subject: [PATCH 05/17] Make sure to source shell functions --- .github/workflows/tests_eessi_extend_module.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/tests_eessi_extend_module.yml b/.github/workflows/tests_eessi_extend_module.yml index 8042ea9f..9d4597e3 100644 --- a/.github/workflows/tests_eessi_extend_module.yml +++ b/.github/workflows/tests_eessi_extend_module.yml @@ -130,6 +130,11 @@ jobs: - name: Run tests for EESSI-extend in the various GPU scenarios run: | export MY_INSTALLATION_PATH=/tmp/easybuild + + # Define a function to check the values of environment variables + # and another that checks an environment does not contain environment + # variables matching a certain pattern + source .github/workflows/scripts/test_utils.sh # Set an environment variable to use when we want to target accelerators export STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE="accel/nvidia/cc80" From a72a5e13f766b4c4d429799f63d5964720ce9f37 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 3 Jul 2025 14:12:36 +0200 Subject: [PATCH 06/17] Match to accel/nvidia/ccXX in EESSI-extend --- EESSI-extend-easybuild.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-extend-easybuild.eb b/EESSI-extend-easybuild.eb index db14c20f..0f7b7a12 100644 --- a/EESSI-extend-easybuild.eb +++ b/EESSI-extend-easybuild.eb @@ -90,7 +90,7 @@ sysroot = os.getenv("EESSI_EPREFIX") -- Check if we have GPU capabilities and configure CUDA compute capabilities eessi_accelerator_target = os.getenv("EESSI_ACCELERATOR_TARGET") if (eessi_accelerator_target ~= nil) then - cuda_compute_capability = string.match(eessi_accelerator_target, "^nvidia/cc([0-9][0-9])$") + cuda_compute_capability = string.match(eessi_accelerator_target, "^accel/nvidia/cc([0-9][0-9])$") if (cuda_compute_capability ~= nil) then easybuild_cuda_compute_capabilities = cuda_compute_capability:sub(1, 1) .. "." .. cuda_compute_capability:sub(2, 2) else From bb5faa11833fa485dbfa7badd88e20fee94186ba Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 3 Jul 2025 14:16:10 +0200 Subject: [PATCH 07/17] EasyBuild expects . in CUDA compute capabilities --- .github/workflows/tests_eessi_extend_module.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests_eessi_extend_module.yml b/.github/workflows/tests_eessi_extend_module.yml index 9d4597e3..777639f9 100644 --- a/.github/workflows/tests_eessi_extend_module.yml +++ b/.github/workflows/tests_eessi_extend_module.yml @@ -138,7 +138,7 @@ jobs: # Set an environment variable to use when we want to target accelerators export STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE="accel/nvidia/cc80" - export STORED_CUDA_CC="80" + export STORED_CUDA_CC="8.0" # Let's start from a clean slate module purge From dd4238d386144e988c21dd4ab836f8d7b705296d Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 3 Jul 2025 14:17:45 +0200 Subject: [PATCH 08/17] accel is included in EESSI_ACCELERATOR_TARGET --- .github/workflows/tests_eessi_extend_module.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests_eessi_extend_module.yml b/.github/workflows/tests_eessi_extend_module.yml index 777639f9..0f228cc3 100644 --- a/.github/workflows/tests_eessi_extend_module.yml +++ b/.github/workflows/tests_eessi_extend_module.yml @@ -155,7 +155,7 @@ jobs: check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC" export EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild # reload for an actual GPU installation - check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SOFTWARE_PATH}/accel/${EESSI_ACCELERATOR_TARGET_OVERRIDE}" + check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SOFTWARE_PATH}/${EESSI_ACCELERATOR_TARGET_OVERRIDE}" # unload and make sure the environment is clean again module unload EESSI-extend check_disallowed_env_prefix EASYBUILD_ @@ -169,7 +169,7 @@ jobs: check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC" export EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild # reload for an actual GPU installation - check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SITE_SOFTWARE_PATH}/accel/${EESSI_ACCELERATOR_TARGET_OVERRIDE}" + check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SITE_SOFTWARE_PATH}/${EESSI_ACCELERATOR_TARGET_OVERRIDE}" # unload and make sure the environment is clean again module unload EESSI-extend check_disallowed_env_prefix EASYBUILD_ From 5ed221ddd98225cefb9ab519d2736e29380f6344 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 3 Jul 2025 14:20:20 +0200 Subject: [PATCH 09/17] typo --- .github/workflows/tests_eessi_extend_module.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests_eessi_extend_module.yml b/.github/workflows/tests_eessi_extend_module.yml index 0f228cc3..7d8e9daa 100644 --- a/.github/workflows/tests_eessi_extend_module.yml +++ b/.github/workflows/tests_eessi_extend_module.yml @@ -178,7 +178,7 @@ jobs: # Now for a project export EESSI_PROJECT_INSTALL="$MY_INSTALLATION_PATH" - export EXPECTED_INSTALLATION_PATH="$MY_INSTALLATION_PATH/$USER/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR" + export EXPECTED_INSTALLATION_PATH="$MY_INSTALLATION_PATH/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR" module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same unless we ask for an explicit GPU installation check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC" From 540e088b4f62c857b7aa8ac4be9c0f0ee400dd7b Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 3 Jul 2025 14:24:57 +0200 Subject: [PATCH 10/17] Extra subdirectory removed for accelerator subdir --- EESSI-extend-easybuild.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EESSI-extend-easybuild.eb b/EESSI-extend-easybuild.eb index 0f7b7a12..88de9164 100644 --- a/EESSI-extend-easybuild.eb +++ b/EESSI-extend-easybuild.eb @@ -108,7 +108,7 @@ if (os.getenv("EESSI_CVMFS_INSTALL") ~= nil) then easybuild_installpath = os.getenv("EESSI_SOFTWARE_PATH") -- enforce accelerator subdirectory usage for CVMFS installs (only if an accelerator install is requested) if (eessi_accelerator_target ~= nil) and (cuda_compute_capability ~= nil) and (os.getenv("EESSI_ACCELERATOR_INSTALL") ~= nil) then - easybuild_installpath = pathJoin(easybuild_installpath, 'accel', eessi_accelerator_target) + easybuild_installpath = pathJoin(easybuild_installpath, eessi_accelerator_target) end elseif (os.getenv("EESSI_SITE_INSTALL") ~= nil) then -- Make sure no other EESSI install environment variables are set @@ -118,7 +118,7 @@ elseif (os.getenv("EESSI_SITE_INSTALL") ~= nil) then easybuild_installpath = os.getenv("EESSI_SITE_SOFTWARE_PATH") -- enforce accelerator subdirectory usage for site installs (only if an accelerator install is requested) if (eessi_accelerator_target ~= nil) and (cuda_compute_capability ~= nil) and (os.getenv("EESSI_ACCELERATOR_INSTALL") ~= nil) then - easybuild_installpath = pathJoin(easybuild_installpath, 'accel', eessi_accelerator_target) + easybuild_installpath = pathJoin(easybuild_installpath, eessi_accelerator_target) end else -- Deal with user and project installs From 2416487ea971f73cf968c74a9f15c1f15905e381 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 3 Jul 2025 16:45:54 +0200 Subject: [PATCH 11/17] MAke sure the bot sets the right environment variables --- EESSI-install-software.sh | 5 +++++ bot/build.sh | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index c491819f..bd9e5c20 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -284,6 +284,11 @@ if [[ ! -z ${EESSI_DEV_PROJECT} ]]; then echo ">> \$EESSI_PROJECT_INSTALL set to ${EESSI_PROJECT_INSTALL}" fi +# If we have EESSI_ACCELERATOR_TARGET_OVERRIDE set (and non-empty), then this implies building for a GPU target +if [[ -n "$EESSI_ACCELERATOR_TARGET_OVERRIDE" ]]; then + export EESSI_ACCELERATOR_INSTALL=1 +fi + echo "DEBUG: before loading EESSI-extend // EASYBUILD_INSTALLPATH='${EASYBUILD_INSTALLPATH}'" source $TOPDIR/load_eessi_extend_module.sh ${EESSI_VERSION} echo "DEBUG: after loading EESSI-extend // EASYBUILD_INSTALLPATH='${EASYBUILD_INSTALLPATH}'" diff --git a/bot/build.sh b/bot/build.sh index 2bba0cba..6cf0f05f 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -162,8 +162,8 @@ 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} -export EESSI_ACCELERATOR_TARGET=$(cfg_get_value "architecture" "accelerator") -echo "bot/build.sh: EESSI_ACCELERATOR_TARGET='${EESSI_ACCELERATOR_TARGET}'" +export EESSI_ACCELERATOR_TARGET_OVERRIDE="accel/$(cfg_get_value architecture accelerator)" +echo "bot/build.sh: EESSI_ACCELERATOR_TARGET_OVERRIDE='${EESSI_ACCELERATOR_TARGET_OVERRIDE}'" # get EESSI_OS_TYPE from .architecture.os_type in ${JOB_CFG_FILE} (default: linux) EESSI_OS_TYPE=$(cfg_get_value "architecture" "os_type") From 635ff467363eb327b3a59f1662966da4b5dc899e Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Fri, 4 Jul 2025 11:05:14 +0200 Subject: [PATCH 12/17] Ensure build scripts are aware of new EESSI-extend behaviour --- EESSI-extend-easybuild.eb | 2 +- EESSI-install-software.sh | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/EESSI-extend-easybuild.eb b/EESSI-extend-easybuild.eb index 88de9164..82ac8878 100644 --- a/EESSI-extend-easybuild.eb +++ b/EESSI-extend-easybuild.eb @@ -38,7 +38,7 @@ description = """ Strict installation path checking is enforced by EESSI for EESSI and site installations involving accelerators. In these cases, if you wish to create an - accelerator installation you must set the environement variable + accelerator installation you must set the environment variable EESSI_ACCELERATOR_INSTALL (and load/reload this module). """ diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index bd9e5c20..e0b16d36 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -285,7 +285,12 @@ if [[ ! -z ${EESSI_DEV_PROJECT} ]]; then fi # If we have EESSI_ACCELERATOR_TARGET_OVERRIDE set (and non-empty), then this implies building for a GPU target -if [[ -n "$EESSI_ACCELERATOR_TARGET_OVERRIDE" ]]; then +# (this must be set _before_ we load EESSI-extend). +# We also make sure that EESSI_ACCELERATOR_TARGET is also set as EESSI_ACCELERATOR_TARGET_OVERRIDE must +# be set before the EESSI module is loaded in order to set accelerator information. +if [[ -n "$EESSI_ACCELERATOR_TARGET_OVERRIDE" && -z "$EESSI_ACCELERATOR_TARGET" ]]; then + fatal_error "EESSI module should've set EESSI_ACCELERATOR_TARGET when EESSI_ACCELERATOR_TARGET_OVERRIDE exported." >&2 +elif [[ -n "$EESSI_ACCELERATOR_TARGET_OVERRIDE" ]]; then export EESSI_ACCELERATOR_INSTALL=1 fi From 996f0655b76486d785ba82fe28173927b1cf4e53 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Fri, 4 Jul 2025 15:44:52 +0200 Subject: [PATCH 13/17] Update EESSI-install-software.sh --- EESSI-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index e0b16d36..82b40c0a 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -288,7 +288,7 @@ fi # (this must be set _before_ we load EESSI-extend). # We also make sure that EESSI_ACCELERATOR_TARGET is also set as EESSI_ACCELERATOR_TARGET_OVERRIDE must # be set before the EESSI module is loaded in order to set accelerator information. -if [[ -n "$EESSI_ACCELERATOR_TARGET_OVERRIDE" && -z "$EESSI_ACCELERATOR_TARGET" ]]; then +if [[ -n "$EESSI_ACCELERATOR_TARGET_OVERRIDE" && -n "$EESSI_ACCELERATOR_TARGET" ]]; then fatal_error "EESSI module should've set EESSI_ACCELERATOR_TARGET when EESSI_ACCELERATOR_TARGET_OVERRIDE exported." >&2 elif [[ -n "$EESSI_ACCELERATOR_TARGET_OVERRIDE" ]]; then export EESSI_ACCELERATOR_INSTALL=1 From b9cdb1abdba99893f90cf566f2cb7a00b351105b Mon Sep 17 00:00:00 2001 From: ocaisa Date: Fri, 4 Jul 2025 15:50:26 +0200 Subject: [PATCH 14/17] Update EESSI-install-software.sh --- EESSI-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 82b40c0a..9b1733ea 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -289,7 +289,7 @@ fi # We also make sure that EESSI_ACCELERATOR_TARGET is also set as EESSI_ACCELERATOR_TARGET_OVERRIDE must # be set before the EESSI module is loaded in order to set accelerator information. if [[ -n "$EESSI_ACCELERATOR_TARGET_OVERRIDE" && -n "$EESSI_ACCELERATOR_TARGET" ]]; then - fatal_error "EESSI module should've set EESSI_ACCELERATOR_TARGET when EESSI_ACCELERATOR_TARGET_OVERRIDE exported." >&2 + fatal_error "EESSI module should've set EESSI_ACCELERATOR_TARGET ($EESSI_ACCELERATOR_TARGET) when EESSI_ACCELERATOR_TARGET_OVERRIDE ($EESSI_ACCELERATOR_TARGET_OVERRIDE) exported." elif [[ -n "$EESSI_ACCELERATOR_TARGET_OVERRIDE" ]]; then export EESSI_ACCELERATOR_INSTALL=1 fi From d4ceacc5e0f3bee6dd512994920a2a6c945c349e Mon Sep 17 00:00:00 2001 From: ocaisa Date: Fri, 4 Jul 2025 15:50:54 +0200 Subject: [PATCH 15/17] Update EESSI-install-software.sh --- EESSI-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 9b1733ea..2d5a62c7 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -288,7 +288,7 @@ fi # (this must be set _before_ we load EESSI-extend). # We also make sure that EESSI_ACCELERATOR_TARGET is also set as EESSI_ACCELERATOR_TARGET_OVERRIDE must # be set before the EESSI module is loaded in order to set accelerator information. -if [[ -n "$EESSI_ACCELERATOR_TARGET_OVERRIDE" && -n "$EESSI_ACCELERATOR_TARGET" ]]; then +if [[ -n "$EESSI_ACCELERATOR_TARGET_OVERRIDE" && -z "$EESSI_ACCELERATOR_TARGET" ]]; then fatal_error "EESSI module should've set EESSI_ACCELERATOR_TARGET ($EESSI_ACCELERATOR_TARGET) when EESSI_ACCELERATOR_TARGET_OVERRIDE ($EESSI_ACCELERATOR_TARGET_OVERRIDE) exported." elif [[ -n "$EESSI_ACCELERATOR_TARGET_OVERRIDE" ]]; then export EESSI_ACCELERATOR_INSTALL=1 From baae956db8dd35837d1e7164835ae1b321e053ed Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Fri, 4 Jul 2025 16:36:47 +0200 Subject: [PATCH 16/17] Be more careful when setting EESSI_ACCELERATOR_TARGET_OVERRIDE based on bot config --- bot/build.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bot/build.sh b/bot/build.sh index 6cf0f05f..4d034f7a 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -162,7 +162,12 @@ 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} -export EESSI_ACCELERATOR_TARGET_OVERRIDE="accel/$(cfg_get_value architecture accelerator)" +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="" echo "bot/build.sh: EESSI_ACCELERATOR_TARGET_OVERRIDE='${EESSI_ACCELERATOR_TARGET_OVERRIDE}'" # get EESSI_OS_TYPE from .architecture.os_type in ${JOB_CFG_FILE} (default: linux) From 545f5d98948b35a20c87f8c216a3c0866fe3b3f4 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Fri, 4 Jul 2025 16:43:30 +0200 Subject: [PATCH 17/17] Update bot/build.sh MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bob Dröge --- bot/build.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bot/build.sh b/bot/build.sh index 4d034f7a..45a15f23 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -168,6 +168,7 @@ if [[ -n "$ACCEL_OVERRIDE" ]]; then 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}'" # get EESSI_OS_TYPE from .architecture.os_type in ${JOB_CFG_FILE} (default: linux)