Skip to content

CI never builds the default make target — the configuration fastfields-dlpack actually uses #96

Description

@balbasty

Found by:claude-jitfields-to-fastfields, while adding -Wl,--no-undefined in #87.

#87 made the hub link strict and verified it with ldd -r, but that gate only runs on the CUDA path. Two holes remain, and the second is the serious one.

1. The CPU-side --no-undefined has no gate

build-cuda links libfastfields.so against libfastfields-cuda.so, so a CUDA-triggering change is checked. A hub-only change never links libfastfields.so in CI at all, so the strict-link guarantee on the CPU path is asserted by the Makefile and verified by nothing.

2. make / make lib is built by no CI job whatsoever

This is the wider problem. The default target — the one fastfields-dlpack's setup.py actually invokes — is not built anywhere in CI:

Nothing exercises a plain make producing libfastfields.so + libfastfields-cpu.so in the default configuration. That is precisely the configuration every downstream consumer builds, and it is how the .DEFAULT_GOAL regression during the consolidation reached fastfields-dlpack — a bare make created build/ and exited 0 having compiled nothing, surfacing downstream as a misleading "did not produce the expected .so files".

Why this is not a drive-by fix

Folding a CPU hub link into test-hub means giving a job that currently finishes in ~10 seconds a full CPU library build. libfastfields-cpu.so is ~166 MB and its build is not cheap. It would also put test-hub back on apt, which matters: test-hub survived the 2026-08-19 Ubuntu mirror stall precisely because it installs nothing, while four other jobs were killed at their timeout-minutes inside apt-get (see #89's related discussion — GitHub reports such kills as cancelled, not failure).

So this is a deliberate sizing decision, not a one-line addition. Options worth weighing:

  • A separate build-default job that runs a bare make and ldd -rs the result — closest to what downstream does, but adds a full CPU build to every run.
  • Path-filter it so it only runs when src/lib/, make/ or the Makefiles change.
  • Reuse an existing test-cpu leg's artifacts rather than rebuilding.

Acceptance

Whatever shape it takes, it should fail if:

  • libfastfields.so has undefined symbols on the CPU-only path, and
  • a bare make produces no .so (the .DEFAULT_GOAL class of regression).

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions