Skip to content

Commit fb35cde

Browse files
authored
Rework Fortran configure to allow cross compile overrides (#5720)
Behavior: Modify HDF5UseFortran.cmake to handle cross-compilation by providing default KINDs and sizes when CMAKE_CROSSCOMPILING is true. Default values for INTEGER and REAL KINDs and their sizes are set when cross-compiling. Error messages are adjusted to reflect cross-compilation scenarios. Logic: Conditional checks added for CMAKE_CROSSCOMPILING to determine if default values should be used. Default values include INTEGER KINDs {1,2,4,8,16} and REAL KINDs {4,8,10,16}. Default sizes for native kinds are set to 4 for INTEGER and REAL, and 8 for DOUBLE PRECISION when cross-compiling. Misc: Adjustments to verbose messages to indicate when defaults are used during cross-compilation.
1 parent 61cfe6c commit fb35cde

File tree

83 files changed

+17607
-1836
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+17607
-1836
lines changed

.github/workflows/call-workflows.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,12 @@ jobs:
8484
thread_safety: ""
8585
build_mode: "Debug"
8686

87+
call-release-cross:
88+
name: "Release Cross Compile Workflows"
89+
uses: ./.github/workflows/cross-compile.yml
90+
with:
91+
build_mode: "Release"
92+
8793
call-release-cmake:
8894
name: "Release Workflows"
8995
uses: ./.github/workflows/main.yml
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
name: hdf5 dev CMake CI
2+
3+
# Triggers the workflow on a call from another workflow
4+
on:
5+
workflow_call:
6+
inputs:
7+
build_mode:
8+
description: "release vs. debug build"
9+
required: true
10+
type: string
11+
12+
permissions:
13+
contents: read
14+
15+
jobs:
16+
build_and_test_linux:
17+
name: "Ubuntu mingw64-${{ inputs.build_mode }}"
18+
runs-on: ubuntu-24.04
19+
steps:
20+
- name: Install CMake Dependencies (Linux)
21+
run: |
22+
sudo apt-get update
23+
sudo apt-get install ninja-build graphviz
24+
sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev
25+
26+
- name: Install Wine64 and dependencies
27+
run: |
28+
sudo apt update
29+
sudo apt install -y wine64 winbind
30+
31+
# - name: Verify Wine64 installation
32+
# run: wine64 --version
33+
34+
- name: Install MinGW64 Cross-Compiler
35+
run: |
36+
sudo apt update
37+
sudo apt-get install -y mingw-w64
38+
sudo apt-get install gfortran-mingw-w64-x86-64-win32
39+
40+
- name: Install Dependencies
41+
uses: ssciwr/doxygen-install@v1
42+
with:
43+
version: "1.13.2"
44+
45+
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
46+
- name: Get Sources
47+
uses: actions/[email protected]
48+
49+
# CMAKE CONFIGURE
50+
- name: CMake Configure
51+
run: |
52+
mkdir "${{ runner.workspace }}/build"
53+
cd "${{ runner.workspace }}/build"
54+
cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \
55+
-G Ninja \
56+
--log-level=VERBOSE \
57+
-DCMAKE_TOOLCHAIN_FILE:STRING=config/toolchain/mingw64.cmake \
58+
-DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \
59+
-DHDF5_ENABLE_DOXY_WARNINGS:BOOL=ON \
60+
-DHDF5_BUILD_DOC:BOOL=ON \
61+
-DHDF5_BUILD_JAVA:BOOL=OFF \
62+
-DHDF5_ENABLE_PLUGIN_SUPPORT:BOOL=OFF \
63+
-DHDF5_ENABLE_ZLIB_SUPPORT:BOOL=ON \
64+
-DHDF5_ENABLE_SZIP_SUPPORT:BOOL=ON \
65+
-DLIBAEC_USE_LOCALCONTENT:BOOL=OFF \
66+
-DZLIB_USE_LOCALCONTENT:BOOL=OFF \
67+
-DHDF5_PACK_EXAMPLES:BOOL=ON \
68+
-DHDF5_PACKAGE_EXTLIBS:BOOL=ON \
69+
-DHDF5_TEST_API:BOOL=OFF \
70+
-DHDF5_USE_PREGEN:BOOL=ON \
71+
$GITHUB_WORKSPACE
72+
shell: bash
73+
74+
# BUILD
75+
- name: CMake Build
76+
run: cmake --build . --parallel 3 --config ${{ inputs.build_mode }}
77+
working-directory: ${{ runner.workspace }}/build
78+
79+
# RUN TESTS
80+
# - name: CMake Run Tests
81+
# run: ctest . --parallel 2 -C ${{ inputs.build_mode }} -V -E "err_compat|filenotclosed|swmr|cache_api"
82+
# working-directory: ${{ runner.workspace }}/build
83+
84+
# RUN Failing TESTS
85+
# - name: CMake Run Tests
86+
# run: ctest . --parallel 2 -C ${{ inputs.build_mode }} -V -R "err_compat|filenotclosed|swmr|cache_api"
87+
# working-directory: ${{ runner.workspace }}/build
88+
# continue-on-error: true
89+
90+
- name: CMake Run Package
91+
run: cpack -C ${{ inputs.build_mode }} -V
92+
working-directory: ${{ runner.workspace }}/build
93+
94+
- name: List files in the space
95+
run: |
96+
ls -l ${{ runner.workspace }}/build
97+
98+
- name: Save published binary (linux)
99+
uses: actions/upload-artifact@v4
100+
with:
101+
name: tgz-ubuntu-2404_mingw64-${{ inputs.build_mode }}-binary
102+
path: ${{ runner.workspace }}/build/HDF5-*-win64.zip
103+
if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn`
104+
if: ${{ inputs.build_mode != 'Debug' }}

CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,12 @@ set (HDF5_DOXYGEN_DIR ${HDF5_SOURCE_DIR}/doxygen)
325325

326326
set (HDF5_SRC_INCLUDE_DIRS ${HDF5_SRC_DIR})
327327

328+
if (HDF5_USE_PREGEN)
329+
set (HDF5_GENERATED_SOURCE_DIR ${HDF5_USE_PREGEN_DIR})
330+
else ()
331+
set (HDF5_GENERATED_SOURCE_DIR ${HDF5_F90_SRC_BINARY_DIR})
332+
endif ()
333+
328334
#-----------------------------------------------------------------------------
329335
# parse the full version number from H5public.h and include in H5_VERS_INFO
330336
#-----------------------------------------------------------------------------

HDF5Examples/C/H5D/CMakeLists.txt

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ foreach (example_name ${common_examples})
1212
else ()
1313
add_executable (${EXAMPLE_VARNAME}_${example_name} ${PROJECT_SOURCE_DIR}/${example_name}.c)
1414
endif ()
15-
target_compile_options(${EXAMPLE_VARNAME}_${example_name}
15+
target_compile_options (${EXAMPLE_VARNAME}_${example_name}
1616
PRIVATE
1717
"$<$<BOOL:${${EXAMPLE_VARNAME}_USE_16_API}>:-DH5_USE_16_API>"
1818
"$<$<BOOL:${${EXAMPLE_VARNAME}_USE_18_API}>:-DH5_USE_18_API>"
@@ -38,7 +38,7 @@ endforeach ()
3838
if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.8")
3939
foreach (example_name ${1_8_examples})
4040
add_executable (${EXAMPLE_VARNAME}_${example_name} ${PROJECT_SOURCE_DIR}/${example_name}.c)
41-
target_compile_options(${EXAMPLE_VARNAME}_${example_name}
41+
target_compile_options (${EXAMPLE_VARNAME}_${example_name}
4242
PRIVATE
4343
"$<$<BOOL:${${EXAMPLE_VARNAME}_USE_16_API}>:-DH5_USE_16_API>"
4444
"$<$<BOOL:${${EXAMPLE_VARNAME}_USE_18_API}>:-DH5_USE_18_API>"
@@ -217,18 +217,18 @@ if (H5EXAMPLE_BUILD_TESTING)
217217
macro (ADD_H5_TEST testname)
218218
add_test (
219219
NAME ${EXAMPLE_VARNAME}_${testname}-clearall
220-
COMMAND ${CMAKE_COMMAND}
221-
-E remove
222-
${testname}.h5
220+
COMMAND ${CMAKE_COMMAND} -E remove ${testname}.h5
223221
)
224222
if (HDF5_ENABLE_USING_MEMCHECKER)
225-
add_test (NAME ${EXAMPLE_VARNAME}_${testname} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:${EXAMPLE_VARNAME}_${testname}>)
226-
set_tests_properties (${EXAMPLE_VARNAME}_${testname} PROPERTIES DEPENDS ${EXAMPLE_VARNAME}_${testname}-clearall)
223+
add_test (NAME ${EXAMPLE_VARNAME}_${testname} COMMAND $<TARGET_FILE:${EXAMPLE_VARNAME}_${testname}>)
224+
set_tests_properties (${EXAMPLE_VARNAME}_${testname} PROPERTIES
225+
DEPENDS ${EXAMPLE_VARNAME}_${testname}-clearall
226+
ENVIRONMENT "${CROSSCOMPILING_PATH}"
227+
)
227228
else ()
228229
add_test (
229230
NAME ${EXAMPLE_VARNAME}_${testname}
230231
COMMAND "${CMAKE_COMMAND}"
231-
-D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
232232
-D "TEST_PROGRAM=$<TARGET_FILE:${EXAMPLE_VARNAME}_${testname}>"
233233
-D "TEST_ARGS:STRING="
234234
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
@@ -238,12 +238,14 @@ if (H5EXAMPLE_BUILD_TESTING)
238238
-D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}"
239239
-P "${H5EXAMPLE_RESOURCES_DIR}/runTest.cmake"
240240
)
241-
set_tests_properties (${EXAMPLE_VARNAME}_${testname} PROPERTIES DEPENDS ${EXAMPLE_VARNAME}_${testname}-clearall)
241+
set_tests_properties (${EXAMPLE_VARNAME}_${testname} PROPERTIES
242+
DEPENDS ${EXAMPLE_VARNAME}_${testname}-clearall
243+
ENVIRONMENT "${CROSSCOMPILING_PATH}"
244+
)
242245
if (HDF5_PROVIDES_TOOLS)
243246
add_test (
244247
NAME ${EXAMPLE_VARNAME}_H5DUMP-${testname}
245248
COMMAND "${CMAKE_COMMAND}"
246-
-D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
247249
-D "TEST_PROGRAM=${H5EXAMPLE_HDF5_DUMP_EXECUTABLE}"
248250
-D "TEST_ARGS:STRING=${ARGN};${testname}.h5"
249251
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
@@ -253,7 +255,10 @@ if (H5EXAMPLE_BUILD_TESTING)
253255
-D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}"
254256
-P "${H5EXAMPLE_RESOURCES_DIR}/runTest.cmake"
255257
)
256-
set_tests_properties (${EXAMPLE_VARNAME}_H5DUMP-${testname} PROPERTIES DEPENDS ${EXAMPLE_VARNAME}_${testname})
258+
set_tests_properties (${EXAMPLE_VARNAME}_H5DUMP-${testname} PROPERTIES
259+
DEPENDS ${EXAMPLE_VARNAME}_${testname}
260+
ENVIRONMENT "${CROSSCOMPILING_PATH}"
261+
)
257262
endif ()
258263
endif ()
259264
endmacro ()

HDF5Examples/C/H5FLT/CMakeLists.txt

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ endif ()
174174
foreach (example ${dyn_examples})
175175
add_executable (${EXAMPLE_VARNAME}_${example} ${PROJECT_SOURCE_DIR}/${example}.c)
176176
TARGET_C_PROPERTIES (${EXAMPLE_VARNAME}_${example} ${LIB_TYPE})
177-
target_compile_options(${EXAMPLE_VARNAME}_${example}
177+
target_compile_options (${EXAMPLE_VARNAME}_${example}
178178
PRIVATE
179179
"$<$<BOOL:${${EXAMPLE_VARNAME}_USE_16_API}>:-DH5_USE_16_API>"
180180
"$<$<BOOL:${${EXAMPLE_VARNAME}_USE_18_API}>:-DH5_USE_18_API>"
@@ -196,8 +196,7 @@ if (H5EXAMPLE_BUILD_TESTING)
196196
macro (ADD_H5_TEST testname)
197197
add_test (
198198
NAME ${EXAMPLE_VARNAME}_${testname}-clearall
199-
COMMAND ${CMAKE_COMMAND}
200-
-E remove
199+
COMMAND ${CMAKE_COMMAND} -E remove
201200
${testname}.out
202201
${testname}.out.err
203202
${testname}.ddl.out
@@ -212,7 +211,6 @@ if (H5EXAMPLE_BUILD_TESTING)
212211
add_test (
213212
NAME ${EXAMPLE_VARNAME}_${testname}-ERR
214213
COMMAND "${CMAKE_COMMAND}"
215-
-D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
216214
-D "TEST_PROGRAM=$<TARGET_FILE:${EXAMPLE_VARNAME}_${testname}>"
217215
-D "TEST_ARGS:STRING=${ARGN}"
218216
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
@@ -228,7 +226,10 @@ if (H5EXAMPLE_BUILD_TESTING)
228226
-D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}"
229227
-P "${H5EXAMPLE_RESOURCES_DIR}/runTest.cmake"
230228
)
231-
set_tests_properties (${EXAMPLE_VARNAME}_${testname}-ERR PROPERTIES DEPENDS ${EXAMPLE_VARNAME}_${testname}-clearall)
229+
set_tests_properties (${EXAMPLE_VARNAME}_${testname}-ERR PROPERTIES
230+
DEPENDS ${EXAMPLE_VARNAME}_${testname}-clearall
231+
ENVIRONMENT "${CROSSCOMPILING_PATH}"
232+
)
232233
add_test (
233234
NAME ${EXAMPLE_VARNAME}_${testname}
234235
COMMAND "${CMAKE_COMMAND}"
@@ -240,7 +241,6 @@ if (H5EXAMPLE_BUILD_TESTING)
240241
add_test (
241242
NAME ${EXAMPLE_VARNAME}_${testname}
242243
COMMAND "${CMAKE_COMMAND}"
243-
-D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
244244
-D "TEST_PROGRAM=$<TARGET_FILE:${EXAMPLE_VARNAME}_${testname}>"
245245
-D "TEST_ARGS:STRING=${ARGN}"
246246
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
@@ -252,15 +252,17 @@ if (H5EXAMPLE_BUILD_TESTING)
252252
-D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}"
253253
-P "${H5EXAMPLE_RESOURCES_DIR}/runTest.cmake"
254254
)
255-
set_tests_properties (${EXAMPLE_VARNAME}_${testname} PROPERTIES DEPENDS ${EXAMPLE_VARNAME}_${testname}-clearall)
255+
set_tests_properties (${EXAMPLE_VARNAME}_${testname} PROPERTIES
256+
DEPENDS ${EXAMPLE_VARNAME}_${testname}-clearall
257+
ENVIRONMENT "${CROSSCOMPILING_PATH}"
258+
)
256259
endif ()
257260
set (last_test "${EXAMPLE_VARNAME}_${testname}")
258261
if (HDF5_PROVIDES_TOOLS)
259262
if ("${ARGN}" STREQUAL "FILTERALL")
260263
add_test (
261264
NAME ${EXAMPLE_VARNAME}_H5DUMP-${testname}
262265
COMMAND "${CMAKE_COMMAND}"
263-
-D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
264266
-D "TEST_PROGRAM=${H5EXAMPLE_HDF5_DUMP_EXECUTABLE}"
265267
-D "TEST_ARGS:STRING=--enable-error-stack;-p;${testname}.h5"
266268
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
@@ -278,7 +280,6 @@ if (H5EXAMPLE_BUILD_TESTING)
278280
add_test (
279281
NAME ${EXAMPLE_VARNAME}_H5DUMP-${testname}
280282
COMMAND "${CMAKE_COMMAND}"
281-
-D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
282283
-D "TEST_PROGRAM=${H5EXAMPLE_HDF5_DUMP_EXECUTABLE}"
283284
-D "TEST_ARGS:STRING=--enable-error-stack;-pH;${testname}.h5"
284285
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
@@ -296,7 +297,6 @@ if (H5EXAMPLE_BUILD_TESTING)
296297
add_test (
297298
NAME ${EXAMPLE_VARNAME}_H5DUMP-${testname}
298299
COMMAND "${CMAKE_COMMAND}"
299-
-D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
300300
-D "TEST_PROGRAM=${H5EXAMPLE_HDF5_DUMP_EXECUTABLE}"
301301
-D "TEST_ARGS:STRING=--enable-error-stack;-p;${testname}.h5"
302302
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
@@ -311,7 +311,10 @@ if (H5EXAMPLE_BUILD_TESTING)
311311
-P "${H5EXAMPLE_RESOURCES_DIR}/runTest.cmake"
312312
)
313313
endif ()
314-
set_tests_properties (${EXAMPLE_VARNAME}_H5DUMP-${testname} PROPERTIES DEPENDS ${EXAMPLE_VARNAME}_${testname})
314+
set_tests_properties (${EXAMPLE_VARNAME}_H5DUMP-${testname} PROPERTIES
315+
DEPENDS ${EXAMPLE_VARNAME}_${testname}
316+
ENVIRONMENT "${CROSSCOMPILING_PATH}"
317+
)
315318
set (last_test "${EXAMPLE_VARNAME}_H5DUMP-${testname}")
316319
endif ()
317320
endmacro ()
@@ -320,17 +323,17 @@ if (H5EXAMPLE_BUILD_TESTING)
320323
# Copy all the HDF5 files from the source directory into the test directory
321324
# --------------------------------------------------------------------
322325
foreach (h5_file ${dyn_examples})
323-
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/tfiles/${h5_file}.tst" "${PROJECT_BINARY_DIR}/${h5_file}.tst" "example_files")
326+
HDFTEST_COPY_FILE ("${PROJECT_SOURCE_DIR}/tfiles/${h5_file}.tst" "${PROJECT_BINARY_DIR}/${h5_file}.tst" "example_files")
324327
if (WIN32 AND MSVC_VERSION LESS 1900 AND ${h5_file} MATCHES "h5ex_d_zfp")
325-
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/tfiles/h5ex_d_zfp.wddl" "${PROJECT_BINARY_DIR}/h5ex_d_zfp.ddl" "example_files")
328+
HDFTEST_COPY_FILE ("${PROJECT_SOURCE_DIR}/tfiles/h5ex_d_zfp.wddl" "${PROJECT_BINARY_DIR}/h5ex_d_zfp.ddl" "example_files")
326329
else ()
327-
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/tfiles/${h5_file}.ddl" "${PROJECT_BINARY_DIR}/${h5_file}.ddl" "example_files")
330+
HDFTEST_COPY_FILE ("${PROJECT_SOURCE_DIR}/tfiles/${h5_file}.ddl" "${PROJECT_BINARY_DIR}/${h5_file}.ddl" "example_files")
328331
endif()
329332
endforeach ()
330333
foreach (h5_file ${LIST_HDF5_TEST_FILES} ${LIST_OTHER_TEST_FILES})
331-
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/tfiles/${h5_file}" "${PROJECT_BINARY_DIR}/${h5_file}" "example_files")
334+
HDFTEST_COPY_FILE ("${PROJECT_SOURCE_DIR}/tfiles/${h5_file}" "${PROJECT_BINARY_DIR}/${h5_file}" "example_files")
332335
endforeach ()
333-
add_custom_target(${EXAMPLE_VARNAME}_example_files ALL COMMENT "Copying files needed by example tests" DEPENDS ${example_files_list})
336+
add_custom_target (${EXAMPLE_VARNAME}_example_files ALL COMMENT "Copying files needed by example tests" DEPENDS ${example_files_list})
334337

335338
foreach (h5_file ${dyn_examples})
336339
if (NOT HDF5_ENABLE_USING_MEMCHECKER)

0 commit comments

Comments
 (0)