Skip to content

Stabilize new build in separate repository, and get CI/CD working#8

Open
CodeByDrescher wants to merge 44 commits into
masterfrom
stabilize-new-build
Open

Stabilize new build in separate repository, and get CI/CD working#8
CodeByDrescher wants to merge 44 commits into
masterfrom
stabilize-new-build

Conversation

@CodeByDrescher

@CodeByDrescher CodeByDrescher commented Apr 14, 2026

Copy link
Copy Markdown
Collaborator

Summary

Stabilize the ODE solver against sanitizers, modernize the build, and ship a
Python distribution alongside the native CLI.

  • Build: switch to Conan-managed dependencies (argparse, spdlog,
    libcurl); CMake minimum 3.13 → 3.16; consolidate platform detection on
    WIN32; new options OPTION_TARGET_PYTHON_BINDING,
    OPTION_TEST_WITH_LOCALHOST, OPTION_STATICALLY_LINK; warning cleanup
    pass and sprintf removal so the C++20 build compiles clean.
  • Solver architecture: lift input parsing out of the solver into
    VCellSolverInput + VCellSolverFactory; introduce abstract VCellSolver
    base; replace the 273-line hand-rolled argv parser in
    SundialsSolverStandalone with argparse; expose a reusable
    solve(input, output, tid) entry in SundialsSolverInterface (used by
    both the CLI and the Python module).
  • Messaging stabilization: decompose SimulationMessaging into
    MessageEventManager (worker thread + queue, with documented lock
    ordering), CurlProxyClasses (AbstractCurlProxy / NullCurlProxy /
    CurlProxy — replaces #ifdef USE_MESSAGING forests with polymorphism),
    JobEventStatus (now a JobEvent::Status namespaced enum), and
    WorkerEvent. Fixes from TSAN/UBSAN/leak runs: data race,
    mutex-access-before-constructor-finished, undefined behavior, memory
    leaks, int overflow in a test. std::jthreadstd::thread for
    compiler portability. Net: SimulationMessaging.cpp 755 → 194 lines.
  • Python bindings (pyvcell_odesolver): scikit-build-core + vendored
    pybind11; src/main.cpp exposes version() and
    solve(cvode_input_file_path, output_file_path, tid=-1).
  • CI/CD: matrix over macOS-15 (arm + intel), Windows, Linux x86_64 +
    arm64, Python 3.10–3.13. Per-platform Conan profiles, cibuildwheel
    Python wheels, lipo macOS Universal build, GHCR manylinux images,
    mold linker on Linux, sanitizer-enabled CMake.
  • Tests: replace IDAWin/tests/smoke/smoke.py with a top-level
    tests/ dir of GoogleTest C++ tests (smoke, hello, message-processing)
    plus a test_basic.py that exercises the wheel.

Test plan

  • CI green across all 5 platforms × 4 Python versions
  • ctest -VV green locally (Linux, macOS); Windows via CI
  • SundialsSolverStandalone_x64 runs the smoke .cvodeInput and
    matches *.ida.expected / *.cvode.expected
  • pip install of the built wheel exposes
    pyvcell_odesolver.solve(...) and produces output matching the CLI
  • Run with -DOPTION_TARGET_MESSAGING=ON against a localhost broker
    (-DOPTION_TEST_WITH_LOCALHOST=ON) — no TSAN/leak warnings
  • macOS Universal binary verified with lipo -archs

@CodeByDrescher CodeByDrescher requested a review from jcschaff April 14, 2026 14:35
@CodeByDrescher

Copy link
Copy Markdown
Collaborator Author

closes #5
closes #7

+ version output improvement
@CodeByDrescher CodeByDrescher force-pushed the stabilize-new-build branch 27 times, most recently from 7a32b05 to 8f5f107 Compare July 9, 2026 19:55
Also: adding windows on arm (woa) support(?)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants