HPC Toolchains
Treat the toolchain as a coherent stack. Pick the compiler family, MPI family, math libraries, and build system together before tuning application-specific flags.
Start
- Read
references/compiler-family-selection.mdbefore choosing GCC, Clang, or vendor compilers. - Read
references/configure-and-build-matrix.mdwhen deciding between CMake, Make, Ninja, or wrapper-driven builds. - Read
references/cmake-and-find-package-playbook.mdwhen writing or repairingCMakeLists.txt,find_package, imported targets, or cache variables. - Read
references/toolchain-files-and-presets.mdwhen the build depends on reusable compiler, MPI, or site configuration. - Read
references/build-type-and-abi-hygiene.mdwhen debugging release versus debug mismatches, C++ standard mismatches, symbol issues, or ABI drift. - Read
references/blas-lapack-mpi-consistency.mdwhen linking against BLAS, LAPACK, ScaLAPACK, MPI, or vendor math stacks. - Read
references/modules-and-spack-playbook.mdwhen using environment modules, compiler wrappers, external packages, or Spack environments. - Read
references/error-recovery.mdwhen configure, compile, link, or runtime-loader failures occur.
Work sequence
- Decide the stack boundary first:
- site-provided modules
- Spack environment
- container image
- user-local source build
- Pick one compiler family and keep the full dependency graph aligned to it.
- Decide how dependencies are discovered:
- wrapper compilers
find_packagepkg-config- explicit include and library paths only as a last resort
- Keep build directories, cache state, and install prefixes separated by toolchain.
- Record the exact configure command before tuning warning or optimization flags.
Guardrails
- Do not mix compiler and MPI families casually across one build tree.
- Do not patch over a bad discovery path with many ad hoc include and library flags.
- Do not treat ABI, C++ standard, and release or debug mode as cosmetic metadata.
- Do not let one dependency come from a different module stack unless the site explicitly supports that mix.
Additional References
Load these on demand:
references/cmake-and-find-package-playbook.mdfor imported-target and cache-variable disciplinereferences/toolchain-files-and-presets.mdfor reusable site or cluster build configurationreferences/build-type-and-abi-hygiene.mdfor symbol, ABI, and optimization mismatchesreferences/blas-lapack-mpi-consistency.mdfor math-library and MPI stack alignmentreferences/modules-and-spack-playbook.mdfor module and Spack-based reproducibilityreferences/error-pattern-dictionary.mdfor fast matching of common toolchain failure classes
Reusable Templates
Use assets/templates/ when a concrete starting point is faster than rebuilding the build stack from scratch, especially:
minimal-cmake-project/CMakeLists.txtminimal-cmake-project/main.cppconfigure-gcc-openmpi.shbuild-smoke-slurm.shspack-env-minimal.yaml
Outputs
Summarize:
- chosen compiler and MPI family
- dependency-discovery method
- build-system strategy
- math-library and ABI alignment decisions
- the exact failure phase if the workflow is being repaired
Scan to join WeChat group