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 bug in f2py3 code
- Removed warning about setting
-fallow-argument-mismatch
and-fallow-invalid-boz
with GCC 10+. This is pretty much common now. Instead, we emit a message
- Remove code for finding OS at NCCS as system is now all SLES15
- Update Intel LLVM Fortran flags to use
-march=x86-64-v3
as-march=core-avx2
is not (technically?) supported byifx
- Reworked FMS detection to better handle the different
FV_PRECISION
cases inFindBaselibs.cmake
- Change f2py detection for the odd case where there might be multiple Python installations. For now, if the path to the Python executable does not match the path to the f2py executable, we issue a
WARNING
. We use aWARNING
since some installations (e.g., Spack) will have the Python executable in a different location than the f2py executable. - Removed warning that Baselibs is not supported, to a STATUS message.
- Updated Intel Fortran flags from @wmputman
- Move to use Python
FIND_STRATEGY LOCATION
by default. This is needed as NAS (at least) has a very recent, but empty (no f2py) Python stack in the default path. UsingLOCATION
should limit it to the Python we want (e.g., via GEOSpyD module)
- 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.