Notes describing significant changes in each BLT release are documented in this file.
The format of this file is based on Keep a Changelog.
The project release numbers follow Semantic Versioning.
Unreleased - Release date yyyy-mm-dd
- Removed default use of
/bigobjflag for Visual Studio builds. Projects should add this flag explicitly if needed for windows builds. - Removed
-Winlinefrom being added to GoogleTest for Clang/Intel as it is a noop and caused a warning on Intel. - Toggle GoogleTest adding
-Wno-implicit-float-size-conversionor-Wno-sycl-implicit-float-size-conversionbased on Intel version. - Update CUDA runtime smoketest to be compatible with CUDA 13
- In non-mpi configurations,
blt_add_testwill now throw aFATAL_ERRORif the user providesNUM_MPI_RANKSand the requested number of ranks is greater than 1. Previously, ifMPI_EXECUTABLEwas not definedblt_add_testwould prepend the test command with the value ofNUM_MPI_RANKS, and the test would fail to run. - GoogleTest: Quiet warning on clang@21 about implicit cast (https://github.com/google/googletest/commit/fa8438ae6b70c57010177de47a9f13d7041a6328)
Version 0.7.1 - Release date 2025-09-04
- Updated GoogleTest to 1.16.0
- Improved CMake information output for CUDA builds
Version 0.7.0 - Release date 2025-03-11
- Added
WORKING_DIRECTORYoption toblt_add_testandblt_add_benchmark. - Added
BLT_CXX_FILE_EXTSvariable (split out ofBLT_C_FILE_EXTS) for use in modifiedblt_split_source_list_by_languagemacro.
- Modified
blt_convert_to_system_includesto handle multiple targets and recursively update includes for dependencies. - Modified
blt_split_source_list_by_languageto accept aCXX_LISTargument for splitting out C and CXX sources. If not specified, theC_LISTwill contain both C and C++ sources. - HIP support now uses enable_language(HIP), and specifying a HIP compiler must use the variable
CMAKE_HIP_COMPILER. - Updated GoogleBenchmark to 1.9.1
- Removed GoogleTest, GoogleMock, and GoogleBenchmarks calling CMake's
GNUInstallDirswhich was causing non-deterministic install variables depending on your combination of static/shared libraries and if any of the previously mentioned TPLs were enabled. - Enable C language support and emit a warning when GoogleTest or GoogleMock are enabled but not the C language.
- Guard HIP C smoketest against projects that don't enable C as a language in their projects.
- Changes benchmark custom target
run_benchmarksto exclusively run benchmarks (not other general tests). - Fix HIP smoketests to fail on HIP errors.
- Add
-Wno-tautological-compareto GoogleTest/Mock/Benchmark for IntelLLVM compilers to silence warning.
Version 0.6.2 - Release date 2024-03-15
- Added output for CMake's implicitly added link libraries and directories.
- OpenMP target now uses a generator expression for Fortran flags instead of replacing flags in Fortran targets created with BLT macros.
- Remove setting CMP0076 to OLD which left relative paths in
target_sources()instead of altering them to absolute paths. - Header-only libraries headers now show up under their own target in IDE project views instead of under downstream targets. This only works in CMake >= 3.19, otherwise they will not show up at all.
- Raised version for base CMake version supported by BLT to 3.15 to support ALIAS targets across BLT.
Version 0.6.1 - Release date 2024-01-29
- Turned off GoogleTest finding Python
Version 0.6.0 - Release date 2024-01-18
- Added support for C++23. Note: XL and PGI do not support C++23.
- Adds a
clang_tidy_styleCMake target to allowclang-tidyto fix errors in-place. This requires aCLANGAPPLYREPLACEMENTS_EXECUTABLECMake variable to point to theclang-apply-replacementsexecutable in addition to theCLANGTIDY_EXECUTABLE. Also adds a correspondingENABLE_CLANGAPPLYREPLACEMENTSCMake option. Note that theclang_tidy_styletarget is not added to thestyletarget and must be run separately. - Added the
blt_install_tpl_setupsmacro, which installs files to setup and create targets for the third-party libraries OpenMP, MPI, CUDA, and HIP. This macro is meant to replaceblt_export_tpl_targetsas the preferred way to setup third-party libraries with BLT. - Added
blt::namespaced aliases for BLT targets,cuda,cuda_runtime,mpi, andopenmp. These targets still exist but but will be deprecated in a future release. It is recommended that you move to the new alias names,blt::cuda,blt::cuda_runtime,blt::mpi, andblt::openmp
- SetupHIP now searches for user-defined or environment variables before CMake paths to find the ROCM_PATH.
- Fixed infinite loop in
blt_find_target_dependencies blt_check_code_compilesnow works with alias targets
Version 0.5.3 - Release date 2023-06-05
- Updated Googletest to main from 04/13/2023. Commit: 12a5852e451baabc79c63a86c634912c563d57bc. Note: this version of Googletest requires C++14, and PGI is not supported. If you are using PGI, set ENABLE_GTEST OFF.
- Updated GoogleBenchmark to 1.8
- The
clang_tidy_checktarget is no longer registered with the mainchecktarget since its changes are not always safe/valid.
- Added
blt_print_variablesmacro to print variables in current scope, with regex filtering on variable names and values - Added
DEPENDS_ONoptional parameter toblt_check_code_compilesmacro to allow for checking if a feature is available in a third-party imported target. - Added
CONFIGURATIONSandOMP_NUM_THREADSoptions toblt_add_benchmark
- Guard HIP compiler flag
--rocm-path=/path/to/rocmagainst Crayftn compiler earlier than 15.0.0. - Fix doubling of
INTERFACE_INCLUDE_DIRECTORIESinblt_patch_target(... TREAT_INCLUDES_AS_SYSTEM true).
- Removed tracking all sources in a project via
${PROJECT_NAME}_ALL_SOURCES.
Version 0.5.2 - Release date 2022-10-05
- Added
blt_convert_to_system_includesmacro to convert existing interface includes to system interface includes. blt_check_code_compileswhich compiles a C++ code snippet and returns the result.- Added variable
BLT_CMAKE_IMPLICIT_LINK_LIBRARIES_EXCLUDEfor filtering link libraries implicitly added by CMake. See the following example host-config:host-configs/llnl/blueos_3_ppc64le_ib_p9/clang@upstream_nvcc_xlf.cmake
- Added three extra options to
blt_print_target_propertiesmacro to print properties of target's children as well as limit the properties printed with regular expressions:- CHILDREN (true/ false) whether or not you want to print the target's children's properties as well (recursively)
- PROPERTY_NAME_REGEX (regular expression string) reduce which properties to print by name
- PROPERTY_VALUE_REGEX (regular expression string) reduce which properties to print by value
Version 0.5.1 - Release date 2022-04-22
- Added support for C++20. Note: XL does not support C++20. While PGI has C++20 support, it is currently disabled (A BLT fatal error will occur).
- BLT_CXX_STD now sets CMAKE_HIP_STANDARD, in CMake 3.21+, similar to CMAKE_CUDA_STANDARD.
- Removed hard-coded -std=c++11 from various places related to CUDA flags. This now honors CMAKE_CUDA_STANDARD if set otherwise falls back on BLT_CXX_STD or CMAKE_CXX_STANDARD.
- Removed extra HIP offload flags that were being added as generator expressions as opposed to simple flags.
- Skip check for valid
ELEMENTSparameter inblt_list_appendmacro when not appending
- Removed support for deprecated HCC.
Version 0.5.0 - Release date 2022-03-07
- Added support for IntelLLVM compiler family to blt_append_custom_compiler_flag
- Added support for hip targets configured with cmake 3.21 native hip support
- Added
blt_export_tpl_targetsmacro to add BLT-provided third-party library targets to an export set.
BLT_C_FILE_EXTSupdated to include.cuh- Fold
BLT_CLANG_HIP_ARCHinto theCMAKE_HIP_ARCHITECTURESvariable - When using
ENABLE_ALL_WARNINGS, append the flag to the beginning ofCMAKE_{C,CXX}_FLAGSinstead of the end - HIP support now uses the
hip-config.cmakefile provided by ROCM. This modification requires a change to the BLT-provided HIP target names, and they are now available under thebltprefix:blt::hipandblt::hip_runtime.
- Source code filename extension filtering now uses regular expressions to allow
for more user customization and to improve handling of file names with multiple
periods, e.g.
1d.cube.order2.cis considered a.cfile.
Version 0.4.1 - Release date 2021-07-20
- Added compilation of HIP with clang using
ENABLE_CLANG_HIPandBLT_CLANG_HIP_ARCH
- XL: Use compiler flag
-std=c++14instead of-std=c++1ywhenBLT_CXX_STDis set toc++14
- Simplified the clang-format version regex that was causing hangs on some version strings.
Version 0.4.0 - Release date 2021-04-09
- Added variable
BLT_CMAKE_IMPLICIT_LINK_DIRECTORIES_EXCLUDEfor filtering link directories implicitly added by CMake. See the following example host-config:host-configs/llnl/blueos_3_ppc64le_ib_p9/clang@upstream_nvcc_c++17.cmake - Added support for clang-tidy static analysis check
- Added ability to change the output name of an executable via the OUTPUT_NAME parameter of blt_add_executable
- Added user option for enforcing specific versions of autoformatters - the new options are
BLT_REQUIRED_ASTYLE_VERSION,BLT_REQUIRED_CLANGFORMAT_VERSION, andBLT_REQUIRED_UNCRUSTIFY_VERSION - Added
HEADERStoblt_add_executable. This is important for build system dependency tracking and IDE folder support. - Added support for formatting Python code using YAPF.
- Added new
blt_import_librarymacro that creates a real CMake target for imported libraries, intended to be used instead ofblt_register_librarywhenever possible - Added new
blt_patch_targetmacro to simplify modifying properties of an existing CMake target. This macro accounts for known differences in compilers, target types, and CMake releases. - Added support for formatting CMake code using cmake-format.
- Added an EXPORTABLE option to
blt_import_librarythat allows imported libraries to be added to an export set and installed. - Added FRUIT's MPI parallel unit test reporting to BLT's internal copy of FRUIT
- CUDA device links for object libraries can be enabled with the existing
CUDA_RESOLVE_DEVICE_SYMBOLStarget property.
- MPI Support when using CMake 3.13 and newer: MPI linker flags are now passed
as single string prefixed by
SHELL:to prevent de-duplication of flags passed totarget_link_options. - For HIP-dependent builds, only add HCC include directory if it exists.
- HIP CMake utilities updated to AMD's latest version
- Updated
add_code_coverage_targettoblt_add_code_coverage_target, which now supports user-specified source directories - Code coverage targets leave LCOV-generated files intact for later use; these files will
still be removed by
make clean
- ClangFormat checks now support multiple Python executable names
- Prefixed blt_register_library() internal variables with
_to avoid collision with input parameters. - Turn off system includes for registered libraries when using the PGI compiler
- Removed unneeded SYSTEM includes added by googletest that was causing problems in PGI builds (BLT was adding them already to the register library calls)
- Removed variable
BLT_CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES_EXCLUDE, functionality now provided for all languages usingBLT_CMAKE_IMPLICIT_LINK_DIRECTORIES_EXCLUDEvariable - ClangQuery was being auto-enabled in cases where no checker directories where defined. This caused a crash. blt_add_clang_query_target learned parameter CHECKER_DIRECTORIES and blt_add_code_checks learned parameter CLANGQUERY_CHECKER_DIRECTORIES. Both still respect BLT_CLANGQUERY_CHECKER_DIRECTORIES.
- It is now a fatal error to supply CLANGFORMAT_CFG_FILE plus ASTYLE_CFG_FILE or UNCRUSTIFY_CFG_FILE arguments to blt_add_code_checks; previously, these combinations were implied to be errors in BLT documentation, but BLT would not return an error in those cases.
blt_patch_targetno longer attempts to set system include directories when a target has no include directories- Header-only libraries now can have dependencies via DEPENDS_ON in
blt_add_library - Added a workaround for include directories of imported targets on PGI. CMake was erroneously marking them as SYSTEM but this is not supported by PGI.
- Check added to make sure that if HIP is enabled with fortran, the LINKER LANGUAGE is not changed back to Fortran.
- Executables that link to libraries that depend on
hip/hip_runtime/cuda/cuda_runtimewill automatically be linked with the HIP or CUDA (NVCC) linker - Patched an issue with the FindHIP macros that added the inclusive scan of specified DEFINEs to compile commands
- Re-added previous OpenMP flag patching logic to maintain compatibility with BLT-registered libraries
Version 0.3.6 - Release date 2020-07-27
CUDA_TOOLKIT_ROOT_DIRis now optional. If it is not specified, FindCUDA.cmake will attempt to set it.
Version 0.3.5 - Release date 2020-07-20
- Added blt_assert_exists() utility macro.
- Additional link flags for CUDA may now be specified by setting
CMAKE_CUDA_LINK_FLAGSwhen configuring CMake either in a host-config or at the command-line. - Added support for ClangFormat.
CUDA_TOOLKIT_ROOT_DIRmust now be set in order to use CUDA. If it is not specified, BLT will produce an error message.
- blt_add_test is no longer trying to extract target properties from non-targets.
- Improved support for HIP 3.5.
- Improved support for CMake 3.13.0+.
- Remove some known spaces that show up in MPI link flags.
- Remove GTest and GBenchmark adding '-Werror' that got inherited.
Version 0.3.0 - Release date 2020-01-08
- Sets CMake policy CMP0074 to NEW, when available.
- Added simpler Clang+XLF+Cuda host-config for LLNL's blueos
- API Docs that are public!
- Added the ability to override blt's custom target names, e.g. for code checks,
formatting and generating documentation. The new variables are:
BLT_CODE_CHECK_TARGET_NAME,BLT_CODE_STYLE_TARGET_NAME,BLT_DOCS_TARGET_NAMEandBLT_RUN_BENCHMARKS_TARGET_NAME. - Clean up linking flags when
CUDA_LINK_WITH_NVCCis ON. Added logic to automatically convert '-Wl,-rpath' linking flag to '-Xlinker -rpath -Xlinker' and removes-pthreadfrom from MPI linking flags returned from FindMPI because it doesn't work (see https://gitlab.kitware.com/cmake/cmake/issues/18008). - In CMake 3.13+, "SHELL:" was added to blt_add_target_link_flags. This stops CMake from de-duplicating needed linker flags.
- Added optional SCOPE to all target property macros, blt_add_target_link_flags, etc. It defaults to PUBLIC.
- Added support for Cray compilers in blt_append_custom_compiler_flag.
- Added ability to add flags to the cppcheck command line through blt_add_code_checks()
- Added ability for blt_add_test() to set required number of OpenMP threads via new option NUM_OMP_THREADS.
- Added ClangFormat as an option for code styling. This has some caveats that are noted here: https://llnl-blt.readthedocs.io/en/develop/api/code_check.html
- Restructured the host-config directory by site and platform.
- Updated gbenchmark to 1.5.0, note that this requires C++11 to build.
- Updated gtest and gmock to Master as of 2020-01-07, note that this requires C++11 to build.
- Fixed some warnings in CMake 3.14+
- Duplication of MPI link flags in CMake 3.14+ when Fortran was enabled.
- Removed unused
HEADERS_OUTPUT_SUBDIRargument from blt_add_library().
Version 0.2.5 - Release date 2019-06-13
- Added support for C++17. Note: Neither XL nor CMake's CUDA_STANDARD supports C++17 (A BLT fatal error will occur).
- Added ability to override all MPI variables: BLT_MPI_COMPILE_FLAGS, BLT_MPI_INCLUDES, BLT_MPI_LIBRARIES, and BLT_MPI_LINK_FLAGS
- blt_list_remove_duplicates(): macro for removing duplicates from a list that doesn't error on empty lists.
- Handle CMake 3.10+ changing all the FindMPI output variables.
- BLT_CXX_STD is no longer defined to "c++11" by default. If undefined, BLT will not try and add any C++ standard flags.
- Handle FindMPI variable MPIEXEC changed to MPIEXEC_EXECUTABLE in CMake 3.10+. This now works regardless of which the user defines or what CMake returns.
- Handle CMake target property LINK_FLAGS changed to LINK_OPTIONS in CMake 3.13+. blt_add_target_link_flags() handles this under the covers and converts the users strings to a list (3.13+) or list to a string (<3.13). New property supports generator expressions so thats a plus.
- Improved how all BLT MPI information is being merged together and reported to users.
- Increased number of ranks in
blt_mpi_smoketest to catch regression. - blt_split_source_list_by_language now supports non-BLT object libraries and errors out when any other generator expression is given in source list. This is to avoid very bad side effects of not being able to set source properties on anything inside the generator expression. This is because BLT cannot evaluate them.
- Error out with better message when empty file extensions is hit in blt_split_source_list_by_language.
Version 0.2.0 - Release date 2019-02-15
- Release notes...
- Explicitly check for CMake 3.8+ for required CMake features (Not fatal error)
- Object library support through blt_add_library(... OBJECT TRUE ...)
- Now reporting BLT version through CMake cache variable BLT_VERSION
- Output CMake version and executable used during CMake step
- Clang-query support now added (Thanks David Poliakoff)
- Object libraries no longer call target_link_libraries() but will pass inherited information because why would anyone ever want to install/export a bunch of object files.
- Remove duplicates of select target properties at the end of blt_add_library and blt_add_executable. (include directories and compile defines)
- Incorrect use of cuda vs cuda_runtime targets
- Improved tutorial documentation
- Incorrect use of Fortran flags with CUDA (Thanks Robert Blake)
- Handle correctly CMake version differences with CUDA host compiler variables (Thanks Randy Settgast)
- Handle uncrustify (version 0.68) command line option changes (--no-backup)