mirror of
https://github.com/HDFGroup/hdf5.git
synced 2026-09-27 04:09:40 +03:00
454 lines
23 KiB
HTML
454 lines
23 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
|
<meta name="generator" content="Doxygen 1.13.2"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>HDF5: HDF5 Build System Summary</title>
|
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="jquery.js"></script>
|
|
<script type="text/javascript" src="dynsections.js"></script>
|
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="navtreedata.js"></script>
|
|
<script type="text/javascript" src="navtree.js"></script>
|
|
<script type="text/javascript" src="resize.js"></script>
|
|
<script type="text/javascript" src="cookie.js"></script>
|
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
<script type="text/javascript" src="search/search.js"></script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(function() { init_search(); });
|
|
/* @license-end */
|
|
</script>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
<link href="hdf5doxy.css" rel="stylesheet" type="text/css"/>
|
|
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
|
|
<link href="hdf5doxy.css" rel="stylesheet" type="text/css">
|
|
<script type="text/javascript" src="hdf5_navtree_hacks.js"></script>
|
|
<div style="background:#FFDDDD;font-size:120%;text-align:center;margin:0;padding:5px">Help us improve by taking our short survey: <a href="https://www.hdfgroup.org/website-survey/">https://www.hdfgroup.org/website-survey/</a></div>
|
|
<!-- ... other metadata & script includes ... -->
|
|
<script type="text/javascript" src="doxygen-awesome-tabs.js"></script>
|
|
<script type="text/javascript">
|
|
DoxygenAwesomeTabs.init()
|
|
</script>
|
|
<!-- Google tag (gtag.js) -->
|
|
<script async src="https://www.googletagmanager.com/gtag/js?id=G-57FMZK4S7X"></script>
|
|
<script>
|
|
window.dataLayer = window.dataLayer || [];
|
|
function gtag(){dataLayer.push(arguments);}
|
|
gtag('js', new Date());
|
|
gtag('config', 'G-57FMZK4S7X');
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
<div id="titlearea">
|
|
<table cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr id="projectrow">
|
|
<td id="projectlogo"><img alt="Logo" src="HDFG-logo.png"/></td>
|
|
<td id="projectalign">
|
|
<div id="projectname">HDF5<span id="projectnumber"> Last Updated on 2025-12-07</span>
|
|
</div>
|
|
<div id="projectbrief">The HDF5 Field Guide</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.13.2 -->
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
|
/* @license-end */
|
|
</script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(function() { codefold.init(0); });
|
|
/* @license-end */
|
|
</script>
|
|
<div id="navrow1" class="tabs">
|
|
<ul class="tablist">
|
|
<li><a href="index.html"><span>Main Page</span></a></li>
|
|
<li><a href="_getting_started.html"><span>Getting started</span></a></li>
|
|
<li><a href="_u_g.html"><span>User Guide</span></a></li>
|
|
<li><a href="_r_m.html"><span>Reference Manual</span></a></li>
|
|
<li><a href="_cookbook.html"><span>Cookbook</span></a></li>
|
|
<li><a href="_t_n.html"><span>Technical Notes</span></a></li>
|
|
<li><a href="_r_f_c.html"><span>RFCs</span></a></li>
|
|
<li><a href="_s_p_e_c.html"><span>Specifications</span></a></li>
|
|
<li><a href="_g_l_s.html"><span>Glossary</span></a></li>
|
|
<li><a href="_f_t_s.html"><span>Full-Text Search</span></a></li>
|
|
<li><a href="_about.html"><span>About</span></a></li>
|
|
<li>
|
|
<div id="MSearchBox" class="MSearchBoxInactive">
|
|
<span class="left">
|
|
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()"> </span>
|
|
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
|
|
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
</span><span class="right">
|
|
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
|
|
</span>
|
|
</div>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div><!-- top -->
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
<div id="nav-sync" class="sync"></div>
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(function(){initNavTree('md_release__docs_2_build_system_notes.html',''); initResizable(true); });
|
|
/* @license-end */
|
|
</script>
|
|
<div id="doc-content">
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
</div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<div id="MSearchResults">
|
|
<div class="SRPage">
|
|
<div id="SRIndex">
|
|
<div id="SRResults"></div>
|
|
<div class="SRStatus" id="Loading">Loading...</div>
|
|
<div class="SRStatus" id="Searching">Searching...</div>
|
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div><div class="header">
|
|
<div class="headertitle"><div class="title">HDF5 Build System Summary</div></div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<div class="textblock"><p><a class="anchor" id="autotoc_md212"></a></p>
|
|
<p>A comprehensive analysis of the HDF5 CMake-only build system and CI/CD infrastructure for development planning.</p>
|
|
<h1><a class="anchor" id="autotoc_md213"></a>
|
|
Build System Architecture</h1>
|
|
<h2><a class="anchor" id="autotoc_md214"></a>
|
|
CMake-Only Migration (March 2025)</h2>
|
|
<ul>
|
|
<li><b>Complete transition</b>: Autotools support was completely dropped in HDF5 2.0</li>
|
|
<li><b>CMake minimum version</b>: 3.26 required</li>
|
|
<li><b>Out-of-source builds</b>: Enforced - in-source builds are blocked with clear error messages</li>
|
|
</ul>
|
|
<h2><a class="anchor" id="autotoc_md215"></a>
|
|
Core CMake Structure</h2>
|
|
<h3><a class="anchor" id="autotoc_md216"></a>
|
|
Main Configuration Files</h3>
|
|
<ul>
|
|
<li><code>CMakeLists.txt</code> - Root build configuration</li>
|
|
<li><code>CMakeBuildOptions.cmake</code> - Centralized build option definitions</li>
|
|
<li><code>CMakeFilters.cmake</code> - Compression filter support (zlib, szip, libaec)</li>
|
|
<li><code>CMakeTests.cmake</code> - Testing infrastructure configuration</li>
|
|
<li><code>CMakeInstallation.cmake</code> - Installation and packaging setup</li>
|
|
<li><code>CMakeVOL.cmake</code> - Virtual Object Layer connector support</li>
|
|
<li><code>CMakePlugins.cmake</code> - Plugin architecture support</li>
|
|
<li><code>java/src/hdf/hdf5lib/pom.xml.in</code> - Maven POM template for Java artifacts</li>
|
|
</ul>
|
|
<h3><a class="anchor" id="autotoc_md217"></a>
|
|
Build Options Categories</h3>
|
|
<p><b>Library Types:</b></p><ul>
|
|
<li><code>BUILD_STATIC_LIBS=ON</code> - Static library builds</li>
|
|
<li><code>BUILD_SHARED_LIBS=ON</code> - Shared library builds</li>
|
|
<li><code>HDF5_ONLY_SHARED_LIBS=OFF</code> - Force shared-only builds</li>
|
|
<li><code>HDF5_BUILD_STATIC_TOOLS=OFF</code> - Static vs shared tools</li>
|
|
</ul>
|
|
<p><b>Language Bindings:</b></p><ul>
|
|
<li><code>HDF5_BUILD_CPP_LIB=OFF</code> - C++ bindings</li>
|
|
<li><code>HDF5_BUILD_FORTRAN=OFF</code> - Fortran bindings</li>
|
|
<li><code>HDF5_BUILD_JAVA=OFF</code> - Java bindings</li>
|
|
<li><code>HDF5_ENABLE_MAVEN_DEPLOY=OFF</code> - Maven repository deployment support</li>
|
|
<li><code>HDF5_MAVEN_SNAPSHOT=OFF</code> - Build Maven snapshot versions with -SNAPSHOT suffix</li>
|
|
</ul>
|
|
<p><b>Core Features:</b></p><ul>
|
|
<li><code>HDF5_ENABLE_PARALLEL=OFF</code> - MPI parallel I/O support</li>
|
|
<li><code>HDF5_ENABLE_THREADSAFE=OFF</code> - Thread safety (mutually exclusive with parallel)</li>
|
|
<li><code>HDF5_ENABLE_CONCURRENCY=OFF</code> - Multi-threaded concurrency</li>
|
|
<li><code>HDF5_BUILD_HL_LIB=ON</code> - High-level APIs</li>
|
|
<li><code>HDF5_BUILD_TOOLS=ON</code> - Command-line utilities</li>
|
|
</ul>
|
|
<p><b>Compression & Filters:</b></p><ul>
|
|
<li><code>HDF5_ENABLE_ZLIB_SUPPORT=OFF</code> - DEFLATE compression</li>
|
|
<li><code>HDF5_ENABLE_SZIP_SUPPORT=OFF</code> - SZIP compression</li>
|
|
<li><code>HDF5_ENABLE_PLUGIN_SUPPORT=OFF</code> - Runtime plugin loading</li>
|
|
<li><code>HDF5_USE_ZLIB_NG=OFF</code> - Use zlib-ng instead of zlib</li>
|
|
</ul>
|
|
<p><b>Advanced Features:</b></p><ul>
|
|
<li><code>HDF5_ENABLE_SUBFILING_VFD=OFF</code> - Parallel subfiling VFD</li>
|
|
<li><code>HDF5_ENABLE_MAP_API=OFF</code> - Map API (experimental)</li>
|
|
<li><code>HDF5_ENABLE_HDFS=OFF</code> - Hadoop HDFS support</li>
|
|
</ul>
|
|
<h1><a class="anchor" id="autotoc_md218"></a>
|
|
CMake Preset System</h1>
|
|
<h2><a class="anchor" id="autotoc_md219"></a>
|
|
Preset Architecture</h2>
|
|
<ul>
|
|
<li><b>Layered inheritance</b>: Base presets + feature-specific + platform-specific</li>
|
|
<li><b>Hidden presets</b>: Reusable components (<code>ci-base</code>, <code>ci-Debug</code>, <code>ci-Release</code>, <code>ci-Maven</code>, <code>ci-Maven-Snapshot</code>, <code>ci-Maven-Minimal</code>, <code>ci-Maven-Minimal-Snapshot</code>)</li>
|
|
<li><b>Platform presets</b>: <code>ci-GNUC</code>, <code>ci-Clang</code>, <code>ci-MSVC</code>, <code>ci-macos</code></li>
|
|
<li><b>Maven presets</b>: Hidden base configurations for Maven deployment support</li>
|
|
<li><b>Minimal Maven presets</b>: Streamlined configurations for Java artifact generation only</li>
|
|
<li><b>Build type matrix</b>: Debug, Release (RelWithDebInfo + docs), Maven variants</li>
|
|
</ul>
|
|
<h2><a class="anchor" id="autotoc_md220"></a>
|
|
Key Preset Patterns</h2>
|
|
<div class="fragment"><div class="line"># Standard shared library builds</div>
|
|
<div class="line">cmake --workflow --preset ci-StdShar-GNUC --fresh # GCC</div>
|
|
<div class="line">cmake --workflow --preset ci-StdShar-Clang --fresh # Clang</div>
|
|
<div class="line">cmake --workflow --preset ci-StdShar-MSVC --fresh # MSVC</div>
|
|
<div class="line"> </div>
|
|
<div class="line"># Maven-enabled builds (Java artifacts with deployment support)</div>
|
|
<div class="line">cmake --workflow --preset ci-StdShar-GNUC-Maven --fresh # Maven release (full build)</div>
|
|
<div class="line">cmake --workflow --preset ci-StdShar-GNUC-Maven-Snapshot --fresh # Maven snapshot (full build)</div>
|
|
<div class="line">cmake --workflow --preset ci-MinShar-GNUC-Maven --fresh # Maven release (minimal build)</div>
|
|
<div class="line">cmake --workflow --preset ci-MinShar-GNUC-Maven-Snapshot --fresh # Maven snapshot (minimal build)</div>
|
|
<div class="line"> </div>
|
|
<div class="line"># Multi-platform Maven presets (minimal builds for Java artifacts only)</div>
|
|
<div class="line">cmake --workflow --preset ci-MinShar-MSVC-Maven --fresh # Windows Maven</div>
|
|
<div class="line">cmake --workflow --preset ci-MinShar-Clang-Maven --fresh # macOS Maven</div>
|
|
<div class="line"> </div>
|
|
<div class="line"># Naming convention: ci-[Features]-[Compiler][-Maven[-Snapshot]]</div>
|
|
<div class="line"># Features: Std (standard), Min (minimal), StdShar (standard shared), MinShar (minimal shared)</div>
|
|
<div class="line"># Maven: Adds Maven deployment support with platform-specific JARs</div>
|
|
<div class="line"># Snapshot: Adds -SNAPSHOT suffix for development versions</div>
|
|
<div class="line"># Minimal Maven presets: Skip examples, testing, tools, C++, Fortran - Java artifacts only</div>
|
|
<div class="line"># Java Examples Maven Integration: Comprehensive testing of Java examples with Maven artifacts across all platforms</div>
|
|
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md221"></a>
|
|
Preset Configuration Strategy</h2>
|
|
<ul>
|
|
<li><b>Binary directory</b>: <code>${sourceParentDir}/build/${presetName}</code></li>
|
|
<li><b>Install directory</b>: <code>${sourceParentDir}/install/${presetName}</code></li>
|
|
<li><b>Generator</b>: Ninja (default for most presets)</li>
|
|
<li><b>External libraries</b>: TGZ/GIT support for zlib, szip, libaec</li>
|
|
</ul>
|
|
<h1><a class="anchor" id="autotoc_md222"></a>
|
|
Testing Infrastructure</h1>
|
|
<h2><a class="anchor" id="autotoc_md223"></a>
|
|
Test Framework Structure</h2>
|
|
<ul>
|
|
<li><b>CTest integration</b>: Primary test runner</li>
|
|
<li><b>Express levels</b>: 0 (exhaustive) to 3 (quick) - default level 3</li>
|
|
<li><b>Timeout system</b>: Base 1200s, with short/long/very-long variants</li>
|
|
<li><b>Parallel testing</b>: Separate test infrastructure for MPI builds</li>
|
|
</ul>
|
|
<h2><a class="anchor" id="autotoc_md224"></a>
|
|
Test Categories</h2>
|
|
<ul>
|
|
<li><b>Core tests</b>: <code>test/</code> - Library unit tests</li>
|
|
<li><b>API tests</b>: <code>test/API/</code> - Comprehensive API validation</li>
|
|
<li><b>Parallel tests</b>: <code>testpar/</code> - MPI-specific functionality</li>
|
|
<li><b>Tool tests</b>: <code>tools/test/</code> - Command-line utility validation</li>
|
|
<li><b>VFD tests</b>: Multiple Virtual File Driver implementations</li>
|
|
<li><b>VOL tests</b>: Virtual Object Layer connector testing</li>
|
|
<li><b>Language binding tests</b>: C++, Fortran, Java specific tests</li>
|
|
</ul>
|
|
<h2><a class="anchor" id="autotoc_md225"></a>
|
|
Test Execution Patterns</h2>
|
|
<div class="fragment"><div class="line"># Express testing (quick)</div>
|
|
<div class="line">export HDF_TEST_EXPRESS=3</div>
|
|
<div class="line">ctest -j4</div>
|
|
<div class="line"> </div>
|
|
<div class="line"># VFD testing matrix</div>
|
|
<div class="line">ctest -R "VFD"</div>
|
|
<div class="line"> </div>
|
|
<div class="line"># Parallel testing</div>
|
|
<div class="line">ctest -R "MPI\|parallel"</div>
|
|
<div class="line"> </div>
|
|
<div class="line"># API comprehensive tests</div>
|
|
<div class="line">ctest -R "H5_api_test"</div>
|
|
</div><!-- fragment --><h1><a class="anchor" id="autotoc_md226"></a>
|
|
CI/CD Pipeline Architecture</h1>
|
|
<h2><a class="anchor" id="autotoc_md227"></a>
|
|
GitHub Actions Matrix</h2>
|
|
<ul>
|
|
<li>Comprehensive testing across platforms/compilers</li>
|
|
<li><b>Multi-dimensional matrix</b>:<ul>
|
|
<li>Platforms: Windows (MSVC), Ubuntu (GCC), macOS (Clang)</li>
|
|
<li>Features: Serial, Parallel, Thread-safe, Various language bindings</li>
|
|
<li>Build types: Debug, Release, specialized configurations</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<h2><a class="anchor" id="autotoc_md228"></a>
|
|
Key Workflow Categories</h2>
|
|
<p><b>Main CI Workflows:</b></p><ul>
|
|
<li><code>main.yml</code> - Primary CI across platforms</li>
|
|
<li><code>daily-build.yml</code> - Nightly comprehensive builds</li>
|
|
<li><code>ctest.yml</code> - Cross-platform testing with preset system</li>
|
|
</ul>
|
|
<p><b>Specialized Testing:</b></p><ul>
|
|
<li><code>par-*.yml</code> - Parallel/MPI testing workflows</li>
|
|
<li><code>vfd-*.yml</code> - Virtual File Driver testing</li>
|
|
<li><code>vol_*.yml</code> - Virtual Object Layer connector testing</li>
|
|
<li><code>analysis.yml</code> - Static analysis integration</li>
|
|
</ul>
|
|
<p><b>Platform-Specific:</b></p><ul>
|
|
<li><code>arm-main.yml</code> - ARM architecture testing</li>
|
|
<li><code>cygwin.yml</code>, <code>msys2.yml</code> - Windows alternative environments</li>
|
|
<li><code>intel.yml</code>, <code>aocc.yml</code>, <code>nvhpc.yml</code> - Vendor compiler support</li>
|
|
</ul>
|
|
<p><b>Release Infrastructure:</b></p><ul>
|
|
<li><code>release.yml</code> - Main release workflow with optional Maven deployment</li>
|
|
<li><code>release-files.yml</code> - Automated release packaging</li>
|
|
<li><code>tarball.yml</code> - Source distribution creation</li>
|
|
<li><code>maven-deploy.yml</code> - Maven repository deployment workflow</li>
|
|
<li><code>maven-staging.yml</code> - PR-based Maven testing and validation workflow</li>
|
|
<li><code>daily-schedule.yml</code> - Scheduled builds with AWS integration</li>
|
|
</ul>
|
|
<h2><a class="anchor" id="autotoc_md229"></a>
|
|
Build Matrix Strategy</h2>
|
|
<ul>
|
|
<li><b>Cross-platform validation</b>: Windows/Linux/macOS for every PR</li>
|
|
<li><b>Compiler diversity</b>: GCC, Clang, MSVC, Intel, AOCC, NVHPC</li>
|
|
<li><b>Feature combinations</b>: Systematic testing of feature interactions</li>
|
|
<li><b>Performance variants</b>: Debug vs Release vs specialized builds</li>
|
|
</ul>
|
|
<h1><a class="anchor" id="autotoc_md230"></a>
|
|
Packaging & Distribution</h1>
|
|
<h2><a class="anchor" id="autotoc_md231"></a>
|
|
Installation System</h2>
|
|
<ul>
|
|
<li><b>Component-based</b>: Libraries, headers, tools, docs, examples</li>
|
|
<li><b>CMake integration</b>: Full config package support</li>
|
|
<li><b>Cross-platform</b>: Windows (NSIS/WiX), macOS (DMG/Framework), Linux (DEB/RPM/TGZ)</li>
|
|
</ul>
|
|
<h2><a class="anchor" id="autotoc_md232"></a>
|
|
Release Process</h2>
|
|
<ul>
|
|
<li><b>Automated packaging</b>: CPack integration with platform-specific installers</li>
|
|
<li><b>Version management</b>: Automatic version extraction from source</li>
|
|
<li><b>SOVERSION handling</b>: Complex library versioning for different components</li>
|
|
<li><b>External dependencies</b>: Bundled compression libraries option</li>
|
|
</ul>
|
|
<h2><a class="anchor" id="autotoc_md233"></a>
|
|
Distribution Formats</h2>
|
|
<ul>
|
|
<li><b>Source tarballs</b>: Automated via GitHub Actions</li>
|
|
<li><b>Binary packages</b>: Platform-specific installers</li>
|
|
<li><b>Maven repositories</b>: GitHub Packages and Maven Central deployment</li>
|
|
<li><b>Java artifacts</b>: Platform-specific JARs with classifiers (linux-x86_64, windows-x86_64, macos-x86_64, macos-aarch64)</li>
|
|
<li><b>Container support</b>: Docker environments for CI</li>
|
|
<li><b>HPC integration</b>: Specialized configurations for batch systems</li>
|
|
</ul>
|
|
<h1><a class="anchor" id="autotoc_md234"></a>
|
|
Development Workflow Recommendations</h1>
|
|
<h2><a class="anchor" id="autotoc_md235"></a>
|
|
Build Strategy</h2>
|
|
<ol type="1">
|
|
<li><b>Use presets for consistency</b>: Leverage the preset system for reproducible builds</li>
|
|
<li><b>Feature isolation</b>: Test individual features before combining</li>
|
|
<li><b>Express testing</b>: Use level 3 for development, lower levels for validation</li>
|
|
<li><b>Parallel development</b>: Separate MPI builds from serial development</li>
|
|
</ol>
|
|
<h2><a class="anchor" id="autotoc_md236"></a>
|
|
Testing Strategy</h2>
|
|
<ol type="1">
|
|
<li><b>Incremental testing</b>: Start with <code>testhdf5</code> core tests</li>
|
|
<li><b>Feature-specific testing</b>: Use test regex patterns for targeted testing</li>
|
|
<li><b>Cross-platform validation</b>: Test on primary CI platforms early</li>
|
|
<li><b>Performance testing</b>: Include Release builds for performance-critical changes</li>
|
|
</ol>
|
|
<h2><a class="anchor" id="autotoc_md237"></a>
|
|
CI Integration</h2>
|
|
<ol type="1">
|
|
<li><b>Workflow triggers</b>: Understand which changes trigger which test suites</li>
|
|
<li><b>Matrix optimization</b>: Consider CI time costs for comprehensive testing</li>
|
|
<li><b>Failure isolation</b>: Use workflow categories to isolate platform/feature issues</li>
|
|
<li><b>External dependency management</b>: Plan for compression library updates</li>
|
|
</ol>
|
|
<h2><a class="anchor" id="autotoc_md238"></a>
|
|
Maven Integration Workflow</h2>
|
|
<ol type="1">
|
|
<li><b>Java Build Configuration</b>: Enable Maven deployment with <code>HDF5_ENABLE_MAVEN_DEPLOY=ON</code></li>
|
|
<li><b>Version Management</b>: Use <code>HDF5_MAVEN_SNAPSHOT=ON</code> for development builds with <code>-SNAPSHOT</code> suffix</li>
|
|
<li><b>Preset Selection</b>: Choose Maven-enabled presets (<code>ci-StdShar-GNUC-Maven</code> or <code>ci-StdShar-GNUC-Maven-Snapshot</code>)</li>
|
|
<li><b>Platform Artifacts</b>: Automatic generation of platform-specific JARs with classifiers (linux-x86_64, windows-x86_64, macos-x86_64, macos-aarch64)</li>
|
|
<li><b>CI Integration</b>: Conditional Maven artifact generation in <code>ctest.yml</code> workflow via preset system</li>
|
|
<li><b>PR Testing</b>: Automated Maven artifact validation for pull requests via <code>maven-staging.yml</code></li>
|
|
<li><b>Validation Framework</b>: Pre-deployment validation using <code>.github/scripts/validate-maven-artifacts.sh</code></li>
|
|
<li><b>Repository Selection</b>: Choose between GitHub Packages and Maven Central via workflow inputs</li>
|
|
<li><b>Release Integration</b>: Optional Maven deployment in release workflow with user control</li>
|
|
</ol>
|
|
<h1><a class="anchor" id="autotoc_md239"></a>
|
|
Critical Dependencies</h1>
|
|
<h2><a class="anchor" id="autotoc_md240"></a>
|
|
Build Dependencies</h2>
|
|
<ul>
|
|
<li><b>CMake 3.26+</b>: Required for preset support and modern features</li>
|
|
<li><b>Ninja</b>: Preferred generator for cross-platform consistency</li>
|
|
<li><b>Compression libraries</b>: zlib, szip/libaec (optional but commonly used)</li>
|
|
<li><b>MPI</b>: Required for parallel builds (MPI-3 standard minimum)</li>
|
|
<li><b>Java 11+</b>: Required for Java bindings and Maven deployment (when <code>HDF5_BUILD_JAVA=ON</code>)</li>
|
|
<li><b>Maven</b>: Optional for local Maven operations and validation</li>
|
|
</ul>
|
|
<h2><a class="anchor" id="autotoc_md241"></a>
|
|
Platform-Specific Requirements</h2>
|
|
<ul>
|
|
<li><b>Windows</b>: Visual Studio 2022, optional NSIS/WiX for packaging</li>
|
|
<li><b>macOS</b>: Xcode command line tools, universal binary support</li>
|
|
<li><b>Linux</b>: GCC/Clang, various package managers for dependencies</li>
|
|
</ul>
|
|
<h2><a class="anchor" id="autotoc_md242"></a>
|
|
Development Tools Integration</h2>
|
|
<ul>
|
|
<li><b>Static analysis</b>: Clang tools integration available</li>
|
|
<li><b>Code formatting</b>: clang-format integration</li>
|
|
<li><b>Coverage</b>: Code coverage support for testing</li>
|
|
<li><b>Sanitizers</b>: Runtime error detection support</li>
|
|
<li><b>Maven validation</b>: <code>.github/scripts/validate-maven-artifacts.sh</code> for pre-deployment validation</li>
|
|
</ul>
|
|
<h1><a class="anchor" id="autotoc_md243"></a>
|
|
Future Considerations</h1>
|
|
<h2><a class="anchor" id="autotoc_md244"></a>
|
|
Build System Evolution</h2>
|
|
<ul>
|
|
<li><b>CMake modernization</b>: Potential for newer CMake features as minimum version increases</li>
|
|
<li><b>Preset expansion</b>: More specialized presets for emerging use cases</li>
|
|
<li><b>Container integration</b>: Enhanced Docker/container support for development</li>
|
|
</ul>
|
|
<h2><a class="anchor" id="autotoc_md245"></a>
|
|
Testing Infrastructure</h2>
|
|
<ul>
|
|
<li><b>Test parallelization</b>: Opportunities for faster CI execution</li>
|
|
<li><b>Cloud testing</b>: Integration with cloud-native testing platforms</li>
|
|
<li><b>Performance regression</b>: Automated performance monitoring integration</li>
|
|
</ul>
|
|
<h2><a class="anchor" id="autotoc_md246"></a>
|
|
Platform Support</h2>
|
|
<ul>
|
|
<li><b>Emerging architectures</b>: ARM64, RISC-V support expansion</li>
|
|
<li><b>New compilers</b>: Integration with emerging compiler technologies</li>
|
|
<li><b>HPC evolution</b>: Adaptation to evolving supercomputing environments </li>
|
|
</ul>
|
|
</div></div><!-- contents -->
|
|
</div><!-- PageDoc -->
|
|
</div><!-- doc-content -->
|
|
<!-- start footer part -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
<ul>
|
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|