Baseline Build And Test Status#

Last updated: 2026-05-26

This document records the current build/test baseline after the openmupro removal, macOS development route setup, build-script cleanup, and benchmark-standard skeleton. It is a status document, not a release certification.

Scope#

This baseline covers:

  • Current root configure/build/test/install/package prototype.

  • Current minimal C ABI skeleton, runtime context bridge, and C example.

  • Current staged license -> library -> downstream example workflow.

  • macOS development-only CPU route.

  • Current known blockers for Linux/Windows formal routes on this local machine.

  • Current CTest and Sphinx documentation status.

  • Current submodule status.

It does not validate L2/L3 solver correctness, GPU backends, package release quality, or app-level workflows.

Platform Status#

Route

Support intent

Local status

Notes

Linux + Intel oneAPI + oneMKL

Tier 1 official high-performance route

Not locally verified

This Mac does not have ifx or ifort in PATH.

Windows + Intel oneAPI + oneMKL

Supported when required by apps

Not locally verified

Requires Windows oneAPI environment.

macOS + Homebrew gfortran + OpenBLAS + FFTW + OpenMPI

Development-only CPU route

Verified for root build, L0/L1 SDK build, and examples/demo1

MUPRO_BUILD_SOLVERS=OFF; not a production/HPC route.

Local Toolchain Snapshot#

Tool

Observed value

CMake

4.3.2

Ninja

1.13.2

GNU Fortran

Homebrew GCC 15.2.0

Homebrew OpenMPI mpifort

GNU Fortran 15.2.0 wrapper

Intel ifx

Not found

Intel ifort

Not found

Sphinx

8.2.3

Verified Local Build Steps#

The following root macOS development steps have been verified locally:

cmake --fresh --preset macos-arm64-debug
cmake --build --preset macos-arm64-debug --clean-first
ctest --preset macos-arm64-debug --output-on-failure
cmake --install out/build/macos-arm64-debug
cmake --build --preset macos-arm64-debug --target package

Observed root artifacts:

Artifact

Status

out/build/macos-arm64-debug/library/libmuprod.a

Built

out/build/macos-arm64-debug/examples/demo1/demo

Built

out/build/macos-arm64-debug/examples/c_api_tdgl/c_api_tdgl

Built

out/install/macos-arm64-debug/lib/libmuprod.a

Installed

out/install/macos-arm64-debug/include/mupro/mupro.h

Installed

out/build/macos-arm64-debug/mupro-<version>.tar.gz

Packaged

The following macOS development steps have been verified locally:

cd license
cmake --fresh --preset macos-arm64-Debug
cmake --build --preset macos-arm64-Debug
cmake --install out/build/macos-arm64-debug

cd ../library
cmake --fresh --preset macos-arm64-Debug
cmake --build --preset macos-arm64-Debug
cmake --install out/build/macos-arm64-debug

cd ..
cmake --fresh -S examples/demo1 -B examples/demo1/cmake-build-macos-arm64-debug -G Ninja \
  -DCMAKE_BUILD_TYPE=Debug \
  -DCMAKE_Fortran_COMPILER=/opt/homebrew/bin/gfortran \
  -DCMAKE_PREFIX_PATH="library/out/install/macos-arm64-debug;license/out/install/macos-arm64-debug;/opt/homebrew/opt/openblas;/opt/homebrew/opt/fftw;/opt/homebrew/opt/open-mpi"
cmake --build examples/demo1/cmake-build-macos-arm64-debug

Observed artifacts:

Artifact

Status

license/out/build/macos-arm64-debug/library/liblicensed.a

Built

library/out/build/macos-arm64-debug/libmuprod.a

Built

examples/demo1/cmake-build-macos-arm64-debug/demo

Built

Linux Staged Workflow#

The Linux helper path is documented and safety-cleaned, but not verified on this Mac:

cd library
source scripts/linux/cmake_configure.sh Debug
source scripts/linux/cmake_build.sh Debug
cmake --install ../license/out/build/debug
cmake --install out/build/debug

Requirements:

  • Intel oneAPI available through PATH, or ONEAPI_ROOT pointing at a valid oneAPI install.

  • cmake and ninja available.

  • Linux oneAPI preset dependencies available, including MKL and MPI.

The helper scripts do not install system packages or use privileged commands.

Test Status#

Command

Result

Interpretation

ctest --preset macos-arm64-debug --output-on-failure in repository root

Pass, 13 tests

Root CTest aggregates library-owned tests; root owns no test source directory.

ctest --preset macos-arm64-Debug --output-on-failure in library/

Pass, 13 tests

Standalone library CTest runs module/API/runtime unit tests plus library.configure_smoke.

ctest --test-dir out/build/macos-arm64-debug -R '^unit\.l1_utilities$' --output-on-failure in library/

Pass, 1 test

Direct filtered module test invocation works for L1_Utilities.

Configure/build/CTest in out/build/macos-arm64-debug-tdgl with MUPRO_BUILD_TDGL=ON

Pass, 14 tests

TDGL module compiles on the macOS development route without enabling all L2/L3 solvers, and integration.c_api_tdgl_adapter routes C setup/solve through the Fortran TDGL adapter.

cmake --build examples/demo1/cmake-build-macos-arm64-debug

Pass, no work to do

Downstream example still links against installed SDK.

Run root-built examples/c_api_tdgl in default build

