diff --git a/.gitmodules b/.gitmodules index 2f6cb0566..eb862fd1a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,5 +4,8 @@ branch = spack-stack-dev [submodule "repos/builtin"] path = repos/builtin - url = https://github.com/jcsda/spack-packages - branch = spack-stack-dev + #url = https://github.com/jcsda/spack-packages + #branch = spack-stack-dev + # https://github.com/JCSDA/spack-packages/pull/57 + url = https://github.com/climbfuji/spack-packages + branch = bugfix/scalasca_scorep_spack_stack_dev diff --git a/configs/common/packages.yaml b/configs/common/packages.yaml index 399bf4ba9..d55881667 100644 --- a/configs/common/packages.yaml +++ b/configs/common/packages.yaml @@ -463,6 +463,8 @@ packages: py-versioneer: require: - '@0.29' + # On a per-site basis, either set qt to buildable: false + # or add requirement to build with gcc for Intel oneAPI qt: require: - '@5' diff --git a/configs/common/packages_oneapi.yaml b/configs/common/packages_oneapi.yaml index e6516bcab..ddb3aae72 100644 --- a/configs/common/packages_oneapi.yaml +++ b/configs/common/packages_oneapi.yaml @@ -71,9 +71,9 @@ packages: py-scipy: require: - 'cxxflags="-O1"' - qt: - require: - - '%c,cxx=gcc' + #qt: + # require: + # - '%c,cxx=gcc' rust: require: - '%c,cxx=gcc' diff --git a/configs/sites/tier1/blueback/packages_oneapi-2026.0.0.yaml b/configs/sites/tier1/blueback/packages_oneapi-2026.0.0.yaml new file mode 100644 index 000000000..427de65e2 --- /dev/null +++ b/configs/sites/tier1/blueback/packages_oneapi-2026.0.0.yaml @@ -0,0 +1,62 @@ +packages: + all: + require: + - any_of: ['%intel-oneapi-compilers@=2026.0.0'] + when: '%intel-oneapi-compilers' + - any_of: ['%gcc@=13.3.0'] + when: '%gcc' + mpi: + buildable: false + require: + - cray-mpich@8.1.32 + intel-oneapi-compilers: + buildable: false + externals: + - spec: intel-oneapi-compilers@2026.0.0 +fix_rt_linkage + prefix: /p/app/intel/oneapi-combined + modules: + - PrgEnv-intel/8.6.0 + - intel-oneapi/2026.0.0 + extra_attributes: + compilers: + c: /p/app/projects/NEPTUNE/spack-stack/oneapi-2026.0.0/2026.0/bin/icx + cxx: /p/app/projects/NEPTUNE/spack-stack/oneapi-2026.0.0/2026.0/bin/icpx + fortran: /p/app/projects/NEPTUNE/spack-stack/oneapi-2026.0.0/2026.0/bin/ifx + environment: + set: + CONFIG_SITE: '' + gcc: + buildable: false + externals: + - spec: gcc@13.3.0 languages:='c,c++' + prefix: /usr + modules: + - PrgEnv-gnu/8.6.0 + - gcc-native/13.2 + extra_attributes: + compilers: + c: /usr/bin/gcc + cxx: /usr/bin/g++ + fortran: /usr/bin/gfortran + environment: + set: + CONFIG_SITE: '' + PE_GCC_EXTERNAL: native + cray-mpich: + buildable: false + externals: + - spec: cray-mpich@8.1.32 + prefix: /opt/cray/pe/mpich/8.1.32/ofi/INTEL/2022.1 + modules: + - libfabric/1.22.0 + - craype-network-ofi + - cray-mpich/8.1.32 + extra_attributes: + environment: + prepend_path: + CMAKE_PREFIX_PATH: /p/app/projects/NEPTUNE/spack-stack/cmake-findmpi + intel-oneapi-mkl: + buildable: false + externals: + - spec: intel-oneapi-mkl@2026.0 + prefix: /p/app/projects/NEPTUNE/spack-stack/oneapi-2026.0.0 diff --git a/configs/sites/tier2/bounty/packages.yaml b/configs/sites/tier2/bounty/packages.yaml index c63f61987..19593bb9f 100644 --- a/configs/sites/tier2/bounty/packages.yaml +++ b/configs/sites/tier2/bounty/packages.yaml @@ -1,5 +1,8 @@ packages: # Modification of common packages + dev-utils-env: + require: + - +scalasca # All other packages listed alphabetically autoconf: diff --git a/configs/sites/tier2/bounty/packages_oneapi-2026.0.0.yaml b/configs/sites/tier2/bounty/packages_oneapi-2026.0.0.yaml new file mode 100644 index 000000000..978f17bc9 --- /dev/null +++ b/configs/sites/tier2/bounty/packages_oneapi-2026.0.0.yaml @@ -0,0 +1,41 @@ +packages: + all: + require: + - any_of: ['%intel-oneapi-compilers@=2026.0.0'] + when: '%intel-oneapi-compilers' + - any_of: ['%gcc@=11.5.0'] + when: '%gcc' + mpi: + buildable: False + require: + - "intel-oneapi-mpi@2021.18" + intel-oneapi-compilers: + buildable: false + externals: + - spec: intel-oneapi-compilers@2026.0.0 +fix_rt_linkage + prefix: /opt/intel/oneapi + extra_attributes: + compilers: + c: /opt/intel/oneapi/2026.0/bin/icx + cxx: /opt/intel/oneapi/2026.0/bin/icpx + fortran: /opt/intel/oneapi/2026.0/bin/ifx + gcc: + buildable: false + externals: + - spec: gcc@11.5.0 languages:='c,c++' + prefix: /usr + extra_attributes: + compilers: + c: /usr/bin/gcc + cxx: /usr/bin/g++ + fortran: /usr/bin/gfortran + intel-oneapi-mpi: + buildable: false + externals: + - spec: intel-oneapi-mpi@2021.18 + prefix: /opt/intel/oneapi + intel-oneapi-mkl: + buildable: false + externals: + - spec: intel-oneapi-mkl@2026.0 + prefix: /opt/intel/oneapi diff --git a/repos/builtin b/repos/builtin index 0fb88e672..a568bb1e9 160000 --- a/repos/builtin +++ b/repos/builtin @@ -1 +1 @@ -Subproject commit 0fb88e672d8ed7614f89e9b050132e768e286114 +Subproject commit a568bb1e91edc58b51056d7ba645669492787c64 diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/dev_utils_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/dev_utils_env/package.py index b9ce81a3d..2e3911b54 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/dev_utils_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/dev_utils_env/package.py @@ -19,6 +19,8 @@ class DevUtilsEnv(BundlePackage): version("1.0.0") + variant("scalasca", default=False, description="Build Scalasca/Cube") + depends_on("base-env", type="run") # I/O @@ -27,6 +29,10 @@ class DevUtilsEnv(BundlePackage): depends_on("py-pydantic +dotenv", type="run") depends_on("py-pydantic-settings", type="run") + # Scalasca/ScoreP + depends_on("scalasca", when="+scalasca", type="run") + depends_on("cube +gui", when="+scalasca", type="run") + # Miscellaneous depends_on("cloc", type="run") depends_on("rank-run", type="run") diff --git a/spack-ext/lib/jcsda-emc/spack-stack/stack/compiler_utils.py b/spack-ext/lib/jcsda-emc/spack-stack/stack/compiler_utils.py index fcb54871c..09952983e 100644 --- a/spack-ext/lib/jcsda-emc/spack-stack/stack/compiler_utils.py +++ b/spack-ext/lib/jcsda-emc/spack-stack/stack/compiler_utils.py @@ -95,6 +95,7 @@ def check_preferred_compiler(): except: logging.info(f" ... {spec.name}@{spec.version}/{spec.dag_hash(length=7)} has no compiler dependency") continue + logging.warning(f" ... {spec.name}@{spec.version}/{spec.dag_hash(length=7)}: {compiler_name}@={compiler_version}") # If the spec compiler matches the preferred compiler for the environment, move on. # Note that this permits situations where a packages has an explicit preferred (but # not explicitly required) compiler, but Spack decides to use the preferred (and diff --git a/util/nrl/batch_install.sh b/util/nrl/batch_install.sh index 73990dfaf..5b1f754b9 100755 --- a/util/nrl/batch_install.sh +++ b/util/nrl/batch_install.sh @@ -141,7 +141,7 @@ case ${SPACK_STACK_BATCH_HOST} in SPACK_STACK_CARGO_MIRROR="/neptune_diagnostics/spack-stack/cargo-mirror" ;; blueback) - SPACK_STACK_BATCH_COMPILERS=("oneapi@=2025.0.4" "gcc@=13.3.0" "gcc@=14.3.0") # oneapi@=2025.2.1 + SPACK_STACK_BATCH_COMPILERS=("oneapi@=2025.0.4" "oneapi@=2026.0.0" "gcc@=13.3.0" "gcc@=14.3.0") SPACK_STACK_BATCH_TEMPLATES=("neptune-dev" "unified-dev" "cylc-dev") SPACK_STACK_MODULE_CHOICE="tcl" SPACK_STACK_BOOTSTRAP_MIRROR="/p/app/projects/NEPTUNE/spack-stack/bootstrap-mirror" @@ -177,7 +177,7 @@ case ${SPACK_STACK_BATCH_HOST} in ;; bounty) SPACK_STACK_BATCH_COMPILERS=("oneapi@=2025.3.0" "gcc@=14.2.1" "gcc@=13.3.1" "clang@=22.1.0") - SPACK_STACK_BATCH_TEMPLATES=("neptune-dev" "neptune-dev-llvm" "unified-dev" "cylc-dev") + SPACK_STACK_BATCH_TEMPLATES=("neptune-dev") #"neptune-dev-llvm" "unified-dev" "cylc-dev") SPACK_STACK_MODULE_CHOICE="tcl" SPACK_STACK_BOOTSTRAP_MIRROR="/home/dom/prod/spack-bootstrap-mirror" SPACK_STACK_CARGO_MIRROR="/home/dom/prod/spack-cargo-mirror" @@ -502,6 +502,11 @@ for compiler in "${SPACK_STACK_BATCH_COMPILERS[@]}"; do set +e module purge set -e + case ${compiler} in + oneapi@=2026.0.0) + module use /p/app/projects/NEPTUNE/spack-stack/oneapi-2026.0.0/modulefiles + ;; + esac ;; narwhal) umask 0022 diff --git a/util/nrl/intel_oneapi-2026.0.0_install.sh b/util/nrl/intel_oneapi-2026.0.0_install.sh new file mode 100755 index 000000000..2aa0c9dcf --- /dev/null +++ b/util/nrl/intel_oneapi-2026.0.0_install.sh @@ -0,0 +1,92 @@ +#!/usr/bin/env bash + +set -eu + +umask 0022 +module purge + +if [ "$#" -lt 1 ]; then + echo "Error: Not enough arguments. Provide Intel oneAPI installation prefix." + exit 1 +fi + +ONEAPI_INSTALL_DIR=${1} +ONEAPI_VERSION="2026.0.0" +COMPILER_VERSION="2026.0" +MKL_VERSION="2026.0" +ONEAPI_DOWNLOAD_URL=https://registrationcenter-download.intel.com/akdlm/IRC_NAS/71180075-e4e3-4c6f-bbbb-19017ed0cf7d/intel-oneapi-toolkit-2026.0.0.198_offline.sh + +mkdir -p ${ONEAPI_INSTALL_DIR}/src +cd ${ONEAPI_INSTALL_DIR}/src +wget ${ONEAPI_DOWNLOAD_URL} +ONEAPI_INSTALL_SCRIPT="${ONEAPI_DOWNLOAD_URL##*/}" +sh ./${ONEAPI_INSTALL_SCRIPT} -a --silent --eula accept --install-dir ${ONEAPI_INSTALL_DIR} --intel-sw-improvement-program-consent decline 2>&1 | tee log.install + +# Check that compiler and mkl versions are correct +if [ ! -d "${ONEAPI_INSTALL_DIR}/compiler/${COMPILER_VERSION}" ]; then + echo "Error, directory ${ONEAPI_INSTALL_DIR}/compiler/${COMPILER_VERSION} does not exist" + exit 1 +fi +if [ ! -d "${ONEAPI_INSTALL_DIR}/mkl/${MKL_VERSION}" ]; then + echo "Error, directory ${ONEAPI_INSTALL_DIR}/mkl/${MKL_VERSION} does not exist" + exit 1 +fi + +# Create modulefiles - special modules for Cray, Intel auto-generated modules elsewhere +HOSTNAME=$(hostname) +if [[ "${HOSTNAME}" == *"blueback"* || "${HOSTNAME}" == *"narwhal"* ]]; then + mkdir -p ${ONEAPI_INSTALL_DIR}/modulefiles/intel-oneapi + cat << EOF > ${ONEAPI_INSTALL_DIR}/modulefiles/intel-oneapi/2026.0.0 +#%Module +# +# Intel oneAPI module +# + +conflict intel +conflict intel-classic +conflict intel-oneapi + +set INTEL_CURPATH ${ONEAPI_INSTALL_DIR}/compiler/${COMPILER_VERSION} +set INTEL_LEVEL ${COMPILER_VERSION} + +setenv INTEL_PATH \$INTEL_CURPATH +setenv INTEL_VERSION \$INTEL_LEVEL +setenv INTEL_COMPILER_TYPE "ONEAPI" + +prepend-path {LD_LIBRARY_PATH} {${ONEAPI_INSTALL_DIR}/compiler/${COMPILER_VERSION}/opt/compiler/lib:${ONEAPI_INSTALL_DIR}/compiler/${COMPILER_VERSION}/lib} +setenv {OCL_ICD_FILENAMES} {${ONEAPI_INSTALL_DIR}/compiler/${COMPILER_VERSION}/lib/libintelocl.so} +setenv {CMPLR_ROOT} {${ONEAPI_INSTALL_DIR}/compiler/${COMPILER_VERSION}} +prepend-path {CMAKE_PREFIX_PATH} {${ONEAPI_INSTALL_DIR}/compiler/${COMPILER_VERSION}} +prepend-path {NLSPATH} {} +prepend-path {LIBRARY_PATH} {${ONEAPI_INSTALL_DIR}/compiler/${COMPILER_VERSION}/lib} +prepend-path {DIAGUTIL_PATH} {} +prepend-path {MANPATH} {${ONEAPI_INSTALL_DIR}/compiler/${COMPILER_VERSION}/share/man} +prepend-path {PATH} {${ONEAPI_INSTALL_DIR}/compiler/${COMPILER_VERSION}/bin} +prepend-path {PKG_CONFIG_PATH} {${ONEAPI_INSTALL_DIR}/compiler/${COMPILER_VERSION}/lib/pkgconfig} +prepend-path {LD_LIBRARY_PATH} {${ONEAPI_INSTALL_DIR}/mkl/${MKL_VERSION}/lib} +prepend-path {CMAKE_PREFIX_PATH} {${ONEAPI_INSTALL_DIR}/mkl/${MKL_VERSION}/lib/cmake} +prepend-path {CPATH} {${ONEAPI_INSTALL_DIR}/mkl/${MKL_VERSION}/include} +prepend-path {LIBRARY_PATH} {${ONEAPI_INSTALL_DIR}/mkl/${MKL_VERSION}/lib} +setenv {MKLROOT} {${ONEAPI_INSTALL_DIR}/mkl/${MKL_VERSION}} +prepend-path {PATH} {${ONEAPI_INSTALL_DIR}/mkl/${MKL_VERSION}/bin} +prepend-path {PKG_CONFIG_PATH} {${ONEAPI_INSTALL_DIR}/mkl/${MKL_VERSION}/lib/pkgconfig} + +proc ModulesHelp { } { + global INTEL_LEVEL + global INTEL_CURPATH +} + +# This module was produced with dom-gen 0.0.1 + +module-whatis "Intel oneAPI compiler" +EOF + +else + cd ${ONEAPI_INSTALL_DIR} + ./modulefiles-setup.sh --output-dir=${ONEAPI_INSTALL_DIR}/modulefiles --ignore-latest 2>&1 | tee log.modulefiles + # Fix non-ascii symbols in Intel modulefiles; must follow links + for file in `find ./modulefiles -type l`; do + echo $file + sed -i --follow-symlinks 's/®//g' $file + done +fi