# BLT is LLNL's build-time-only CMake macro framework (not Fedora's Tcl/Tk # "blt"); bundled at build time. camp/umpire/RAJA/fmt are MPI-agnostic and taken # from the serial system packages for every flavor; conduit and HDF5 are taken # from the matching (serial or MPI) packages. %global blt_version 0.7.2 # LTO doubles cc1plus peak memory on axom's largest TUs (quest/sidre) and this # build must coexist with the CTest farm's -j6 Slicer compile on a 31 GB host: # with LTO on, single TUs OOM even at -j1. Same knob the repo already uses for # ANTs (see CLAUDE.md "GCC 15 / Fedora 43+ fixes"). %global _lto_cflags %{nil} # Axom's CMake project root is the src/ subdirectory. %global _vpath_srcdir src # v0.15.0 is the first RELEASE containing the axom commit LLNL/smith pins # (f81109ce, needed for Lua 5.4-compatible sol2): verified # f81109ce..v0.15.0 = ahead 1126 / behind 0. So the spec can return from the # commit snapshot to a clean release tag. %bcond_without mpich %bcond_without openmpi Name: axom Version: 0.15.0 Release: 4%{?dist} Summary: CS infrastructure components for HPC applications License: BSD-3-Clause URL: https://github.com/LLNL/axom Source0: %{url}/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz Source1: https://github.com/LLNL/blt/archive/refs/tags/v%{blt_version}.tar.gz#/blt-%{blt_version}.tar.gz BuildRequires: cmake BuildRequires: gcc-c++ BuildRequires: camp-devel BuildRequires: umpire-devel BuildRequires: RAJA-devel BuildRequires: conduit-devel BuildRequires: hdf5-devel # Lua enables axom's inlet LuaReader + bundled sol2 (required by smith). The bundled # sol2 accepts Lua 5.1-5.4 only (sol.hpp: #error for LUA_VERSION_NUM > 504), and Fedora 45+ # ships Lua 5.5, so there axom builds against compat-lua (5.1) instead. %if 0%{?fedora} >= 45 %global axom_lua compat-lua-devel %else %global axom_lua lua-devel %endif BuildRequires: %{axom_lua} # MFEM enables sidre's MFEMSidreDataCollection (required by smith) BuildRequires: mfem-devel BuildRequires: hypre-devel BuildRequires: metis-devel %if %{with mpich} BuildRequires: mpich-devel BuildRequires: conduit-mpich-devel BuildRequires: hdf5-mpich-devel BuildRequires: mfem-mpich-devel BuildRequires: hypre-mpich-devel # Our mfem ships a real MFEMConfig.cmake whose imported target references the # UNVERSIONED libstrumpack.so / libsuperlu_dist.so devel symlinks; the runtime # STRUMPACK/superlu_dist packages arrive transitively but the -devel symlinks do # not (mfem-*-devel is missing Requires on them — fix pending there), so link # fails with "libstrumpack.so ... no known rule to make it". Pull them here. BuildRequires: STRUMPACK-mpich-devel BuildRequires: superlu_dist-mpich-devel %endif %if %{with openmpi} BuildRequires: openmpi-devel BuildRequires: conduit-openmpi-devel BuildRequires: hdf5-openmpi-devel BuildRequires: mfem-openmpi-devel BuildRequires: hypre-openmpi-devel # (same unversioned-symlink story as the mpich block above) BuildRequires: STRUMPACK-openmpi-devel BuildRequires: superlu_dist-openmpi-devel %endif Provides: bundled(blt) = %{blt_version} %description Axom is a collection of robust and flexible software components that serve as building blocks for high-performance computing applications, developed as part of the LLNL RADIUSS stack. Components include core, slic, slam, primal, mint, spin, sidre, inlet, klee, and quest. %package devel Summary: Development files for %{name} Requires: %{name}%{?_isa} = %{version}-%{release} Requires: camp-devel%{?_isa} Requires: umpire-devel%{?_isa} Requires: RAJA-devel%{?_isa} Requires: conduit-devel%{?_isa} Requires: %{axom_lua}%{?_isa} Requires: mfem-devel%{?_isa} %description devel This package contains the headers and CMake configuration files needed to build serial applications against %{name}. %if %{with mpich} %package mpich Summary: MPICH version of %{name} Requires: mpich%{?_isa} %description mpich This package contains the %{name} libraries compiled against MPICH. %package mpich-devel Summary: Development files for the MPICH version of %{name} Requires: %{name}-mpich%{?_isa} = %{version}-%{release} Requires: camp-devel%{?_isa} Requires: umpire-devel%{?_isa} Requires: RAJA-devel%{?_isa} Requires: conduit-mpich-devel%{?_isa} Requires: %{axom_lua}%{?_isa} Requires: mfem-mpich-devel%{?_isa} %description mpich-devel This package contains the headers and CMake configuration files needed to build MPICH applications against %{name}. %endif %if %{with openmpi} %package openmpi Summary: OpenMPI version of %{name} Requires: openmpi%{?_isa} %description openmpi This package contains the %{name} libraries compiled against OpenMPI. %package openmpi-devel Summary: Development files for the OpenMPI version of %{name} Requires: %{name}-openmpi%{?_isa} = %{version}-%{release} Requires: camp-devel%{?_isa} Requires: umpire-devel%{?_isa} Requires: RAJA-devel%{?_isa} Requires: conduit-openmpi-devel%{?_isa} Requires: %{axom_lua}%{?_isa} Requires: mfem-openmpi-devel%{?_isa} %description openmpi-devel This package contains the headers and CMake configuration files needed to build OpenMPI applications against %{name}. %endif %prep %autosetup -n %{name}-%{version} # Provide BLT at build time (see comment near %%blt_version above) tar -xf %{SOURCE1} # Upstream installs component libraries with unversioned sonames; add a # versioned soname to each compiled component (scoped to axom_add_library; the # SOURCES guard skips header-only components to avoid set_target_properties on # INTERFACE libs). sed -i '/^macro(axom_add_library)/,/^endmacro(axom_add_library)/{/arg_FOLDER})/a\ if(NOT "${arg_SOURCES}" STREQUAL "")\ set_target_properties(${arg_NAME} PROPERTIES VERSION %{version} SOVERSION 0)\ endif() }' src/cmake/AxomMacros.cmake # 0.15.0 added `blt_patch_target(NAME mfem DEPENDS_ON mpi)` to propagate mfem's # MPI dependency. Upstream's mfem is created by blt_import_library (an INTERFACE # target) because vanilla mfem ships no CMake package config — but OUR mfem RPM # does ship MFEMConfig.cmake, so axom finds `mfem` as a real IMPORTED target and # blt_patch_target (BLT 0.7.2) picks PUBLIC scope, which CMake forbids on # imported targets ("IMPORTED library can only be used with the INTERFACE # keyword"). Use the one form CMake allows; it achieves the same propagation. sed -i 's|blt_patch_target(NAME mfem DEPENDS_ON mpi)|target_link_libraries(mfem INTERFACE mpi)|' \ src/cmake/thirdparty/SetupAxomThirdParty.cmake %build OPTIONS=( -DBLT_SOURCE_DIR=%{_builddir}/%{name}-%{version}/blt-%{blt_version} -DCAMP_DIR=%{_libdir}/cmake/camp -DUMPIRE_DIR=%{_libdir}/cmake/umpire -Dfmt_DIR=%{_libdir}/cmake/fmt -DRAJA_DIR=%{_libdir}/cmake/raja -DLUA_DIR=%{_prefix} %if 0%{?fedora} >= 45 -DLUA_INCLUDE_DIR=%{_includedir}/lua-5.1 -DLUA_LIBRARY=%{_libdir}/liblua-5.1.so %endif -DAXOM_ENABLE_MFEM_SIDRE_DATACOLLECTION=ON -DCMAKE_SKIP_RPATH=ON -DBUILD_SHARED_LIBS=ON -DENABLE_TESTS=OFF -DENABLE_EXAMPLES=OFF -DENABLE_DOCS=OFF -DAXOM_ENABLE_TOOLS=OFF -DENABLE_FORTRAN=OFF -DENABLE_OPENMP=OFF ) # MPI variants first (pristine source installs the component libs under # $MPI_HOME/lib via the default AXOM_INSTALL_LIB_DIR=lib). %if %{with mpich} %{_mpich_load} %global _vpath_builddir %{_target_platform}-mpich %cmake ${OPTIONS[@]} -DENABLE_MPI=ON \ -DCONDUIT_DIR=$MPI_HOME/lib/cmake/conduit -DHDF5_DIR=$MPI_HOME \ -DMFEM_DIR=$MPI_HOME -DCMAKE_CXX_FLAGS="%{optflags} -I${MPI_INCLUDE}/hypre" \ -DCMAKE_INSTALL_PREFIX=$MPI_HOME %cmake_build %{_mpich_unload} %endif %if %{with openmpi} %{_openmpi_load} %global _vpath_builddir %{_target_platform}-openmpi %cmake ${OPTIONS[@]} -DENABLE_MPI=ON \ -DCONDUIT_DIR=$MPI_HOME/lib/cmake/conduit -DHDF5_DIR=$MPI_HOME \ -DMFEM_DIR=$MPI_HOME -DCMAKE_CXX_FLAGS="%{optflags} -I${MPI_INCLUDE}/hypre" \ -DCMAKE_INSTALL_PREFIX=$MPI_HOME %cmake_build %{_openmpi_unload} %endif # Serial last: redirect the hardcoded component-target / export "lib" to lib64. sed -i -E 's|(DESTINATION[[:space:]]+)lib/cmake|\1%{_lib}/cmake|g' src/axom/CMakeLists.txt sed -i -E 's|(DESTINATION[[:space:]]+)lib([)[:space:]]*)$|\1%{_lib}\2|' src/axom/CMakeLists.txt %global _vpath_builddir %{_target_platform} %cmake ${OPTIONS[@]} -DENABLE_MPI=OFF \ -DCONDUIT_DIR=%{_libdir}/cmake/conduit -DHDF5_DIR=%{_prefix} \ -DMFEM_DIR=%{_libdir} -DCMAKE_CXX_FLAGS="%{optflags} -I%{_includedir}/hypre" \ -DAXOM_INSTALL_LIB_DIR=%{_lib} -DAXOM_INSTALL_CONFIG_DIR=%{_lib} %cmake_build %install # --- serial --- %global _vpath_builddir %{_target_platform} %cmake_install rm -rf %{buildroot}%{_prefix}/examples # --- mpich --- %if %{with mpich} %{_mpich_load} %global _vpath_builddir %{_target_platform}-mpich %cmake_install rm -rf %{buildroot}${MPI_HOME}/examples %{_mpich_unload} %endif # --- openmpi --- %if %{with openmpi} %{_openmpi_load} %global _vpath_builddir %{_target_platform}-openmpi %cmake_install rm -rf %{buildroot}${MPI_HOME}/examples %{_openmpi_unload} %endif %files %license LICENSE %doc README.md %{_libdir}/libaxom_*.so.* %files devel %{_includedir}/axom/ %{_libdir}/libaxom_*.so %{_libdir}/cmake/axom-*.cmake %{_libdir}/cmake/BLT*.cmake %if %{with mpich} %files mpich %license LICENSE %{_libdir}/mpich/lib/libaxom_*.so.* %files mpich-devel %{_libdir}/mpich/include/axom/ %{_libdir}/mpich/lib/libaxom_*.so %{_libdir}/mpich/lib/cmake/axom-*.cmake %{_libdir}/mpich/lib/cmake/BLT*.cmake %{_libdir}/mpich/lib/cmake/thirdparty/ %endif %if %{with openmpi} %files openmpi %license LICENSE %{_libdir}/openmpi/lib/libaxom_*.so.* %files openmpi-devel %{_libdir}/openmpi/include/axom/ %{_libdir}/openmpi/lib/libaxom_*.so %{_libdir}/openmpi/lib/cmake/axom-*.cmake %{_libdir}/openmpi/lib/cmake/BLT*.cmake %{_libdir}/openmpi/lib/cmake/thirdparty/ %endif %changelog * Thu Oct 08 2026 Morgan Hough - 0.15.0-4 - Rebuild against mfem 4.10-1.1 (soname libmfem.so.4.10.0) * Thu Oct 08 2026 Morgan Hough - 0.15.0-3 - Build against compat-lua (Lua 5.1) on Fedora 45+, where Lua is 5.5: the bundled sol2 rejects LUA_VERSION_NUM > 504 (COPR 11092263 failed on f45/rawhide with sol.hpp:2369 #error). Fedora 44 keeps the system Lua 5.4; the -devel subpackages require the matching Lua -devel. * Wed Oct 07 2026 Morgan Hough - 0.15.0-2 - Rebuild against camp 2026.07.2, RAJA 2026.07.1 and conduit 0.9.9 * Sat Aug 29 2026 Morgan Hough - 0.15.0-1 - Update to 0.15.0 (RADIUSS 2026.07 wave). First release containing the smith-pinned f81109ce (Lua 5.4 sol2), so drop the commit snapshot and return to a clean release tag. * Wed Jul 01 2026 Morgan Hough - 0.14.0-5 - Enable MFEM sidre DataCollection (MFEMSidreDataCollection.hpp), required by smith * Tue Jun 30 2026 Morgan Hough - 0.14.0-4 - Switch to smith's pinned axom commit (f81109ce) for Lua 5.4-compatible sol2 * Tue Jun 30 2026 Morgan Hough - 0.14.0-3 - Enable Lua (inlet LuaReader + bundled sol2), required by LLNL/smith * Mon Jun 29 2026 Morgan Hough - 0.14.0-2 - Add MPICH and OpenMPI variants (Fedora-correct MPI subpackages) * Sun Jun 28 2026 Morgan Hough - 0.14.0-1 - Initial package (RADIUSS dependency stack for LLNL/smith)