[BUG] Fortran source files don't propagate through `library-manifest` dependency resolution outside `task: 'build'`
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 48/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- fortran, javascript
- Ambito
- build-system, tooling
Direzione di ricerca
Riproduci il fallimento di lib/node_modules/@stdlib/blas/base/dger/benchmark/fortran con make, quindi esamina @stdlib/utils/library-manifest e i file manifest.json di dger e xerbla. Controlla tools/scripts/compile_fortran_benchmark e i Makefile dei benchmark Fortran uniti, confrontandoli con il percorso del benchmark C. Il lavoro è completato quando la risoluzione delle dipendenze del benchmark espone il sorgente Fortran di xerbla senza percorsi hardcoded verso directory adiacenti e il benchmark viene collegato correttamente.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
Error is encountered when a Fortran benchmark for a Level-2+ BLAS routine whose Fortran source declares an EXTERNAL Fortran dependency on another stdlib package (e.g., dgemm calling xerbla, dger calling xerbla). The benchmark fails to link with a missing-symbol error for the dependency.
The underlying defect is in @stdlib/utils/library-manifest. When the resolver is queried with any task other than build (notably task: 'benchmark'), Fortran source files belonging to dependencies are not surfaced.
Fortran sources are currently declared only inside the build task entry of each Fortran-using package's manifest — so when library-manifest walks the dependency tree under task: 'benchmark', it merges each dependency's benchmark entry, which contains only C sources, and the dependency's .f files never appear in the merged result.
For example, in blas/base/xerbla/manifest.json:
task: 'build',os: 'linux',blas: '',wasm: false→src: ["./src/xerbla.f", "./src/xerbla.c"]task: 'benchmark',os: 'linux',blas: '',wasm: false→src: ["./src/xerbla.c"](no.f)
The native-addon build path works bc binding.gyp/include.gypi calls library-manifest with no explicit task, defaulting to task: 'build', where the .f declarations exist.
The same condition silently affects every merged Fortran benchmark for a Level-2+ BLAS routine that exercises a cross-package Fortran symbol. Level-1 BLAS Fortran benchmarks (e.g., daxpy, dscal, dasum) have no cross-package Fortran dependencies and link cleanly, which is why the gap has not surfaced more broadly.
The recurring local fix is a Makefile patch in the consuming package that hardcodes a relative path to a sibling package's .f file (e.g., ../../../xerbla/src/xerbla.f inside dger's benchmark Makefile). This couples one package to another package's file-tree layout. If xerbla is ever moved within the package tree (e.g., to @stdlib/blas/base/utils/xerbla), every consumer's hardcoded path silently breaks, and a contributor performing the migration has no way to discover the breakage short of running every affected benchmark. The manifest-based @stdlib/... reference model exists precisely so packages don't reach into each other's file trees this way. See @kgryte's comment on PR #11332.
A second, downstream contributor to the symptom is that tools/scripts/compile_fortran_benchmark only resolves include directories from the manifest, while its C counterpart tools/scripts/compile_c_benchmark resolves include, src, libraries, and libpath. Patching only this wrapper might be too narrow, since it wouldn't address future Fortran-linking contexts that go through library-manifest.
Per office hours discussion, the fix should live in @stdlib/utils/library-manifest so that Fortran source files are resolved uniformly when resolving a package's dependency tree, regardless of the task the caller queried.
Once the resolver is correct, downstream cleanup for the Fortran benchmark wrapper in tools/scripts/ should consume the resolved source list (mirroring its C counterpart), and the merged Fortran benchmark Makefiles' hardcoded SOURCE_FILES defaults should match the C-benchmark Makefile convention.
Related Issues
Related PRs #11332 and #11333.
Questions
No.
Demo
No response
Reproduction
# In a checkout of stdlib develop:
cd lib/node_modules/@stdlib/blas/base/dger/benchmark/fortran
make
Expected Results
Benchmark links successfully; xerbla resolves via the manifest dependency graph (dger's manifest already lists @stdlib/blas/base/xerbla as a dependency under task: 'benchmark'.
Actual Results
Undefined symbols for architecture arm64:
"_xerbla", referenced from:
_dger in ccCfvnCt.o
ld: symbol(s) not found for architecture arm64
collect2: error: ld returned 1 exit status
make: *** [benchmark.length.out] Error 1
Linker fails with an unresolved reference to xerbla. The dependency's .f source is never surfaced because library-manifest only declares Fortran sources under task: 'build'.
Version
develop
Environments
N/A
Browser Version
No response
Node.js / npm Version
No response
Platform
Reproduces on any platform with gfortran + make (linux/macOS verified).
Checklist
- Read and understood the Code of Conduct.
- Searched for existing issues and pull requests.
- Lingua principale
- JavaScript
- Stelle
- 6k
- Fork
- 1.3k
- Merge medio
- 1g 3h
- PR unite (30g)
- 585
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di stdlib-js/stdlib
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
stdlib-js/stdlib#15456 · 3 commenti · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
stdlib-js/stdlib#15193 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Fix JavaScript lint errorsApertaGood First Issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
stdlib-js/stdlib#14759 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Fix C lint errorsAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di stdlib-js/stdlib
Issue simili
-
bug good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
amponce/archive-movie-browser#354 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
saayam-for-all/webapp#1870 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Imageomics/OpenCite#66 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
chr15m/twiiit.com#20 ·
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
antropos17/Aegis#629 ·
I maintainer di solito rispondono entro 4 giorni