Pass

Example receives the expected TDGL solve skeleton status when MUPRO_BUILD_TDGL is not enabled.

Run root-built examples/c_api_tdgl in TDGL-enabled build

Pass

Example routes TDGL solve through the Fortran adapter when MUPRO_BUILD_TDGL=ON.

cmake --build --preset macos-arm64-debug --target package

Pass

Generated TGZ package contains include/mupro/mupro.h.

sphinx-build -b html docs docs/_build/html

Fails with missing sphinxfortran.fortran_domain

Local Python environment is missing docs dependencies; install docs/requirements.txt before using this as a docs gate.

Current default aggregated tests:

Test

Scope

library.configure_smoke

Confirms library-level smoke registration.

unit.c_api

C ABI header inclusion, opaque runtime/TDGL handle lifecycle, Fortran size bridge readback, explicit MPI runtime initialization/query, TDGL setup signature, and solve skeleton status.

unit.runtime

Runtime context defaults, backend metadata defaults, size setup/query through legacy global compatibility, setup/finalize, MPI initialization/finalization, and optional FFT setup/finalize/re-setup.

unit.status

Status constants, message handling, clear/set helpers, and ok checks.

unit.l0_base

Size defaults, TOML read, expression evaluation, and global size setup.

unit.l0_log

Scalar logging and time-dependent header/row output.

unit.l1_io

Serial DAT/VTK output smoke, time-dependent CSV parsing, and single-process MPI-style 3D/4D/5D roundtrip.

unit.l1_transform

Zero-angle Euler identity and cubic tensor Voigt roundtrip.

unit.l1_utilities

Deterministic 1x21 <-> 6x6 conversion, LAPACK-backed matrix inverse, fixed-seed random helpers, and sumBox.

unit.l1_post_process

Uniform domain classification over a tiny 3D box.

unit.l1_structure_generator

Round-pillar center-line generation on a 3x3x3 grid.

unit.l1_material_generator

Scalar and rank-2 material property assignment from phase labels.

unit.l1_film

Constant-field fitted derivative through runtime-owned optional FFT setup.

Additional targeted TDGL-enabled test:

Test

Scope

integration.c_api_tdgl_adapter

Optional TDGL-enabled C adapter path from C setup/solve through runtime FFT and existing Fortran TDGL status path.

Current conclusion: root CTest now aggregates a non-empty library-owned gate covering C ABI, runtime context with optional FFT lifecycle, L0/L1 migration coverage, and a library smoke check. Root owns no test source directory. Module-local quality categories and opt-in benchmark/validation registration are in place. A targeted TDGL-enabled build now validates the optional C TDGL adapter. The next test work should add concrete MPI/regression/benchmark/validation cases and move toward benchmark-linked reference tests.

Known Blockers#

ID

Blocker

Impact

Next action

BASE-BLOCK-001

ifx and ifort are not available on this Mac.

Linux/Windows official oneAPI routes cannot be locally verified here.

Verify on Linux/Windows runners or oneAPI machines.

BASE-BLOCK-002

Legacy mupro_test() per-module test libraries are not yet root-test ready.

Enabling MUPRO_ROOT_BUILD_LEGACY_TESTS=ON currently exposes old test issues such as the L1 Utilities reshape source-length error under gfortran.

Keep the new module-local tests as the active gate; replace or clean legacy tests deliberately before re-enabling them.

BASE-BLOCK-003

Local Sphinx environment lacks sphinxfortran.

Docs cannot build until dependencies are installed.

Install pip install -r docs/requirements.txt or configure docs CI.

BASE-BLOCK-004

macOS license build skips bundled license/library/c_lib/lic.a because it is not a Mach-O archive.

macOS route is development-only and not license-production-equivalent.

Keep official license validation on Linux/Windows release routes; revisit only if macOS production support becomes a goal.

BASE-BLOCK-005

Full L2/L3 solvers are not part of the default verified macOS build route.

Solver correctness is not covered by this baseline.

Use targeted solver compile switches such as MUPRO_BUILD_TDGL=ON, then add solver-specific benchmarks and tests.

BASE-BLOCK-006

apps/muFerro and apps/muPREDICT have local submodule edits.

Main repository status remains dirty through submodule markers.

Defer to app refactor/repository consolidation phase.

Submodule Status#

Current app submodules:

Path

Commit

Status

apps/muEffProp

54638932e1f412533ae134f79bacd7a05cfd6608

Clean

apps/muFerro

ecc6a9020af2196ddf358d5c2480c5301711bfe2

Local edits deferred

apps/muMagn

0b1965965cca41a9d9b94004f3aa5a1aa6318e57

Clean

apps/muPREDICT

e0fce8c32b82dbcbfca78dbb217b966bd50ff8cd

Local edits deferred

The openmupro submodule is removed. Current app submodules are transitional and will be handled during app refactors.

Baseline Conclusion#

The repository has a documented and locally verified macOS development build baseline for the root build graph, license, L0/L1 library, status/error foundation, examples/demo1, and the minimal C ABI/runtime context bridge. It now has library-owned module-local unit tests, a library-level smoke test, root CTest aggregation, standard module/app quality-gate conventions, and an optional TDGL C adapter path. TDGL has targeted compile and adapter coverage. It does not yet have official oneAPI verification on this machine, solver-level validation cases, or app-level benchmark/validation/regression implementations.