# 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:

```bash
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:

```bash
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:

```bash
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.
