diff --git a/.gitattributes b/.gitattributes index 6cc3a7e9..adc2bfdf 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1 @@ -tplMirror/*.gz filter=lfs diff=lfs merge=lfs -text -tplMirror/*.zip filter=lfs diff=lfs merge=lfs -text *.rpm filter=lfs diff=lfs merge=lfs -text diff --git a/.github/workflows/docker_build_tpls.yml b/.github/workflows/docker_build_tpls.yml index 9be42e6c..d900a231 100644 --- a/.github/workflows/docker_build_tpls.yml +++ b/.github/workflows/docker_build_tpls.yml @@ -159,6 +159,20 @@ jobs: # DOCKER_REPOSITORY: geosx/rockylinux9-gcc15-cuda13.2.1 # SPEC: "+cuda cuda_arch=86,120 ~openmp ~pygeosx ~docs %gcc-15 ^cuda@13.2.1+allow-unsupported-compilers" + # ROCm build. Unlike the rows above it does not layer on a + # geosx/:- base image: AMD's own ROCm image already + # ships the amdclang toolchain and the ROCm math libraries, so the + # base image is given literally via DOCKER_BASE_IMAGE_OVERRIDE. + - name: Ubuntu 24.04 - amdclang 19 + ROCm 6.4.3 + RUNS_ON: streak2 + TPL_DOCKERFILE: docker/tpl-ubuntu-hip.Dockerfile + DOCKER_BASE_IMAGE_OVERRIDE: rocm/dev-ubuntu-24.04:6.4.3 + DOCKER_REPOSITORY: geosx/ubuntu24.04-amdclang19.0.0-rocm6.4.3 + ROCM_VERSION: 6.4.3 + AMDGPU_TARGET: gfx942 + SPACK_BUILD_JOBS: 8 + SPEC: "+rocm ~uncrustify ~openmp ~pygeosx ~docs ~trilinos ~petsc amdgpu_target=gfx942 %%amdclang-19 ^caliper~papi~gotcha~sampler~libunwind~libdw" + steps: - name: Checkout uses: actions/checkout@v6 @@ -182,7 +196,13 @@ jobs: - name: Compose DOCKER_BASE_IMAGE id: base run: | - echo "DOCKER_BASE_IMAGE=${{ matrix.DOCKER_BASE_IMAGE_REPO }}:${{ matrix.DOCKER_BASE_IMAGE_TAG }}-${DOCKER_BASE_IMAGE_SHA}" >> "$GITHUB_OUTPUT" + # Rows that do not build on a docker_base_images image (e.g. ROCm) + # pin their base image directly. + if [ -n "${{ matrix.DOCKER_BASE_IMAGE_OVERRIDE }}" ]; then + echo "DOCKER_BASE_IMAGE=${{ matrix.DOCKER_BASE_IMAGE_OVERRIDE }}" >> "$GITHUB_OUTPUT" + else + echo "DOCKER_BASE_IMAGE=${{ matrix.DOCKER_BASE_IMAGE_REPO }}:${{ matrix.DOCKER_BASE_IMAGE_TAG }}-${DOCKER_BASE_IMAGE_SHA}" >> "$GITHUB_OUTPUT" + fi - name: Inject CA certificate into Docker build if: matrix.RUNS_ON == 'streak2' @@ -227,6 +247,9 @@ jobs: DOCKER_BASE_IMAGE: ${{ steps.base.outputs.DOCKER_BASE_IMAGE }} GCC_VERSION: ${{ matrix.GCC_VERSION }} CLANG_VERSION: ${{ matrix.CLANG_VERSION }} + ROCM_VERSION: ${{ matrix.ROCM_VERSION }} + AMDGPU_TARGET: ${{ matrix.AMDGPU_TARGET }} + SPACK_BUILD_JOBS: ${{ matrix.SPACK_BUILD_JOBS }} INSTALL_DIR_ROOT: ${{ matrix.INSTALL_DIR_ROOT || '/opt/GEOS' }} HOST_CONFIG: ${{ matrix.HOST_CONFIG || 'host-configs/environment.cmake' }} SPEC: ${{ matrix.SPEC || 'undefined' }} diff --git a/.uberenv_config.json b/.uberenv_config.json index 11d6a5ee..27503c20 100644 --- a/.uberenv_config.json +++ b/.uberenv_config.json @@ -8,6 +8,7 @@ "spack_url": "https://github.com/spack/spack", "spack_commit": "3e19345b6e12f5ff1b874f4059622fc6a1fd804a", "spack_commit_note": "v1.2.2 (Jul 20th 2026)", -"spack_packages_commit": "bd9b4838fbf9e4ca01ad7b6c6df633ddcc750d71", -"spack_packages_note": "Jul 20th 2026" +"spack_packages_commit": "9bb5e217dd9f9233991e0b4ceb407849588a0fa4", +"spack_packages_note": "Aug 20th 2026", +"spack_setup_clingo": 0 } diff --git a/CMakeLists.txt b/CMakeLists.txt index dbbe214d..a6737ee5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,7 +64,6 @@ ProcessorCount(NUM_CORES) set(NUM_PROC ${NUM_CORES} CACHE STRING "") message( "Running with NUM_PROC = ${NUM_PROC}") -set(TPL_MIRROR_DIR "${CMAKE_SOURCE_DIR}/tplMirror") set(build_list ) set( CMAKE_POSITION_INDEPENDENT_CODE ON ) @@ -81,7 +80,7 @@ string(REPLACE "-Wextra" "" CXX_FLAGS_NO_WARNINGS ${CXX_FLAGS_NO_WARNINGS}) set(CXX_FLAGS_NO_WARNINGS "${CXX_FLAGS_NO_WARNINGS} -w") string(STRIP ${CXX_FLAGS_NO_WARNINGS} CXX_FLAGS_NO_WARNINGS) -string(TOUPPER ${CMAKE_BUILD_TYPE} BUILD_TYPE_UPPER) +string(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_UPPER) # Setup Ninja support if (ENABLE_NINJA) @@ -177,11 +176,13 @@ endif() # UNCRUSTIFY ################################ set(UNCRUSTIFY_DIR "${CMAKE_INSTALL_PREFIX}/uncrustify") -set(UNCRUSTIFY_URL "${TPL_MIRROR_DIR}/uncrustify-401a409.zip") +set(UNCRUSTIFY_URL "https://github.com/uncrustify/uncrustify/archive/401a409.zip") +set(UNCRUSTIFY_URL_HASH "3d948d9d9047a7749632946f323313b9603f026302c37fb932c8414dfc714207") message(STATUS "Building uncrustify found at ${UNCRUSTIFY_URL}") ExternalProject_Add( uncrustify URL ${UNCRUSTIFY_URL} + URL_HASH SHA256=${UNCRUSTIFY_URL_HASH} PREFIX ${PROJECT_BINARY_DIR}/uncrustify INSTALL_DIR ${UNCRUSTIFY_DIR} BUILD_COMMAND ${TPL_BUILD_COMMAND} @@ -204,11 +205,13 @@ list(APPEND build_list uncrustify ) if( GEOSXTPL_ENABLE_DOXYGEN ) set(DOXYGEN_DIR "${CMAKE_INSTALL_PREFIX}/doxygen") - set(DOXYGEN_URL "${TPL_MIRROR_DIR}/doxygen-1.8.20.tar.gz") + set(DOXYGEN_URL "https://github.com/doxygen/doxygen/archive/refs/tags/Release_1_8_20.tar.gz") + set(DOXYGEN_URL_HASH "3dbdf8814d6e68233d5149239cb1f0b40b4e7b32eef2fd53de8828fedd7aca15") message(STATUS "Building Doxygen found at ${DOXYGEN_URL}") ExternalProject_Add( doxygen URL ${DOXYGEN_URL} + URL_HASH SHA256=${DOXYGEN_URL_HASH} PREFIX ${PROJECT_BINARY_DIR}/doxygen INSTALL_DIR ${DOXYGEN_DIR} BUILD_COMMAND make -j ${NUM_PROC} @@ -228,7 +231,8 @@ endif() ################################ set( HDF5_DEPENDENCIES "" ) set(HDF5_DIR "${CMAKE_INSTALL_PREFIX}/hdf5") -set(HDF5_URL "${TPL_MIRROR_DIR}/hdf5-1.12.1.tar.gz") +set(HDF5_URL "https://github.com/HDFGroup/hdf5/archive/refs/tags/hdf5-1_12_1.tar.gz") +set(HDF5_URL_HASH "e6dde173c2d243551922d23a0387a79961205b018502e6a742acb30b61bc2d5f") message(STATUS "Building HDF5 found at ${HDF5_URL}") if( ${ENABLE_MPI} ) @@ -251,6 +255,7 @@ endif() ExternalProject_Add( hdf5 URL ${HDF5_URL} + URL_HASH SHA256=${HDF5_URL_HASH} PREFIX ${PROJECT_BINARY_DIR}/hdf5 INSTALL_DIR ${HDF5_DIR} BUILD_COMMAND make -j ${NUM_PROC} @@ -282,7 +287,8 @@ list(APPEND build_list hdf5 ) # Conduit ################################ set(CONDUIT_DIR "${CMAKE_INSTALL_PREFIX}/conduit") -set(CONDUIT_URL "${TPL_MIRROR_DIR}/conduit-v0.9.5-src-with-blt.tar.gz") +set(CONDUIT_URL "https://github.com/LLNL/conduit/releases/download/v0.9.5/conduit-v0.9.5-src-with-blt.tar.gz") +set(CONDUIT_URL_HASH "d93294efbf0936da5a27941e13486aa1a04a74a59285786a2303eed19a24265a") message(STATUS "Building Conduit found at ${CONDUIT_URL}") if( ${ENABLE_MPI} ) @@ -295,6 +301,7 @@ endif() ExternalProject_Add( conduit URL ${CONDUIT_URL} + URL_HASH SHA256=${CONDUIT_URL_HASH} PREFIX ${PROJECT_BINARY_DIR}/conduit SOURCE_SUBDIR src INSTALL_DIR ${CONDUIT_DIR} @@ -339,7 +346,8 @@ list(APPEND build_list conduit ) # SILO ################################ set(SILO_DIR "${CMAKE_INSTALL_PREFIX}/silo") -set(SILO_URL "${TPL_MIRROR_DIR}/silo-4.11.1-bsd.tar.xz") +set(SILO_URL "https://github.com/LLNL/Silo/releases/download/4.11.1/silo-4.11.1-bsd.tar.xz") +set(SILO_URL_HASH "51ccfdf3c09dfc98c7858a0a6f08cc3b2a07ee3c4142ee6482ba7b24e314c2aa") message(STATUS "Building SILO found at ${SILO_URL}") string(REPLACE ";" " " HDF5_C_FLAGS_STR "${HDF5_C_FLAGS}") @@ -364,9 +372,9 @@ LIBS=\"-ldl\" \ ExternalProject_Add( silo URL ${SILO_URL} + URL_HASH SHA256=${SILO_URL_HASH} PREFIX ${PROJECT_BINARY_DIR}/silo INSTALL_DIR ${SILO_DIR} -# PATCH_COMMAND patch src/hdf5_drv/H5FDsilo.c < ${TPL_MIRROR_DIR}/silo-4.11.patch DEPENDS ${HDF5_DEPENDENCIES} CONFIGURE_COMMAND cat ${PROJECT_BINARY_DIR}/config_silo_for_geos && . ${PROJECT_BINARY_DIR}/config_silo_for_geos BUILD_COMMAND make -j ${NUM_PROC} @@ -381,7 +389,8 @@ list(APPEND build_list silo ) set(RAJA_DIR "${CMAKE_INSTALL_PREFIX}/raja") -set(RAJA_URL "${TPL_MIRROR_DIR}/RAJA-v2025.12.0.tar.gz") +set(RAJA_URL "https://github.com/LLNL/RAJA/releases/download/v2026.07.0/RAJA-v2026.07.0.tar.gz") +set(RAJA_URL_HASH "2774a569f19a7d8e37d1e166d197c828c6b614e7f8ef6d16ccbfb144b8284d02") message(STATUS "Building RAJA found at ${RAJA_URL}") @@ -395,6 +404,7 @@ endif() ExternalProject_Add( raja URL ${RAJA_URL} + URL_HASH SHA256=${RAJA_URL_HASH} PREFIX ${PROJECT_BINARY_DIR}/raja INSTALL_DIR ${RAJA_DIR} DEPENDS ${RAJA_DEPENDS} @@ -411,6 +421,7 @@ ExternalProject_Add( raja -D RAJA_ENABLE_ROCTX:BOOL=${ENABLE_ROCTX} -D CMAKE_CUDA_COMPILER=${CMAKE_CUDA_COMPILER} -D CUDA_TOOLKIT_ROOT_DIR=${CUDA_TOOLKIT_ROOT_DIR} + -D CUB_DIR:PATH=${CUB_DIR} -D CMAKE_CUDA_ARCHITECTURES:STRING=${CMAKE_CUDA_ARCHITECTURES} -D CMAKE_CUDA_FLAGS:STRING=${RAJA_CUDA_FLAGS} -D ENABLE_HIP:BOOL=${ENABLE_HIP} @@ -436,12 +447,14 @@ list(APPEND build_list raja ) # CHAI ################################ set(CHAI_DIR "${CMAKE_INSTALL_PREFIX}/chai") -set(CHAI_URL "${TPL_MIRROR_DIR}/chai-v2025.12.0.tar.gz") +set(CHAI_URL "https://github.com/LLNL/CHAI/releases/download/v2026.07.0/chai-v2026.07.0.tar.gz") +set(CHAI_URL_HASH "a03616ab5488d9d816d2ef007559c2ad7da988f82c0b7d7ddf9f8931518d99d8") message(STATUS "Building CHAI found at ${CHAI_URL}") ExternalProject_Add( chai PREFIX ${PROJECT_BINARY_DIR}/chai URL ${CHAI_URL} + URL_HASH SHA256=${CHAI_URL_HASH} INSTALL_DIR ${CHAI_DIR} DEPENDS raja BUILD_COMMAND ${TPL_BUILD_COMMAND} @@ -488,11 +501,13 @@ list(APPEND build_list chai ) ################################ if (ENABLE_CALIPER) set(ADIAK_DIR "${CMAKE_INSTALL_PREFIX}/adiak") - set(ADIAK_URL "${TPL_MIRROR_DIR}/adiak-0.4.0.tar.gz") + set(ADIAK_URL "https://github.com/LLNL/Adiak/releases/download/v0.4.0/adiak-0.4.0.tar.gz") + set(ADIAK_URL_HASH "5f789998004a68f540d5d787a2062d8aa6a828f4787064221c5081f287a7b334") message(STATUS "Building Adiak found at ${ADIAK_URL}") ExternalProject_Add( adiak URL ${ADIAK_URL} + URL_HASH SHA256=${ADIAK_URL_HASH} PREFIX ${PROJECT_BINARY_DIR}/adiak INSTALL_DIR ${ADIAK_DIR} BUILD_COMMAND ${TPL_BUILD_COMMAND} @@ -517,7 +532,8 @@ if (ENABLE_CALIPER) set(CALIPER_DIR "${CMAKE_INSTALL_PREFIX}/caliper") - set(CALIPER_URL "${TPL_MIRROR_DIR}/Caliper-2.14.0.tar.gz") + set(CALIPER_URL "https://github.com/LLNL/Caliper/archive/refs/tags/v2.14.0.tar.gz") + set(CALIPER_URL_HASH "b42c35dfbe485960dd326033893dae37ac00d9807c5c3e6b5b1f396bc4af273f") message(STATUS "Building Caliper found at ${CALIPER_URL}") set(CALIPER_WITH_CUPTI OFF) @@ -528,6 +544,7 @@ if (ENABLE_CALIPER) ExternalProject_Add( caliper URL ${CALIPER_URL} + URL_HASH SHA256=${CALIPER_URL_HASH} PREFIX ${PROJECT_BINARY_DIR}/caliper INSTALL_DIR ${CALIPER_DIR} BUILD_COMMAND ${TPL_BUILD_COMMAND} @@ -578,23 +595,35 @@ if (DEFINED ENABLE_MATHPRESSO AND NOT ENABLE_MATHPRESSO) message(STATUS "MATHPRESSO disabled") else() set(MATHPRESSO_DIR "${CMAKE_INSTALL_PREFIX}/mathpresso") - set(MATHPRESSO_URL "${TPL_MIRROR_DIR}/mathpresso-24d60e5.zip") - set(ASMJIT_URL "${TPL_MIRROR_DIR}/asmjit-2e93826.zip") + set(MATHPRESSO_URL "https://github.com/kobalicek/mathpresso/archive/24d60e5c4d9a887c9ecb11991d07c54b3139ff1e.zip") + set(MATHPRESSO_URL_HASH "6f46abaf2bd2ae97edf5bc338093bcb296800241b3e17242e22b4b44fe8c9d80") + set(ASMJIT_URL "https://github.com/asmjit/asmjit/archive/2e93826348d6cd1325a8b1f7629e193c58332da9.zip") + set(ASMJIT_URL_HASH "6e35cd3cfe58aec65b12aa4fd46fe5ed33cfb4023173e5a449a8f40a08daaf47") + set(ASMJIT_DIR "${PROJECT_BINARY_DIR}/asmjit-master") message(STATUS "Building MATHPRESSO found at ${MATHPRESSO_URL}") + ExternalProject_Add( asmjit + URL ${ASMJIT_URL} + URL_HASH SHA256=${ASMJIT_URL_HASH} + PREFIX ${PROJECT_BINARY_DIR}/asmjit + SOURCE_DIR ${ASMJIT_DIR} + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + ) + ExternalProject_Add( mathpresso URL ${MATHPRESSO_URL} + URL_HASH SHA256=${MATHPRESSO_URL_HASH} PREFIX ${PROJECT_BINARY_DIR}/mathpresso INSTALL_DIR ${MATHPRESSO_DIR} - PATCH_COMMAND cd ${PROJECT_BINARY_DIR} && unzip ${ASMJIT_URL} - BUILD_COMMAND make -j ${NUM_PROC} - INSTALL_COMMAND mkdir -p /include && - mkdir -p /lib && - make INSTALL_DIR= install && - cp libmathpresso.a /lib/ + DEPENDS asmjit + BUILD_COMMAND ${CMAKE_COMMAND} --build --parallel ${NUM_PROC} + INSTALL_COMMAND ${CMAKE_COMMAND} --install + CMAKE_GENERATOR ${TPL_GENERATOR} CMAKE_ARGS -D MATHPRESSO_STATIC=TRUE -D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -D ASMJIT_DIR=${PROJECT_BINARY_DIR}/asmjit-master + -D ASMJIT_DIR=${ASMJIT_DIR} -D CMAKE_C_COMPILER=${CMAKE_C_COMPILER} -D CMAKE_C_FLAGS=${C_FLAGS_NO_WARNINGS} -D CMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE} @@ -616,13 +645,15 @@ endif() # PUGIXML ################################ set(PUGIXML_DIR "${CMAKE_INSTALL_PREFIX}/pugixml") -set(PUGIXML_URL "${TPL_MIRROR_DIR}/pugixml-1.13.tar.gz") +set(PUGIXML_URL "https://github.com/zeux/pugixml/archive/refs/tags/v1.13.tar.gz") +set(PUGIXML_URL_HASH "5c5ad5d7caeb791420408042a7d88c2c6180781bf218feca259fd9d840a888e1") message(STATUS "Building PUGIXML found at ${PUGIXML_URL}") ExternalProject_Add( pugixml PREFIX ${PROJECT_BINARY_DIR}/pugixml URL ${PUGIXML_URL} + URL_HASH SHA256=${PUGIXML_URL_HASH} INSTALL_DIR ${PUGIXML_DIR} BUILD_COMMAND ${TPL_BUILD_COMMAND} INSTALL_COMMAND ${TPL_INSTALL_COMMAND} @@ -643,7 +674,8 @@ list(APPEND build_list pugixml ) ################################ if (ENABLE_TRILINOS) set(TRILINOS_DIR "${CMAKE_INSTALL_PREFIX}/trilinos") - set(TRILINOS_URL "${TPL_MIRROR_DIR}/trilinos-release-16-1-0.tar.gz") + set(TRILINOS_URL "https://github.com/trilinos/Trilinos/archive/refs/tags/trilinos-release-16-1-0.tar.gz") + set(TRILINOS_URL_HASH "e9651c88f581049457036cfc01b527a9d3903c257338eeeab942befd7452f23a") message(STATUS "Building TRILINOS found at ${TRILINOS_URL}") @@ -689,6 +721,7 @@ if (ENABLE_TRILINOS) ExternalProject_Add( trilinos PREFIX ${PROJECT_BINARY_DIR}/trilinos URL ${TRILINOS_URL} + URL_HASH SHA256=${TRILINOS_URL_HASH} INSTALL_DIR ${TRILINOS_DIR} BUILD_COMMAND ${TPL_BUILD_COMMAND} INSTALL_COMMAND ${TPL_INSTALL_COMMAND} @@ -753,7 +786,8 @@ endif() set(PARMETIS_DIR "${CMAKE_INSTALL_PREFIX}/parmetis") set(METIS_DIR "${CMAKE_INSTALL_PREFIX}/metis") -set(PARMETIS_URL "${TPL_MIRROR_DIR}/parmetis-4.0.3-IDXTYPEWIDTH_64.tar.gz") +set(PARMETIS_URL "https://ftp.mcs.anl.gov/pub/pdetools/spack-pkgs/parmetis-4.0.3.tar.gz") +set(PARMETIS_URL_HASH "f2d9a231b7cf97f1fee6e8c9663113ebf6c240d407d3c118c55b3633d6be6e5f") if( ${ENABLE_MPI} ) message(STATUS "Building PARMETIS found at ${PARMETIS_URL}") @@ -761,7 +795,9 @@ if( ${ENABLE_MPI} ) ExternalProject_Add( parmetis PREFIX ${PROJECT_BINARY_DIR}/parmetis URL ${PARMETIS_URL} + URL_HASH SHA256=${PARMETIS_URL_HASH} INSTALL_DIR ${PARMETIS_DIR} + PATCH_COMMAND patch --forward -p1 < ${CMAKE_SOURCE_DIR}/patch/parmetis-idx64.patch BUILD_COMMAND ${TPL_BUILD_COMMAND} INSTALL_COMMAND ${TPL_INSTALL_COMMAND} CMAKE_GENERATOR ${TPL_GENERATOR} @@ -786,8 +822,10 @@ message(STATUS "Building METIS found at ${PARMETIS_URL}") ExternalProject_Add( metis PREFIX ${PROJECT_BINARY_DIR}/metis URL ${PARMETIS_URL} + URL_HASH SHA256=${PARMETIS_URL_HASH} INSTALL_DIR ${METIS_DIR} SOURCE_SUBDIR metis + PATCH_COMMAND patch --forward -p1 < ${CMAKE_SOURCE_DIR}/patch/parmetis-idx64.patch BUILD_COMMAND ${TPL_BUILD_COMMAND} INSTALL_COMMAND ${TPL_INSTALL_COMMAND} CMAKE_GENERATOR ${TPL_GENERATOR} @@ -811,7 +849,8 @@ list(APPEND build_list metis ) ################################ if( ENABLE_MPI AND ENABLE_SUPERLU_DIST ) set(SUPERLU_DIR "${CMAKE_INSTALL_PREFIX}/superlu_dist") - set(SUPERLU_URL "${TPL_MIRROR_DIR}/superlu_dist-0f6efc3.tar.gz") + set(SUPERLU_URL "https://github.com/xiaoyeli/superlu_dist/archive/0f6efc3.tar.gz") + set(SUPERLU_URL_HASH "49cd47da22fe72a37011e8dfaf94bd63ad8d61cc8144eac7a571bcbd0a2edf58a") if ( CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 16.0 ) set(SUPERLU_C_FLAGS "-fPIC ${C_FLAGS_NO_WARNINGS}") @@ -831,6 +870,7 @@ if( ENABLE_MPI AND ENABLE_SUPERLU_DIST ) ExternalProject_Add( superlu_dist PREFIX ${PROJECT_BINARY_DIR}/superlu_dist URL ${SUPERLU_URL} + URL_HASH SHA256=${SUPERLU_URL_HASH} INSTALL_DIR ${SUPERLU_DIR} BUILD_COMMAND ${TPL_BUILD_COMMAND} INSTALL_COMMAND ${TPL_INSTALL_COMMAND} @@ -1013,7 +1053,8 @@ endif() ################################ if(ENABLE_SUITESPARSE) set(SUITESPARSE_DIR "${CMAKE_INSTALL_PREFIX}/suitesparse") - set(SUITESPARSE_URL "${TPL_MIRROR_DIR}/SuiteSparse-5.10.1.tar.gz") + set(SUITESPARSE_URL "https://github.com/DrTimothyAldenDavis/SuiteSparse/archive/refs/tags/v5.10.1.tar.gz") + set(SUITESPARSE_URL_HASH "acb4d1045f48a237e70294b950153e48dce5b5f9ca8190e86c2b8c54ce00a7ee") message(STATUS "Building SUITESPARSE found at ${SUITESPARSE_URL}") @@ -1075,6 +1116,7 @@ cd ..\n" ) ExternalProject_Add( suitesparse URL ${SUITESPARSE_URL} + URL_HASH SHA256=${SUITESPARSE_URL_HASH} PREFIX ${PROJECT_BINARY_DIR}/suitesparse INSTALL_DIR ${SUITESPARSE_DIR} DEPENDS ${SUITESPARSE_DEPENDS} @@ -1093,7 +1135,8 @@ endif(ENABLE_SUITESPARSE) if( ENABLE_SCOTCH ) set( SCOTCH_DIR "${CMAKE_INSTALL_PREFIX}/scotch" ) - set( SCOTCH_URL "${TPL_MIRROR_DIR}/scotch-v7.0.8.tar.gz" ) + set( SCOTCH_URL "https://gitlab.inria.fr/scotch/scotch/-/archive/v7.0.8/scotch-v7.0.8.tar.gz" ) + set( SCOTCH_URL_HASH "21f48ac85c7991a5eb5fae9232dd68584556ccc500f85e2ebd6b5b275617e11a" ) message( STATUS "Building SCOTCH found at ${SCOTCH_URL}" ) @@ -1110,6 +1153,7 @@ if( ENABLE_SCOTCH ) ExternalProject_Add( scotch PREFIX ${PROJECT_BINARY_DIR}/scotch URL ${SCOTCH_URL} + URL_HASH SHA256=${SCOTCH_URL_HASH} INSTALL_DIR ${SCOTCH_DIR} BUILD_COMMAND ${TPL_BUILD_COMMAND} INSTALL_COMMAND ${TPL_INSTALL_COMMAND} @@ -1140,7 +1184,8 @@ endif() if( ENABLE_PETSC ) set(PETSC_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/petsc") - set(PETSC_URL "${TPL_MIRROR_DIR}/petsc-3.19.4.tar.gz") + set(PETSC_URL "https://gitlab.com/petsc/petsc/-/archive/v3.19.4/petsc-v3.19.4.tar.gz") + set(PETSC_URL_HASH "f22413832558575f784ad927ad21b9b45cae91d90ca686802c45c6fd48b04b2c") message(STATUS "Building PETSC found at ${PETSC_URL}") @@ -1213,6 +1258,7 @@ ${PETSC_DEP_FLAG}\n") ExternalProject_Add( petsc URL ${PETSC_URL} + URL_HASH SHA256=${PETSC_URL_HASH} PREFIX ${PROJECT_BINARY_DIR}/petsc #outer petsc directory DEPENDS ${PETSC_DEPENDS} BINARY_DIR ${PROJECT_BINARY_DIR}/petsc/src/petsc @@ -1230,7 +1276,8 @@ endif() ################################ if( ENABLE_VTK ) set( VTK_DIR "${CMAKE_INSTALL_PREFIX}/vtk" ) - set( VTK_URL "${TPL_MIRROR_DIR}/VTK-9.4.2.tar.gz" ) + set( VTK_URL "https://www.vtk.org/files/release/9.7/VTK-9.7.0.tar.gz" ) + set( VTK_URL_HASH "affdb7a15ec34ee0174407f911ab70b646c7af01161818bbab4e1160b7eff720" ) message( STATUS "Building VTK found at ${VTK_URL}" ) @@ -1257,10 +1304,10 @@ endif( ENABLE_MPI ) ExternalProject_Add( vtk PREFIX ${PROJECT_BINARY_DIR}/vtk URL ${VTK_URL} + URL_HASH SHA256=${VTK_URL_HASH} INSTALL_DIR ${VTK_DIR} PATCH_COMMAND patch --forward -p0 < ${CMAKE_SOURCE_DIR}/patch/vtkCellGridReader.cxx.patch && - patch --forward -p0 < ${CMAKE_SOURCE_DIR}/patch/vtkLegacyCellGridReader.cxx.patch && - patch --forward -p0 < ${CMAKE_SOURCE_DIR}/patch/vtkformat.h.patch + patch --forward -p0 < ${CMAKE_SOURCE_DIR}/patch/vtkLegacyCellGridReader.cxx.patch BUILD_COMMAND ${TPL_BUILD_COMMAND} INSTALL_COMMAND "${TPL_INSTALL_COMMAND}" CMAKE_GENERATOR ${TPL_GENERATOR} @@ -1297,13 +1344,15 @@ endif( ENABLE_VTK ) # FMT ################################ set(FMT_DIR "${CMAKE_INSTALL_PREFIX}/fmt") -set(FMT_URL "${TPL_MIRROR_DIR}/fmt-11.0.1.tar.gz") +set(FMT_URL "https://github.com/fmtlib/fmt/archive/refs/tags/12.1.0.tar.gz") +set(FMT_URL_HASH "ea7de4299689e12b6dddd392f9896f08fb0777ac7168897a244a6d6085043fea") message(STATUS "Building FMT found at ${FMT_URL}") ExternalProject_Add( fmt PREFIX ${PROJECT_BINARY_DIR}/fmt URL ${FMT_URL} + URL_HASH SHA256=${FMT_URL_HASH} INSTALL_DIR ${FMT_DIR} BUILD_COMMAND ${TPL_BUILD_COMMAND} INSTALL_COMMAND ${TPL_INSTALL_COMMAND} diff --git a/docker/install-sccache.sh b/docker/install-sccache.sh index a5c76629..090b53a4 100755 --- a/docker/install-sccache.sh +++ b/docker/install-sccache.sh @@ -2,7 +2,7 @@ set -xe # Install `sccache` binaries to speed up the build of `geos` -VERSION=${1-0.7.7} +VERSION=${1-0.17.0} PREFIX=${2-/opt/sccache} mkdir -p $PREFIX/bin diff --git a/docker/spack-rocm.yaml b/docker/spack-rocm.yaml new file mode 100644 index 00000000..0d63140a --- /dev/null +++ b/docker/spack-rocm.yaml @@ -0,0 +1,500 @@ +spack: + config: + install_tree: + root: $spack/.. + projections: + all: '{compiler.name}-{compiler.version}/{name}-{version}-{hash}' + misc_cache: $spack/../misc_cache + test_stage: $spack/../test_stage + build_stage: $spack/../build_stage + + # Regular TPLs do not need views + view: false + + # Include shared variants and versions + include: + - ../defaults.yaml + - ../versions.yaml + + toolchains: + clang-15: + - spec: '%c=llvm@15.0.7+clang~flang~lld~lldb' + when: '%c' + - spec: '%cxx=llvm@15.0.7+clang~flang~lld~lldb' + when: '%cxx' + - spec: '%fortran=gcc@11.4.0' + when: '%fortran' + - spec: '%openmpi@4.1.6 %llvm@15.0.7' + when: '%mpi' + clang-10: + - spec: '%c=llvm@10.0.0+clang~flang~lld~lldb openmp=project' + when: '%c' + - spec: '%cxx=llvm@10.0.0+clang~flang~lld~lldb openmp=project' + when: '%cxx' + - spec: '%fortran=gcc@9.4.0' + when: '%fortran' + - spec: '%openmpi@4.1.6 %llvm@10.0.0' + when: '%mpi' + gcc-9: + - spec: cxxflags='-pthread' + - spec: cflags='-pthread' + - spec: '%c=gcc@9.4.0' + when: '%c' + - spec: '%cxx=gcc@9.4.0' + when: '%cxx' + - spec: '%fortran=gcc@9.4.0' + when: '%fortran' + - spec: '%openmpi %gcc@9.4.0' + when: '%mpi' + gcc-10: + - spec: cxxflags='-pthread' + - spec: cflags='-pthread' + - spec: '%c=gcc@10.5.0' + when: '%c' + - spec: '%cxx=gcc@10.5.0' + when: '%cxx' + - spec: '%fortran=gcc@10.5.0' + when: '%fortran' + - spec: '%openmpi %gcc@10.5.0' + when: '%mpi' + gcc-11: + - spec: cxxflags='-pthread' + - spec: cflags='-pthread' + - spec: '%c=gcc@11.4.0' + when: '%c' + - spec: '%cxx=gcc@11.4.0' + when: '%cxx' + - spec: '%fortran=gcc@11.4.0' + when: '%fortran' + - spec: '%openmpi %gcc@11.4.0' + when: '%mpi' + gcc-12: + - spec: cxxflags='-pthread' + - spec: cflags='-pthread' + - spec: '%c=gcc@12.3.0' + when: '%c' + - spec: '%cxx=gcc@12.3.0' + when: '%cxx' + - spec: '%fortran=gcc@12.3.0' + when: '%fortran' + - spec: '%openmpi %gcc@12.3.0' + when: '%mpi' + gcc-13: + - spec: cxxflags='-pthread' + - spec: cflags='-pthread' + - spec: '%c=gcc@13.3.0' + when: '%c' + - spec: '%cxx=gcc@13.3.0' + when: '%cxx' + - spec: '%fortran=gcc@13.3.0' + when: '%fortran' + - spec: '%openmpi@4.1.6 %gcc@13.3.0' + when: '%mpi' + amdclang-19: + - spec: '%[virtuals=c]llvm-amdgpu@6.4.3' + when: '%c' + - spec: '%[virtuals=cxx]llvm-amdgpu@6.4.3' + when: '%cxx' + - spec: '%[virtuals=fortran]gcc@13.3.0' + when: '%fortran' + - spec: '%openmpi@4.1.6 %rocmcc@6.4.3' + when: '%mpi' + + packages: + all: + target: [x86_64] + providers: + mpi: [openmpi] + blas: [netlib-lapack] + lapack: [netlib-lapack] + c: [llvm-amdgpu, llvm, gcc] + cxx: [llvm-amdgpu, llvm, gcc] + fortran: [gcc] + + mpi: + require: + - openmpi@4.1.6 + + # %% compiler propagation stops at build-only dependency edges. Keep the + # host-side libraries in the HIP graph on the AMD compiler as well. + blt: + require: + - '%c,cxx=rocmcc@6.4.3' + + chai: + require: + - '%c,cxx=rocmcc@6.4.3' + + silo: + require: + - '%c,cxx=rocmcc@6.4.3' + + suite-sparse: + require: + - '%c,cxx=rocmcc@6.4.3' + + superlu-dist: + require: + - '%c,cxx=rocmcc@6.4.3' + + umpire: + require: + - '%c,cxx=rocmcc@6.4.3' + + llvm: + externals: + - spec: llvm@10.0.0+clang~flang~lld~lldb openmp=project + prefix: /usr + extra_attributes: + compilers: + c: /usr/bin/clang + cxx: /usr/bin/clang++ + - spec: llvm@15.0.7+clang~flang~lld~lldb + prefix: /usr + extra_attributes: + compilers: + c: /usr/bin/clang-15 + cxx: /usr/bin/clang++-15 + llvm-amdgpu: + buildable: false + externals: + - spec: llvm-amdgpu@6.4.3 + prefix: /opt/rocm-6.4.3/lib/llvm + extra_attributes: + compilers: + c: /usr/local/bin/amdclang-gcc13 + cxx: /usr/local/bin/amdclang++-gcc13 + environment: + set: + BISON: bison + FLEX: flex + CC: /usr/local/bin/amdclang-gcc13 + CXX: /usr/local/bin/amdclang++-gcc13 + FC: /usr/bin/gfortran-13 + F77: /usr/bin/gfortran-13 + MPICC: /usr/bin/mpicc + MPICXX: /usr/bin/mpicxx + MPIEXEC: /usr/bin/mpirun + OMPI_CC: /usr/local/bin/amdclang-gcc13 + OMPI_CXX: /usr/local/bin/amdclang++-gcc13 + HIPCXX: /usr/local/bin/amdclang++-gcc13 + CMAKE_HIP_COMPILER: /usr/local/bin/amdclang++-gcc13 + gcc: + externals: + - spec: gcc@9.4.0 languages:='c,c++,fortran' + prefix: /usr + extra_attributes: + compilers: + c: /usr/bin/gcc-9 + cxx: /usr/bin/g++-9 + fortran: /usr/bin/gfortran-9 + - spec: gcc@10.5.0 languages:='c,c++,fortran' + prefix: /usr + extra_attributes: + compilers: + c: /usr/bin/gcc-10 + cxx: /usr/bin/g++-10 + fortran: /usr/bin/gfortran-10 + - spec: gcc@11.4.0 languages:='c,c++,fortran' + prefix: /usr + extra_attributes: + compilers: + c: /usr/bin/gcc-11 + cxx: /usr/bin/g++-11 + fortran: /usr/bin/gfortran-11 + - spec: gcc@12.3.0 languages:='c,c++,fortran' + prefix: /usr + extra_attributes: + compilers: + c: /usr/bin/gcc-12 + cxx: /usr/bin/g++-12 + fortran: /usr/bin/gfortran-12 + - spec: gcc@13.3.0 languages:='c,c++,fortran' + prefix: /usr + extra_attributes: + compilers: + c: /usr/bin/gcc-13 + cxx: /usr/bin/g++-13 + fortran: /usr/bin/gfortran-13 + cuda: + buildable: False + externals: + - spec: cuda@11.8.0 +allow-unsupported-compilers + prefix: /usr/local/cuda + hip: + buildable: false + externals: + - spec: hip@6.4.3 + prefix: /opt/rocm-6.4.3 + require: + - when: "%rocmcc@6.4.3" + spec: "@6.4.3" + rocprim: + buildable: false + externals: + - spec: rocprim@6.4.3 + prefix: /opt/rocm-6.4.3 + require: + - when: "%rocmcc@6.4.3" + spec: "@6.4.3" + rocsparse: + buildable: false + externals: + - spec: rocsparse@6.4.3 + prefix: /opt/rocm-6.4.3 + require: + - when: "%rocmcc@6.4.3" + spec: "@6.4.3" + roctracer: + buildable: false + externals: + - spec: roctracer@6.4.3 + prefix: /opt/rocm-6.4.3 + require: + - when: "%rocmcc@6.4.3" + spec: "@6.4.3" + rocblas: + buildable: false + externals: + - spec: rocblas@6.4.3 + prefix: /opt/rocm-6.4.3 + require: + - when: "%rocmcc@6.4.3" + spec: "@6.4.3" + rocrand: + buildable: false + externals: + - spec: rocrand@6.4.3 + prefix: /opt/rocm-6.4.3 + require: + - when: "%rocmcc@6.4.3" + spec: "@6.4.3" + rocsolver: + buildable: false + externals: + - spec: rocsolver@6.4.3 + prefix: /opt/rocm-6.4.3 + require: + - when: "%rocmcc@6.4.3" + spec: "@6.4.3" + rocthrust: + buildable: false + externals: + - spec: rocthrust@6.4.3 + prefix: /opt/rocm-6.4.3 + require: + - when: "%rocmcc@6.4.3" + spec: "@6.4.3" + hipblas: + buildable: false + externals: + - spec: hipblas@6.4.3 +rocm + prefix: /opt/rocm-6.4.3 + require: + - when: "%rocmcc@6.4.3" + spec: "@6.4.3" + hipsparse: + buildable: false + externals: + - spec: hipsparse@6.4.3 +rocm + prefix: /opt/rocm-6.4.3 + require: + - when: "%rocmcc@6.4.3" + spec: "@6.4.3" + hipfft: + buildable: false + externals: + - spec: hipfft@6.4.3 +rocm + prefix: /opt/rocm-6.4.3 + require: + - when: "%rocmcc@6.4.3" + spec: "@6.4.3" + hipsolver: + buildable: false + externals: + - spec: hipsolver@6.4.3 +rocm + prefix: /opt/rocm-6.4.3 + require: + - when: "%rocmcc@6.4.3" + spec: "@6.4.3" + hiprand: + buildable: false + externals: + - spec: hiprand@6.4.3 +rocm + prefix: /opt/rocm-6.4.3 + require: + - when: "%rocmcc@6.4.3" + spec: "@6.4.3" + rocm-device-libs: + buildable: false + externals: + - spec: rocm-device-libs@6.4.3 + prefix: /opt/rocm-6.4.3 + require: + - when: "%rocmcc@6.4.3" + spec: "@6.4.3" + hsa-rocr-dev: + buildable: false + externals: + - spec: hsa-rocr-dev@6.4.3 + prefix: /opt/rocm-6.4.3 + require: + - when: "%rocmcc@6.4.3" + spec: "@6.4.3" + + autoconf: + version: [2.71] + buildable: false + externals: + - spec: autoconf@2.71 + prefix: /usr + automake: + version: [1.16.5] + buildable: false + externals: + - spec: automake@1.16.5 + prefix: /usr + cmake: + version: [3.28.6] + buildable: false + externals: + - spec: cmake@3.28.6 + prefix: /usr/local + findutils: + version: [4.9.0] + buildable: false + externals: + - spec: findutils@4.9.0 + prefix: /usr + m4: + buildable: false + externals: + - spec: m4@1.4.18 + prefix: /usr + mpfr: + buildable: false + externals: + - spec: mpfr@4.2.1 + prefix: /usr + netlib-lapack: + buildable: false + externals: + - spec: netlib-lapack@3.12.0 + prefix: /usr + netlib-blas: + buildable: false + externals: + - spec: netlib-blas@3.12.0 + prefix: /usr + openmpi: + buildable: false + externals: + - spec: openmpi@4.1.6 %llvm@10.0.0 + prefix: /usr/lib/x86_64-linux-gnu/openmpi + modules: [mpi] + - spec: openmpi@4.1.6 %llvm@15.0.7 + prefix: /usr/lib/x86_64-linux-gnu/openmpi + modules: [mpi] + - spec: openmpi@4.1.6 %rocmcc@6.4.3 + prefix: /usr/lib/x86_64-linux-gnu/openmpi + - spec: openmpi@4.1.6 %gcc@9.4.0 + prefix: /usr/lib/x86_64-linux-gnu/openmpi + - spec: openmpi@4.1.6 %gcc@10.5.0 + prefix: /usr/lib/x86_64-linux-gnu/openmpi + - spec: openmpi@4.1.6 %gcc@11.4.0 + prefix: /usr/lib/x86_64-linux-gnu/openmpi + - spec: openmpi@4.1.6 %gcc@12.3.0 + prefix: /usr/lib/x86_64-linux-gnu/openmpi + - spec: openmpi@4.1.6 %gcc@13.3.0 + prefix: /usr/lib/x86_64-linux-gnu/openmpi + require: + - '%rocmcc@6.4.3' + perl: + buildable: false + externals: + - spec: perl@5.38.2 + prefix: /usr + pkg-config: + buildable: false + externals: + - spec: pkg-config@0.29.2 + prefix: /usr + py-sphinx: + buildable: false + externals: + - spec: py-sphinx@7.2.6 + prefix: /usr + dependencies: + - spec: python@3.12.3 + python: + buildable: false + externals: + - spec: python@3.12.3 + prefix: /usr + readline: + buildable: false + externals: + - spec: readline@8.2 + prefix: /usr + tar: + buildable: false + externals: + - spec: tar@1.35 + prefix: /usr + unzip: + buildable: false + externals: + - spec: unzip@6.0 + prefix: /usr + xz: + buildable: false + externals: + - spec: xz@5.6.1 + prefix: /usr + zlib: + buildable: false + externals: + - spec: zlib@1.3 + prefix: /usr + z3: + buildable: false + externals: + - spec: z3@4.8.12 + prefix: /usr + gettext: + buildable: false + externals: + - spec: gettext@0.21 + prefix: /usr + bzip2: + buildable: false + externals: + - spec: bzip2@1.0.8 + prefix: /usr + help2man: + buildable: false + externals: + - spec: help2man@1.49.3 + prefix: /usr + libtool: + buildable: false + externals: + - spec: libtool@2.4.7 + prefix: /usr + gmp: + buildable: false + externals: + - spec: gmp@6.3.0 + prefix: /usr + pugixml: + buildable: true + gmake: + buildable: false + externals: + - spec: gmake@4.3 + prefix: /usr + ninja: + buildable: false + externals: + - spec: ninja@1.11.1 + prefix: /usr diff --git a/docker/tpl-ubuntu-hip.Dockerfile b/docker/tpl-ubuntu-hip.Dockerfile new file mode 100644 index 00000000..0c965574 --- /dev/null +++ b/docker/tpl-ubuntu-hip.Dockerfile @@ -0,0 +1,262 @@ +# TPL build Dockerfile for ROCm/HIP images. +# +# Unlike docker/tpl-ubuntu.Dockerfile, this file does NOT layer on one of the +# geosx/ubuntu:* images from https://github.com/GEOS-DEV/docker_base_images. +# AMD's own rocm/dev-ubuntu-* image already ships the amdclang toolchain and the +# ROCm math libraries, so DOCKER_BASE_IMAGE points straight at it and the +# toolchain bits the geosx base images would normally provide (compiler, cmake) +# are installed here instead. +# +# The matrix in .github/workflows/docker_build_tpls.yml selects the base image, +# the spack toolchain (SPEC) and the AMD GPU target. + +# Temporary local variables dedicated to the TPL build +ARG TMP_DIR=/tmp +ARG SRC_DIR=$TMP_DIR/thirdPartyLibs +ARG BLD_DIR=$TMP_DIR/build + +ARG DOCKER_BASE_IMAGE=rocm/dev-ubuntu-24.04:6.4.3 +FROM ${DOCKER_BASE_IMAGE} AS tpl_toolchain_intersect_geosx_toolchain +ARG SRC_DIR + +# streak2 hosts can enable kernel FIPS mode even though this Ubuntu image has +# no FIPS provider. Use OpenSSL's default provider for package downloads and +# source builds, matching the GEOS streak2 container setup. +COPY docker/openssl-non-fips.cnf /etc/ssl/openssl-non-fips.cnf +ENV OPENSSL_FORCE_FIPS_MODE=0 \ + OPENSSL_CONF=/etc/ssl/openssl-non-fips.cnf + +# Install directory provided as a docker build argument; forwarded via ENV +# (GEOSX_TPL_DIR is part of the image contract consumed by GEOS). +ARG INSTALL_DIR +ENV GEOSX_TPL_DIR=$INSTALL_DIR + +# ROCm parameters +ARG AMDGPU_TARGET=gfx942 +ARG ROCM_VERSION=6.4.3 + +# Allow changing the number of cores used for building code via spack +ARG SPACK_BUILD_JOBS=4 +ENV SPACK_BUILD_JOBS=${SPACK_BUILD_JOBS} + +RUN if [ -f /etc/ssl/certs/llnl-ca-bundle.crt ]; then \ + mkdir -p /etc/apt/apt.conf.d && \ + printf '%s\n' \ + 'Acquire::https::CaInfo "/etc/ssl/certs/llnl-ca-bundle.crt";' \ + > /etc/apt/apt.conf.d/99-llnl-ca; \ + fi && \ + ln -fs /usr/share/zoneinfo/America/Los_Angeles /etc/localtime && \ + apt-get update + +# Packages needed both for the TPL build and for the downstream GEOS build, +# plus the ROCm math libraries GEOS links against. +RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + wget \ + gnupg \ + ca-certificates \ + gcc-13 \ + g++-13 \ + gfortran-13 \ + libtbb12 \ + libtbbmalloc2 \ + libblas-dev \ + liblapack-dev \ + libz3-dev \ + zlib1g-dev \ + openmpi-bin \ + libopenmpi-dev \ + python3 \ + python3-dev \ + python3-pip \ + python3-sphinx \ + doxygen \ + pkg-config \ + xz-utils \ + gettext \ + bzip2 \ + help2man \ + libtool \ + libgmp-dev \ + unzip \ + libmpfr-dev \ + lbzip2 \ + bzip2 \ + gnupg \ + virtualenv \ + libpugixml-dev \ + roctracer-dev \ + rocsparse-dev \ + rocsolver-dev \ + rocblas-dev \ + hipblas-dev \ + hipsparse-dev \ + hipfft-dev \ + hipsolver-dev \ + hiprand-dev \ + rocprim-dev \ + rocrand-dev \ + rocthrust-dev \ + git && \ + if [ -f /etc/ssl/certs/llnl-ca-bundle.crt ]; then \ + mkdir -p /usr/local/share/ca-certificates && \ + awk 'BEGIN {n=0} /-----BEGIN/ {n++; f=sprintf("/usr/local/share/ca-certificates/llnl-%03d.crt", n)} n>0 {print > f}' \ + /etc/ssl/certs/llnl-ca-bundle.crt && \ + update-ca-certificates ; \ + fi && \ + rm -rf /var/lib/apt/lists/* + +# Use Ubuntu's merged trust store for subsequent Python, curl, Git, and pip +# operations after ca-certificates has been installed. +ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt \ + REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt \ + CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt \ + GIT_SSL_CAINFO=/etc/ssl/certs/ca-certificates.crt \ + PIP_CERT=/etc/ssl/certs/ca-certificates.crt + +# Install clingo for Spack. Do not upgrade Ubuntu's Debian-managed pip in +# place; Ubuntu 24.04's pip package cannot be uninstalled by pip. +RUN python3 -m pip install clingo --break-system-packages + +# The ROCm base image does not ship cmake, so install it here (the geosx base +# images used by the other TPL Dockerfiles provide it already). +RUN --mount=src=.,dst=$SRC_DIR $SRC_DIR/docker/install-cmake.sh + +# OpenMPI hack for Ubuntu and provide amdclang wrappers with the GCC 13 system toolchain. +# Keep ROCm's native clang/clang++ links intact: the amdllvm driver uses those +# companion names internally, so replacing clang++ with a shell wrapper recurses. +RUN ln -sfn /usr/bin /usr/lib/x86_64-linux-gnu/openmpi && \ + printf '%s\n' '#!/bin/sh' "exec /opt/rocm-${ROCM_VERSION}/lib/llvm/bin/amdclang --gcc-toolchain=/usr \"\$@\"" > /usr/local/bin/amdclang-gcc13 && \ + chmod +x /usr/local/bin/amdclang-gcc13 && \ + printf '%s\n' '#!/bin/sh' "exec /opt/rocm-${ROCM_VERSION}/lib/llvm/bin/amdclang++ --gcc-toolchain=/usr \"\$@\"" > /usr/local/bin/amdclang++-gcc13 && \ + chmod +x /usr/local/bin/amdclang++-gcc13 + +# ----- TPL build stage ----- +FROM tpl_toolchain_intersect_geosx_toolchain AS tpl_toolchain +ARG SRC_DIR +ARG BLD_DIR +ARG AMDGPU_TARGET +ARG SPEC + +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + libtbb-dev \ + make \ + autopoint \ + autotools-dev \ + automake \ + ninja-build \ + bc \ + file \ + patch \ + ca-certificates \ + git && \ + rm -rf /var/lib/apt/lists/* + +# Run uberenv. The SPEC is supplied by the matrix, as for the other TPL images. +# Have to create install directory first for uberenv. +# -k flag is to ignore SSL errors. +# +# A background heartbeat prints progress every minute: the ROCm TPL build runs +# for hours and spack is otherwise silent, which makes a stalled build +# indistinguishable from a slow one in CI logs. +RUN --mount=src=.,dst=$SRC_DIR,readwrite cd ${SRC_DIR} && \ + mkdir -p ${GEOSX_TPL_DIR} && \ + GEOSX_SPEC="${SPEC}" && \ + if [ -z "${GEOSX_SPEC}" ] || [ "${GEOSX_SPEC}" = "undefined" ]; then \ + echo "ERROR: SPEC build-arg must be supplied" >&2 ; \ + exit 1 ; \ + fi && \ + { \ + ( while true; do \ + sleep 60; \ + echo "[heartbeat] $(date -Iseconds) uberenv/spack still running"; \ + find ${GEOSX_TPL_DIR}/build_stage -maxdepth 2 -mindepth 2 -type d -printf '%T@ %p\n' 2>/dev/null | \ + sort -nr | head -n 3 | \ + while read -r _ path; do \ + echo "[heartbeat] recent stage dir: ${path}"; \ + done; \ + find ${GEOSX_TPL_DIR}/build_stage -maxdepth 4 \( -name spack-build-out.txt -o -name spack-build-env.txt -o -name spack-configure-args.txt \) -printf '%T@ %p\n' 2>/dev/null | \ + sort -nr | head -n 3 | \ + while read -r _ path; do \ + echo "[heartbeat] recent stage file: ${path}"; \ + tail -n 5 "${path}" 2>/dev/null || true; \ + printf '\n'; \ + done; \ + ps -eo pid,ppid,etime,%cpu,%mem,cmd 2>/dev/null | \ + grep -E 'spack|python3|curl|wget|git|cmake|ninja|make|amdclang|gfortran|gcc|g\\+\\+' | \ + grep -v grep | \ + tail -n 20 | \ + cut -c1-240 || true; \ + done ) & \ + hb=$!; \ + ./scripts/uberenv/uberenv.py \ + --spec "${GEOSX_SPEC}" \ + --spack-env-file=${SRC_DIR}/docker/spack-rocm.yaml \ + --project-json=${SRC_DIR}/.uberenv_config.json \ + --prefix ${GEOSX_TPL_DIR} \ + -j ${SPACK_BUILD_JOBS} \ + -k; \ + rc=$?; \ + kill ${hb} 2>/dev/null || true; \ + wait ${hb} 2>/dev/null || true; \ + test ${rc} -eq 0; \ + } && \ + rm -f lvarray* && \ + cp *.cmake /spack-generated.cmake && \ + cd ${GEOSX_TPL_DIR} && \ + rm -rf bin/ build_stage/ builtin_spack_packages_repo/ misc_cache/ spack/ spack_env/ .spack-db/ + +# ----- Final GEOS-build image ----- +FROM tpl_toolchain_intersect_geosx_toolchain AS geosx_toolchain +ARG SRC_DIR +# ARGs are scoped per stage, so the ROCm ones must be redeclared here for the +# ENV defaults at the bottom of this stage to interpolate. +ARG AMDGPU_TARGET +ARG ROCM_VERSION + +# The non-FIPS OpenSSL configuration is needed while building the TPLs on +# FIPS-enabled hosts, but it must not be inherited by downstream tools. In +# particular, sccache 0.17 uses OpenSSL for its GCS token exchange and this +# configuration makes Ubuntu reject the Google endpoint certificate as too +# weak. The GEOS CI script applies the same configuration at runtime only when +# it is actually needed. +ENV OPENSSL_CONF="" + +COPY --from=tpl_toolchain $GEOSX_TPL_DIR $GEOSX_TPL_DIR + +# Extract the generated host-config +COPY --from=tpl_toolchain /spack-generated.cmake / + +RUN DEBIAN_FRONTEND=noninteractive apt-get update && \ + apt-get install -y --no-install-recommends \ + openssh-client \ + ca-certificates \ + curl \ + python3 \ + texlive \ + texlive-latex-extra \ + graphviz \ + libxml2-utils \ + git \ + ghostscript \ + ninja-build \ + python3-dev \ + python3-sphinx \ + python3-mpi4py \ + python3-scipy \ + python3-virtualenv \ + python3-matplotlib \ + python3-venv \ + python3-pytest && \ + rm -rf /var/lib/apt/lists/* + +# Install sccache to speed up downstream GEOS builds +RUN --mount=src=.,dst=$SRC_DIR $SRC_DIR/docker/install-sccache.sh +ENV SCCACHE=/opt/sccache/bin/sccache + +# Helpful environment defaults for HIP +ENV ROCM_PATH=/opt/rocm-${ROCM_VERSION} +ENV HIP_PATH=${ROCM_PATH} +ENV PATH=${ROCM_PATH}/bin:${ROCM_PATH}/llvm/bin:${PATH} +ENV LD_LIBRARY_PATH=${ROCM_PATH}/lib:${ROCM_PATH}/lib64:${ROCM_PATH}/llvm/lib +ENV CMAKE_HIP_ARCHITECTURES=${AMDGPU_TARGET} diff --git a/docker/tpl-ubuntu.Dockerfile b/docker/tpl-ubuntu.Dockerfile index eff95832..a27ae817 100644 --- a/docker/tpl-ubuntu.Dockerfile +++ b/docker/tpl-ubuntu.Dockerfile @@ -184,6 +184,15 @@ RUN --mount=src=.,dst=$SRC_DIR,readwrite cd ${SRC_DIR} && \ # ----- Final GEOS-build image ----- FROM tpl_toolchain_intersect_geosx_toolchain AS geosx_toolchain ARG SRC_DIR + +# The non-FIPS OpenSSL configuration is needed while building the TPLs on +# FIPS-enabled hosts, but it must not be inherited by downstream tools. In +# particular, sccache 0.17 uses OpenSSL for its GCS token exchange and this +# configuration makes Ubuntu reject the Google endpoint certificate as too +# weak. The GEOS CI script applies the same configuration at runtime only when +# it is actually needed. +ENV OPENSSL_CONF="" + COPY --from=tpl_toolchain $GEOSX_TPL_DIR $GEOSX_TPL_DIR COPY --from=tpl_toolchain /spack-generated.cmake / diff --git a/patch/parmetis-idx64.patch b/patch/parmetis-idx64.patch new file mode 100644 index 00000000..25d21ba1 --- /dev/null +++ b/patch/parmetis-idx64.patch @@ -0,0 +1,13 @@ +diff --git a/metis/include/metis.h b/metis/include/metis.h +index 1cbd4b8..c6537e2 100644 +--- a/metis/include/metis.h ++++ b/metis/include/metis.h +@@ -30,7 +30,7 @@ + GCC does provides these definitions in stdint.h, but it may require some + modifications on other architectures. + --------------------------------------------------------------------------*/ +-#define IDXTYPEWIDTH 32 ++#define IDXTYPEWIDTH 64 + + + /*-------------------------------------------------------------------------- diff --git a/scripts/docker-build.sh b/scripts/docker-build.sh index a8d3cddb..d057db65 100644 --- a/scripts/docker-build.sh +++ b/scripts/docker-build.sh @@ -1,4 +1,5 @@ #!/bin/bash +set -e env # Keep .git out of the build context. Do not clobber an existing @@ -10,8 +11,7 @@ else fi # Get uberenv submodule -git submodule update --init scripts/uberenv - +git submodule update --init --force scripts/uberenv # This script will build an image from TPL_DOCKERFILE. # The new TPL Dockerfiles (docker/tpl-ubuntu.Dockerfile, @@ -35,6 +35,9 @@ echo "Docker base image is ${DOCKER_BASE_IMAGE}" EXTRA_BUILD_ARGS=() if [ -n "${GCC_VERSION}" ]; then EXTRA_BUILD_ARGS+=(--build-arg "GCC_VERSION=${GCC_VERSION}"); fi if [ -n "${CLANG_VERSION}" ]; then EXTRA_BUILD_ARGS+=(--build-arg "CLANG_VERSION=${CLANG_VERSION}"); fi +# ROCm-only knobs, forwarded the same way (see docker/tpl-ubuntu-hip.Dockerfile). +if [ -n "${AMDGPU_TARGET:-}" ]; then EXTRA_BUILD_ARGS+=(--build-arg "AMDGPU_TARGET=${AMDGPU_TARGET}"); fi +if [ -n "${ROCM_VERSION:-}" ]; then EXTRA_BUILD_ARGS+=(--build-arg "ROCM_VERSION=${ROCM_VERSION}"); fi if [ -n "${SPACK_BUILD_JOBS:-}" ]; then EXTRA_BUILD_ARGS+=(--build-arg "SPACK_BUILD_JOBS=${SPACK_BUILD_JOBS}"); fi BUILDER_ARGS=() diff --git a/scripts/reproduce_ci.sh b/scripts/reproduce_ci.sh index 301ccfdd..3e9f2771 100755 --- a/scripts/reproduce_ci.sh +++ b/scripts/reproduce_ci.sh @@ -7,7 +7,12 @@ repo_root=$(cd -- "${script_dir}/.." && pwd) cd -- "${repo_root}" # Active build_images entries from .github/workflows/docker_build_tpls.yml. -# Fields: name|dockerfile|base_tag|base_repository|repository|gcc|clang|spec +# Fields: name|dockerfile|base_tag|base_repository|repository|gcc|clang|spec|base_image|extra_env +# +# The last two fields are optional and may simply be omitted: +# base_image overrides the composed :- for +# rows that do not build on a docker_base_images image (ROCm). +# extra_env space-separated KEY=VALUE pairs passed to scripts/docker-build.sh. MATRIX=( 'Ubuntu 24.04 - gcc 12|docker/tpl-ubuntu.Dockerfile|24.04-gcc12|geosx/ubuntu|geosx/ubuntu24.04-gcc12|12||~pygeosx ~docs %gcc-12' 'Ubuntu 24.04 - gcc 13 (docs)|docker/tpl-ubuntu.Dockerfile|24.04-gcc13|geosx/ubuntu|geosx/ubuntu24.04-gcc13|13||~pygeosx +docs %gcc-13' @@ -20,6 +25,7 @@ MATRIX=( 'Ubuntu 24.04 - gcc 13 + CUDA 12.9.1|docker/tpl-ubuntu.Dockerfile|24.04-gcc13-cuda12.9.1|geosx/ubuntu|geosx/ubuntu24.04-gcc13-cuda12.9.1|13||+cuda cuda_arch=86,120 ~openmp ~pygeosx ~docs %gcc-13 ^cuda@12.9.1+allow-unsupported-compilers' 'Ubuntu 24.04 - clang 19 + CUDA 12.9.1|docker/tpl-ubuntu.Dockerfile|24.04-clang19-cuda12.9.1|geosx/ubuntu|geosx/ubuntu24.04-clang19-cuda12.9.1||19|+cuda cuda_arch=86,120 ~openmp ~pygeosx ~docs %clang-19 ^cuda@12.9.1+allow-unsupported-compilers' 'Rocky Linux 8 - gcc 13 + CUDA 12.9.1|docker/tpl-rockylinux.Dockerfile|8-gcc13-cuda12.9.1|geosx/rockylinux|geosx/rockylinux8-gcc13-cuda12.9.1|||+cuda cuda_arch=86,120 ~openmp ~pygeosx ~docs %gcc-13 ^cuda@12.9.1+allow-unsupported-compilers' +'Ubuntu 24.04 - amdclang 19 + ROCm 6.4.3|docker/tpl-ubuntu-hip.Dockerfile|||geosx/ubuntu24.04-amdclang19.0.0-rocm6.4.3|||+rocm ~uncrustify ~openmp ~pygeosx ~docs ~trilinos ~petsc amdgpu_target=gfx942 %%amdclang-19 ^caliper~papi~gotcha~sampler~libunwind~libdw|rocm/dev-ubuntu-24.04:6.4.3|ROCM_VERSION=6.4.3 AMDGPU_TARGET=gfx942 SPACK_BUILD_JOBS=8' ) DOCKER_BASE_IMAGE_SHA=${DOCKER_BASE_IMAGE_SHA:-1c3c049b3f629d9d44838656fd306b2a0c04c9e8} @@ -177,20 +183,24 @@ failed_builders=() build() { local index=$1 name=$2 dockerfile=$3 base_tag=$4 base_repository=$5 repository=$6 - local gcc=$7 clang=$8 spec=$9 + local gcc=$7 clang=$8 spec=$9 base_image=${10} extra_env=${11} local builder="reproduce-ci-$$-${index}" image="${repository}:${DOCKER_TAG}" local cleanup_failed=0 + # Rows without an explicit base_image layer on a docker_base_images image. + [[ ${base_image} ]] || base_image="${base_repository}:${base_tag}-${DOCKER_BASE_IMAGE_SHA}" + printf '\n==> %s\n' "${name}" if (( dry_run )); then printf ' dockerfile %s\n' "${dockerfile}" - printf ' base image %s:%s-%s\n' "${base_repository}" "${base_tag}" "${DOCKER_BASE_IMAGE_SHA}" + printf ' base image %s\n' "${base_image}" printf ' repository %s\n' "${repository}" printf ' tag %s\n' "${DOCKER_TAG}" printf ' spec %s\n' "${spec}" [[ ${gcc} ]] && printf ' gcc %s\n' "${gcc}" [[ ${clang} ]] && printf ' clang %s\n' "${clang}" + [[ ${extra_env} ]] && printf ' extra env %s\n' "${extra_env}" printf ' commit %s\n' "${COMMIT}" printf ' install dir %s\n' "${INSTALL_DIR_ROOT}" printf ' host config %s\n' "${HOST_CONFIG}" @@ -213,9 +223,11 @@ build() { return 1 fi + # extra_env is expanded, and bash only honours literal VAR=value words as + # assignments, so it has to go through env rather than the prefix list. if ! TPL_DOCKERFILE=${dockerfile} \ DOCKER_REPOSITORY=${repository} \ - DOCKER_BASE_IMAGE="${base_repository}:${base_tag}-${DOCKER_BASE_IMAGE_SHA}" \ + DOCKER_BASE_IMAGE="${base_image}" \ GCC_VERSION=${gcc} \ CLANG_VERSION=${clang} \ INSTALL_DIR_ROOT=${INSTALL_DIR_ROOT} \ @@ -226,6 +238,7 @@ build() { DOCKER_TAG=${DOCKER_TAG} \ DOCKER_BUILDER=${builder} \ DOCKER_LOAD=1 \ + env ${extra_env} \ bash -x scripts/docker-build.sh; then printf 'FAILED: %s (builder retained: %s)\n' "${name}" "${builder}" >&2 failed=1 @@ -263,10 +276,9 @@ row=0 for idx in "${indices[@]}"; do row=$((row + 1)) IFS='|' read -r name dockerfile base_tag base_repository repository gcc clang spec \ - <<<"${MATRIX[${idx}]}" - + base_image extra_env <<<"${MATRIX[${idx}]}" build "${row}" "${name}" "${dockerfile}" "${base_tag}" "${base_repository}" \ - "${repository}" "${gcc}" "${clang}" "${spec}" + "${repository}" "${gcc}" "${clang}" "${spec}" "${base_image}" "${extra_env}" done if (( dry_run )); then diff --git a/scripts/spack_packages/packages/chai/package.py b/scripts/spack_packages/packages/chai/package.py index 16b68a56..26b5a2f8 100644 --- a/scripts/spack_packages/packages/chai/package.py +++ b/scripts/spack_packages/packages/chai/package.py @@ -1,4 +1,6 @@ -import os +# Copyright Spack Project Developers. See COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) from spack.package import * from spack_repo.builtin.packages.chai.package import Chai as BuiltinChai @@ -6,4 +8,3 @@ class Chai(BuiltinChai): # Bypass llnl_link_helpers failure depends_on("fortran") - diff --git a/scripts/spack_packages/packages/geosx/package.py b/scripts/spack_packages/packages/geosx/package.py index 5bd2a7ae..2c095bb8 100644 --- a/scripts/spack_packages/packages/geosx/package.py +++ b/scripts/spack_packages/packages/geosx/package.py @@ -9,21 +9,25 @@ import socket import os +import spack.llnl.util.tty as tty + from os import environ as env from os.path import join as pjoin -from spack_repo.builtin.build_systems.cached_cmake import cmake_cache_path - from spack_repo.builtin.build_systems.cmake import CMakePackage from spack_repo.builtin.build_systems.cuda import CudaPackage +from spack_repo.builtin.build_systems.cached_cmake import ( + cmake_cache_option, + cmake_cache_path, + cmake_cache_string, +) # Tested specs are located at scripts/spack_configs/<$SYS_TYPE>/spack.yaml (e.g. %clang@10.0.1) - # WARNING: +petsc variant is yet to be tested. def cmake_cache_entry(name, value, comment=""): - """Generate a string for a cmake cache variable""" + """Generate a string for a cmake cache variable.""" return 'set(%s "%s" CACHE PATH "%s")\n\n' % (name, value, comment) @@ -36,19 +40,6 @@ def cmake_cache_list(name, value, comment=""): return 'set(%s %s CACHE STRING "%s")\n\n' % (name, join_str.join(value), comment) -def cmake_cache_string(name, string, comment=""): - """Generate a string for a cmake cache variable""" - - return 'set(%s "%s" CACHE STRING "%s")\n\n' % (name, string, comment) - - -def cmake_cache_option(name, boolean_value, comment=""): - """Generate a string for a cmake configuration option""" - - value = "ON" if boolean_value else "OFF" - return 'set(%s %s CACHE BOOL "%s")\n\n' % (name, value, comment) - - class Geosx(CMakePackage, CudaPackage, ROCmPackage): """GEOSX simulation framework.""" @@ -77,7 +68,7 @@ class Geosx(CMakePackage, CudaPackage, ROCmPackage): multi=False) variant('grpc', default=False, description='Enable gRPC.') variant('pygeosx', default=True, description='Enable pygeosx.') - variant('cxxstd', default='17', description='CXX standard.') + variant('cxxstd', default='20', description='CXX standard.') # SPHINX_END_VARIANTS @@ -100,7 +91,7 @@ class Geosx(CMakePackage, CudaPackage, ROCmPackage): depends_on('cmake@3.24:', type='build') - depends_on('blt@0.7.1') + depends_on('blt@0.7.2') # # Virtual packages @@ -112,11 +103,25 @@ class Geosx(CMakePackage, CudaPackage, ROCmPackage): # # Performance portability # - raja_suite_version="2025.12.0" + raja_suite_version="2026.07.0" + chai_suite_version="2026.07.0" + camp_suite_version="2026.07.1" + umpire_suite_version="2026.07.1" depends_on(f"raja @{raja_suite_version} ~examples~exercises~shared") - depends_on(f"chai @{raja_suite_version} +raja~examples~shared") - depends_on(f"camp @{raja_suite_version}") - depends_on(f"umpire @{raja_suite_version} +c~examples+fortran~device_alloc~shared") + depends_on(f"chai @{chai_suite_version} +raja~examples~shared") + depends_on(f"camp @{camp_suite_version}") + # Umpire's HIP interface exports ROCm's LLVM include directory to every + # language in its CMake target. That directory contains an iso_c_binding.mod + # for Flang, which GNU Fortran rejects. GEOS only uses Umpire's C/C++ API, + # so leave the Umpire Fortran interface off for ROCm builds. + depends_on( + f"umpire @{umpire_suite_version} +c~examples+fortran~device_alloc~shared", + when="~rocm", + ) + depends_on( + f"umpire @{umpire_suite_version} +c~examples~fortran~device_alloc~shared", + when="+rocm", + ) with when('+openmp'): for pkg in ('raja', 'chai', 'umpire'): depends_on(f"{pkg}+openmp", when="+openmp") @@ -152,10 +157,10 @@ class Geosx(CMakePackage, CudaPackage, ROCmPackage): depends_on('pugixml@1.13 ~shared') - depends_on('fmt@11') + depends_on('fmt@12.1.0') for _fmt_cxxstd in ('14', '17', '20'): - depends_on(f'fmt@11 cxxstd={_fmt_cxxstd}', when=f'cxxstd={_fmt_cxxstd}') - depends_on('vtk@9.4.2', when='+vtk') + depends_on(f'fmt@12.1.0 cxxstd={_fmt_cxxstd}', when=f'cxxstd={_fmt_cxxstd}') + depends_on('vtk@9.7.0', when='+vtk') # # Math @@ -187,6 +192,7 @@ class Geosx(CMakePackage, CudaPackage, ROCmPackage): depends_on("hypre +cuda+superlu-dist+mixedint+mpi+umpire~unified-memory", when='+cuda') depends_on("hypre +rocm+superlu-dist+mixedint+mpi+umpire~unified-memory", when='+rocm') depends_on("hypre ~openmp", when="~openmp") + depends_on("hypre +caliper", when="+caliper") depends_on("hypre +pic", when="~shared") depends_on("hypre +shared", when="+shared") @@ -260,22 +266,22 @@ def _get_sys_type(self, spec): return sys_type def _get_host_config_path(self, spec, lvarray=False): - var = '' - - if '+cuda' in spec: - var = '-'.join([var, 'cuda']) - var += "@" + str(spec['cuda'].version) - elif '+rocm' in spec: - var = '-'.join([var, 'rocm']) - var += "@" + str(spec['hip'].version) - + gpu_backend = "" + if "+cuda" in spec: + gpu_backend = f"cuda@{spec['cuda'].version}" + elif "+rocm" in spec: + gpu_backend = f"rocm@{spec['hip'].version}" hostname = socket.gethostname().rstrip('1234567890') if lvarray: hostname = "lvarray-" + hostname - host_config_path = "%s-%s-%s@%s%s.cmake" % (hostname, self._get_sys_type(spec), (str(spec.compiler.name)), str(spec.compiler.version),var) + host_config_path = "%s-%s-%s@%s%s.cmake" % (hostname, + self._get_sys_type(spec), + str(spec.compiler.name), + str(spec.compiler.version), + gpu_backend) dest_dir = self.stage.source_path host_config_path = os.path.abspath(pjoin(dest_dir, host_config_path)) @@ -337,15 +343,15 @@ def geos_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): cfg.write("#{0}\n".format("-" * 80)) cfg.write("# Compilers\n") cfg.write("#{0}\n\n".format("-" * 80)) - cfg.write(cmake_cache_entry("CMAKE_C_COMPILER", c_compiler)) + cfg.write(cmake_cache_path("CMAKE_C_COMPILER", c_compiler)) cflags = ' '.join(spec.compiler_flags['cflags']) if cflags: - cfg.write(cmake_cache_entry("CMAKE_C_FLAGS", cflags)) + cfg.write(cmake_cache_string("CMAKE_C_FLAGS", cflags)) - cfg.write(cmake_cache_entry("CMAKE_CXX_COMPILER", cpp_compiler)) + cfg.write(cmake_cache_path("CMAKE_CXX_COMPILER", cpp_compiler)) cxxflags = ' '.join(spec.compiler_flags['cxxflags']) if cxxflags: - cfg.write(cmake_cache_entry("CMAKE_CXX_FLAGS", cxxflags)) + cfg.write(cmake_cache_string("CMAKE_CXX_FLAGS", cxxflags)) release_flags = "-O3 -DNDEBUG" if "clang" in self.compiler.cxx: @@ -367,14 +373,14 @@ def geos_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): cfg.write("#{0}\n\n".format("-" * 80)) cfg.write(cmake_cache_option('ENABLE_MPI', True)) - cfg.write(cmake_cache_entry('MPI_C_COMPILER', spec['mpi'].mpicc)) - cfg.write(cmake_cache_entry('MPI_CXX_COMPILER', spec['mpi'].mpicxx)) + cfg.write(cmake_cache_path('MPI_C_COMPILER', spec['mpi'].mpicc)) + cfg.write(cmake_cache_path('MPI_CXX_COMPILER', spec['mpi'].mpicxx)) hostname = socket.gethostname().rstrip('1234567890') if sys_type in ('toss_4_x86_64_ib_cray'): - cfg.write(cmake_cache_entry('MPIEXEC', 'srun')) - cfg.write(cmake_cache_entry('MPIEXEC_NUMPROC_FLAG', '-n')) + cfg.write(cmake_cache_string('MPIEXEC', 'srun')) + cfg.write(cmake_cache_string('MPIEXEC_NUMPROC_FLAG', '-n')) else: # Taken from cached_cmake class: # https://github.com/spack/spack/blob/develop/lib/spack/spack/build_systems/cached_cmake.py#L180-234 @@ -438,9 +444,9 @@ def geos_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): cfg.write(cmake_cache_string('CMAKE_CUDA_STANDARD', spec.variants['cxxstd'].value)) cudatoolkitdir = spec['cuda'].prefix - cfg.write(cmake_cache_entry('CUDA_TOOLKIT_ROOT_DIR', cudatoolkitdir)) + cfg.write(cmake_cache_path('CUDA_TOOLKIT_ROOT_DIR', cudatoolkitdir)) cudacompiler = '${CUDA_TOOLKIT_ROOT_DIR}/bin/nvcc' - cfg.write(cmake_cache_entry('CMAKE_CUDA_COMPILER', cudacompiler)) + cfg.write(cmake_cache_path('CMAKE_CUDA_COMPILER', cudacompiler)) cmake_cuda_flags = ('-restrict --expt-extended-lambda -Werror ' 'cross-execution-space-call,reorder,' @@ -465,7 +471,7 @@ def geos_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): cuda_stack_size = int(spec.variants['cuda_stack_size'].value) if 0 < cuda_stack_size: cfg.write(cmake_cache_option('ENABLE_CUDA_STACK_SIZE', True, "Adjust the CUDA stack size limit")) - cfg.write(cmake_cache_entry('CUDA_STACK_SIZE', cuda_stack_size, "CUDA stack size in KB")) + cfg.write(cmake_cache_string('CUDA_STACK_SIZE', cuda_stack_size, "CUDA stack size in KB")) else: cfg.write(cmake_cache_option('ENABLE_CUDA', False)) @@ -476,13 +482,19 @@ def geos_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): if '+rocm' in spec: cfg.write(cmake_cache_option('ENABLE_HIP', True)) cfg.write(cmake_cache_string('CMAKE_HIP_STANDARD', spec.variants['cxxstd'].value)) - cfg.write(cmake_cache_entry('CMAKE_HIP_COMPILER', spec['hip'].prefix.bin.hipcc)) + cfg.write(cmake_cache_path('CMAKE_HIP_COMPILER', spec['hip'].prefix.bin.hipcc)) if not spec.satisfies('amdgpu_target=none'): cmake_hip_archs = ";".join(spec.variants["amdgpu_target"].value) cfg.write(cmake_cache_string('CMAKE_HIP_ARCHITECTURES', cmake_hip_archs)) - - cfg.write(cmake_cache_entry('ROCM_PATH', spec['hip'].prefix)) + # ROCm 6.4's hip-config uses GPU_TARGETS to seed the + # imported hip::device target. Set both spellings so + # host-config builds do not detect and add the build + # machine's GPUs when cross-compiling for a target node. + cfg.write(cmake_cache_string('GPU_TARGETS', cmake_hip_archs)) + cfg.write(cmake_cache_string('AMDGPU_TARGETS', cmake_hip_archs)) + + cfg.write(cmake_cache_path('ROCM_PATH', spec['hip'].prefix)) else: cfg.write(cmake_cache_option('ENABLE_HIP', False)) @@ -491,14 +503,14 @@ def geos_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): cfg.write('#{0}\n\n'.format('-' * 80)) cfg.write(cmake_cache_option('ENABLE_CHAI', True)) - cfg.write(cmake_cache_entry('CHAI_DIR', spec['chai'].prefix)) + cfg.write(cmake_cache_path('CHAI_DIR', spec['chai'].prefix)) - cfg.write(cmake_cache_entry('RAJA_DIR', spec['raja'].prefix)) + cfg.write(cmake_cache_path('RAJA_DIR', spec['raja'].prefix)) cfg.write(cmake_cache_option('ENABLE_UMPIRE', True)) - cfg.write(cmake_cache_entry('UMPIRE_DIR', spec['umpire'].prefix)) + cfg.write(cmake_cache_path('UMPIRE_DIR', spec['umpire'].prefix)) - cfg.write(cmake_cache_entry('CAMP_DIR', spec['camp'].prefix)) + cfg.write(cmake_cache_path('CAMP_DIR', spec['camp'].prefix)) # yapf: disable io_tpls = ( @@ -518,8 +530,8 @@ def geos_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): if '+caliper' in spec: cfg.write(cmake_cache_option('ENABLE_CALIPER', True)) - cfg.write(cmake_cache_entry('CALIPER_DIR', spec['caliper'].prefix)) - cfg.write(cmake_cache_entry('ADIAK_DIR', spec['adiak'].prefix)) + cfg.write(cmake_cache_path('CALIPER_DIR', spec['caliper'].prefix)) + cfg.write(cmake_cache_path('ADIAK_DIR', spec['adiak'].prefix)) for tpl, cmake_name, enable in io_tpls: if enable: @@ -536,7 +548,7 @@ def geos_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): raise KeyError("No zlib provider (zlib/zlib-ng/zlib-api) found in {0}".format(spec)) else: dep_spec = spec[tpl] - cfg.write(cmake_cache_entry('{}_DIR'.format(cmake_name), dep_spec.prefix)) + cfg.write(cmake_cache_path('{}_DIR'.format(cmake_name), dep_spec.prefix)) else: cfg.write(cmake_cache_option('ENABLE_{}'.format(cmake_name), False)) @@ -546,11 +558,11 @@ def geos_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): if spec["blas"].name == "intel-oneapi-mkl": cfg.write(cmake_cache_option('ENABLE_MKL', True)) - cfg.write(cmake_cache_entry('MKL_INCLUDE_DIRS', spec['intel-oneapi-mkl'].prefix.include)) + cfg.write(cmake_cache_path('MKL_INCLUDE_DIRS', spec['intel-oneapi-mkl'].prefix.include)) cfg.write(cmake_cache_list('MKL_LIBRARIES', spec['intel-oneapi-mkl'].libs)) elif spec["blas"].name == "mkl": cfg.write(cmake_cache_option('ENABLE_MKL', True)) - cfg.write(cmake_cache_entry('MKL_INCLUDE_DIRS', spec['intel-mkl'].prefix.include)) + cfg.write(cmake_cache_path('MKL_INCLUDE_DIRS', spec['intel-mkl'].prefix.include)) cfg.write(cmake_cache_list('MKL_LIBRARIES', spec['intel-mkl'].libs)) else: cfg.write(cmake_cache_list('BLAS_LIBRARIES', spec['blas'].libs)) @@ -577,7 +589,7 @@ def geos_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): if enable: if tpl == 'hypredrive': cfg.write(cmake_cache_option('ENABLE_HYPREDRV', True)) - cfg.write(cmake_cache_entry('{}_DIR'.format(cmake_name), spec[tpl].prefix)) + cfg.write(cmake_cache_path('{}_DIR'.format(cmake_name), spec[tpl].prefix)) if tpl == 'hypre' and '+cuda' in spec: cfg.write(cmake_cache_string('ENABLE_HYPRE_DEVICE', "CUDA")) @@ -600,8 +612,8 @@ def geos_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): cfg.write('# Python\n') cfg.write('#{0}\n\n'.format('-' * 80)) - cfg.write(cmake_cache_entry('Python3_ROOT_DIR', os.path.join(spec['python'].prefix))) - cfg.write(cmake_cache_entry('Python3_EXECUTABLE', os.path.join(spec['python'].prefix.bin, 'python3'))) + cfg.write(cmake_cache_path('Python3_ROOT_DIR', os.path.join(spec['python'].prefix))) + cfg.write(cmake_cache_path('Python3_EXECUTABLE', os.path.join(spec['python'].prefix.bin, 'python3'))) if '+pygeosx' in spec: cfg.write(cmake_cache_option('ENABLE_PYGEOSX', True)) @@ -613,10 +625,10 @@ def geos_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): cfg.write('#{0}\n\n'.format('-' * 80)) if '+docs' in spec: sphinx_bin_dir = spec['py-sphinx'].prefix.bin - cfg.write(cmake_cache_entry('SPHINX_EXECUTABLE', os.path.join(sphinx_bin_dir, 'sphinx-build'))) + cfg.write(cmake_cache_path('SPHINX_EXECUTABLE', os.path.join(sphinx_bin_dir, 'sphinx-build'))) doxygen_bin_dir = spec['doxygen'].prefix.bin - cfg.write(cmake_cache_entry('DOXYGEN_EXECUTABLE', os.path.join(doxygen_bin_dir, 'doxygen'))) + cfg.write(cmake_cache_path('DOXYGEN_EXECUTABLE', os.path.join(doxygen_bin_dir, 'doxygen'))) else: cfg.write(cmake_cache_option('ENABLE_DOCS', False)) cfg.write(cmake_cache_option('ENABLE_DOXYGEN', False)) @@ -629,14 +641,14 @@ def geos_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): cfg.write(cmake_cache_option('ENABLE_UNCRUSTIFY', '+uncrustify' in spec)) if '+uncrustify' in spec: cfg.write( - cmake_cache_entry('UNCRUSTIFY_EXECUTABLE', os.path.join(spec['uncrustify'].prefix.bin, 'uncrustify'))) + cmake_cache_path('UNCRUSTIFY_EXECUTABLE', os.path.join(spec['uncrustify'].prefix.bin, 'uncrustify'))) if '+addr2line' in spec: cfg.write('#{0}\n'.format('-' * 80)) cfg.write('# addr2line\n') cfg.write('#{0}\n\n'.format('-' * 80)) cfg.write(cmake_cache_option('ENABLE_ADDR2LINE', True)) - cfg.write(cmake_cache_entry('ADDR2LINE_EXEC', os.path.join(spec['addr2line'].prefix.bin, 'addr2line'))) + cfg.write(cmake_cache_path('ADDR2LINE_EXEC', os.path.join(spec['addr2line'].prefix.bin, 'addr2line'))) cfg.write('#{0}\n'.format('-' * 80)) cfg.write('# Other\n') @@ -644,7 +656,7 @@ def geos_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): if '+mathpresso' in spec: cfg.write(cmake_cache_option('ENABLE_MATHPRESSO', True)) - cfg.write(cmake_cache_entry('MATHPRESSO_DIR', spec['mathpresso'].prefix)) + cfg.write(cmake_cache_path('MATHPRESSO_DIR', spec['mathpresso'].prefix)) cfg.write(cmake_cache_option('ENABLE_XML_UPDATES', True)) else: cfg.write(cmake_cache_option('ENABLE_MATHPRESSO', False)) @@ -727,15 +739,15 @@ def lvarray_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): cfg.write("#{0}\n".format("-" * 80)) cfg.write("# Compilers\n") cfg.write("#{0}\n\n".format("-" * 80)) - cfg.write(cmake_cache_entry("CMAKE_C_COMPILER", c_compiler)) + cfg.write(cmake_cache_path("CMAKE_C_COMPILER", c_compiler)) cflags = ' '.join(spec.compiler_flags['cflags']) if cflags: - cfg.write(cmake_cache_entry("CMAKE_C_FLAGS", cflags)) + cfg.write(cmake_cache_string("CMAKE_C_FLAGS", cflags)) - cfg.write(cmake_cache_entry("CMAKE_CXX_COMPILER", cpp_compiler)) + cfg.write(cmake_cache_path("CMAKE_CXX_COMPILER", cpp_compiler)) cxxflags = ' '.join(spec.compiler_flags['cxxflags']) if cxxflags: - cfg.write(cmake_cache_entry("CMAKE_CXX_FLAGS", cxxflags)) + cfg.write(cmake_cache_string("CMAKE_CXX_FLAGS", cxxflags)) release_flags = "-O3 -DNDEBUG" cfg.write(cmake_cache_string("CMAKE_CXX_FLAGS_RELEASE", release_flags)) @@ -752,9 +764,9 @@ def lvarray_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): cfg.write(cmake_cache_string('CMAKE_CUDA_STANDARD', spec.variants['cxxstd'].value)) cudatoolkitdir = spec['cuda'].prefix - cfg.write(cmake_cache_entry('CUDA_TOOLKIT_ROOT_DIR', cudatoolkitdir)) + cfg.write(cmake_cache_path('CUDA_TOOLKIT_ROOT_DIR', cudatoolkitdir)) cudacompiler = '${CUDA_TOOLKIT_ROOT_DIR}/bin/nvcc' - cfg.write(cmake_cache_entry('CMAKE_CUDA_COMPILER', cudacompiler)) + cfg.write(cmake_cache_path('CMAKE_CUDA_COMPILER', cudacompiler)) cmake_cuda_flags = ('-restrict --expt-extended-lambda -Werror ' 'cross-execution-space-call,reorder,' @@ -784,14 +796,14 @@ def lvarray_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): cfg.write('#{0}\n\n'.format('-' * 80)) cfg.write(cmake_cache_option('ENABLE_CHAI', True)) - cfg.write(cmake_cache_entry('CHAI_DIR', spec['chai'].prefix)) + cfg.write(cmake_cache_path('CHAI_DIR', spec['chai'].prefix)) - cfg.write(cmake_cache_entry('RAJA_DIR', spec['raja'].prefix)) + cfg.write(cmake_cache_path('RAJA_DIR', spec['raja'].prefix)) cfg.write(cmake_cache_option('ENABLE_UMPIRE', True)) - cfg.write(cmake_cache_entry('UMPIRE_DIR', spec['umpire'].prefix)) + cfg.write(cmake_cache_path('UMPIRE_DIR', spec['umpire'].prefix)) - cfg.write(cmake_cache_entry('CAMP_DIR', spec['camp'].prefix)) + cfg.write(cmake_cache_path('CAMP_DIR', spec['camp'].prefix)) cfg.write('#{0}\n'.format('-' * 80)) cfg.write('# IO TPLs\n') @@ -799,18 +811,18 @@ def lvarray_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): if '+caliper' in spec: cfg.write(cmake_cache_option('ENABLE_CALIPER', True)) - cfg.write(cmake_cache_entry('CALIPER_DIR', spec['caliper'].prefix)) - cfg.write(cmake_cache_entry('adiak_DIR', spec['adiak'].prefix + '/lib/cmake/adiak')) + cfg.write(cmake_cache_path('CALIPER_DIR', spec['caliper'].prefix)) + cfg.write(cmake_cache_path('adiak_DIR', spec['adiak'].prefix + '/lib/cmake/adiak')) cfg.write('#{0}\n'.format('-' * 80)) cfg.write('# Documentation\n') cfg.write('#{0}\n\n'.format('-' * 80)) if '+docs' in spec: sphinx_bin_dir = spec['py-sphinx'].prefix.bin - cfg.write(cmake_cache_entry('SPHINX_EXECUTABLE', os.path.join(sphinx_bin_dir, 'sphinx-build'))) + cfg.write(cmake_cache_path('SPHINX_EXECUTABLE', os.path.join(sphinx_bin_dir, 'sphinx-build'))) doxygen_bin_dir = spec['doxygen'].prefix.bin - cfg.write(cmake_cache_entry('DOXYGEN_EXECUTABLE', os.path.join(doxygen_bin_dir, 'doxygen'))) + cfg.write(cmake_cache_path('DOXYGEN_EXECUTABLE', os.path.join(doxygen_bin_dir, 'doxygen'))) else: cfg.write(cmake_cache_option('ENABLE_DOXYGEN', False)) cfg.write(cmake_cache_option('ENABLE_SPHINX', False)) @@ -824,7 +836,7 @@ def lvarray_hostconfig(self, spec, prefix, py_site_pkgs_dir=None): cfg.write('# addr2line\n') cfg.write('#{0}\n\n'.format('-' * 80)) cfg.write(cmake_cache_option('ENABLE_ADDR2LINE', True)) - cfg.write(cmake_cache_entry('ADDR2LINE_EXEC', os.path.join(spec['addr2line'].prefix.bin, 'addr2line'))) + cfg.write(cmake_cache_path('ADDR2LINE_EXEC', os.path.join(spec['addr2line'].prefix.bin, 'addr2line'))) def cmake_args(self): pass diff --git a/scripts/spack_packages/packages/parmetis/package.py b/scripts/spack_packages/packages/parmetis/package.py new file mode 100644 index 00000000..90663c34 --- /dev/null +++ b/scripts/spack_packages/packages/parmetis/package.py @@ -0,0 +1,16 @@ +# Copyright Spack Project Developers. See LICENSE-APACHE or LICENSE-MIT. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +from spack.package import * +from spack_repo.builtin.packages.parmetis.package import Parmetis as BuiltinParmetis + + +class Parmetis(BuiltinParmetis): + # GEOS links SuperLU-DIST as a shared library. Its static ParMETIS + # dependency therefore has to contain position-independent code; the + # upstream recipe does not propagate dependency cflags into CMake. + def cmake_args(self): + args = super().cmake_args() + args.append(self.define("CMAKE_POSITION_INDEPENDENT_CODE", True)) + return args diff --git a/scripts/spack_packages/packages/vtk/9.7.0-patch/diy-fortify-macro.patch b/scripts/spack_packages/packages/vtk/9.7.0-patch/diy-fortify-macro.patch new file mode 100644 index 00000000..12b30fde --- /dev/null +++ b/scripts/spack_packages/packages/vtk/9.7.0-patch/diy-fortify-macro.patch @@ -0,0 +1,19 @@ +--- a/ThirdParty/diy2/vtkdiy2/include/vtkdiy2/coroutine/sjlj.hpp ++++ b/ThirdParty/diy2/vtkdiy2/include/vtkdiy2/coroutine/sjlj.hpp +@@ -6,5 +6,5 @@ + #if __USE_FORTIFY_LEVEL +-#define DIY_USE_FORTIFY_LEVEL __USE_FORTIFY_LEVEL ++#pragma push_macro("__USE_FORTIFY_LEVEL") + #undef __USE_FORTIFY_LEVEL +-#warning "diy::coroutine (sjlj.hpp) cannot be compiled with _FORTIFY_SOURCE; disabling." ++#define DIY_SJLJ_FORTIFY_LEVEL_SAVED + #endif +@@ -126,4 +126,4 @@ +-#if DIY_USE_FORTIFY_LEVEL +-#define __USE_FORTIFY_LEVEL DIY_USE_FORTIFY_LEVEL +-#undef DIY_USE_FORTIFY_LEVEL +-#endif ++#if defined(DIY_SJLJ_FORTIFY_LEVEL_SAVED) ++#pragma pop_macro("__USE_FORTIFY_LEVEL") ++#undef DIY_SJLJ_FORTIFY_LEVEL_SAVED ++#endif diff --git a/scripts/spack_packages/packages/vtk/package.py b/scripts/spack_packages/packages/vtk/package.py index c75d6cfe..2a75d931 100644 --- a/scripts/spack_packages/packages/vtk/package.py +++ b/scripts/spack_packages/packages/vtk/package.py @@ -20,7 +20,8 @@ class Vtk(CMakePackage): maintainers = ['chuckatkins', 'danlipsa'] - version("9.4.2", sha256="36c98e0da96bb12a30fe53708097aa9492e7b66d5c3b366e1c8dc251e2856a02", preferred=True) + version("9.7.0", url="https://www.vtk.org/files/release/9.7/VTK-9.7.0.tar.gz", sha256="affdb7a15ec34ee0174407f911ab70b646c7af01161818bbab4e1160b7eff720", preferred=True) + version("9.4.2", sha256="36c98e0da96bb12a30fe53708097aa9492e7b66d5c3b366e1c8dc251e2856a02") version("9.3.1", sha256="8354ec084ea0d2dc3d23dbe4243823c4bfc270382d0ce8d658939fd50061cab8") version("9.2.6", sha256="06fc8d49c4e56f498c40fcb38a563ed8d4ec31358d0101e8988f0bb4d539dd12") version('9.1.0', sha256='8fed42f4f8f1eb8083107b68eaa9ad71da07110161a3116ad807f43e5ca5ce96') @@ -63,6 +64,12 @@ class Vtk(CMakePackage): full_path = os.path.join(patch_dir, fname) if fname.endswith('.patch') and os.path.isfile(full_path): patch(os.path.join('9.4.2-patch', fname), when='@9.4.2') + if fname in ('vtkCellGridReader.cxx.patch', 'vtkLegacyCellGridReader.cxx.patch'): + patch(os.path.join('9.4.2-patch', fname), when='@9.7.0') + + # Keep DIY's SJLJ fortify workaround scoped to its libc includes and do + # not promote its expected condition to a compiler warning. + patch('9.7.0-patch/diy-fortify-macro.patch', when='@9.7.0') def cmake_args(self): spec = self.spec diff --git a/tplMirror/Caliper-2.14.0.tar.gz b/tplMirror/Caliper-2.14.0.tar.gz deleted file mode 100644 index ddfa6526..00000000 --- a/tplMirror/Caliper-2.14.0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b42c35dfbe485960dd326033893dae37ac00d9807c5c3e6b5b1f396bc4af273f -size 2093696 diff --git a/tplMirror/RAJA-v2025.12.0.tar.gz b/tplMirror/RAJA-v2025.12.0.tar.gz deleted file mode 100644 index 4a17ad92..00000000 --- a/tplMirror/RAJA-v2025.12.0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e8b4656a79fe01f01b122947365537537505073e4a8dbf388ee85f105f678d2 -size 10997567 diff --git a/tplMirror/SuiteSparse-5.10.1.tar.gz b/tplMirror/SuiteSparse-5.10.1.tar.gz deleted file mode 100644 index 0748b2cb..00000000 --- a/tplMirror/SuiteSparse-5.10.1.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:acb4d1045f48a237e70294b950153e48dce5b5f9ca8190e86c2b8c54ce00a7ee -size 59919745 diff --git a/tplMirror/VTK-9.4.2.tar.gz b/tplMirror/VTK-9.4.2.tar.gz deleted file mode 100644 index 4a9c9cc5..00000000 --- a/tplMirror/VTK-9.4.2.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:36c98e0da96bb12a30fe53708097aa9492e7b66d5c3b366e1c8dc251e2856a02 -size 118621433 diff --git a/tplMirror/adiak-0.4.0.tar.gz b/tplMirror/adiak-0.4.0.tar.gz deleted file mode 100644 index ef29dc36..00000000 --- a/tplMirror/adiak-0.4.0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5f789998004a68f540d5d787a2062d8aa6a828f4787064221c5081f287a7b334 -size 1318684 diff --git a/tplMirror/asmjit-2e93826.zip b/tplMirror/asmjit-2e93826.zip deleted file mode 100644 index bd53b33e..00000000 --- a/tplMirror/asmjit-2e93826.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9182e6293d2c88661ee9457d4d1da4bd20fbb3d51a0603315176d243bd887ed5 -size 1289947 diff --git a/tplMirror/chai-v2025.12.0.tar.gz b/tplMirror/chai-v2025.12.0.tar.gz deleted file mode 100644 index 897ff763..00000000 --- a/tplMirror/chai-v2025.12.0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c77a17dbb1aade696681b7b747a7437f4e4252361d57dca1fe7edd20d5b1984b -size 23851995 diff --git a/tplMirror/conduit-v0.9.5-src-with-blt.tar.gz b/tplMirror/conduit-v0.9.5-src-with-blt.tar.gz deleted file mode 100644 index cbb1cb93..00000000 --- a/tplMirror/conduit-v0.9.5-src-with-blt.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d93294efbf0936da5a27941e13486aa1a04a74a59285786a2303eed19a24265a -size 109117490 diff --git a/tplMirror/doxygen-1.8.20.tar.gz b/tplMirror/doxygen-1.8.20.tar.gz deleted file mode 100644 index b43cc788..00000000 --- a/tplMirror/doxygen-1.8.20.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3dbdf8814d6e68233d5149239cb1f0b40b4e7b32eef2fd53de8828fedd7aca15 -size 5065824 diff --git a/tplMirror/fmt-11.0.1.tar.gz b/tplMirror/fmt-11.0.1.tar.gz deleted file mode 100644 index c80cd4d1..00000000 --- a/tplMirror/fmt-11.0.1.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7d009f7f89ac84c0a83f79ed602463d092fbf66763766a907c97fd02b100f5e9 -size 698903 diff --git a/tplMirror/hdf5-1.12.1.tar.gz b/tplMirror/hdf5-1.12.1.tar.gz deleted file mode 100644 index dd1398ee..00000000 --- a/tplMirror/hdf5-1.12.1.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:232d28ebc00917d39e6cf304a9a0b7b6d7849c4431042a82a9c248c32eb38b49 -size 13126779 diff --git a/tplMirror/hypre-v2.33.0-12-gbe52325a3.tar.gz b/tplMirror/hypre-v2.33.0-12-gbe52325a3.tar.gz deleted file mode 100644 index b2e96d3c..00000000 --- a/tplMirror/hypre-v2.33.0-12-gbe52325a3.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:89d885a75f0d5a10ae7d5ebcdc1ae79a5e4fba7b75c433b03e8cd2fe7f87b6ed -size 4403487 diff --git a/tplMirror/mathpresso-24d60e5.zip b/tplMirror/mathpresso-24d60e5.zip deleted file mode 100644 index edf1c96f..00000000 --- a/tplMirror/mathpresso-24d60e5.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:21db69668f6787293d0b27ba61e4bf913522b0e137a47830fb66415f764d6bb1 -size 68177 diff --git a/tplMirror/parmetis-4.0.3-IDXTYPEWIDTH_64.tar.gz b/tplMirror/parmetis-4.0.3-IDXTYPEWIDTH_64.tar.gz deleted file mode 100644 index a5af258f..00000000 --- a/tplMirror/parmetis-4.0.3-IDXTYPEWIDTH_64.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:998f6a566b5738e0237af6096dd4ca954175c2b490b967f8b32c01563f7ac037 -size 5582306 diff --git a/tplMirror/petsc-3.19.4.tar.gz b/tplMirror/petsc-3.19.4.tar.gz deleted file mode 100644 index 8d69e955..00000000 --- a/tplMirror/petsc-3.19.4.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7c941b71be52c3b764214e492df60109d12f97f7d854c97a44df0c4d958b3906 -size 16630006 diff --git a/tplMirror/pugixml-1.13.tar.gz b/tplMirror/pugixml-1.13.tar.gz deleted file mode 100644 index 444889ec..00000000 --- a/tplMirror/pugixml-1.13.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5c5ad5d7caeb791420408042a7d88c2c6180781bf218feca259fd9d840a888e1 -size 573528 diff --git a/tplMirror/scotch-v7.0.8.tar.gz b/tplMirror/scotch-v7.0.8.tar.gz deleted file mode 100644 index 2715c604..00000000 --- a/tplMirror/scotch-v7.0.8.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:21f48ac85c7991a5eb5fae9232dd68584556ccc500f85e2ebd6b5b275617e11a -size 7788948 diff --git a/tplMirror/silo-4.11.1-bsd.tar.xz b/tplMirror/silo-4.11.1-bsd.tar.xz deleted file mode 100644 index a53ead5a..00000000 Binary files a/tplMirror/silo-4.11.1-bsd.tar.xz and /dev/null differ diff --git a/tplMirror/silo-4.11.patch b/tplMirror/silo-4.11.patch deleted file mode 100644 index f599d994..00000000 --- a/tplMirror/silo-4.11.patch +++ /dev/null @@ -1,44 +0,0 @@ ---- silo/src/silo/src/hdf5_drv/H5FDsilo.c 2021-09-10 15:22:52.000000000 -0700 -+++ ../tplMirror/H5FDsilo.c 2022-04-12 11:56:04.981156000 -0700 -@@ -252,13 +252,13 @@ - snprintf(msg, sizeof(msg), Msg "(errno=%d, \"%s\")", \ - Errno, strerror(Errno)); \ - ret_value = Ret; \ -- H5Epush_ret(Func, Cls, Maj, Min, msg, Ret) \ -+ H5Epush_ret(Func, Cls, Maj, Min, msg, Ret); \ - } - #else - #define H5E_PUSH_HELPER(Func,Cls,Maj,Min,Msg,Ret,Errno) \ - { \ - ret_value = Ret; \ -- H5Epush_ret(Func, Cls, Maj, Min, Msg, Ret) \ -+ H5Epush_ret(Func, Cls, Maj, Min, Msg, Ret); \ - } - #endif - -@@ -1355,7 +1355,7 @@ - assert(sizeof(hsize_t)<=8); - memcpy(p, &file->block_size, sizeof(hsize_t)); - if (H5Tconvert(H5T_NATIVE_HSIZE, H5T_STD_U64LE, 1, buf+8, NULL, H5P_DEFAULT)<0) -- H5Epush_ret(func, H5E_ERR_CLS, H5E_DATATYPE, H5E_CANTCONVERT, "can't convert superblock info", -1) -+ H5Epush_ret(func, H5E_ERR_CLS, H5E_DATATYPE, H5E_CANTCONVERT, "can't convert superblock info", -1); - - return 0; - } -@@ -1383,14 +1383,14 @@ - - /* Make sure the name/version number is correct */ - if (strcmp(name, "LLNLsilo")) -- H5Epush_ret(func, H5E_ERR_CLS, H5E_FILE, H5E_BADVALUE, "invalid silo superblock", -1) -+ H5Epush_ret(func, H5E_ERR_CLS, H5E_FILE, H5E_BADVALUE, "invalid silo superblock", -1); - - buf += 8; - /* Decode block size */ - assert(sizeof(hsize_t)<=8); - memcpy(x, buf, 8); - if (H5Tconvert(H5T_STD_U64LE, H5T_NATIVE_HSIZE, 1, x, NULL, H5P_DEFAULT)<0) -- H5Epush_ret(func, H5E_ERR_CLS, H5E_DATATYPE, H5E_CANTCONVERT, "can't convert superblock info", -1) -+ H5Epush_ret(func, H5E_ERR_CLS, H5E_DATATYPE, H5E_CANTCONVERT, "can't convert superblock info", -1); - ap = (hsize_t*)x; - /*file->block_size = *ap; ignore stored value for now */ - diff --git a/tplMirror/superlu_dist-0f6efc3.tar.gz b/tplMirror/superlu_dist-0f6efc3.tar.gz deleted file mode 100644 index 7957f077..00000000 --- a/tplMirror/superlu_dist-0f6efc3.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:638ee5ac163173d1a3e0c12d1f5ac6225fb97ce69cbd712d7755b2678e6c6fa8 -size 1705455 diff --git a/tplMirror/superlu_dist-9.0.0.tar.gz b/tplMirror/superlu_dist-9.0.0.tar.gz deleted file mode 100644 index 07e8b255..00000000 --- a/tplMirror/superlu_dist-9.0.0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aa43d33d4b1b0f5f7b5ad7685e9a6bc25088832c6c74d2ab8f75a2c9f4e9e955 -size 2913310 diff --git a/tplMirror/trilinos-release-16-1-0.tar.gz b/tplMirror/trilinos-release-16-1-0.tar.gz deleted file mode 100644 index 3cc35c68..00000000 --- a/tplMirror/trilinos-release-16-1-0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e9651c88f581049457036cfc01b527a9d3903c257338eeeab942befd7452f23a -size 197260161 diff --git a/tplMirror/uncrustify-401a409.zip b/tplMirror/uncrustify-401a409.zip deleted file mode 100644 index 49773d2b..00000000 --- a/tplMirror/uncrustify-401a409.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:91724ed4cb39f9280c39dcdc81c542d5a19d54821bb9f0f9ff26e60077fc3358 -size 2610668