elfutils-libdw: construir también libdwfl (dwarves lo necesita)
dwarves llama a 15 `dwfl_*` distintas desde dwarf_loader.c, así que libdw sola no alcanza. libdwfl SÍ arrastra argp (argp-std.c) y fts (linux-kernel-modules.c) ⇒ la receta declara `argp-standalone` y `musl-fts`. Esos objetos casi nunca se enlazan (dwarves no usa dwfl_standard_argp ni dwfl_linux_kernel_*) pero tienen que COMPILAR. Dos cosas que costaron: · libdwfl no se puede construir suelto: su Makefile lee los .manifest de otros subdirs. Hay que seguir el orden de SUBDIRS del raíz: lib → libelf → libcpu → backends → libebl → libdwelf → libdw → libdwfl. · `rm -f compat/argp.h`: el shim de la canónica es sólo tipos/decls y no declara `argp_failure`, que usa argp-std.c. Como esta variante trae argp de verdad, hay que BORRAR el shim para que gane el /usr/include/argp.h real — `-I$PWD/compat` va primero y si no lo tapa.
This commit is contained in:
@@ -33,8 +33,14 @@
|
||||
# · `obstack` → en `libdw/` aparece UNA vez y es **dentro de un COMENTARIO** de `libdwP.h`:
|
||||
# elfutils lleva su propia «simplified thread-local reimplementation of obstacks» y NO incluye
|
||||
# `<obstack.h>` en ningún sitio de libdw.
|
||||
# ⇒ construir `libdw` no necesita ni argp ni fts ni obstack de verdad; los stubs de `compat/` que
|
||||
# ya monta la fase configure siguen bastando.
|
||||
# ⇒ `libdw` a secas no necesita ni argp ni fts ni obstack de verdad.
|
||||
#
|
||||
# ⚠ PERO `dwarves` SÍ necesita `libdwfl` (llama a 15 `dwfl_*` distintas desde `dwarf_loader.c`), y
|
||||
# libdwfl sí arrastra los dos: `argp-std.c` usa argp y `linux-kernel-modules.c` usa fts. Por eso
|
||||
# esta receta declara `argp-standalone` y `musl-fts`: no por libdw, por libdwfl.
|
||||
# En la práctica esos objetos casi nunca se ENLAZAN (dwarves no usa `dwfl_standard_argp` ni
|
||||
# `dwfl_linux_kernel_*`), pero tienen que COMPILAR, y para eso hacen falta `<argp.h>` y `<fts.h>`
|
||||
# de verdad — el `compat/` de la canónica trae un argp.h de mentira y NINGÚN fts.h.
|
||||
#
|
||||
name = "elfutils-libdw"
|
||||
version = "0.194"
|
||||
@@ -50,7 +56,7 @@ link = "dynamic"
|
||||
zig_version = "0.13.0"
|
||||
|
||||
[deps]
|
||||
build = ["binutils"]
|
||||
build = ["binutils", "argp-standalone", "musl-fts"]
|
||||
|
||||
[build.phases]
|
||||
configure = """
|
||||
@@ -137,7 +143,11 @@ CFLAGS="-O2 -g -I$PWD/compat" CPPFLAGS="-I$PWD/compat" LDFLAGS="-L$PWD/compat" \
|
||||
# El -include del shim de rawmemchr va SÓLO en compile (en configure rompe el test "undeclared builtins"
|
||||
# de autoconf). CFLAGS aquí reemplaza el de configure (mismo valor + el -include); AM_CFLAGS (warnings/
|
||||
# -Werror) se preserva.
|
||||
compile = "make -C lib CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libelf libelf.a libelf.so CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libdw libdw.a CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\""
|
||||
# ⚠ `rm -f compat/argp.h`: el shim de la canónica es sólo tipos/decls y NO declara
|
||||
# `argp_failure`, que usa `libdwfl/argp-std.c`. Esta variante SÍ trae argp de verdad
|
||||
# (`argp-standalone`), así que se borra el shim para que gane el `/usr/include/argp.h` real —
|
||||
# `-I$PWD/compat` va primero y si no lo taparía.
|
||||
compile = "rm -f compat/argp.h && make -C lib CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libelf libelf.a libelf.so CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libcpu CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C backends CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libebl CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libdwelf CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libdw libdw.a CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libdwfl libdwfl.a CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\""
|
||||
install = """
|
||||
mkdir -p /out/usr/lib/pkgconfig /out/usr/include && \
|
||||
cp -a libelf/libelf.a libelf/libelf.so* /out/usr/lib/ && \
|
||||
@@ -146,7 +156,11 @@ cp -a config/libelf.pc /out/usr/lib/pkgconfig/ 2>/dev/null || true
|
||||
mkdir -p /out/usr/include/elfutils
|
||||
cp -a libdw/libdw.a /out/usr/lib/
|
||||
cp -a libdw/dwarf.h libdw/libdw.h libdw/known-dwarf.h /out/usr/include/
|
||||
cp -a libdwfl/libdwfl.h /out/usr/include/
|
||||
cp -a libdw/libdw.a libdwfl/libdwfl.a /out/usr/lib/
|
||||
cp -a libdw/libdw.h libdw/known-dwarf.h /out/usr/include/elfutils/
|
||||
cp -a libdwfl/libdwfl.h /out/usr/include/elfutils/
|
||||
cp -a version.h /out/usr/include/elfutils/ 2>/dev/null || true
|
||||
cp -a config/libdw.pc /out/usr/lib/pkgconfig/ 2>/dev/null || true
|
||||
test -f /out/usr/lib/libdw.a && test -f /out/usr/include/dwarf.h && test -f /out/usr/include/libdw.h
|
||||
test -f /out/usr/lib/libdw.a && test -f /out/usr/include/dwarf.h && test -f /out/usr/include/libdw.h && test -f /out/usr/lib/libdwfl.a && test -f /out/usr/include/elfutils/libdwfl.h
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user