Developer Build Guide#
This page records the supported staged build workflow during the current SDK migration.
Platform Policy#
Linux is the Tier 1 high-performance and release platform.
Windows is supported for Intel oneAPI based builds when required by applications.
macOS is development-only and CPU-only. It is intended for local development, examples, and small smoke checks.
Toolchains#
Platform |
Compiler |
Math backend |
FFT backend |
MPI |
|---|---|---|---|---|
Linux |
Intel |
oneMKL |
MKL FFT |
Intel MPI or compatible MPI |
Windows |
Intel |
oneMKL |
MKL FFT |
Intel MPI |
macOS |
Homebrew |
OpenBLAS |
user-installed FFTW |
Homebrew OpenMPI |
Do not use Intel compiler + oneMKL as the macOS route. Do not bundle FFTW into SDK packages. On macOS, FFTW is a developer-installed dependency and the developer is responsible for dynamic-library availability.
Root Build Prototype#
The repository now has a root CMake entrypoint for the migration build graph. It adds license, library, and selected SDK examples from one configure step.
On macOS development machines:
cmake --fresh --preset macos-arm64-debug
cmake --build --preset macos-arm64-debug
ctest --preset macos-arm64-debug --output-on-failure
cmake --install out/build/macos-arm64-debug
cmake --build --preset macos-arm64-debug --target package
On Linux oneAPI machines:
cmake --fresh --preset linux-intel-debug
cmake --build --preset linux-intel-debug
ctest --preset linux-intel-debug --output-on-failure
cmake --install out/build/linux-intel-debug
cmake --build --preset linux-intel-debug --target package
The root build keeps legacy per-module test targets disabled by default through MUPRO_ROOT_BUILD_LEGACY_TESTS=OFF. Use that switch only when working specifically on legacy L0/L1 test cleanup.
Targeted solver compile checks can be enabled without building every L2/L3 solver. For example, on macOS:
cmake --fresh --preset macos-arm64-debug -B out/build/macos-arm64-debug-tdgl \
-DMUPRO_BUILD_TDGL=ON
cmake --build out/build/macos-arm64-debug-tdgl --target mupro
Linux Staged Build#
Before using the helper scripts, make sure Intel oneAPI is available. Either source oneAPI yourself or set ONEAPI_ROOT:
source /opt/intel/oneapi/setvars.sh
The current library configure helper builds license first, then configures library.
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
For release:
cd library
source scripts/linux/cmake_configure.sh Release
source scripts/linux/cmake_build.sh Release
cmake --install ../license/out/build/release
cmake --install out/build/release
Developer presets such as Debug-dev and Release-dev are only defined for library; the helper maps the license step back to Debug or Release.
macOS Development Build#
Install dependencies with Homebrew:
brew install cmake ninja gcc openblas fftw open-mpi
Build and install license:
cd license
cmake --fresh --preset macos-arm64-Debug
cmake --build --preset macos-arm64-Debug
cmake --install out/build/macos-arm64-debug
Build and install library:
cd ../library
cmake --fresh --preset macos-arm64-Debug
cmake --build --preset macos-arm64-Debug
cmake --install out/build/macos-arm64-debug
The macOS preset intentionally sets MUPRO_BUILD_SOLVERS=OFF for the current migration stage. It verifies the L0/L1 SDK route and external OpenBLAS/FFTW discovery.
Example Build#
After installing license and library, examples/demo1 can be configured as a downstream project from the repository root:
cd ..
cmake -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
The example project enables C, C++, and Fortran because the SDK exports MPI C dependencies and contains C++ object code in the static library.
The C ABI skeleton example can be configured against the root install tree:
cmake -S examples/c_api_tdgl -B examples/c_api_tdgl/cmake-build-macos-arm64-debug -G Ninja \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_Fortran_COMPILER=/opt/homebrew/bin/gfortran \
-DCMAKE_PREFIX_PATH="$PWD/out/install/macos-arm64-debug;/opt/homebrew/opt/openblas;/opt/homebrew/opt/fftw;/opt/homebrew/opt/open-mpi"
cmake --build examples/c_api_tdgl/cmake-build-macos-arm64-debug
./examples/c_api_tdgl/cmake-build-macos-arm64-debug/c_api_tdgl
The expected PR-014 output is a structured MUPRO_STATUS_NOT_SETUP message stating that the TDGL C solve backend is not connected yet.
Tests#
Use CTest from the root build for the current smoke/unit gate:
ctest --preset macos-arm64-debug --output-on-failure
The current root gate includes root_configure_smoke, unit.c_api, unit.status, unit.l0_base, unit.l0_log, unit.l1_io, unit.l1_transform, and unit.l1_utilities. The legacy library macOS Debug preset still configures and builds, but it does not yet register a useful standalone CTest gate.