Skip to content

L-7b-ii follow-up: add Linux CI build job for libtotapi_mono.so #204

@k-yoshimi

Description

@k-yoshimi

Context

PR #202 landed libtotapi_mono.so as a macOS-verified PoC. The Makefile branches on platform via ifeq ($(UNAME_S),Darwin) for SO_SONAME_MONO, and reuses SO_GROUP_BEGIN/END + SO_UNDEFINED from the existing libtotapi.so block which already has different Darwin / Linux flag sets:

ifeq ($(UNAME_S),Darwin)
  SO_GROUP_BEGIN =
  SO_GROUP_END =
  SO_UNDEFINED = -Wl,-undefined,dynamic_lookup
else
  SO_GROUP_BEGIN = -Wl,--start-group
  SO_GROUP_END = -Wl,--end-group
  SO_UNDEFINED = -Wl,--unresolved-symbols=ignore-all
endif

The mono target reuses these (no duplication), but the Linux branch is untested for the mono path — the existing python-tests.yml workflow only builds the default libtotapi.so. Linux ld differs from Apple ld in archive-ordering semantics and unresolved-symbol handling; a flag combination that works on macOS may fail on Linux with link errors, dlopen errors, or silent corruption.

Scope

Add a build-only CI job (or extend an existing one) that runs on Ubuntu:

make -C tot libtotapi_mono.so
make -C tot libtotapi_mono_inspect

Acceptance:

  • libtotapi_mono.so builds on Linux x86_64 with gfortran 13.x.
  • The 8-bpsd-storage-symbol invariant in libtotapi_mono_inspect passes.
  • ldd libtotapi_mono.so shows no lib*api.so deps (only system libs + libgfortran).

This is build-only validation. The 1e-10 equivalence and BPSD smoke tests against the mono build are deferred to #201 (which adds the unified graphics stubs needed to make it dlopen-loadable).

Why now vs later

Filing this now (vs as part of #201's Phase 2a) so:

  1. Linux linker incompatibilities surface BEFORE L-7b-ii Phase 2: monolithic mode + BPSD coupling activation (umbrella) #201 work depends on them — fixing them early avoids rework in Phase 2a's PR.
  2. The mono target invariants (8 bpsd symbols, no .so deps) get periodic CI regression checking.

Effort

~30 min: copy the existing macOS-tested job's setup steps, add the two make invocations, gate on PR-changing-the-mono-target paths.

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions