All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Fixed bad behavior in the
MPI_STACK
detection on subsequent calls toDetermineMPIStack
- Fixed
mepo status
code to allow for quiet failures. There seems to be an odd scenario on non-internet-connected machines wheremepo status
will fail in blobless clones of some repos. Runningmepo status
on a node with internet access seems to fix this.
- For F2PY3 code, set CMake Policy CMP0132 if Python is 3.12+ or higher
- Add test to see if
ifort
spits out the deprecation warning. Needed to hack f2py/meson - Set minimum CMake version to 3.24 for the meson + f2py fix
- Do not include
DetermineMPIStack
if MPI is not found
- Added new
esma_capture_mepo_status
function (inesma_support/esma_mepo_status.cmake
) to capture the output ofmepo status --hashes
whenmepo
was used to clone the fixture. It will output this into a fileMEPO_STATUS.rc
which is installed to${CMAKE_INSTALL_PREFIX}/etc
and can be used to help determine the exact state of the fixture at build time.
- Support for building GEOSgcm with Spack using MAPL as library
- Update
esma_create_stub_component
to look formapl_stub.pl
in$MAPL_BASE_DIR/etc
(which is a variable defined by ecbuild) - Update
esma_generate_automatic_code
to look formapl_acg.pl
in$MAPL_BASE_DIR/etc
(which is a variable defined by ecbuild) - Require CMake 3.18 for features used in above updates
- Update
- Update to CircleCI orb v5
- Add
FindJeMalloc.cmake
for use with builds of GEOSgcm - Add preliminary LLVMFlang support
- Add workaround to support OpenMP linking with NAG under CMake
- Edit the file
esma_add_fortran_submodules.cmake
to add theSMOD
word to the target submodule file name.
- Move detection out of
FindBaselibs.cmake
for Spack purposes
- Add more features to the file
esma_add_fortran_submodules.cmake
so that the functionesma_add_fortran_submodules
can handle several level of subdirectories.
- Add the file
esma_add_fortran_submodules.cmake
in theesma_support
folder. The file contains a function that prevents conflicts when several submodule files have the same name.
- Fixes for NVHPC
- Fix issue with use of
meson
andf2py
with more complex codes- NOTE: Requires a fix to
f2py
that is not yet released. You can see the change in thenumpy
repo at numpy/numpy#26659 This fix has been applied to GEOSpyD 2.44.0-0
- NOTE: Requires a fix to
- Add FMS as a library rather than part of Baselibs
- Added
Findlibyaml.cmake
to support FMS with yaml support- FMS with YAML support is controlled by
-DFMS_BUILT_WITH_YAML
as there is no good way to determine how FMS was built after-the-fact. For now the default isOFF
but this will change in the future
- FMS with YAML support is controlled by
- Added preliminary support for Hygon processors with GCC
- Change the minimum required GCC compiler version to be 11.2
- Change the minumum required NAG compiler verison to be 7.2
- Update CI to use Baselibs v8.0.2
- Fix issue with
ld_classic
detection on macOS. Not all XCode versions need this
- Added YAML linter
- Fix bug with meson/distutils for python 3
- Edit
FindESMF.cmake
to useESMF::ESMF
as the primary target and makeESMF
an alias forESMF::ESMF
if it doesn't exist - Updates for building with Clang on macOS
- Add
-Wl,-ld_classic
to linker flags for all macOS - Add
-Wno-implicit-int
for Clang on macOS
- Add
- Fix for using f2py and Python 3.12
- Add suppression of remark 10488 for Intel Fortran Classic which is a warning about ifort deprecation in late 2024
- Set
BUILT_ON_SLES15
toFALSE
if not building on SLES15. Before it was blank
- Change
make tests
to only do tests labeled withESSENTIAL
. Add newmake tests-all
to run all tests.
- Added
-quiet
flag for NAG compilation. This suppresses the compiler banner and the summary line, so that only diagnostic messages will appear.
- Quoted generator expression arguments (see #308)
- Added new
DetermineMPIStack.cmake
file that will detect the MPI Stack being used- The allowed stacks are
openmpi
,mpich
,intel
,mvapich
,mpt
which will be set in theMPI_STACK
variable- Can be overridden by setting
MPI_STACK
to one of the allowed values via-DMPI_STACK=...
- Can be overridden by setting
- Will also set
MPI_STACK_VERSION
to the version of the stack being used- NOTE: This is the version of the stack not the version of MPI supported by the stack
- The allowed stacks are
- Updated
FindESMF.cmake
to the version from ESMF develop branch, commit da8f410. Will be in ESMF 8.6.1+- This provides the
ESMF::ESMF
alias for ESMF library for non-Baselibs builds
- This provides the
- Added
ESMF::ESMF
alias for ESMF library- Needed to avoid an issue UFS has with MAPL/GOCART (see GEOS-ESM/MAPL#2569)
- Needed for Baselibs builds of MAPL 2.44 and higher as we now move to use
ESMF::ESMF
as the target - Will be added to
FindESMF.cmake
in a future release of ESMF, so we only add the alias if it doesn't exist
- Update CI to v2 orb
- Add
FindESMF.cmake
for use with Spack builds of GEOSgcm - Added support for Hygon processors with Intel Fortran
- Fixes for
ifx
compiler- Set
nouninit
for check flags when building with Debug build type - Remove some debug flags that don't exist with
ifx
- Remove
-init=snan
as that causes compiler faults with some MAPL files
- Set
- For NAG, turn off setting of
ESMF_HAS_ACHAR_BUG
CMake option as it seems no longer needed
- The
ESMF_HAS_ACHAR_BUG
CMake option is deprecated and will be removed in a future release
- Fixes for building with Intel Fortran Classic on macOS on Arm under Clang 15 and Rosetta
- Uses
ld_classic
as the linker
- Uses
- Add setting
-Wno-implicit-int
when running withicx
- Updates for supporting Milan at NCCS
- Makes f2py2 only work if python2 is available. If not, all f2py2 is disabled
- Add new
BUILT_ON_SLES15
variable since building on SLES15 means running on SLES15
- Turn off warning 10121 with Intel Fortran as it is noise
- Introduced
-not_openmp
flag for NAG to avoid "Questionable" warning messages from compiler about unused openmp constructs.
- Modified default flags for NAG to allow more aggressive debug flags. Mostly this is by using a more specific list of procedures for which interface "mismatch" warnings are suppressed.
- Added support for building with Intel Fortran in Rosetta2 (generic x86_64 processor)
- Fixed a build incompatibity with ESMF that affects
MAPL_Config::SetAttribute*()
- Update CI to use Baselibs default from CircleCI orb
- Suppress common unneeded warnings with all debug builds with Intel
warning #5462: Global name too long
warning #10337: option '-fno-builtin' disables '-imf*' option
- Added
QUIET_DEBUG
option to remove the-warn unused
flag for Intel and add some common warning suppressions (Intel only at the moment)
- Updated CI to use Baselibs 7.13.0
- Remove
BUILT_ON_ROME
detection at NAS as all nodes are now TOSS4
- Updated Python detection to use
FIND_STRATEGY VERSION
. This is needed due to mixing of Python 2 and 3 in the same environment.
- Update Intel Fortran flags
- NOTE: This is non-zero-diff for Intel Release and Aggressive builds of GEOS
- Add detection of Azure
- Change site detection code to distinguish between Rome and non-Rome nodes at NAS (since there is an OS difference between them that has run-time effects)
- Added an
HDF5::HDF5
target toFindBaselibs.cmake
for compatibility with code that usesHDF5::HDF5
.- NOTE: This is hack for Baselibs builds until we can move to using Spack for libraries
- Updated label-enforcer to v3 and added custom message
- Updated CI to Baselibs 7.7
- Added
IntelLLVM_Fortran.cmake
file- At the moment a copy of
Intel_Fortran.cmake
with-fp-model source
and-fp-model consistent
blanked due to changes with ifx
- At the moment a copy of
- Moved to use GitHub Actions for label enforcement
- Add extra flags for Intel Fortran to allow for stricter builds
-stand f18
to enable Fortran 2018 Standard compliance-diag-error 6188
to cause if(integer) to fail-diag-error 6192
to cause logical set to integer to fail-diag-disable 5268
to suppress warning for long source lines (which our macros often make)
- Added compiler flags for
x86_64
target architecture andLinux
, when it is missed byIntel
processor description. Tested for building MAPL/2.22.0 on Ubuntu 22.04 Linux. Ubuntu is running using the UTM virtualizer on MacOS Monterey with x86_64 architecture system.
- Added a print for processor description
- Add
NETCDF_INCLUDE_DIRS
as alias toINC_NETCDF
for spack compatibility when using Baselibs
- Added check to
esma.cmake
to ensureCMAKE_INSTALL_PREFIX
is writable - Add
-save-temps
to GNU debug flags
- Updated CI and changelog enforcer
- Changed the Apple M1 detection to be "Apple M" in anticipation of M2 machines.
- Updated the CI to work with latest Baselibs
- Updated the list of files ignored by CPack
- Update GNU Release compile target architecture from
westmere
tohaswell
- This is done as it seems to fix an issue with GCC 12
- NOTE: This is non-zero-diff for GNU Release
- Update M1 flags on GNU from GEOS testing
- Also add M1-Rosetta2 flags from @climbfuji
- NAG Fortran flags no longer have
-dusty
by default. - GNU Fortran flag added to disable warnings about unused dummy arguments. (Not terribly useful, though as at least one other compiler lacks such a flag. So we still need the
_UNUSED_DUMMY
fpp macro.) - Explicitly made
USE_F2PY=OFF
the default for NAG.
- Add dependency to MPI for ESMF when building with ESMF built within Baselibs.
- Changes to use the
FindESMF.cmake
module directly from ESMF build. - Add ALIAS library for
ESMF
due to historical use ofesmf
in GEOS
- Removed
FindESMF.cmake
to prefer using the version from ESMF itself. Note thatCMAKE_MODULE_PATH
for Baselibs users is automatically appended. Users of ESMA_cmake that don't use Baselibs, will need to append their own.
- Moved to use
find_package(ESMF)
for even use with Baselibs. This allows GEOS to more smoothly accept changes in ESMF builds by basing off ofesmf.mk
. - Changed
FindESMF.cmake
to preferSHARED
libraries overSTATIC
to match how ESMF-in-Baselibs worked before moving tofind_package
- Changes to support non-Baselibs builds
- Move
find_package(MPI)
code inFindBaselibs.cmake
only if Baselibs found - Remove code if not using Baselibs; should be placed in each fixture/directory
- Move
- Changed how f2py handles Fortran compiler detection
- Updated to circleci-tools orb for CI
- Fix bug in f2py testing
- Remove
PGI.cmake
file as NVHPC is the correct file for now. Add symlink
- Added preliminary support for GNU on M1 Macs
- Various changes to support building GEOS with Spack
- Edit to FindESMF.cmake file
- Move
include(DetermineSite)
- Fix for finding ecbuild cmake files
- Fixes for f2py scripts
- Add
FindESMF.cmake
package. Used for Spack builds not Baselibs builds
- Compress CircleCI artifacts
- Add NVHPC Compiler Flag file
- Changed the default vectorization flag for Intel Fortran from
-xCORE-AVX2
to-march=core-avx2
. This change allows GEOS to run on both Intel and AMD EPYC chips at NAS without need for another build.- This change is non-zero-diff on Intel chips
- The Intel/AMD "run on both" is only valid on TOSS
- See #240 for more information
- Fix for
FindGitInfo
if in a git-stripped distribution
- Move finding of OpenMP, MPI, and Threads above
FindBaselibs
. This was interfering with f2py...for some reason.
- Call
FindBaselibs.cmake
earlier in sequence. This sets theCMAKE_PREFIX_PATH
before anyfind_package()
calls for Baselibs libraries (i.e., GFE)
- Remove
find_package()
calls for GFE libraries fromFindBaselibs.cmake
- Updated CI to use both gfortran and Intel, and Baselibs 6.2.8
- Attempt to detect SSL library path and use that with f2py
- Added warp nodes as NCCS nodes
- Added
esma_postinstall.cmake
script for tarring up code post install
- Fixed bug in caching
BASEDIR
- Changed the warning for missing Basedir to be more prominent
- Created a new set of flags for Intel that mimic the old non-vectorized Release flags
- Fix issue with
tests
target due to bad refactor
- Refactored ESMA_cmake
- Changed the Release flags for the Intel Compiler to be the Vectorized flags. Testing shows it is zero-diff and faster, however we are moving the minor version number as a signal of "just in case"
- Cache BASEDIR when a valid path is found
- Fix pthreads use on Linux with NAG compiler
esma_add_subdirectory
now uses the newesma_mepo_style
- Prevent build or install directories from having a comma (due to -Wl issue)
- New function
esma_mepo_style
which searches for a directory under any mepo style option and returns a variable filled in accordingly. It can optionally return a bool FOUND argument. Throws an ecbuild error if dir is not found and FOUND argument is not used.
- Updated some MAPL references in the stub and ACG code
- Added
librt
andlibdl
to theESMF_LIBRARIES
on Linux.
- Added
esma_cpack.cmake
to allow for creating tarballs of code withmake package_source
ormake dist
- If building
CMAKE_BUILD_TYPE=Debug
the f2py steps are now more verbose to aid in debugging
- Changes to
esma_add_f2pyX_module
macros in handling thepython -c 'import foo_'
tests. AddsLD_LIBRARY_PATH
to it. Still does not fix all problems.
- Fixed rpath handling on macOS.
- Change
ESMA_USE_GFE_NAMESPACE
default toON
. This requires Baselibs v6.2 or the latest libraries - On Linux, link to
libesmf.so
rather thanlibesmf_fullylinked.so
per advice of ESMF developers. - On macOS, link to
libesmf.dylib
rather thanlibesmf.a
. This requires Baselibs v6.2.5 as that has a bug fix for ESMF dylib handling
- If building
CMAKE_BUILD_TYPE=Debug
the f2py steps are now more verbose to aid in debugging
- Changes to
esma_add_f2pyX_module
macros in handling thepython -c 'import foo_'
tests. AddsLD_LIBRARY_PATH
to it. Still does not fix all problems.
-
Add ability to detect BASEDIR from the environment.
-
Add checks to
FindBaselibs.cmake
to make sure BASEDIR has the right arch (as defined byuname -s
) as this is still a requirement for GEOS run scripts. The code will also try to make a valid BASEDIR. That is, if you pass in/path/to/baselibs
, but it sees a/path/to/baselibs/arch/lib
exists, it will allow that and try to use it. -
Previous option
CPP_DEBUG_<target
has now been replaced with a more fine-grained combination of cmake variables:XFLAGS
andXFLAGS_SOURCES
. To use$cmake .. -DXFLAGS="foo bar=7 DEBUG" -DXFLAGS_SOURCES="<file1> <file2>" $ make
NOTE: This change requires checking for specified sources in every directory (or rather in those that use
esma_set_this()
and thus add some overhead to cmake. We may later decide to implement a per-target or per-directory pair of flags to address this, but that will be harder for the user to use.
- Fixes for F2PY and GNU as well as some cleanup
- Removed extra space in diagnostic message about missing directories
- Fixed a bug with double precision handling and GNU
- A new CMake variable
CPP_DEBUG_<target>
has been added for each target. The value is a list of source files that should receive the "-DDEBUG
" compile definition. To use:To use with multiple files use quotes and separate with$ cmake .. -DCPP_DEBUG_MAPL.base=MAPL_base.F90
;
$ cmake .. -DCPP_DEBUG_MAPL.base="MAPL_base.F90;MAPL_CFIO.F90"
- Added Python2 and Python3 versions of generic Python F2PY macros.
- Added option
BUILD_WITH_PFLOGGER
which defaults toON
. This is added for collaborators that do not use pFlogger
- Added new
ESMA_USE_GFE_NAMESPACE
which defaults toOFF
. If you set this toON
, you must then use the new GFE namespace style in CMake, e.g.,gftl
==>GFTL::gftl
.
- Fixed Aggressive GNU flags on Graviton2 processors
- Added test for GNU and Intel to try and determine if building on Intel or AMD chips and choose correct vectorization flags.
- Changed
-extend_source
to-extend-source
due to warning print in Intel 2021
- Fixed Aggressive flags with GCC 10
- Add ability for
Aggressive
build type (note: requires GEOS-ESM/ecbuild geos/v1.0.6 to use as ecbuild restricts allowedCMAKE_BUILD_TYPE
)
- Fixed
new_esma_generate_automatic_code
macro to better handle automatically generated files (see GEOS-ESM/GEOSchem_GridComp#108)
- Add changelog enforcer
- Remove
Externals.cfg
as part ofmanage_externals
deprecation
- Added Docker authentication for CI
- Updates from UFS to enable use with MAPL without Baselibs (Requires MAPL 2.4.0+)
- Fix for default Fortran module directory
- Add support for Arm64 machines
- Requirement for MKL is removed (MKL is used if found, otherwise BLAS/LAPACK is used)
- Update Intel Debug flags to be more comprehensive
- Add CircleCI testing
- Fix for handling f2py tests
- Fix for coding of AWS detection found on Ubuntu/CircleCI
- Fixes for handling MOM/MOM6 shared libraries on macOS
- Add support to detect AWS systems
- Add an option
USE_F2PY
which by default isON
preserving current behavior. (Useful on pioneer systems and containers where f2py might not be available.)
- Updates in support of MAPL 2.2
- Fix up how testing is done
- Generalize the stub generator
- Use
find_file
to generalize path to MAPL utilities (acg)
- Updated to ecbuild geos/v1.0.5
- Updates for JEDI Compatibility
- Support for GCC 10
- See releases tab for more information
- Typo in message in
esma_add_library()
.
- Added macro
esma_add_f2py_module()
which wraps existingadd_f2py_module()
and a call toadd_test()
.
- Allow ecbuild to be mounted as
ecbuild@
,@ecbuild
, orecbuild
NOTE: This version of ESMA_cmake now requires Baselibs 6.0.10 or higher due to the need for yaFyaml and pFlogger
- Made gFTL-shared, yaFyaml, and pFlogger REQUIRED
- Added ability for OpenMP and Double Precision to be used with f2py Used by the MAM Optics code
- Add ability to allow @-symbol to be at beginning or end of sub-repo (still in progress)
- Emit BASEDIR location during CMake
- Added macro to verify availability of Python modules
Use:
esma_find_python_module(<module> [REQUIRED])
- Added macro to add a post-build check availability of Python modules
Use:
esma_check_python_module(<module>)
- Added option is `esma_add_library() to use SHARED
- Also uptick the ecbuild version in Externals.cfg to prevent a CMake warning.
- Fix for macOS and Clang found by @tclune
- Updates to f2py detection
- Added flag for Intel to suppress long name warning.
- Turn on MPI_DETERMINE_LIBRARY_VERSION
- Updates to f2py detection for Python 3
NOTE This release of ESMA Cmake is not backwardly compatible to the 1.x series.
- Updates for Baselibs 6.x
- Needed because CMake interface to FLAP changed
- Also, this version of ESMA_cmake is based on pFUnit 4 and as such uses find_package(PFUNIT) and then uses the PFUNIT_FOUND variable.
- Add
FINDLOC()
detection
- Adds CODEOWNERS
- Adds QUIET to find_package of non-required libraries
- Convert options to use OPTION()
- Fixes to esma_add_library from #34
- Fixes for debug flag setting from #17
- Update LaTeX detection
- Change the @ecbuild location to GEOS-ESM
- Updates necessary for building on macOS (f2py)
- Add code to the automatic code generation macros to install the generated RC files to etc/
- Add executable bit to F2Py shared objects
- Add MPI option to UseF2Py
- Add GitInfo package
- Fix cmake autodetect when embedded.