From af8c1d1d872112ad741bbf05dda792c1626b93fd Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Wed, 15 Nov 2023 17:32:49 -0600 Subject: Sync fixes for CI and presets (#3855) * Sync fixes for CI and presets * Sync the Fortran build changes * Update fortran test file * Sync hl/fortran files * Merge the nvidia compiler flag changes * Update link * Update links to doxygen refs for 1.14 --- .github/workflows/hdfeos5.yml | 2 +- .github/workflows/intel-cmake.yml | 114 ++++++++++++++++++--------- .github/workflows/linux-auto-aocc-ompi.yml | 4 +- .github/workflows/netcdf.yml | 2 +- .github/workflows/nvhpc-auto.yml | 24 +++--- .github/workflows/nvhpc-cmake.yml | 24 +++--- CONTRIBUTING.md | 2 +- config/cmake-presets/hidden-presets.json | 81 +++++++++++++++++-- config/cmake/HDFCompilerFlags.cmake | 38 +++++++++ config/cmake/examples/HDF5_Examples.cmake.in | 12 +-- config/cmake/grepTest.cmake | 18 +++-- config/linux-gnulibc1 | 30 +++++-- config/nvidia-flags | 6 +- doxygen/dox/Overview.dox | 2 +- doxygen/examples/FileFormat.html | 2 +- fortran/examples/ph5example.f90 | 6 +- fortran/src/CMakeLists.txt | 41 +++++++--- fortran/src/H5_ff.F90 | 2 +- fortran/src/H5config_f.inc.cmake | 54 ++++++++++--- fortran/src/H5config_f.inc.in | 2 +- fortran/src/hdf5_fortrandll.def.in | 10 +-- fortran/test/tH5T_F03.F90 | 14 ++-- hl/fortran/src/CMakeLists.txt | 18 ++--- hl/fortran/src/H5LTff.F90 | 14 ++-- src/H5Fmodule.h | 2 +- src/H5module.h | 8 +- 26 files changed, 375 insertions(+), 157 deletions(-) diff --git a/.github/workflows/hdfeos5.yml b/.github/workflows/hdfeos5.yml index 0332c9d..a2212a6 100644 --- a/.github/workflows/hdfeos5.yml +++ b/.github/workflows/hdfeos5.yml @@ -16,7 +16,7 @@ on: # Using concurrency to cancel any in-progress job or run concurrency: - group: ${{ github.workflow }}-${{ github.sha || github.event.pull_request.number }} + group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} cancel-in-progress: true permissions: diff --git a/.github/workflows/intel-cmake.yml b/.github/workflows/intel-cmake.yml index 037eea6..68909d5 100644 --- a/.github/workflows/intel-cmake.yml +++ b/.github/workflows/intel-cmake.yml @@ -13,69 +13,111 @@ permissions: contents: read jobs: - Intel_build_and_test: - name: "Intel ${{ inputs.build_mode }}" + # Linux (Ubuntu) w/ gcc + CMake + # + Intel_oneapi_linux: + name: "ubuntu-oneapi ${{ inputs.build_mode }}" runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: add oneAPI to apt - shell: bash - run: | - cd /tmp - wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB - sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB - rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB - sudo add-apt-repository -y "deb https://apt.repos.intel.com/oneapi all main" - + # Only CMake need ninja-build, but we just install it unilaterally + # libssl, etc. are needed for the ros3 VFD - name: Install Linux Dependencies run: | - sudo apt update - sudo apt-get install ninja-build doxygen graphviz - sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + sudo apt update + sudo apt-get install ninja-build doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev - - name: install oneAPI dpcpp and fortran compiler - shell: bash - run: | - sudo apt update - sudo apt install -y intel-oneapi-compiler-dpcpp-cpp - sudo apt install -y intel-oneapi-compiler-fortran - - - name: install oneAPI MKL library - shell: bash - run: | - sudo apt install -y intel-oneapi-mkl-devel + - name: add oneAPI to env + uses: fortran-lang/setup-fortran@v1 + id: setup-fortran + with: + compiler: intel + version: '2023.2' - - name: CMake Configure with icx + - name: CMake Configure with oneapi shell: bash + env: + FC: ${{ steps.setup-fortran.outputs.fc }} + CC: ${{ steps.setup-fortran.outputs.cc }} + CXX: ${{ steps.setup-fortran.outputs.cxx }} run: | - source /opt/intel/oneapi/setvars.sh - export PATH=$PATH:/opt/intel/oneapi/compiler/2023.2.1/linux/bin mkdir "${{ runner.workspace }}/build" cd "${{ runner.workspace }}/build" - cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake -G Ninja \ + cmake -C ${{ github.workspace }}/config/cmake/cacheinit.cmake -G Ninja \ -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ - -DCMAKE_TOOLCHAIN_FILE=config/toolchain/intel.cmake \ - -DMKL_ROOT="/opt/intel/oneapi/mkl/latest" \ - -DTBB_ROOT="/opt/intel/oneapi/tbb/latest" \ -DLIBAEC_USE_LOCALCONTENT=OFF \ -DZLIB_USE_LOCALCONTENT=OFF \ - -DHDF5_BUILD_FORTRAN=OFF \ $GITHUB_WORKSPACE # BUILD - name: CMake Build shell: bash + env: + FC: ${{ steps.setup-fortran.outputs.fc }} + CC: ${{ steps.setup-fortran.outputs.cc }} + CXX: ${{ steps.setup-fortran.outputs.cxx }} run: | - source /opt/intel/oneapi/setvars.sh cmake --build . --parallel 3 --config ${{ inputs.build_mode }} working-directory: ${{ runner.workspace }}/build # RUN TESTS - name: CMake Run Tests shell: bash + env: + FC: ${{ steps.setup-fortran.outputs.fc }} + CC: ${{ steps.setup-fortran.outputs.cc }} + CXX: ${{ steps.setup-fortran.outputs.cxx }} run: | - source /opt/intel/oneapi/setvars.sh - export SYCL_DEVICE_FILTER=opencl.cpu ctest . --parallel 2 -C ${{ inputs.build_mode }} -V working-directory: ${{ runner.workspace }}/build + + Intel_oneapi_windows: + name: "windows-oneapi ${{ inputs.build_mode }}" + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + + - name: Install Dependencies (Windows) + run: choco install ninja + + - name: add oneAPI to env + uses: fortran-lang/setup-fortran@v1 + id: setup-fortran + with: + compiler: intel + version: '2023.2' + + - name: CMake Configure with oneapi + shell: pwsh + env: + FC: ${{ steps.setup-fortran.outputs.fc }} + CC: ${{ steps.setup-fortran.outputs.cc }} + CXX: ${{ steps.setup-fortran.outputs.cxx }} + run: | + mkdir "${{ runner.workspace }}/build" + Set-Location -Path "${{ runner.workspace }}\\build" + cmake -C ${{ github.workspace }}/config/cmake/cacheinit.cmake -G Ninja -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} -DHDF5_BUILD_FORTRAN=ON -DLIBAEC_USE_LOCALCONTENT=OFF -DZLIB_USE_LOCALCONTENT=OFF ${{ github.workspace }} + + # BUILD + - name: CMake Build + shell: pwsh + env: + FC: ${{ steps.setup-fortran.outputs.fc }} + CC: ${{ steps.setup-fortran.outputs.cc }} + CXX: ${{ steps.setup-fortran.outputs.cxx }} + run: | + cmake --build . --parallel 3 --config ${{ inputs.build_mode }} + working-directory: ${{ runner.workspace }}/build + + # RUN TESTS + - name: CMake Run Tests + shell: pwsh + env: + FC: ${{ steps.setup-fortran.outputs.fc }} + CC: ${{ steps.setup-fortran.outputs.cc }} + CXX: ${{ steps.setup-fortran.outputs.cxx }} + run: | + ctest . --parallel 2 -C ${{ inputs.build_mode }} -V -E tfloatsattrs + working-directory: ${{ runner.workspace }}/build diff --git a/.github/workflows/linux-auto-aocc-ompi.yml b/.github/workflows/linux-auto-aocc-ompi.yml index 50d139c..8265695 100644 --- a/.github/workflows/linux-auto-aocc-ompi.yml +++ b/.github/workflows/linux-auto-aocc-ompi.yml @@ -1,4 +1,4 @@ -name: linux autotools aocc ompi +name: hdf5 1.14 autotools aocc ompi on: push: @@ -16,7 +16,7 @@ on: # Using concurrency to cancel any in-progress job or run concurrency: - group: ${{ github.workflow }}-${{ github.sha || github.event.pull_request.number }} + group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} cancel-in-progress: true permissions: diff --git a/.github/workflows/netcdf.yml b/.github/workflows/netcdf.yml index 5dd3a66..bc0c2d0 100644 --- a/.github/workflows/netcdf.yml +++ b/.github/workflows/netcdf.yml @@ -19,7 +19,7 @@ permissions: # Using concurrency to cancel any in-progress job or run concurrency: - group: ${{ github.workflow }}-${{ github.sha || github.event.pull_request.number }} + group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} cancel-in-progress: true jobs: diff --git a/.github/workflows/nvhpc-auto.yml b/.github/workflows/nvhpc-auto.yml index ee96dfd..7775aa2 100644 --- a/.github/workflows/nvhpc-auto.yml +++ b/.github/workflows/nvhpc-auto.yml @@ -31,21 +31,21 @@ jobs: curl https://developer.download.nvidia.com/hpc-sdk/ubuntu/DEB-GPG-KEY-NVIDIA-HPC-SDK | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg echo 'deb [signed-by=/usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg] https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64 /' | sudo tee /etc/apt/sources.list.d/nvhpc.list sudo apt-get update -y - sudo apt-get install -y nvhpc-23-7 - echo "CC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/comm_libs/openmpi4/bin/mpicc" >> $GITHUB_ENV - echo "FC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/comm_libs/openmpi4/bin/mpifort" >> $GITHUB_ENV + sudo apt-get install -y nvhpc-23-9 + echo "CC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/comm_libs/openmpi4/bin/mpicc" >> $GITHUB_ENV + echo "FC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/comm_libs/openmpi4/bin/mpifort" >> $GITHUB_ENV echo "NVHPCSDK=/opt/nvidia/hpc_sdk" >> $GITHUB_ENV - echo "OMPI_CXX=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin/nvc++" >> $GITHUB_ENV - echo "OMPI_CC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin/nvc" >> $GITHUB_ENV - echo "OMPI_FC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin/nvfortran" >> $GITHUB_ENV - echo "LD_LIBRARY_PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/lib" >> $GITHUB_ENV + echo "OMPI_CXX=/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/compilers/bin/nvc++" >> $GITHUB_ENV + echo "OMPI_CC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/compilers/bin/nvc" >> $GITHUB_ENV + echo "OMPI_FC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/compilers/bin/nvfortran" >> $GITHUB_ENV + echo "LD_LIBRARY_PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/compilers/lib" >> $GITHUB_ENV echo "DESTDIR=/tmp" >> $GITHUB_ENV - name: Autotools Configure shell: bash run: | export RUNPARALLEL="mpiexec -np 2" - export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin:$PATH + export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/compilers/bin:$PATH sh ./autogen.sh mkdir "${{ runner.workspace }}/build" cd "${{ runner.workspace }}/build" @@ -61,7 +61,7 @@ jobs: - name: Autotools Build shell: bash run: | - export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin:$PATH + export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/compilers/bin:$PATH make -j3 working-directory: ${{ runner.workspace }}/build @@ -69,19 +69,19 @@ jobs: # NORMAL - name: Autotools Run Tests run: | - export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin:$PATH + export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/compilers/bin:$PATH make check -j working-directory: ${{ runner.workspace }}/build # INSTALL (note that this runs even when we don't run the tests) - name: Autotools Install run: | - export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin:$PATH + export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/compilers/bin:$PATH make install working-directory: ${{ runner.workspace }}/build # - name: Autotools Verify Install # run: | -# export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin:$PATH +# export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/compilers/bin:$PATH # make check-install # working-directory: ${{ runner.workspace }}/build diff --git a/.github/workflows/nvhpc-cmake.yml b/.github/workflows/nvhpc-cmake.yml index 8c7760e..3805544 100644 --- a/.github/workflows/nvhpc-cmake.yml +++ b/.github/workflows/nvhpc-cmake.yml @@ -32,20 +32,20 @@ jobs: curl https://developer.download.nvidia.com/hpc-sdk/ubuntu/DEB-GPG-KEY-NVIDIA-HPC-SDK | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg echo 'deb [signed-by=/usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg] https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64 /' | sudo tee /etc/apt/sources.list.d/nvhpc.list sudo apt-get update -y - sudo apt-get install -y nvhpc-23-7 + sudo apt-get install -y nvhpc-23-9 echo "CC=nvc" >> $GITHUB_ENV echo "FC=nvfortran" >> $GITHUB_ENV echo "NVHPCSDK=/opt/nvidia/hpc_sdk" >> $GITHUB_ENV - echo "OMPI_CXX=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin/nvc++" >> $GITHUB_ENV - echo "OMPI_CC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin/nvc" >> $GITHUB_ENV - echo "OMPI_FC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin/nvfortran" >> $GITHUB_ENV - echo "LD_LIBRARY_PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/cuda/12.2/lib64:/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/lib" >> $GITHUB_ENV + echo "OMPI_CXX=/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/compilers/bin/nvc++" >> $GITHUB_ENV + echo "OMPI_CC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/compilers/bin/nvc" >> $GITHUB_ENV + echo "OMPI_FC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/compilers/bin/nvfortran" >> $GITHUB_ENV + echo "LD_LIBRARY_PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/cuda/12.2/lib64:/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/compilers/lib" >> $GITHUB_ENV echo "DESTDIR=/tmp" >> $GITHUB_ENV - name: CMake Configure with nvc shell: bash run: | - export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin:$PATH + export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/23.9/compilers/bin:$PATH mkdir "${{ runner.workspace }}/build" cd "${{ runner.workspace }}/build" cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake -G Ninja \ @@ -56,7 +56,7 @@ jobs: -DLIBAEC_USE_LOCALCONTENT=OFF \ -DZLIB_USE_LOCALCONTENT=OFF \ -DHDF5_BUILD_FORTRAN:BOOL=ON \ - -DHDF5_ENABLE_ASSERTS:BOOL=ON \ + -DHDF5_BUILD_JAVA:BOOL=OFF \ -DMPIEXEC_MAX_NUMPROCS:STRING="2" \ $GITHUB_WORKSPACE cat src/libhdf5.settings @@ -69,8 +69,8 @@ jobs: working-directory: ${{ runner.workspace }}/build # RUN TESTS -# - name: CMake Run Tests -# shell: bash -# run: | -# ctest . --parallel 2 -C ${{ inputs.build_mode }} -V -# working-directory: ${{ runner.workspace }}/build + - name: CMake Run Tests + shell: bash + run: | + ctest . --parallel 2 -C ${{ inputs.build_mode }} -V + working-directory: ${{ runner.workspace }}/build diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a16e845..0bf3205 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -125,7 +125,7 @@ Please make sure that you check the items applicable to your pull request: * [ ] Does the new feature require a change to an existing API? See "API Compatibility Macros" document (https://portal.hdfgroup.org/display/HDF5/API+Compatibility+Macros) * Documentation * [ ] Was the change described in the release_docs/RELEASE.txt file? - * [ ] Was the new function documented in the corresponding public header file using [Doxygen](https://docs.hdfgroup.org/hdf5/develop/_r_m_t.html)? + * [ ] Was the new function documented in the corresponding public header file using [Doxygen](https://hdfgroup.github.io/hdf5/v1_14/_r_m_t.html)? * [ ] Was new functionality documented for the HDF5 community (the level of documentation depends on the feature; ask us what would be appropriate) * Testing * [ ] Does the pull request have tests? diff --git a/config/cmake-presets/hidden-presets.json b/config/cmake-presets/hidden-presets.json index 12eefa1..901e83c 100644 --- a/config/cmake-presets/hidden-presets.json +++ b/config/cmake-presets/hidden-presets.json @@ -205,6 +205,28 @@ ] }, { + "name": "ci-x64-Debug-Intel", + "description": "Intel for x64 (Debug)", + "hidden": true, + "inherits": [ + "ci-base", + "ci-x64", + "ci-Debug", + "ci-Intel" + ] + }, + { + "name": "ci-x64-Release-Intel", + "description": "Intel for x64 (Release)", + "hidden": true, + "inherits": [ + "ci-base", + "ci-x64", + "ci-Release", + "ci-Intel" + ] + }, + { "name": "ci-x64-Debug-MSVC-asan", "description": "x64-Debug-MSVC with /fsanitize=address", "hidden": true, @@ -265,7 +287,8 @@ "hidden": true, "inherits": [ "ci-base" - ] + ], + "configuration": "Debug" }, { "name": "ci-x64-Release-MSVC", @@ -273,7 +296,8 @@ "hidden": true, "inherits": [ "ci-base" - ] + ], + "configuration": "RelWithDebInfo" }, { "name": "ci-x64-Debug-Clang", @@ -308,6 +332,24 @@ ] }, { + "name": "ci-x64-Debug-Intel", + "configurePreset": "ci-x64-Debug-Intel", + "hidden": true, + "inherits": [ + "ci-base" + ], + "configuration": "Debug" + }, + { + "name": "ci-x64-Release-Intel", + "configurePreset": "ci-x64-Release-Intel", + "hidden": true, + "inherits": [ + "ci-base" + ], + "configuration": "RelWithDebInfo" + }, + { "name": "ci-x64-Debug-MSVC-asan", "configurePreset": "ci-x64-Debug-MSVC-asan", "hidden": true, @@ -370,7 +412,8 @@ "hidden": true, "inherits": [ "ci-base" - ] + ], + "configuration": "Debug" }, { "name": "ci-x64-Release-MSVC", @@ -378,7 +421,8 @@ "hidden": true, "inherits": [ "ci-base" - ] + ], + "configuration": "RelWithDebInfo" }, { "name": "ci-x64-Debug-Clang", @@ -413,6 +457,22 @@ ] }, { + "name": "ci-x64-Debug-Intel", + "configurePreset": "ci-x64-Debug-Intel", + "hidden": true, + "inherits": [ + "ci-base" + ] + }, + { + "name": "ci-x64-Release-Intel", + "configurePreset": "ci-x64-Release-Intel", + "hidden": true, + "inherits": [ + "ci-base" + ] + }, + { "name": "ci-x64-Debug-MSVC-asan", "configurePreset": "ci-x64-Debug-MSVC-asan", "hidden": true, @@ -467,7 +527,8 @@ "inherits": "ci-base", "generators": [ "ZIP" - ] + ], + "configurations": ["RelWithDebInfo"] }, { "name": "ci-x64-Release-Clang", @@ -486,6 +547,16 @@ "generators": [ "TGZ" ] + }, + { + "name": "ci-x64-Release-Intel", + "configurePreset": "ci-x64-Release-Intel", + "hidden": true, + "inherits": "ci-base", + "generators": [ + "TGZ" + ] } ] } + diff --git a/config/cmake/HDFCompilerFlags.cmake b/config/cmake/HDFCompilerFlags.cmake index e7b9337..7bddad0 100644 --- a/config/cmake/HDFCompilerFlags.cmake +++ b/config/cmake/HDFCompilerFlags.cmake @@ -56,6 +56,44 @@ if (CMAKE_C_COMPILER_ID STREQUAL "NVHPC" ) else () set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Mbounds -g") endif () + + # With at least NVHPC 23.5 - 23.9, compiling with -O2 or higher and -DNDEBUG + # appears to have issues that manifest in the tests as incorrect metadata + # checksums being read or memory being corrupted. Compiling without -DNDEBUG + # does not appear to have these issues, but is not ideal due to compiling in + # asserts and other library debug code. Compiling with -O1 also does not appear + # to have these issues, so set maximum optimization level to -O1 for now until + # it can be determined whether these issues are compiler-specific or issues + # in the library. + set (cmake_c_flags_minsizerel_edited "${CMAKE_C_FLAGS_MINSIZEREL}") + string (REPLACE "-O2" "" cmake_c_flags_minsizerel_edited "${cmake_c_flags_minsizerel_edited}") + string (REPLACE "-O3" "" cmake_c_flags_minsizerel_edited "${cmake_c_flags_minsizerel_edited}") + string (REPLACE "-O4" "" cmake_c_flags_minsizerel_edited "${cmake_c_flags_minsizerel_edited}") + string (REPLACE "-Ofast" "" cmake_c_flags_minsizerel_edited "${cmake_c_flags_minsizerel_edited}") + string (REPLACE "-fast" "" cmake_c_flags_minsizerel_edited "${cmake_c_flags_minsizerel_edited}") + string (STRIP "${cmake_c_flags_minsizerel_edited}" cmake_c_flags_minsizerel_edited) + string (PREPEND cmake_c_flags_minsizerel_edited "-O1 ") + set (CMAKE_C_FLAGS_MINSIZEREL "${cmake_c_flags_minsizerel_edited}") + + set (cmake_c_flags_release_edited "${CMAKE_C_FLAGS_RELEASE}") + string (REPLACE "-O2" "" cmake_c_flags_release_edited "${cmake_c_flags_release_edited}") + string (REPLACE "-O3" "" cmake_c_flags_release_edited "${cmake_c_flags_release_edited}") + string (REPLACE "-O4" "" cmake_c_flags_release_edited "${cmake_c_flags_release_edited}") + string (REPLACE "-Ofast" "" cmake_c_flags_release_edited "${cmake_c_flags_release_edited}") + string (REPLACE "-fast" "" cmake_c_flags_release_edited "${cmake_c_flags_release_edited}") + string (STRIP "${cmake_c_flags_release_edited}" cmake_c_flags_release_edited) + string (PREPEND cmake_c_flags_release_edited "-O1 ") + set (CMAKE_C_FLAGS_RELEASE "${cmake_c_flags_release_edited}") + + set (cmake_c_flags_relwithdebinfo_edited "${CMAKE_C_FLAGS_RELWITHDEBINFO}") + string (REPLACE "-O2" "" cmake_c_flags_relwithdebinfo_edited "${cmake_c_flags_relwithdebinfo_edited}") + string (REPLACE "-O3" "" cmake_c_flags_relwithdebinfo_edited "${cmake_c_flags_relwithdebinfo_edited}") + string (REPLACE "-O4" "" cmake_c_flags_relwithdebinfo_edited "${cmake_c_flags_relwithdebinfo_edited}") + string (REPLACE "-Ofast" "" cmake_c_flags_relwithdebinfo_edited "${cmake_c_flags_relwithdebinfo_edited}") + string (REPLACE "-fast" "" cmake_c_flags_relwithdebinfo_edited "${cmake_c_flags_relwithdebinfo_edited}") + string (STRIP "${cmake_c_flags_relwithdebinfo_edited}" cmake_c_flags_relwithdebinfo_edited) + string (PREPEND cmake_c_flags_relwithdebinfo_edited "-O1 ") + set (CMAKE_C_FLAGS_RELWITHDEBINFO "${cmake_c_flags_relwithdebinfo_edited}") endif () if (CMAKE_COMPILER_IS_GNUCC) diff --git a/config/cmake/examples/HDF5_Examples.cmake.in b/config/cmake/examples/HDF5_Examples.cmake.in index 2f3a649..8f28aae 100644 --- a/config/cmake/examples/HDF5_Examples.cmake.in +++ b/config/cmake/examples/HDF5_Examples.cmake.in @@ -53,7 +53,7 @@ set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCTEST_CONFIGURATION_TYPE:STRING=${ if(NOT DEFINED INSTALLDIR) if(WIN32) - set(INSTALLDIR "%ProgramFiles%/HDF_Group/@HDF5_PACKAGE_NAME@/@HDF5_PACKAGE_VERSION@") + set(INSTALLDIR "\"%ProgramFiles%/HDF_Group/@HDF5_PACKAGE_NAME@/@HDF5_PACKAGE_VERSION@\"") else() set(INSTALLDIR "@CMAKE_INSTALL_PREFIX@") endif() @@ -98,11 +98,11 @@ endif() set(ENV{HDF5_PLUGIN_PATH} "${INSTALLDIR}/lib/plugin") set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_PACKAGE_NAME:STRING=@HDF5_PACKAGE@@HDF_PACKAGE_EXT@") ### use a toolchain file (supported everywhere) #### -if(NOT DEFINED CTEST_TOOLCHAIN_FILE) - set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_TOOLCHAIN_FILE:STRING=@CTEST_TOOLCHAIN_FILE@") -else() - set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_TOOLCHAIN_FILE:STRING=${CTEST_TOOLCHAIN_FILE}") -endif() +#if(NOT DEFINED CTEST_TOOLCHAIN_FILE) +# set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_TOOLCHAIN_FILE:STRING=@CTEST_TOOLCHAIN_FILE@") +#else() +# set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_TOOLCHAIN_FILE:STRING=${CTEST_TOOLCHAIN_FILE}") +#endif() ############################################################################################################### # For any comments please contact cdashhelp@hdfgroup.org diff --git a/config/cmake/grepTest.cmake b/config/cmake/grepTest.cmake index 6e51dec..2ec8387 100644 --- a/config/cmake/grepTest.cmake +++ b/config/cmake/grepTest.cmake @@ -71,8 +71,8 @@ message (STATUS "COMMAND Error: ${TEST_ERROR}") # remove special output file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) -string (FIND TEST_STREAM "_pmi_alps" "${TEST_FIND_RESULT}") -if (TEST_FIND_RESULT GREATER 0) +string (FIND TEST_STREAM "_pmi_alps" TEST_FIND_RESULT) +if (TEST_FIND_RESULT GREATER -1) string (REGEX REPLACE "^.*_pmi_alps[^\n]+\n" "" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) endif () @@ -169,12 +169,14 @@ else () # else grep the output with the reference set (TEST_GREP_RESULT 0) file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) - - # TEST_REFERENCE should always be matched - string (REGEX MATCH "${TEST_REFERENCE}" TEST_MATCH ${TEST_STREAM}) - string (COMPARE EQUAL "${TEST_REFERENCE}" "${TEST_MATCH}" TEST_GREP_RESULT) - if (NOT TEST_GREP_RESULT) - message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not contain ${TEST_REFERENCE}") + list (LENGTH TEST_STREAM test_len) + if (test_len GREATER 0) + # TEST_REFERENCE should always be matched + string (REGEX MATCH "${TEST_REFERENCE}" TEST_MATCH ${TEST_STREAM}) + string (COMPARE EQUAL "${TEST_REFERENCE}" "${TEST_MATCH}" TEST_GREP_RESULT) + if (NOT TEST_GREP_RESULT) + message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not contain ${TEST_REFERENCE}") + endif () endif () endif () diff --git a/config/linux-gnulibc1 b/config/linux-gnulibc1 index 328f8d3..b4139ee 100644 --- a/config/linux-gnulibc1 +++ b/config/linux-gnulibc1 @@ -47,6 +47,9 @@ fi # Figure out Clang C compiler flags . $srcdir/config/clang-flags +# Figure out NVHPC C compiler flags +. $srcdir/config/nvidia-flags + # Use default Fortran 90 compiler according to what C compiler is used. if test "X-" = "X-$FC"; then case $CC_BASENAME in @@ -58,6 +61,10 @@ if test "X-" = "X-$FC"; then FC=pgf90 FC_BASENAME=pgf90 ;; + nvc*) + FC=nvfortran + FC_BASENAME=nvfortran + ;; icx*) FC=ifx FC_BASENAME=ifx @@ -79,7 +86,7 @@ if test "X-" = "X-$FC"; then else case $FC in # The PGI and Intel compilers are automatically detected below - ifc*|ifort*|pgf90*) + ifc*|ifort*|pgf90*|nvfortran*) ;; *f95*) @@ -135,6 +142,9 @@ fi # Figure out Clang FC compiler flags . $srcdir/config/clang-fflags +# Figure out NVHPC FC compiler flags +. $srcdir/config/nvidia-fflags + case $FC_BASENAME in # # Absoft compiler @@ -173,10 +183,7 @@ case $FC_BASENAME in nagfor) F9XSUFFIXFLAG="" - # NOTE: The default is -ieee=stop, which will cause problems - # when the H5T module performs floating-point type - # introspection - AM_FCFLAGS="$AM_FCFLAGS -ieee=full" + AM_FCFLAGS="$AM_FCFLAGS" FSEARCH_DIRS="" # Production @@ -226,6 +233,9 @@ fi # Figure out Clang CXX compiler flags . $srcdir/config/clang-cxxflags +# Figure out NVHPC CXX compiler flags +. $srcdir/config/nvidia-cxxflags + # compiler version strings # check if the compiler_version_info is already set @@ -248,7 +258,11 @@ case $CC in sed 's/\"/\\\"/g' |\ sed 's/^\([a-z]* \)/ built with \1/1'` cc_version_info=`echo $cc_version_info` - ;; + ;; + + *nvc*) + cc_version_info=`$CC $CFLAGS $H5_CFLAGS -V 2>&1 | grep 'nvc'` + ;; *icx*) cc_version_info=`$CC $CCFLAGS $H5_CCFLAGS -V 2>&1 | grep 'Version' |\ @@ -322,6 +336,10 @@ case $FC in fc_version_info=`$FC $FCFLAGS $H5_FCFLAGS -V 2>&1 | grep 'pgf90'` ;; + *nvfortran*) + fc_version_info=`$FC $FCFLAGS $H5_FCFLAGS -V 2>&1 | grep 'nvfortran'` + ;; + *nagfor*|*nagftn*) RM='rm -f' tmpfile=/tmp/cmpver.$$ diff --git a/config/nvidia-flags b/config/nvidia-flags index 864c644..c140edd 100644 --- a/config/nvidia-flags +++ b/config/nvidia-flags @@ -76,7 +76,8 @@ if test "X-nvc" = "X-$cc_vendor" -o "X-nvcc" = "X-$cc_vendor"; then ############## # NDEBUG is handled explicitly by the configure script - PROD_CFLAGS="-fast" + #PROD_CFLAGS="-fast" + PROD_CFLAGS="" # -fast implies -O2 and -O2+ currently has test failures. ######### # Debug # @@ -106,7 +107,8 @@ if test "X-nvc" = "X-$cc_vendor" -o "X-nvcc" = "X-$cc_vendor"; then ################ HIGH_OPT_CFLAGS="-O1" # -O2+ currently has test failures. - DEBUG_OPT_CFLAGS="-gopt -O2" + #DEBUG_OPT_CFLAGS="-gopt -O2" + DEBUG_OPT_CFLAGS="-gopt -O1" # -O2+ currently has test failures. NO_OPT_CFLAGS="-O0" ################# diff --git a/doxygen/dox/Overview.dox b/doxygen/dox/Overview.dox index 195163f..ac6c8b1 100644 --- a/doxygen/dox/Overview.dox +++ b/doxygen/dox/Overview.dox @@ -23,7 +23,7 @@ documents cover a mix of tasks, concepts, and reference, to help a specific \par Versions Version-specific documentation (see the version in the title area) can be found here: - - HDF5 develop branch + - HDF5 develop branch - HDF5 1.14.x (this site) - HDF5 1.12.x - HDF5 1.10.x diff --git a/doxygen/examples/FileFormat.html b/doxygen/examples/FileFormat.html index 133bbc8..30428e3 100644 --- a/doxygen/examples/FileFormat.html +++ b/doxygen/examples/FileFormat.html @@ -36,7 +36,7 @@ TABLE CAPTION STRONG { font-size: larger }
  • Background Reading:

    -
    HDF5 File Format Specification +
    HDF5 File Format Specification
    This describes the current HDF5 file format.
    diff --git a/fortran/examples/ph5example.f90 b/fortran/examples/ph5example.f90 index 138969e..29423b3 100644 --- a/fortran/examples/ph5example.f90 +++ b/fortran/examples/ph5example.f90 @@ -24,7 +24,7 @@ CHARACTER(LEN=8), PARAMETER :: dsetname = "IntArray" ! Dataset name CHARACTER(LEN=100) :: filename ! File name - INTEGER :: fnamelen ! File name length + INTEGER :: fnamelen ! File name length INTEGER(HID_T) :: file_id ! File identifier INTEGER(HID_T) :: dset_id ! Dataset identifier INTEGER(HID_T) :: filespace ! Dataspace identifier in file @@ -76,9 +76,9 @@ CALL get_environment_variable("HDF5_PARAPREFIX", filename) fnamelen = LEN_TRIM(filename) if ( fnamelen == 0 ) then - filename = default_fname + filename = default_fname else - filename = filename(1:fnamelen) // "/" // default_fname + filename = filename(1:fnamelen) // "/" // default_fname endif print *, "Using filename = ", filename diff --git a/fortran/src/CMakeLists.txt b/fortran/src/CMakeLists.txt index 57e17e5..87557db 100644 --- a/fortran/src/CMakeLists.txt +++ b/fortran/src/CMakeLists.txt @@ -9,12 +9,15 @@ if (WIN32) if (NOT H5_HAVE_PARALLEL) set (H5_NOPAREXP ";") endif () + set (H5_NOSUBFILING ";") # Subfiling is not supported on Windows set (H5_F03EXP ";") if (NOT H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE) set (H5_DBL_NOT_UNIQUE_EXP ";") endif () + set (CMAKE_NO_DEPRECATED_SYMBOLS 0) if (NOT H5_NO_DEPRECATED_SYMBOLS) - set (H5_NO_DEPRECATED_SYMBOLS ";") + set (CMAKE_NO_DEPRECATED_SYMBOLS 1) + set (DLL_NO_DEPRECATED_SYMBOLS ";") endif () configure_file (${HDF5_F90_SRC_SOURCE_DIR}/hdf5_fortrandll.def.in ${HDF5_F90_SRC_BINARY_DIR}/hdf5_fortrandll.def @ONLY) endif () @@ -25,15 +28,34 @@ endif () # Define Parallel variable for passing to H5config_f.inc.cmake set (CMAKE_H5_HAVE_PARALLEL 0) +set (CMAKE_H5_HAVE_SUBFILING_VFD 0) if (H5_HAVE_PARALLEL) set (CMAKE_H5_HAVE_PARALLEL 1) + if (H5_HAVE_SUBFILING_VFD) + set (CMAKE_H5_HAVE_SUBFILING_VFD 1) + endif () endif () set (CMAKE_H5_HAVE_FLOAT128 0) -if (HAVE_FLOAT128) +if (H5_HAVE_FLOAT128) set (CMAKE_H5_HAVE_FLOAT128 1) endif () +set (CMAKE_H5_FORTRAN_HAVE_STORAGE_SIZE 0) +if (H5_FORTRAN_HAVE_STORAGE_SIZE) + set (CMAKE_H5_FORTRAN_HAVE_STORAGE_SIZE 1) +endif () + +set (CMAKE_H5_FORTRAN_HAVE_SIZEOF 0) +if (H5_FORTRAN_HAVE_SIZEOF) + set (CMAKE_H5_FORTRAN_HAVE_SIZEOF 1) +endif () + +set (CMAKE_H5_FORTRAN_HAVE_C_SIZEOF 0) +if (H5_FORTRAN_HAVE_C_SIZEOF) + set (CMAKE_H5_FORTRAN_HAVE_C_SIZEOF 1) +endif () + configure_file (${HDF5_F90_SRC_SOURCE_DIR}/H5config_f.inc.cmake ${HDF5_F90_BINARY_DIR}/H5config_f.inc @ONLY) configure_file (${HDF5_F90_SRC_SOURCE_DIR}/H5fort_type_defines.h.cmake ${HDF5_F90_BINARY_DIR}/H5fort_type_defines.h @ONLY) @@ -341,8 +363,6 @@ if (BUILD_STATIC_LIBS) ${LINK_Fortran_LIBS} "$<$:${MPI_Fortran_LIBRARIES}>" ) -# set_property(TARGET ${HDF5_F90_LIB_TARGET} APPEND PROPERTY LINK_FLAGS "$<$:-SUBSYSTEM:CONSOLE>") -# set_property(TARGET ${HDF5_F90_LIB_TARGET} APPEND PROPERTY LINK_FLAGS "$<$:${WIN_LINK_FLAGS}>") if(MSVC) set_property(TARGET ${HDF5_F90_LIB_TARGET} PROPERTY LINK_FLAGS "/SUBSYSTEM:CONSOLE ${WIN_LINK_FLAGS}") endif() @@ -358,7 +378,12 @@ if (BUILD_STATIC_LIBS) endif () if (BUILD_SHARED_LIBS) - add_library (${HDF5_F90_LIBSH_TARGET} SHARED ${f90_F_SOURCES_SHARED}) + if(WIN32) + set(DLLDEF ${HDF5_F90_SRC_BINARY_DIR}/hdf5_fortrandll.def) + else() + set(DLLDEF "") + endif() + add_library (${HDF5_F90_LIBSH_TARGET} SHARED ${DLLDEF} ${f90_F_SOURCES_SHARED}) target_include_directories (${HDF5_F90_LIBSH_TARGET} PRIVATE "${HDF5_F90_SRC_SOURCE_DIR};${CMAKE_Fortran_MODULE_DIRECTORY}/shared;${HDF5_F90_BINARY_DIR};$<$:${MPI_Fortran_INCLUDE_DIRS}>" INTERFACE "$/${HDF5_INSTALL_MODULE_DIR}/shared>" @@ -374,12 +399,8 @@ if (BUILD_SHARED_LIBS) PUBLIC ${HDF5_F90_C_LIBSH_TARGET} PRIVATE ${LINK_Fortran_LIBS} "$<$:${MPI_Fortran_LIBRARIES}>" ) -# set_property(TARGET ${HDF5_F90_LIBSH_TARGET} APPEND PROPERTY LINK_FLAGS "$<$:-SUBSYSTEM:CONSOLE>") -# set_property(TARGET ${HDF5_F90_LIBSH_TARGET} APPEND PROPERTY LINK_FLAGS "$<$:${WIN_LINK_FLAGS}>") -# set_property(TARGET ${HDF5_F90_LIBSH_TARGET} APPEND PROPERTY LINK_FLAGS "$<$:-DLL>") -# set_property(TARGET ${HDF5_F90_LIBSH_TARGET} APPEND PROPERTY LINK_FLAGS "$<$:-DEF:${HDF5_F90_SRC_BINARY_DIR}/hdf5_fortrandll.def>") if(MSVC) - set_property(TARGET ${HDF5_F90_LIBSH_TARGET} PROPERTY LINK_FLAGS "/SUBSYSTEM:CONSOLE ${WIN_LINK_FLAGS} /DLL /DEF:${HDF5_F90_SRC_BINARY_DIR}/hdf5_fortrandll.def") + set_property(TARGET ${HDF5_F90_LIBSH_TARGET} PROPERTY LINK_FLAGS "/SUBSYSTEM:CONSOLE ${WIN_LINK_FLAGS}") endif() set_target_properties (${HDF5_F90_LIBSH_TARGET} PROPERTIES FOLDER libraries/fortran diff --git a/fortran/src/H5_ff.F90 b/fortran/src/H5_ff.F90 index 5315673..05a48ac 100644 --- a/fortran/src/H5_ff.F90 +++ b/fortran/src/H5_ff.F90 @@ -996,7 +996,7 @@ CONTAINS h5_type = H5T_NATIVE_REAL_C_LONG_DOUBLE #endif #if H5_PAC_FC_MAX_REAL_PRECISION > 28 -#if H5_HAVE_FLOAT128 == 1 +#ifdef H5_HAVE_FLOAT128 ELSE h5_type = H5T_NATIVE_FLOAT_128 #endif diff --git a/fortran/src/H5config_f.inc.cmake b/fortran/src/H5config_f.inc.cmake index 71bce0e..6652076 100644 --- a/fortran/src/H5config_f.inc.cmake +++ b/fortran/src/H5config_f.inc.cmake @@ -12,33 +12,54 @@ ! fortran/src/H5config_f.inc. Generated from fortran/src/H5config_f.inc.in by configure ! Define if there is parallel support -#cmakedefine01 H5_HAVE_PARALLEL -#if H5_HAVE_PARALLEL == 0 +#cmakedefine01 CMAKE_H5_HAVE_PARALLEL +#if CMAKE_H5_HAVE_PARALLEL == 0 #undef H5_HAVE_PARALLEL +#else +#define H5_HAVE_PARALLEL #endif ! Define if there is subfiling support -#cmakedefine01 H5_HAVE_SUBFILING_VFD -#if H5_HAVE_SUBFILING_VFD == 0 +#cmakedefine01 CMAKE_H5_HAVE_SUBFILING_VFD +#if CMAKE_H5_HAVE_SUBFILING_VFD == 0 #undef H5_HAVE_SUBFILING_VFD +#else +#define H5_HAVE_SUBFILING_VFD #endif ! Define if on APPLE #cmakedefine01 H5_HAVE_DARWIN #if H5_HAVE_DARWIN == 0 #undef H5_HAVE_DARWIN +#else +#define H5_HAVE_DARWIN #endif ! Define if the intrinsic function STORAGE_SIZE exists -#define H5_FORTRAN_HAVE_STORAGE_SIZE @H5_FORTRAN_HAVE_STORAGE_SIZE@ +#cmakedefine01 CMAKE_H5_FORTRAN_HAVE_STORAGE_SIZE +#if CMAKE_H5_FORTRAN_HAVE_STORAGE_SIZE == 0 +#undef H5_FORTRAN_HAVE_STORAGE_SIZE +#else +#define H5_FORTRAN_HAVE_STORAGE_SIZE +#endif ! Define if the intrinsic function SIZEOF exists -#define H5_FORTRAN_HAVE_SIZEOF @H5_FORTRAN_HAVE_SIZEOF@ +#cmakedefine01 CMAKE_H5_FORTRAN_HAVE_SIZEOF +#if CMAKE_H5_FORTRAN_HAVE_SIZEOF == 0 +#undef H5_FORTRAN_HAVE_SIZEOF +#else +#define H5_FORTRAN_HAVE_SIZEOF +#endif ! Define if the intrinsic function C_SIZEOF exists -#define H5_FORTRAN_HAVE_C_SIZEOF @H5_FORTRAN_HAVE_C_SIZEOF@ +#cmakedefine01 CMAKE_H5_FORTRAN_HAVE_C_SIZEOF +#if CMAKE_H5_FORTRAN_HAVE_C_SIZEOF == 0 +#undef H5_FORTRAN_HAVE_C_SIZEOF +#else +#define H5_FORTRAN_HAVE_C_SIZEOF +#endif -! Define if the intrinsic C_LONG_DOUBLE exists +! Define if the intrinsic function C_LONG_DOUBLE exists #define H5_FORTRAN_HAVE_C_LONG_DOUBLE @H5_FORTRAN_HAVE_C_LONG_DOUBLE@ ! Define if Fortran C_LONG_DOUBLE is different from C_DOUBLE @@ -47,17 +68,22 @@ ! Define if the intrinsic module ISO_FORTRAN_ENV exists #define H5_HAVE_ISO_FORTRAN_ENV @H5_HAVE_ISO_FORTRAN_ENV@ -! should this be ${HDF_PREFIX} instead of H5 MSB +! Define the size of C's double #define H5_SIZEOF_DOUBLE @H5_SIZEOF_DOUBLE@ -! should this be ${HDF_PREFIX} instead of H5 MSB +! Define the size of C's long double #define H5_SIZEOF_LONG_DOUBLE @H5_SIZEOF_LONG_DOUBLE@ ! Define the maximum decimal precision for reals #define H5_PAC_FC_MAX_REAL_PRECISION @H5_PAC_FC_MAX_REAL_PRECISION@ ! If C has quad precision -#define H5_HAVE_FLOAT128 @H5_HAVE_FLOAT128@ +#cmakedefine01 CMAKE_H5_HAVE_FLOAT128 +#if CMAKE_H5_HAVE_FLOAT128 == 0 +#undef H5_HAVE_FLOAT128 +#else +#define H5_HAVE_FLOAT128 +#endif ! Define if INTEGER*16 is available #define H5_HAVE_Fortran_INTEGER_SIZEOF_16 @H5_HAVE_Fortran_INTEGER_SIZEOF_16@ @@ -84,7 +110,9 @@ #define H5_Fortran_COMPILER_ID @CMAKE_Fortran_COMPILER_ID@ ! Define if deprecated public API symbols are disabled -#cmakedefine01 H5_NO_DEPRECATED_SYMBOLS -#if H5_NO_DEPRECATED_SYMBOLS == 0 +#cmakedefine01 CMAKE_NO_DEPRECATED_SYMBOLS +#if CMAKE_NO_DEPRECATED_SYMBOLS == 0 #undef H5_NO_DEPRECATED_SYMBOLS +#else +#define H5_NO_DEPRECATED_SYMBOLS #endif diff --git a/fortran/src/H5config_f.inc.in b/fortran/src/H5config_f.inc.in index 991e4b0..3aeded9 100644 --- a/fortran/src/H5config_f.inc.in +++ b/fortran/src/H5config_f.inc.in @@ -41,7 +41,7 @@ ! Define if the intrinsic module ISO_FORTRAN_ENV exists #undef HAVE_ISO_FORTRAN_ENV -! Define the size of C's long double +! Define the size of C's double #undef SIZEOF_DOUBLE ! Define the size of C's long double diff --git a/fortran/src/hdf5_fortrandll.def.in b/fortran/src/hdf5_fortrandll.def.in index 2ded002..8d8b2b0 100644 --- a/fortran/src/hdf5_fortrandll.def.in +++ b/fortran/src/hdf5_fortrandll.def.in @@ -16,7 +16,7 @@ H5A_mp_H5AREAD_CHAR_SCALAR H5A_mp_H5ACREATE_F H5A_mp_H5ACREATE_ASYNC_F H5A_mp_H5AOPEN_NAME_F -@H5_NO_DEPRECATED_SYMBOLS@H5A_mp_H5AOPEN_IDX_F +@DLL_NO_DEPRECATED_SYMBOLS@H5A_mp_H5AOPEN_IDX_F H5A_mp_H5AGET_SPACE_F H5A_mp_H5AGET_TYPE_F H5A_mp_H5AGET_NAME_F @@ -421,10 +421,10 @@ H5P_mp_H5PGET_ACTUAL_SELECTION_IO_MODE_F ; Parallel @H5_NOPAREXP@H5P_mp_H5PSET_FAPL_MPIO_F @H5_NOPAREXP@H5P_mp_H5PGET_FAPL_MPIO_F -@H5_NOPAREXP@H5P_mp_H5PSET_FAPL_SUBFILING_F -@H5_NOPAREXP@H5P_mp_H5PGET_FAPL_SUBFILING_F -@H5_NOPAREXP@H5P_mp_H5PSET_FAPL_IOC_F -@H5_NOPAREXP@H5P_mp_H5PGET_FAPL_IOC_F +@H5_NOPAREXP@@H5_NOSUBFILING@H5P_mp_H5PSET_FAPL_SUBFILING_F +@H5_NOPAREXP@@H5_NOSUBFILING@H5P_mp_H5PGET_FAPL_SUBFILING_F +@H5_NOPAREXP@@H5_NOSUBFILING@H5P_mp_H5PSET_FAPL_IOC_F +@H5_NOPAREXP@@H5_NOSUBFILING@H5P_mp_H5PGET_FAPL_IOC_F @H5_NOPAREXP@H5P_mp_H5PSET_MPI_PARAMS_F @H5_NOPAREXP@H5P_mp_H5PGET_MPI_PARAMS_F @H5_NOPAREXP@H5P_mp_H5PSET_DXPL_MPIO_F diff --git a/fortran/test/tH5T_F03.F90 b/fortran/test/tH5T_F03.F90 index 3984597..08dfa22 100644 --- a/fortran/test/tH5T_F03.F90 +++ b/fortran/test/tH5T_F03.F90 @@ -984,7 +984,7 @@ END SUBROUTINE test_array_compound_atomic INTEGER, PARAMETER :: real_kind_15 = C_DOUBLE !should map to REAL*8 on most modern processors ! Check if C has quad precision extension -#if H5_HAVE_FLOAT128!=0 +#ifdef H5_HAVE_FLOAT128 ! Check if Fortran supports quad precision # if H5_PAC_FC_MAX_REAL_PRECISION > 26 INTEGER, PARAMETER :: real_kind_31 = SELECTED_REAL_KIND(31) @@ -3400,7 +3400,7 @@ SUBROUTINE multiple_dset_rw(total_error) !------------------------------------------------------------------------- ! Subroutine: multiple_dset_rw ! -! Purpose: Tests the reading and writing of multiple datasets +! Purpose: Tests the reading and writing of multiple datasets ! using H5Dread_multi and H5Dwrite_multi ! ! Return: Success: 0 @@ -3408,10 +3408,10 @@ SUBROUTINE multiple_dset_rw(total_error) !------------------------------------------------------------------------- ! IMPLICIT NONE - + INTEGER, INTENT(INOUT) :: total_error ! number of errors INTEGER :: error ! HDF hdferror flag - + INTEGER(SIZE_T), PARAMETER :: ndset = 5 ! Number of data sets INTEGER(HID_T), DIMENSION(:), ALLOCATABLE :: dset_id INTEGER(HID_T), DIMENSION(:), ALLOCATABLE :: mem_type_id @@ -3424,9 +3424,9 @@ SUBROUTINE multiple_dset_rw(total_error) INTEGER, PARAMETER :: sdim=2 ! length of character string INTEGER, PARAMETER :: ddim=2 ! size of derived type array INTEGER :: i,j,k - + TYPE(C_PTR), ALLOCATABLE, DIMENSION(:) :: buf_md ! array to hold the multi-datasets - + INTEGER, DIMENSION(1:idim), TARGET :: wbuf_int ! integer write buffer INTEGER, DIMENSION(1:idim,idim2,idim3), TARGET :: wbuf_intmd REAL, DIMENSION(1:rdim), TARGET :: wbuf_real ! real write buffer @@ -3535,7 +3535,7 @@ SUBROUTINE multiple_dset_rw(total_error) CALL check("h5tinsert_f", error, total_error) CALL h5tcopy_f(H5T_NATIVE_CHARACTER, strtype, error) CALL check("h5tcopy_f", error, total_error) - CALL h5tset_size_f(strtype, INT(sdim,size_t), error) + CALL h5tset_size_f(strtype, INT(sdim,size_t), error) CALL check("h5tset_size_f", error, total_error) CALL h5tinsert_f(mem_type_id(4), "chr", & H5OFFSETOF(C_LOC(wbuf_derived(1)),C_LOC(wbuf_derived(1)%c(1:1))), strtype, error) diff --git a/hl/fortran/src/CMakeLists.txt b/hl/fortran/src/CMakeLists.txt index ed469e5..f225eb8 100644 --- a/hl/fortran/src/CMakeLists.txt +++ b/hl/fortran/src/CMakeLists.txt @@ -22,9 +22,6 @@ if (WIN32 AND MSVC) set_target_properties (H5HL_buildiface PROPERTIES COMPILE_FLAGS "/MT") endif () endif () -#set_property(TARGET H5HL_buildiface APPEND PROPERTY -# LINK_FLAGS "$<$:-SUBSYSTEM:CONSOLE>" -#) if(MSVC) set_property(TARGET H5HL_buildiface PROPERTY LINK_FLAGS "/SUBSYSTEM:CONSOLE") endif() @@ -182,8 +179,6 @@ if (BUILD_STATIC_LIBS) PRIVATE "$<$:${WIN_COMPILE_FLAGS}>" ) target_link_libraries (${HDF5_HL_F90_LIB_TARGET} PUBLIC ${HDF5_HL_F90_C_LIB_TARGET} ${HDF5_F90_LIB_TARGET}) -# set_property(TARGET ${HDF5_HL_F90_LIB_TARGET} APPEND PROPERTY LINK_FLAGS "$<$:-SUBSYSTEM:CONSOLE>") -# set_property(TARGET ${HDF5_HL_F90_LIB_TARGET} APPEND PROPERTY LINK_FLAGS "$<$:${WIN_LINK_FLAGS}>") if(MSVC) set_property(TARGET ${HDF5_HL_F90_LIB_TARGET} PROPERTY LINK_FLAGS "/SUBSYSTEM:CONSOLE ${WIN_LINK_FLAGS}") endif() @@ -198,7 +193,12 @@ if (BUILD_STATIC_LIBS) add_dependencies(${HDF5_HL_F90_LIB_TARGET} H5HLgen) endif () if (BUILD_SHARED_LIBS) - add_library (${HDF5_HL_F90_LIBSH_TARGET} SHARED ${HDF5_HL_F90_F_SOURCES_SHARED}) + if(WIN32) + set(DLLDEF ${HDF5_HL_F90_SRC_BINARY_DIR}/hdf5_hl_fortrandll.def) + else() + set(DLLDEF "") + endif() + add_library (${HDF5_HL_F90_LIBSH_TARGET} SHARED ${DLLDEF} ${HDF5_HL_F90_F_SOURCES_SHARED}) target_include_directories (${HDF5_HL_F90_LIBSH_TARGET} PRIVATE "${HDF5_F90_BINARY_DIR};${CMAKE_Fortran_MODULE_DIRECTORY}/shared;$<$:${MPI_Fortran_INCLUDE_DIRS}>" INTERFACE "$/${HDF5_INSTALL_MODULE_DIR}/shared>" @@ -214,12 +214,8 @@ if (BUILD_SHARED_LIBS) PUBLIC ${HDF5_HL_F90_C_LIBSH_TARGET} ${HDF5_F90_LIBSH_TARGET} PRIVATE ${LINK_Fortran_LIBS} ) -# set_property(TARGET ${HDF5_HL_F90_LIBSH_TARGET} APPEND PROPERTY LINK_FLAGS "$<$:-SUBSYSTEM:CONSOLE>") -# set_property(TARGET ${HDF5_HL_F90_LIBSH_TARGET} APPEND PROPERTY LINK_FLAGS "$<$:${WIN_LINK_FLAGS}>") -# set_property(TARGET ${HDF5_HL_F90_LIBSH_TARGET} APPEND PROPERTY LINK_FLAGS "$<$:-DLL>") -# set_property(TARGET ${HDF5_HL_F90_LIBSH_TARGET} APPEND PROPERTY LINK_FLAGS "$<$:-DEF:${HDF5_HL_F90_SRC_BINARY_DIR}/hdf5_hl_fortrandll.def>") if(MSVC) - set_property(TARGET ${HDF5_HL_F90_LIBSH_TARGET} PROPERTY LINK_FLAGS "/SUBSYSTEM:CONSOLE ${WIN_LINK_FLAGS} -DLL -DEF:${HDF5_HL_F90_SRC_BINARY_DIR}/hdf5_hl_fortrandll.def") + set_property(TARGET ${HDF5_HL_F90_LIBSH_TARGET} PROPERTY LINK_FLAGS "/SUBSYSTEM:CONSOLE ${WIN_LINK_FLAGS}") endif() set_target_properties (${HDF5_HL_F90_LIBSH_TARGET} PROPERTIES FOLDER libraries/hl/fortran diff --git a/hl/fortran/src/H5LTff.F90 b/hl/fortran/src/H5LTff.F90 index 8b4e6d3..80e9fe7 100644 --- a/hl/fortran/src/H5LTff.F90 +++ b/hl/fortran/src/H5LTff.F90 @@ -1115,7 +1115,7 @@ CONTAINS f_ptr = C_LOC(buf(1:1)) -#if H5_FORTRAN_HAVE_STORAGE_SIZE!=0 +#ifdef H5_FORTRAN_HAVE_STORAGE_SIZE SizeOf_buf_type = STORAGE_SIZE(buf(1), c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t) #else SizeOf_buf_type = SIZEOF(buf(1)) @@ -1165,7 +1165,7 @@ CONTAINS INTEGER(size_t) :: SizeOf_buf_type f_ptr = C_LOC(buf(1)) -#if H5_FORTRAN_HAVE_STORAGE_SIZE!=0 +#ifdef H5_FORTRAN_HAVE_STORAGE_SIZE SizeOf_buf_type = STORAGE_SIZE(buf(1), c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t) #else SizeOf_buf_type = SIZEOF(buf(1)) @@ -1216,7 +1216,7 @@ CONTAINS f_ptr = C_LOC(buf(1)) -#if H5_FORTRAN_HAVE_STORAGE_SIZE!=0 +#ifdef H5_FORTRAN_HAVE_STORAGE_SIZE SizeOf_buf_type = STORAGE_SIZE(buf(1), c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t) #else SizeOf_buf_type = SIZEOF(buf(1)) @@ -1264,7 +1264,7 @@ CONTAINS f_ptr = C_LOC(buf(1)(1:1)) -#if H5_FORTRAN_HAVE_STORAGE_SIZE!=0 +#ifdef H5_FORTRAN_HAVE_STORAGE_SIZE SizeOf_buf_type = STORAGE_SIZE(buf(1)(1:1), c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t) #else SizeOf_buf_type = SIZEOF(buf(1:1)(1:1)) @@ -1363,7 +1363,7 @@ CONTAINS f_ptr = C_LOC(buf(1)) -#if H5_FORTRAN_HAVE_STORAGE_SIZE!=0 +#ifdef H5_FORTRAN_HAVE_STORAGE_SIZE SizeOf_buf = STORAGE_SIZE(buf(1), c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t) #else SizeOf_buf = SIZEOF(buf(1)) @@ -1407,7 +1407,7 @@ CONTAINS INTEGER(size_t) :: SizeOf_buf f_ptr = C_LOC(buf(1)) -#if H5_FORTRAN_HAVE_STORAGE_SIZE!=0 +#ifdef H5_FORTRAN_HAVE_STORAGE_SIZE SizeOf_buf = STORAGE_SIZE(buf(1), c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t) #else SizeOf_buf = SIZEOF(buf(1)) @@ -1451,7 +1451,7 @@ CONTAINS INTEGER(size_t) :: SizeOf_buf f_ptr = C_LOC(buf(1)) -#if H5_FORTRAN_HAVE_STORAGE_SIZE!=0 +#ifdef H5_FORTRAN_HAVE_STORAGE_SIZE SizeOf_buf = STORAGE_SIZE(buf(1), c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t) #else SizeOf_buf = SIZEOF(buf(1)) diff --git a/src/H5Fmodule.h b/src/H5Fmodule.h index 40ff6b4..706dedc 100644 --- a/src/H5Fmodule.h +++ b/src/H5Fmodule.h @@ -705,7 +705,7 @@ * If the application opens an HDF5 file without both determining the driver used to create the file * and setting up the use of that driver, the HDF5 Library will examine the superblock and the * driver definition block to identify the driver. - * See the HDF5 File Format Specification + * See the HDF5 File Format Specification * for detailed descriptions of the superblock and the driver definition block. * * \subsubsection subsubsec_file_alternate_drivers_sec2 The POSIX (aka SEC2) Driver diff --git a/src/H5module.h b/src/H5module.h index 0d2a0ba..296194f 100644 --- a/src/H5module.h +++ b/src/H5module.h @@ -49,7 +49,7 @@ * The Abstract Data Model is a conceptual model of data, data types, and data organization. The * abstract data model is independent of storage medium or programming environment. The * Storage Model is a standard representation for the objects of the abstract data model. The - * HDF5 File Format Specification + * HDF5 File Format Specification * defines the storage model. * * The Programming Model is a model of the computing environment and includes platforms from @@ -100,7 +100,7 @@ * model, and stored in a storage medium. The stored objects include header blocks, free lists, data * blocks, B-trees, and other objects. Each group or dataset is stored as one or more header and data * blocks. - * @see HDF5 File Format Specification + * @see HDF5 File Format Specification * for more information on how these objects are organized. The HDF5 library can also use other * libraries and modules such as compression. * @@ -125,7 +125,7 @@ * HDF5 abstract data model is up to the application developer. The application program only * needs to deal with the library and the abstract data model. Most applications need not consider * any details of the - * HDF5 File Format Specification + * HDF5 File Format Specification * or the details of how objects of abstract data model are translated to and from storage. * * \subsection subsec_data_model_abstract The Abstract Data Model @@ -408,7 +408,7 @@ * * \subsection subsec_data_model_storage The HDF5 Storage Model * \subsubsection subsubsec_data_model_storage_spec The Abstract Storage Model: the HDF5 Format Specification - * The HDF5 File Format Specification + * The HDF5 File Format Specification * defines how HDF5 objects and data are mapped to a linear * address space. The address space is assumed to be a contiguous array of bytes stored on some * random access medium. The format defines the standard for how the objects of the abstract data -- cgit v0.12