mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-21 01:04:10 +08:00
f4dbb810c1
Also updates CMake configure checks to build HDF5 w/ MSYS2
566 lines
21 KiB
Plaintext
566 lines
21 KiB
Plaintext
HDF5 version 2.0.0 currently under development
|
|
================================================================================
|
|
|
|
|
|
INTRODUCTION
|
|
============
|
|
|
|
This document describes the differences between this release and the previous
|
|
HDF5 release. It contains information on the platforms tested and known
|
|
problems in this release. For more details check the HISTORY*.txt files in the
|
|
HDF5 source.
|
|
|
|
Note that documentation in the links below will be updated at the time of each
|
|
final release.
|
|
|
|
Links to HDF5 documentation can be found on:
|
|
|
|
https://support.hdfgroup.org/releases/hdf5/latest-docs.html
|
|
|
|
The official HDF5 releases can be obtained from:
|
|
|
|
https://support.hdfgroup.org/downloads/index.html
|
|
|
|
Changes from Release to Release and New Features in the HDF5-2.x.y release series
|
|
can be found at:
|
|
|
|
https://support.hdfgroup.org/releases/hdf5/documentation/release_specific_info.md
|
|
|
|
If you have any questions or comments, please send them to the HDF Help Desk:
|
|
|
|
help@hdfgroup.org
|
|
|
|
|
|
CONTENTS
|
|
========
|
|
|
|
- New Features
|
|
- Support for new platforms and languages
|
|
- Bug Fixes since HDF5-2.0.0
|
|
- Platforms Tested
|
|
- Known Problems
|
|
- CMake vs. Autotools installations
|
|
|
|
|
|
New Features
|
|
============
|
|
|
|
Configuration:
|
|
-------------
|
|
- Added support for MinGW + MSYS2 when building with CMake
|
|
|
|
We previously added support for this to the Autotools and the appropriate
|
|
configure-time checks have been added to CMake.
|
|
|
|
CMake + MinGW + MSYS2 is now tested with the following environments:
|
|
|
|
* mingw32
|
|
* mingw64
|
|
* ucrt64
|
|
* clang64
|
|
|
|
- Added CMake build mode flags to the libhdf5.settings file
|
|
|
|
Flags from the CMake build mode (e.g., optimization) are not a part of
|
|
CMAKE_<language>_FLAGS and were not exported to the libhdf5.settings file. This
|
|
has been fixed and the C, Fortran, and C++ build mode flags are now exported to
|
|
the file.
|
|
|
|
This also affects the text output of H5check_version() and the libhdf5.settings
|
|
string stored in the library (for those who use strings(1), etc. to get
|
|
build info from the binary).
|
|
|
|
- CMake: Split compiler specific flags into separate files
|
|
|
|
The compiler specific flags have been split into separate files to make
|
|
it easier to maintain and add new compiler flags. The flags for NVHPC,
|
|
Intel, GNU and Clang compilers are now in separate files included from
|
|
the current compiler flags files; HDFCompiler<language>Flags.cmake.
|
|
|
|
- Added a configuration option for internal threading/concurrency support:
|
|
|
|
CMake: HDF5_ENABLE_THREADS (ON/OFF) (Default: ON)
|
|
Autotools: --enable-threads (yes/no) (Default: yes)
|
|
|
|
This option enables support for threading and concurrency algorithms
|
|
within the HDF5 library. It is required for, but separate from, the
|
|
'threadsafe' configure option, which makes the HDF5 API safe to call from
|
|
multiple threads. It is possible to enable the 'threads' option and
|
|
disable the 'threadsafe' option, but not vice versa. The 'threads' option
|
|
must be on to enable the subfiling VFD.
|
|
|
|
- Added support for native zlib-ng compression.
|
|
|
|
Changed the zlib-ng CMake logic to prefer the native zlib-ng library. Added
|
|
#ifdef around the compression function calls. Added including the correct
|
|
header file with the same #ifdef.
|
|
|
|
- Renamed remaining HDF5 library CMake options except for CMake BUILD* variables
|
|
|
|
DEFAULT_API_VERSION to HDF5_DEFAULT_API_VERSION
|
|
DISABLE_PDB_FILES to HDF5_DISABLE_PDB_FILES
|
|
ONLY_SHARED_LIBS to HDF5_ONLY_SHARED_LIBS
|
|
ALLOW_UNSUPPORTED to HDF5_ALLOW_UNSUPPORTED
|
|
TEST_SHELL_SCRIPTS to HDF5_TEST_SHELL_SCRIPTS
|
|
|
|
All other HDF5 library CMake options are prefixed with HDF5_
|
|
|
|
- bin/cmakehdf5 has been removed
|
|
|
|
This was an unsupported build script that made building HDF5 via CMake
|
|
work like building HDF5 via the Autotools. It has been unmaintained
|
|
for a long time, has been marked deprecated, and is being removed.
|
|
|
|
- Generated files in src are now checked into version control
|
|
|
|
These files are infrequently updated and generating them adds a
|
|
dependency on Perl. The listed files are now checked in and do
|
|
not need to be recreated when checking out development branches.
|
|
|
|
* H5Edefin.h
|
|
* H5Einit.h
|
|
* H5Emajdef.h
|
|
* H5Emindef.h
|
|
* H5Epubgen.h
|
|
* H5Eterm.h
|
|
* H5overflow.h
|
|
* H5version.h
|
|
|
|
- Dropped some old Solaris Studio work-arounds
|
|
|
|
Solaris Studio no longer seems to be maintained and the last version
|
|
(12.4, circa 2015) doesn't seem to fully support C11. We've removed
|
|
some hacks that work around things like __attribute__() support.
|
|
|
|
- Dropped support for the traditional MSVC preprocessor
|
|
|
|
Visual Studio has recently started using a standards-compliant
|
|
preprocessor (In VS2019+) and this is the default in C11.
|
|
|
|
https://learn.microsoft.com/en-us/cpp/preprocessor/preprocessor-experimental-overview?view=msvc-170
|
|
|
|
Because of this, we've dropped support for the traditional
|
|
MSVC preprocessor.
|
|
|
|
- The standard for building the library is now C11
|
|
|
|
We have updated the build files to set the C standard to C11, though
|
|
some platforms use gnu11 to get some GNU things to work.
|
|
|
|
|
|
|
|
Library:
|
|
--------
|
|
- The H5VLstart_lib_state / H5VLfinish_lib_state API routines for pass-
|
|
through connector authors now require a parameter that can be used to
|
|
store the library's context.
|
|
|
|
- Removed H5FDperform_init API routine. Virtual File Driver (VFD)
|
|
developers who wish to provide an ID for their driver should create
|
|
a routine specific to their individual implementation.
|
|
|
|
- H5Pset_external() now uses HDoff_t, which is always a 64-bit type
|
|
|
|
The H5Pset_external() call took an off_t parameter in HDF5 1.14.x and
|
|
earlier. On POSIX systems, off_t is specified as a 64-bit type via
|
|
POSIX large-file support (LFS). On Windows, however, off_t is defined
|
|
as a 32-bit type, even on 64-bit Windows.
|
|
|
|
HDoff_t has been added to H5public.h and is defined to be int64_t on
|
|
Windows and the library has been updated to use HDoff_t in place of
|
|
off_t throughout. The H5Pset_external() offset parameter has also been
|
|
updated to be HDoff_t.
|
|
|
|
There is no API compatibility wrapper for this change.
|
|
|
|
Fixes GitHub issue #3506
|
|
|
|
|
|
Parallel Library:
|
|
-----------------
|
|
-
|
|
|
|
|
|
Fortran Library:
|
|
----------------
|
|
-
|
|
|
|
|
|
C++ Library:
|
|
------------
|
|
-
|
|
|
|
|
|
Java Library:
|
|
-------------
|
|
-
|
|
|
|
|
|
Tools:
|
|
------
|
|
- Remove the high-level GIF tools
|
|
|
|
The high-level GIF tools, h52gif and gif2h5, have unfixed CVE issues
|
|
(with no proof-of-concept files). They are not critical tools, are not
|
|
well maintained, and are an odd fit for building with the library.
|
|
Because of this, they have been removed. We may move them to a separate
|
|
repository in the future.
|
|
|
|
This also removes the following configure options:
|
|
|
|
Autotools: --(dis|en)able-hlgiftools
|
|
|
|
CMake: HDF5_BUILD_HL_GIF_TOOLS
|
|
|
|
High-Level APIs:
|
|
----------------
|
|
-
|
|
|
|
|
|
C Packet Table API:
|
|
-------------------
|
|
-
|
|
|
|
|
|
Internal header file:
|
|
---------------------
|
|
-
|
|
|
|
|
|
Documentation:
|
|
--------------
|
|
- The COPYING file has been renamed to LICENSE
|
|
|
|
This is where most people will expect to find license information. The
|
|
COPYING_LBNL_HDF5 file has also been renamed to LICENSE_LBNL_HDF5.
|
|
The licenses are unchanged.
|
|
|
|
|
|
Support for new platforms, languages and compilers
|
|
==================================================
|
|
-
|
|
|
|
Bug Fixes since HDF5-2.0.0 release
|
|
===================================
|
|
Library
|
|
-------
|
|
- Fixed a bug in the H5Oexists and H5Oexists_by_name API routines that
|
|
would cause those routines to return FAIL instead of FALSE when checking
|
|
the existence of a non-existent object with a file ID instead of a
|
|
group ID.
|
|
|
|
- Only clear FE_INVALID when that symbol is present on the system
|
|
|
|
When we initialize the floating-point types at library startup, it's
|
|
possible to raise floating-point exceptions when we check which things
|
|
are supported. Normally, we clear these floating-point exceptions via
|
|
feclearexcept(FE_INVALID), but FE_INVALID may not be present on all
|
|
systems. Specifically, this was reported as being a problem when using
|
|
Emscripten 3.1.68 to compile HDF5 1.14.5 to WebAssembly.
|
|
|
|
We've added an #ifdef FE_INVALID block around the exception clearing
|
|
code to correct this.
|
|
|
|
Fixes GitHub issue #4952
|
|
|
|
|
|
Java Library
|
|
------------
|
|
-
|
|
|
|
|
|
Configuration
|
|
-------------
|
|
- Changed name of libhdf5hl_fortran installed by autotools to libhdf5_hl_fortran. The
|
|
new name is consistent with the name of the lib when installed by CMake and with the
|
|
other hl libs.
|
|
|
|
Fixes GitHub issue #4811
|
|
|
|
|
|
Tools
|
|
-----
|
|
-
|
|
|
|
|
|
Performance
|
|
-------------
|
|
-
|
|
|
|
|
|
Fortran API
|
|
-----------
|
|
-
|
|
|
|
|
|
High-Level Library
|
|
------------------
|
|
-
|
|
|
|
|
|
Fortran High-Level APIs
|
|
-----------------------
|
|
-
|
|
|
|
|
|
Documentation
|
|
-------------
|
|
-
|
|
|
|
|
|
F90 APIs
|
|
--------
|
|
-
|
|
|
|
|
|
C++ APIs
|
|
--------
|
|
-
|
|
|
|
|
|
Testing
|
|
-------
|
|
|
|
|
|
Platforms Tested
|
|
===================
|
|
|
|
- HDF5 is tested with the two latest macOS versions that are available
|
|
on github runners. As new major macOS versions become available, HDF5
|
|
will discontinue support for the older version and add the new latest
|
|
version to its list of compatible systems, along with the previous
|
|
version.
|
|
|
|
Linux 6.8.0-1010-aws GNU gcc, gfortran, g++
|
|
#10-Ubuntu SMP 2024 x86_64 (Ubuntu 13.2.0-23ubuntu4) 13.2.0
|
|
GNU/Linux Ubuntu 24.04 Ubuntu clang version 18.1.3 (1ubuntu1)
|
|
Intel(R) oneAPI DPC++/C++ Compiler 2024.2.0
|
|
ifx (IFX) 2024.2.0 20240602
|
|
(cmake and autotools)
|
|
|
|
Linux 6.5.0-1018-aws GNU gcc, gfortran, g++
|
|
#18-Ubuntu SMP x86_64 GNU/Linux (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
|
|
Ubuntu 22.04 Ubuntu clang version 14.0.0-1ubuntu1
|
|
Intel(R) oneAPI DPC++/C++ Compiler 2024.0.2
|
|
ifx (IFX) 2024.0.2 20231213
|
|
(cmake and autotools)
|
|
|
|
Linux 5.14.21-cray_shasta_c cray-mpich/8.1.28
|
|
#1 SMP x86_64 GNU/Linux cce/15.0.0
|
|
(frontier) gcc/13.2
|
|
(cmake)
|
|
|
|
Linux 5.14.0-427.24.1.el9_4 GNU gcc, gfortran, g++ (Red Hat 11.4.1-3)
|
|
#1 SMP x86_64 GNU/Linux clang version 17.0.6
|
|
Rocky 9 Intel(R) oneAPI DPC++/C++ Compiler 2024.2.0
|
|
ifx (IFX) 2024.2.0
|
|
(cmake and autotools)
|
|
|
|
Linux-4.18.0-553.16.1.1toss.t4 openmpi/4.1.2
|
|
#1 SMP x86_64 GNU/Linux clang 14.0.6
|
|
(corona, dane) GCC 12.1.1
|
|
Intel(R) oneAPI DPC++/C++ Compiler 2023.2.1
|
|
ifx (IFX) 2023.2.1
|
|
|
|
Linux-4.18.0-553.5.1.1toss.t4 openmpi/4.1/4.1.6
|
|
#1 SMP x86_64 GNU/Linux clang 16.0.6
|
|
(eclipse) GCC 12.3.0
|
|
Intel(R) oneAPI DPC++/C++ Compiler 2024.0.2
|
|
ifx (IFX) 2024.0.2
|
|
(cmake)
|
|
|
|
Linux 4.14.0-115.35.1.3chaos spectrum-mpi/rolling-release
|
|
#1 SMP ppc64le GNU/Linux clang 17.0.6
|
|
(vortex) GCC 12.2.1
|
|
nvhpc 24.1
|
|
XL 2023.06.28
|
|
(cmake)
|
|
|
|
Linux-4.14.0-115.35.1 spectrum-mpi/rolling-release
|
|
#1 SMP ppc64le GNU/Linux clang 14.0.5, 15.0.6
|
|
(lassen) GCC 8.3.1
|
|
XL 2021.09.22, 2022.08.05
|
|
(cmake)
|
|
|
|
Linux 3.10.0-1160.36.2.el7.ppc64 gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)
|
|
#1 SMP ppc64be GNU/Linux g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)
|
|
Power8 (echidna) GNU Fortran (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)
|
|
|
|
Linux 3.10.0-1160.80.1.el7 GNU C (gcc), Fortran (gfortran), C++ (g++)
|
|
#1 SMP x86_64 GNU/Linux compilers:
|
|
Centos7 Version 4.8.5 20150623 (Red Hat 4.8.5-4)
|
|
(jelly/kituo/moohan) Version 4.9.3, Version 7.2.0, Version 8.3.0,
|
|
Version 9.1.0, Version 10.2.0
|
|
Intel(R) C (icc), C++ (icpc), Fortran (icc)
|
|
compilers:
|
|
Version 17.0.0.098 Build 20160721
|
|
GNU C (gcc) and C++ (g++) 4.8.5 compilers
|
|
with NAG Fortran Compiler Release 7.1(Hanzomon)
|
|
Intel(R) C (icc) and C++ (icpc) 17.0.0.098 compilers
|
|
with NAG Fortran Compiler Release 7.1(Hanzomon)
|
|
MPICH 3.1.4 compiled with GCC 4.9.3
|
|
MPICH 3.3 compiled with GCC 7.2.0
|
|
OpenMPI 3.1.3 compiled with GCC 7.2.0 and 4.1.2
|
|
compiled with GCC 9.1.0
|
|
PGI C, Fortran, C++ for 64-bit target on
|
|
x86_64;
|
|
Versions 18.4.0 and 19.10-0
|
|
NVIDIA nvc, nvfortran and nvc++ version 22.5-0
|
|
(autotools and cmake)
|
|
|
|
|
|
Linux-3.10.0-1160.119.1.1chaos openmpi/4.1.4
|
|
#1 SMP x86_64 GNU/Linux clang 16.0.6
|
|
(skybridge) Intel(R) oneAPI DPC++/C++ Compiler 2023.2.0
|
|
ifx (IFX) 2023.2.0
|
|
(cmake)
|
|
|
|
Linux-3.10.0-1160.90.1.1chaos openmpi/4.1
|
|
#1 SMP x86_64 GNU/Linux clang 16.0.6
|
|
(attaway) GCC 12.1.0
|
|
Intel(R) oneAPI DPC++/C++ Compiler 2024.0.2
|
|
ifx (IFX) 2024.0.2
|
|
(cmake)
|
|
|
|
Linux 2.6.32-573.22.1.el6 GNU C (gcc), Fortran (gfortran), C++ (g++)
|
|
#1 SMP x86_64 GNU/Linux compilers:
|
|
Centos6 Version 4.4.7 20120313
|
|
(platypus) Version 4.9.3, 5.3.0, 6.2.0
|
|
MPICH 3.1.4 compiled with GCC 4.9.3
|
|
PGI C, Fortran, C++ for 64-bit target on
|
|
x86_64;
|
|
Version 19.10-0
|
|
|
|
Windows 10 x64 Visual Studio 2019 w/ clang 12.0.0
|
|
with MSVC-like command-line (C/C++ only - cmake)
|
|
Visual Studio 2019 w/ Intel (C/C++ only - cmake)
|
|
Visual Studio 2022 w/ clang 17.0.3
|
|
with MSVC-like command-line (C/C++ only - cmake)
|
|
Visual Studio 2022 w/ Intel C/C++ oneAPI 2023 (cmake)
|
|
Visual Studio 2019 w/ MSMPI 10.1 (C only - cmake)
|
|
|
|
|
|
Known Problems
|
|
==============
|
|
|
|
- When building with the NAG Fortran compiler using the Autotools and libtool
|
|
2.4.2 or earlier, the -shared flag will be missing '-Wl,', which will cause
|
|
compilation to fail. This is due to a bug in libtool that was fixed in 2012
|
|
and released in 2.4.4 in 2014.
|
|
|
|
- When the library detects and builds in support for the _Float16 datatype, an
|
|
issue has been observed on at least one MacOS 14 system where the library
|
|
fails to initialize due to not being able to detect the byte order of the
|
|
_Float16 type (https://github.com/HDFGroup/hdf5/issues/4310):
|
|
|
|
#5: H5Tinit_float.c line 308 in H5T__fix_order(): failed to detect byte order
|
|
major: Datatype
|
|
minor: Unable to initialize object
|
|
|
|
If this issue is encountered, support for the _Float16 type can be disabled
|
|
with a configuration option:
|
|
|
|
CMake: HDF5_ENABLE_NONSTANDARD_FEATURE_FLOAT16=OFF
|
|
Autotools: --disable-nonstandard-feature-float16
|
|
|
|
- When HDF5 is compiled with NVHPC versions 23.5 - 23.9 (additional versions may
|
|
also be applicable) and with -O2 (or higher) and -DNDEBUG, test failures occur
|
|
in the following tests:
|
|
|
|
H5PLUGIN-filter_plugin
|
|
H5TEST-flush2
|
|
H5TEST-testhdf5-base
|
|
MPI_TEST_t_filters_parallel
|
|
|
|
Sporadic failures (even with lower -O levels):
|
|
Java JUnit-TestH5Pfapl
|
|
Java JUnit-TestH5D
|
|
|
|
Also, NVHPC will fail to compile the test/tselect.c test file with a compiler
|
|
error of 'use of undefined value' when the optimization level is -O2 or higher.
|
|
|
|
This is confirmed to be a bug in the nvc compiler that has been fixed as of
|
|
23.11. If you are using an affected version of the NVidia compiler, the
|
|
work-around is to set the optimization level to -O1.
|
|
|
|
https://forums.developer.nvidia.com/t/hdf5-no-longer-compiles-with-nv-23-9/269045
|
|
|
|
- CMake files do not behave correctly with paths containing spaces.
|
|
Do not use spaces in paths because the required escaping for handling spaces
|
|
results in very complex and fragile build files.
|
|
|
|
- At present, metadata cache images may not be generated by parallel
|
|
applications. Parallel applications can read files with metadata cache
|
|
images, but since this is a collective operation, a deadlock is possible
|
|
if one or more processes do not participate.
|
|
|
|
- The subsetting option in ph5diff currently will fail and should be avoided.
|
|
The subsetting option works correctly in serial h5diff.
|
|
|
|
- Flang Fortran compilation will fail (last check version 17) due to not yet
|
|
implemented: (1) derived type argument passed by value (H5VLff.F90),
|
|
and (2) support for REAL with KIND = 2 in intrinsic SPACING used in testing.
|
|
|
|
- Fortran tests HDF5_1_8.F90 and HDF5_F03.F90 will fail with Cray compilers
|
|
greater than version 16.0 due to a compiler bug. The latest version verified
|
|
as failing was version 17.0.
|
|
|
|
- Several tests currently fail on certain platforms:
|
|
MPI_TEST-t_bigio fails with spectrum-mpi on ppc64le platforms.
|
|
|
|
MPI_TEST-t_subfiling_vfd and MPI_TEST_EXAMPLES-ph5_subfiling fail with
|
|
cray-mpich on theta and with XL compilers on ppc64le platforms.
|
|
|
|
MPI_TEST_testphdf5_tldsc fails with cray-mpich 7.7 on cori and theta.
|
|
|
|
- File space may not be released when overwriting or deleting certain nested
|
|
variable length or reference types.
|
|
|
|
- Known problems in previous releases can be found in the HISTORY*.txt files
|
|
in the HDF5 source. Please report any new problems found to
|
|
help@hdfgroup.org.
|
|
|
|
|
|
CMake vs. Autotools installations
|
|
=================================
|
|
While both build systems produce similar results, there are differences.
|
|
Each system produces the same set of folders on Linux (only CMake works
|
|
on standard Windows); bin, include, lib and share. Autotools places the
|
|
LICENSE and RELEASE.txt file in the root folder, CMake places them in
|
|
the share folder.
|
|
|
|
The bin folder contains the tools and the build scripts. Additionally, CMake
|
|
creates dynamic versions of the tools with the suffix "-shared". Autotools
|
|
installs one set of tools depending on the "--enable-shared" configuration
|
|
option.
|
|
build scripts
|
|
-------------
|
|
Autotools: h5c++, h5cc, h5fc
|
|
CMake: h5c++, h5cc, h5hlc++, h5hlcc
|
|
|
|
The include folder holds the header files and the fortran mod files. CMake
|
|
places the fortran mod files into separate shared and static subfolders,
|
|
while Autotools places one set of mod files into the include folder. Because
|
|
CMake produces a tools library, the header files for tools will appear in
|
|
the include folder.
|
|
|
|
The lib folder contains the library files, and CMake adds the pkgconfig
|
|
subfolder with the hdf5*.pc files used by the bin/build scripts created by
|
|
the CMake build. CMake separates the C interface code from the fortran code by
|
|
creating C-stub libraries for each Fortran library. In addition, only CMake
|
|
installs the tools library. The names of the szip libraries are different
|
|
between the build systems.
|
|
|
|
The share folder will have the most differences because CMake builds include
|
|
a number of CMake specific files for support of CMake's find_package and support
|
|
for the HDF5 Examples CMake project.
|
|
|
|
The issues with the gif tool are:
|
|
HDFFV-10592 CVE-2018-17433
|
|
HDFFV-10593 CVE-2018-17436
|
|
HDFFV-11048 CVE-2020-10809
|
|
These CVE issues have not yet been addressed and are avoided by not building
|
|
the gif tool by default. Enable building the High-Level tools with these options:
|
|
autotools: --enable-hlgiftools
|
|
cmake: HDF5_BUILD_HL_GIF_TOOLS=ON
|