On Sun, Jun 04, 2023 at 05:48:24PM +0000, Brian Callahan wrote:
> Hi ports --
> 
> Attached is an update to devel/dwz. The main benefit for us is a modest
> speedup.
> 
> The full announcement with changes is here:
> https://sourceware.org/pipermail/dwz/2022q4/001385.html
> 
> Seems OK on my end on amd64. But since dwz is integral for debug
> packages, looking for more eyeballs.
> 
> OK?
> 
> ~Brian

You fetch xxhash and turn it into a local include.
Did you try adding the following as dependency instead?

        $ pkglocate include/xxhash.h
        xxhash-0.8.1p0:sysutils/xxhash:/usr/local/include/xxhash.h


> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/devel/dwz/Makefile,v
> retrieving revision 1.6
> diff -u -p -r1.6 Makefile
> --- Makefile  11 Mar 2022 18:50:00 -0000      1.6
> +++ Makefile  29 Nov 2022 23:40:09 -0000
> @@ -1,5 +1,8 @@
>  COMMENT =    DWARF optimization and duplicate removal tool
> -DISTNAME =   dwz-0.14
> +PKGNAME =    dwz-0.15
> +XXHASH_V =   0.8.1
> +DISTFILES =  ${PKGNAME}.tar.gz:0 \
> +             xxhash-${XXHASH_V}{xxhash}.h:1
>  
>  CATEGORIES = devel
>  
> @@ -11,7 +14,8 @@ PERMIT_PACKAGE =    Yes
>  
>  WANTLIB += c elf
>  
> -MASTER_SITES =       https://sourceware.org/ftp/dwz/releases/
> +MASTER_SITES0 =      https://sourceware.org/ftp/dwz/releases/
> +MASTER_SITES1 =      
> https://raw.githubusercontent.com/Cyan4973/xxHash/v${XXHASH_V}/
>  
>  DEBUG_PACKAGES =     ${BUILD_PACKAGES}
>  
> @@ -25,5 +29,23 @@ WRKDIST =  ${WRKDIR}/dwz
>  # XXX bootstrap: DEBUG_PACKAGES needs a dwz binary to work
>  
>  DWZ = ${WRKBUILD}/dwz
> +
> +EXTRACT_ONLY =       ${PKGNAME}.tar.gz
> +
> +post-extract:
> +     cp ${DISTDIR}/xxhash-${XXHASH_V}.h ${WRKSRC}/xxhash.h
> +
> +.include <bsd.port.arch.mk>
> +.if ${PROPERTIES:Mlp64}
> +CFLAGS +=    -DNATIVE_POINTER_SIZE=8
> +.else
> +CFLAGS +=    -DNATIVE_POINTER_SIZE=4
> +.endif
> +
> +.if ${PROPERTIES:Mle}
> +CFLAGS +=    -DNATIVE_ENDIAN_VAL=ELFDATA2LSB
> +.else
> +CFLAGS +=    -DNATIVE_ENDIAN_VAL=ELFDATA2MSB
> +.endif
>  
>  .include <bsd.port.mk>
> Index: distinfo
> ===================================================================
> RCS file: /cvs/ports/devel/dwz/distinfo,v
> retrieving revision 1.2
> diff -u -p -r1.2 distinfo
> --- distinfo  8 Mar 2021 16:51:11 -0000       1.2
> +++ distinfo  29 Nov 2022 23:40:09 -0000
> @@ -1,2 +1,4 @@
> -SHA256 (dwz-0.14.tar.gz) = MwBuq4df8KB/E/yIWIPFvZUU2D7OqfGLxGtXMt3fDR8=
> -SIZE (dwz-0.14.tar.gz) = 186623
> +SHA256 (dwz-0.15.tar.gz) = 7VnGEuIEFeaX+8RRH1J+91cAe8VvoalU5JrKHans+0Q=
> +SHA256 (xxhash-0.8.1.h) = 1PK5G1R8eQYWSRhnIaazMWCfK/hZVIWiHqYxyC7D75M=
> +SIZE (dwz-0.15.tar.gz) = 192777
> +SIZE (xxhash-0.8.1.h) = 209646
> Index: patches/patch-Makefile
> ===================================================================
> RCS file: /cvs/ports/devel/dwz/patches/patch-Makefile,v
> retrieving revision 1.3
> diff -u -p -r1.3 patch-Makefile
> --- patches/patch-Makefile    11 Mar 2022 18:50:00 -0000      1.3
> +++ patches/patch-Makefile    29 Nov 2022 23:40:09 -0000
> @@ -6,31 +6,76 @@ Convert to bsd make
>  Index: Makefile
>  --- Makefile.orig
>  +++ Makefile
> -@@ -1,20 +1,16 @@
> +@@ -1,51 +1,21 @@
>  -ifneq ($(srcdir),)
>  -VPATH = $(srcdir)
>  -else
>  -srcdir=$(shell pwd)
>  -endif
> +-
>  -CFLAGS = -O2 -g
>  -DWZ_VERSION := $(shell cat $(srcdir)/VERSION)
> --override CFLAGS += -Wall -W -D_FILE_OFFSET_BITS=64 \
> --    -DDWZ_VERSION='"$(DWZ_VERSION)"' $(shell cat $(srcdir)/COPYRIGHT_YEARS)
> +-CFLAGS_VERSION = -DDWZ_VERSION='"$(DWZ_VERSION)"'
> +-CFLAGS_COPYRIGHT = $(shell cat $(srcdir)/COPYRIGHT_YEARS)
> +-CFLAGS_COMMON = -Wall -W -D_FILE_OFFSET_BITS=64
> +-XXH_PROG = "\#define XXH_INLINE_ALL 1\n\#include <xxhash.h>\n"
> +-XXH_INLINE_ALL_WORKS = $(shell printf $(XXH_PROG) \
> +-            | $(CC) -xc -c - -o /dev/null 2>/dev/null \
> +-            && echo -n 1)
> +-ifeq "$(XXH_INLINE_ALL_WORKS)" "1"
> +-  CFLAGS_COMMON += -DXXH_INLINE_ALL=1
> +-endif
> +-
> +-override CFLAGS += $(CFLAGS_COMMON) $(CFLAGS_VERSION) $(CFLAGS_COPYRIGHT)
> +-
>  +srcdir = .
>  +CFLAGS ?= -O2 -g
>  +DWZ_VERSION != cat $(srcdir)/VERSION
>  +CFLAGS += -DDWZ_VERSION='"$(DWZ_VERSION)"'
>  +CFLAGS !+= cat $(srcdir)/COPYRIGHT_YEARS
> ++CFLAGS += -D_FILE_OFFSET_BITS=64
> ++CFLAGS += -DXXH_INLINE_ALL=1
>   prefix = /usr
>   exec_prefix = $(prefix)
>   bindir = $(exec_prefix)/bin
>   datarootdir = $(prefix)/share
>   mandir = $(datarootdir)/man
> --OBJECTS = dwz.o hashtab.o sha1.o dwarfnames.o
> -+OBJECTS = dwz.o hashtab.o sha1.o dwarfnames.o obstack.o
> +-OBJECTS = args.o dwz.o hashtab.o pool.o sha1.o dwarfnames.o
> ++OBJECTS = args.o dwz.o hashtab.o pool.o sha1.o dwarfnames.o obstack.o
> + LIBS=-lelf
> +-ifneq "$(XXH_INLINE_ALL_WORKS)" "1"
> +-LIBS += -lxxhash
> +-endif
>   dwz: $(OBJECTS)
> --    $(CC) $(LDFLAGS) -o $@ $^ -lelf
> -+    $(CC) $(LDFLAGS) -o $@ $(OBJECTS) -lelf
> +-    $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
> +-args.o: native.o
> +-args.o: CFLAGS_FOR_SOURCE = \
> +-    -DNATIVE_ENDIAN_VAL=$(NATIVE_ENDIAN_VAL) \
> +-    -DNATIVE_POINTER_SIZE=$(NATIVE_POINTER_SIZE)
> +-NATIVE_ENDIAN=$(shell readelf -h native.o \
> +-    | grep Data \
> +-    | sed 's/.*, //;s/ endian//')
> +-NATIVE_ENDIAN_LITTLE=$(findstring $(NATIVE_ENDIAN),$(findstring 
> little,$(NATIVE_ENDIAN)))
> +-NATIVE_ENDIAN_BIG=$(findstring $(NATIVE_ENDIAN),$(findstring 
> big,$(NATIVE_ENDIAN)))
> +-NATIVE_ENDIAN_VAL=$(if $(NATIVE_ENDIAN_LITTLE),ELFDATA2LSB,$(if 
> $(NATIVE_ENDIAN_BIG),ELFDATA2MSB,ELFDATANONE))
> +-NATIVE_POINTER_SIZE=$(shell readelf -wi native.o \
> +-    | grep "Pointer Size:" \
> +-    | sed 's/.*: *//')
> ++    $(CC) $(LDFLAGS) -o $@ $(OBJECTS) $(LIBS)
> + %.o: %.c
> +-    $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< $(CFLAGS_FOR_SOURCE)
> ++    $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
>   install: dwz
>       install -D dwz $(DESTDIR)$(bindir)/dwz
>       install -D -m 644 $(srcdir)/dwz.1 $(DESTDIR)$(mandir)/man1/dwz.1
> +@@ -53,10 +23,6 @@ clean:
> +     rm -f $(OBJECTS) *~ core* dwz $(TEST_EXECS) $(DWZ_TEST_OBJECTS) \
> +       dwz.log dwz.sum native.c native.o
> +     rm -Rf testsuite-bin tmp.*
> +-native.c:
> +-    echo "int main (void) { return 0; }" > $@
> +-native.o: native.c
> +-    $(CC) -o $@ $< -c -g
> + 
> + PWD:=$(shell pwd -P)
> + 
> Index: patches/patch-args_c
> ===================================================================
> RCS file: patches/patch-args_c
> diff -N patches/patch-args_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-args_c      29 Nov 2022 23:40:09 -0000
> @@ -0,0 +1,32 @@
> +Correctly get processors online.
> +
> +Index: args.c
> +--- args.c.orig
> ++++ args.c
> +@@ -25,14 +25,15 @@
> + #include <stdio.h>
> + #include <string.h>
> + #include <stdlib.h>
> +-#include <error.h>
> ++#include <unistd.h>
> + #include <gelf.h>
> +-#include <sys/sysinfo.h>
> + 
> + #include "args.h"
> + 
> + #include "util.h"
> + 
> ++extern void error(int, int, const char *, ...);
> ++
> + #if DEVEL
> + int tracing;
> + int ignore_size;
> +@@ -735,7 +736,7 @@ parse_args (int argc, char *argv[], bool *hardlink, co
> + 
> +   if (max_forks == -1)
> +     {
> +-      long nprocs = get_nprocs ();
> ++      long nprocs = sysconf(_SC_NPROCESSORS_ONLN);
> +       /* Be conservative on max forks: 4 procs may be actually be 4 SMT
> +      threads with only 2 cores.  */
> +       max_forks = nprocs / 2;
> Index: patches/patch-dwz_c
> ===================================================================
> RCS file: /cvs/ports/devel/dwz/patches/patch-dwz_c,v
> retrieving revision 1.3
> diff -u -p -r1.3 patch-dwz_c
> --- patches/patch-dwz_c       11 Mar 2022 18:50:00 -0000      1.3
> +++ patches/patch-dwz_c       29 Nov 2022 23:40:09 -0000
> @@ -1,39 +1,46 @@
>  Create error() function, Linux-ism.
>  Our libelf doesn't have some of these defines.
>  obstack is not a system header
> +xxhash is not a system header
>  
>  Index: dwz.c
>  --- dwz.c.orig
>  +++ dwz.c
> -@@ -20,11 +20,11 @@
> +@@ -20,13 +20,13 @@
>   
>   #include <assert.h>
>   #include <errno.h>
>  -#include <error.h>
>   #include <fcntl.h>
> - #include <getopt.h>
>   #include <setjmp.h>
>   #include <string.h>
> -+#include <stdarg.h>
>   #include <stdbool.h>
>   #include <stddef.h>
>   #include <stdint.h>
> -@@ -36,7 +36,7 @@
> - #include <sys/types.h>
> ++#include <stdarg.h>
> + #include <inttypes.h>
> + #include <stdlib.h>
> + #include <unistd.h>
> +@@ -36,10 +36,10 @@
>   #include <sys/times.h>
> + #include <sys/wait.h>
>   
>  -#include <obstack.h>
>  +#include "obstack.h"
>   
>   #include <gelf.h>
> +-#include <xxhash.h>
> ++#include "xxhash.h"
> + 
>   #include "dwarf2.h"
> -@@ -165,6 +165,29 @@ report_progress (void)
> + #include "hashtab.h"
> +@@ -216,6 +216,29 @@ report_progress (void)
>   /* Where to longjmp on OOM.  */
>   static jmp_buf oom_buf;
>   
>  +/* error () wrapper based on the Linux manual page at
>  +   http://man7.org/linux/man-pages/man3/error.3.html.  */
> -+static void
> ++void
>  +error (int status, int errnum, const char *fmt, ...)
>  +{
>  +  va_list ap;
> @@ -57,7 +64,7 @@ Index: dwz.c
>   /* Handle OOM situation.  If handling more than one file, we might
>      just fail to handle some large file due to OOM, but could very well
>      handle other smaller files after it.  */
> -@@ -13723,7 +13746,7 @@ fdopen_dso (int fd, const char *name)
> +@@ -13675,7 +13698,7 @@ fdopen_dso (int fd, const char *name)
>     int i;
>     DSO *dso = NULL;
>   
> @@ -66,7 +73,7 @@ Index: dwz.c
>     if (elf == NULL)
>       {
>         error (0, 0, "cannot open ELF file: %s", elf_errmsg (-1));
> -@@ -13761,7 +13784,7 @@ fdopen_dso (int fd, const char *name)
> +@@ -13713,7 +13736,7 @@ fdopen_dso (int fd, const char *name)
>         goto error_out;
>       }
>   
> @@ -75,7 +82,7 @@ Index: dwz.c
>   
>     memset (dso, 0, sizeof(DSO));
>     dso->elf = elf;
> -@@ -14258,7 +14281,7 @@ write_dso (DSO *dso, const char *file, struct stat 
> *st
> +@@ -14210,7 +14233,7 @@ write_dso (DSO *dso, const char *file, struct stat 
> *st
>         free (shstrtab);
>         return 1;
>       }
> @@ -84,7 +91,7 @@ Index: dwz.c
>     for (i = 0; i < ehdr.e_phnum; ++i)
>       {
>         GElf_Phdr *phdr, phdr_mem;
> -@@ -14331,7 +14354,7 @@ write_dso (DSO *dso, const char *file, struct stat 
> *st
> +@@ -14283,7 +14306,7 @@ write_dso (DSO *dso, const char *file, struct stat 
> *st
>       }
>       }
>   
> @@ -93,7 +100,7 @@ Index: dwz.c
>       {
>         error (0, 0, "%s: elf_update failed", dso->filename);
>         unlink (file);
> -@@ -15917,7 +15940,7 @@ optimize_multifile (unsigned int *die_count)
> +@@ -15902,7 +15925,7 @@ optimize_multifile (unsigned int *die_count)
>         error (0, 0, "Could not create new ELF headers");
>         goto fail;
>       }
> @@ -102,7 +109,7 @@ Index: dwz.c
>   
>     sha1_init_ctx (&ctx);
>     for (i = 0; debug_sections[i].name; i++)
> -@@ -16010,7 +16033,7 @@ optimize_multifile (unsigned int *die_count)
> +@@ -15995,7 +16018,7 @@ optimize_multifile (unsigned int *die_count)
>     data->d_off = 0;
>     data->d_align = 1;
>   

Reply via email to