diff mbox series

benchtests: Building benchmarks as static executables

Message ID 20210730212204.1832487-1-hjl.tools@gmail.com
State Superseded
Headers show
Series benchtests: Building benchmarks as static executables | expand

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent
dj/TryBot-32bit success Build for i686

Commit Message

H.J. Lu July 30, 2021, 9:22 p.m. UTC
Building benchmarks as static executables:
=========================================

To build benchmarks as static executables, on the build system, run:

  $ make STATIC-BENCHTESTS=yes bench-build

You can copy benchmark executables to another machine and run them
without copying the source nor build directories.
---
 benchtests/Makefile | 26 +++++++++++++++++++-------
 benchtests/README   | 10 ++++++++++
 2 files changed, 29 insertions(+), 7 deletions(-)

Comments

Carlos O'Donell Aug. 9, 2021, 1:01 p.m. UTC | #1
On 7/30/21 5:22 PM, H.J. Lu via Libc-alpha wrote:
> Building benchmarks as static executables:
> =========================================
> 
> To build benchmarks as static executables, on the build system, run:
> 
>   $ make STATIC-BENCHTESTS=yes bench-build
> 
> You can copy benchmark executables to another machine and run them
> without copying the source nor build directories.

Looking forward to a v2.

Fails to build for i686 with binutils 2.35, the README should mention
architecture and minimum binutils required.

Looks good on x86_64 which has has this feature for longer.

> ---
>  benchtests/Makefile | 26 +++++++++++++++++++-------
>  benchtests/README   | 10 ++++++++++
>  2 files changed, 29 insertions(+), 7 deletions(-)
> 
> diff --git a/benchtests/Makefile b/benchtests/Makefile
> index 1530939a8c..4fcd73131a 100644
> --- a/benchtests/Makefile
> +++ b/benchtests/Makefile
> @@ -110,11 +110,23 @@ else
>  bench-malloc := $(filter malloc-%,${BENCHSET})
>  endif
>  
> -$(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
> -$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm)
> -$(addprefix $(objpfx)bench-,$(bench-pthread)): $(shared-thread-library)
> -$(addprefix $(objpfx)bench-,$(bench-malloc)): $(shared-thread-library)
> -$(addprefix $(objpfx)bench-,pthread-locks): $(libm)
> +ifeq (${STATIC-BENCHTESTS},yes)
> ++link-benchtests = $(+link-static-tests)
> +link-libc-benchtests = $(link-libc-static)
> +libm-benchtests = $(common-objpfx)math/libm.a
> +thread-library-benchtests = $(static-thread-library)
> +else
> +link-libc-benchtests = $(link-libc)
> ++link-benchtests = $(+link-tests)
> +thread-library-benchtests = $(shared-thread-library)
> +libm-benchtests = $(libm)
> +endif
> +
> +$(addprefix $(objpfx)bench-,$(bench-math)): $(libm-benchtests)
> +$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm-benchtests)
> +$(addprefix $(objpfx)bench-,$(bench-pthread)): $(thread-library-benchtests)
> +$(addprefix $(objpfx)bench-,$(bench-malloc)): $(thread-library-benchtests)
> +$(addprefix $(objpfx)bench-,pthread-locks): $(libm-benchtests)
>  
>  
>  
> @@ -270,9 +282,9 @@ bench-link-targets = $(timing-type) $(binaries-bench) $(binaries-benchset) \
>  
>  $(bench-link-targets): %: %.o $(objpfx)json-lib.o \
>  	$(link-extra-libs-tests) \
> -  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
> +  $(sort $(filter $(common-objpfx)lib%,$(link-libc-benchtests))) \
>    $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
> -	$(+link-tests)
> +	$(+link-benchtests)
>  
>  $(bench-link-targets): LDFLAGS += $(link-bench-bind-now)
>  
> diff --git a/benchtests/README b/benchtests/README
> index 44736d7e63..4d83a05b4b 100644
> --- a/benchtests/README
> +++ b/benchtests/README
> @@ -62,6 +62,16 @@ otherwise the above command may try to build the benchmark again.  Benchmarks
>  that require generated code to be executed during the build are skipped when
>  cross-building.
>  
> +Building benchmarks as static executables:
> +=========================================
> +
> +To build benchmarks as static executables, on the build system, run:
> +
> +  $ make STATIC-BENCHTESTS=yes bench-build
> +
> +You can copy benchmark executables to another machine and run them
> +without copying the source nor build directories.
> +
>  Running subsets of benchmarks:
>  ==============================
>  
>
H.J. Lu Aug. 9, 2021, 2:18 p.m. UTC | #2
On Mon, Aug 9, 2021 at 6:01 AM Carlos O'Donell <carlos@redhat.com> wrote:
>
> On 7/30/21 5:22 PM, H.J. Lu via Libc-alpha wrote:
> > Building benchmarks as static executables:
> > =========================================
> >
> > To build benchmarks as static executables, on the build system, run:
> >
> >   $ make STATIC-BENCHTESTS=yes bench-build
> >
> > You can copy benchmark executables to another machine and run them
> > without copying the source nor build directories.
>
> Looking forward to a v2.
>
> Fails to build for i686 with binutils 2.35, the README should mention
> architecture and minimum binutils required.

I sent out the v2 patch with

On i686, there is no multiarch memove in libc.a, don't include multiarch
memove in ifunc-impl-list.c in libc.a.

> Looks good on x86_64 which has has this feature for longer.
>
> > ---
> >  benchtests/Makefile | 26 +++++++++++++++++++-------
> >  benchtests/README   | 10 ++++++++++
> >  2 files changed, 29 insertions(+), 7 deletions(-)
> >
> > diff --git a/benchtests/Makefile b/benchtests/Makefile
> > index 1530939a8c..4fcd73131a 100644
> > --- a/benchtests/Makefile
> > +++ b/benchtests/Makefile
> > @@ -110,11 +110,23 @@ else
> >  bench-malloc := $(filter malloc-%,${BENCHSET})
> >  endif
> >
> > -$(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
> > -$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm)
> > -$(addprefix $(objpfx)bench-,$(bench-pthread)): $(shared-thread-library)
> > -$(addprefix $(objpfx)bench-,$(bench-malloc)): $(shared-thread-library)
> > -$(addprefix $(objpfx)bench-,pthread-locks): $(libm)
> > +ifeq (${STATIC-BENCHTESTS},yes)
> > ++link-benchtests = $(+link-static-tests)
> > +link-libc-benchtests = $(link-libc-static)
> > +libm-benchtests = $(common-objpfx)math/libm.a
> > +thread-library-benchtests = $(static-thread-library)
> > +else
> > +link-libc-benchtests = $(link-libc)
> > ++link-benchtests = $(+link-tests)
> > +thread-library-benchtests = $(shared-thread-library)
> > +libm-benchtests = $(libm)
> > +endif
> > +
> > +$(addprefix $(objpfx)bench-,$(bench-math)): $(libm-benchtests)
> > +$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm-benchtests)
> > +$(addprefix $(objpfx)bench-,$(bench-pthread)): $(thread-library-benchtests)
> > +$(addprefix $(objpfx)bench-,$(bench-malloc)): $(thread-library-benchtests)
> > +$(addprefix $(objpfx)bench-,pthread-locks): $(libm-benchtests)
> >
> >
> >
> > @@ -270,9 +282,9 @@ bench-link-targets = $(timing-type) $(binaries-bench) $(binaries-benchset) \
> >
> >  $(bench-link-targets): %: %.o $(objpfx)json-lib.o \
> >       $(link-extra-libs-tests) \
> > -  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
> > +  $(sort $(filter $(common-objpfx)lib%,$(link-libc-benchtests))) \
> >    $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
> > -     $(+link-tests)
> > +     $(+link-benchtests)
> >
> >  $(bench-link-targets): LDFLAGS += $(link-bench-bind-now)
> >
> > diff --git a/benchtests/README b/benchtests/README
> > index 44736d7e63..4d83a05b4b 100644
> > --- a/benchtests/README
> > +++ b/benchtests/README
> > @@ -62,6 +62,16 @@ otherwise the above command may try to build the benchmark again.  Benchmarks
> >  that require generated code to be executed during the build are skipped when
> >  cross-building.
> >
> > +Building benchmarks as static executables:
> > +=========================================
> > +
> > +To build benchmarks as static executables, on the build system, run:
> > +
> > +  $ make STATIC-BENCHTESTS=yes bench-build
> > +
> > +You can copy benchmark executables to another machine and run them
> > +without copying the source nor build directories.
> > +
> >  Running subsets of benchmarks:
> >  ==============================
> >
> >
>
>
> --
> Cheers,
> Carlos.
>

Thanks.
Noah Goldstein Aug. 9, 2021, 7:10 p.m. UTC | #3
On Fri, Jul 30, 2021 at 5:22 PM H.J. Lu via Libc-alpha <
libc-alpha@sourceware.org> wrote:

> Building benchmarks as static executables:
> =========================================
>
> To build benchmarks as static executables, on the build system, run:
>
>   $ make STATIC-BENCHTESTS=yes bench-build
>
>
Any chance you could add a -falign option for this?


> You can copy benchmark executables to another machine and run them
> without copying the source nor build directories.
> ---
>  benchtests/Makefile | 26 +++++++++++++++++++-------
>  benchtests/README   | 10 ++++++++++
>  2 files changed, 29 insertions(+), 7 deletions(-)
>
> diff --git a/benchtests/Makefile b/benchtests/Makefile
> index 1530939a8c..4fcd73131a 100644
> --- a/benchtests/Makefile
> +++ b/benchtests/Makefile
> @@ -110,11 +110,23 @@ else
>  bench-malloc := $(filter malloc-%,${BENCHSET})
>  endif
>
> -$(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
> -$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm)
> -$(addprefix $(objpfx)bench-,$(bench-pthread)): $(shared-thread-library)
> -$(addprefix $(objpfx)bench-,$(bench-malloc)): $(shared-thread-library)
> -$(addprefix $(objpfx)bench-,pthread-locks): $(libm)
> +ifeq (${STATIC-BENCHTESTS},yes)
> ++link-benchtests = $(+link-static-tests)
> +link-libc-benchtests = $(link-libc-static)
> +libm-benchtests = $(common-objpfx)math/libm.a
> +thread-library-benchtests = $(static-thread-library)
> +else
> +link-libc-benchtests = $(link-libc)
> ++link-benchtests = $(+link-tests)
> +thread-library-benchtests = $(shared-thread-library)
> +libm-benchtests = $(libm)
> +endif
> +
> +$(addprefix $(objpfx)bench-,$(bench-math)): $(libm-benchtests)
> +$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm-benchtests)
> +$(addprefix $(objpfx)bench-,$(bench-pthread)):
> $(thread-library-benchtests)
> +$(addprefix $(objpfx)bench-,$(bench-malloc)): $(thread-library-benchtests)
> +$(addprefix $(objpfx)bench-,pthread-locks): $(libm-benchtests)
>
>
>
> @@ -270,9 +282,9 @@ bench-link-targets = $(timing-type) $(binaries-bench)
> $(binaries-benchset) \
>
>  $(bench-link-targets): %: %.o $(objpfx)json-lib.o \
>         $(link-extra-libs-tests) \
> -  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
> +  $(sort $(filter $(common-objpfx)lib%,$(link-libc-benchtests))) \
>    $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
> -       $(+link-tests)
> +       $(+link-benchtests)
>
>  $(bench-link-targets): LDFLAGS += $(link-bench-bind-now)
>
> diff --git a/benchtests/README b/benchtests/README
> index 44736d7e63..4d83a05b4b 100644
> --- a/benchtests/README
> +++ b/benchtests/README
> @@ -62,6 +62,16 @@ otherwise the above command may try to build the
> benchmark again.  Benchmarks
>  that require generated code to be executed during the build are skipped
> when
>  cross-building.
>
> +Building benchmarks as static executables:
> +=========================================
> +
> +To build benchmarks as static executables, on the build system, run:
> +
> +  $ make STATIC-BENCHTESTS=yes bench-build
> +
> +You can copy benchmark executables to another machine and run them
> +without copying the source nor build directories.
> +
>  Running subsets of benchmarks:
>  ==============================
>
> --
> 2.31.1
>
>
H.J. Lu Aug. 9, 2021, 7:33 p.m. UTC | #4
On Mon, Aug 9, 2021 at 12:10 PM Noah Goldstein <goldstein.w.n@gmail.com> wrote:
>
>
>
> On Fri, Jul 30, 2021 at 5:22 PM H.J. Lu via Libc-alpha <libc-alpha@sourceware.org> wrote:
>>
>> Building benchmarks as static executables:
>> =========================================
>>
>> To build benchmarks as static executables, on the build system, run:
>>
>>   $ make STATIC-BENCHTESTS=yes bench-build
>>
>
> Any chance you could add a -falign option for this?

To build glibc or build a specific bench test?

>>
>> You can copy benchmark executables to another machine and run them
>> without copying the source nor build directories.
>> ---
>>  benchtests/Makefile | 26 +++++++++++++++++++-------
>>  benchtests/README   | 10 ++++++++++
>>  2 files changed, 29 insertions(+), 7 deletions(-)
>>
>> diff --git a/benchtests/Makefile b/benchtests/Makefile
>> index 1530939a8c..4fcd73131a 100644
>> --- a/benchtests/Makefile
>> +++ b/benchtests/Makefile
>> @@ -110,11 +110,23 @@ else
>>  bench-malloc := $(filter malloc-%,${BENCHSET})
>>  endif
>>
>> -$(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
>> -$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm)
>> -$(addprefix $(objpfx)bench-,$(bench-pthread)): $(shared-thread-library)
>> -$(addprefix $(objpfx)bench-,$(bench-malloc)): $(shared-thread-library)
>> -$(addprefix $(objpfx)bench-,pthread-locks): $(libm)
>> +ifeq (${STATIC-BENCHTESTS},yes)
>> ++link-benchtests = $(+link-static-tests)
>> +link-libc-benchtests = $(link-libc-static)
>> +libm-benchtests = $(common-objpfx)math/libm.a
>> +thread-library-benchtests = $(static-thread-library)
>> +else
>> +link-libc-benchtests = $(link-libc)
>> ++link-benchtests = $(+link-tests)
>> +thread-library-benchtests = $(shared-thread-library)
>> +libm-benchtests = $(libm)
>> +endif
>> +
>> +$(addprefix $(objpfx)bench-,$(bench-math)): $(libm-benchtests)
>> +$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm-benchtests)
>> +$(addprefix $(objpfx)bench-,$(bench-pthread)): $(thread-library-benchtests)
>> +$(addprefix $(objpfx)bench-,$(bench-malloc)): $(thread-library-benchtests)
>> +$(addprefix $(objpfx)bench-,pthread-locks): $(libm-benchtests)
>>
>>
>>
>> @@ -270,9 +282,9 @@ bench-link-targets = $(timing-type) $(binaries-bench) $(binaries-benchset) \
>>
>>  $(bench-link-targets): %: %.o $(objpfx)json-lib.o \
>>         $(link-extra-libs-tests) \
>> -  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
>> +  $(sort $(filter $(common-objpfx)lib%,$(link-libc-benchtests))) \
>>    $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
>> -       $(+link-tests)
>> +       $(+link-benchtests)
>>
>>  $(bench-link-targets): LDFLAGS += $(link-bench-bind-now)
>>
>> diff --git a/benchtests/README b/benchtests/README
>> index 44736d7e63..4d83a05b4b 100644
>> --- a/benchtests/README
>> +++ b/benchtests/README
>> @@ -62,6 +62,16 @@ otherwise the above command may try to build the benchmark again.  Benchmarks
>>  that require generated code to be executed during the build are skipped when
>>  cross-building.
>>
>> +Building benchmarks as static executables:
>> +=========================================
>> +
>> +To build benchmarks as static executables, on the build system, run:
>> +
>> +  $ make STATIC-BENCHTESTS=yes bench-build
>> +
>> +You can copy benchmark executables to another machine and run them
>> +without copying the source nor build directories.
>> +
>>  Running subsets of benchmarks:
>>  ==============================
>>
>> --
>> 2.31.1
>>
Noah Goldstein Aug. 9, 2021, 8:07 p.m. UTC | #5
On Mon, Aug 9, 2021 at 3:34 PM H.J. Lu <hjl.tools@gmail.com> wrote:

> On Mon, Aug 9, 2021 at 12:10 PM Noah Goldstein <goldstein.w.n@gmail.com>
> wrote:
> >
> >
> >
> > On Fri, Jul 30, 2021 at 5:22 PM H.J. Lu via Libc-alpha <
> libc-alpha@sourceware.org> wrote:
> >>
> >> Building benchmarks as static executables:
> >> =========================================
> >>
> >> To build benchmarks as static executables, on the build system, run:
> >>
> >>   $ make STATIC-BENCHTESTS=yes bench-build
> >>
> >
> > Any chance you could add a -falign option for this?
>
> To build glibc or build a specific bench test?
>

I think the functions being benchmarked are the important ones so
if that's what you mean by a specific bench test then that should be
good. The entire build would be fine as well imho.


>
> >>
> >> You can copy benchmark executables to another machine and run them
> >> without copying the source nor build directories.
> >> ---
> >>  benchtests/Makefile | 26 +++++++++++++++++++-------
> >>  benchtests/README   | 10 ++++++++++
> >>  2 files changed, 29 insertions(+), 7 deletions(-)
> >>
> >> diff --git a/benchtests/Makefile b/benchtests/Makefile
> >> index 1530939a8c..4fcd73131a 100644
> >> --- a/benchtests/Makefile
> >> +++ b/benchtests/Makefile
> >> @@ -110,11 +110,23 @@ else
> >>  bench-malloc := $(filter malloc-%,${BENCHSET})
> >>  endif
> >>
> >> -$(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
> >> -$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm)
> >> -$(addprefix $(objpfx)bench-,$(bench-pthread)): $(shared-thread-library)
> >> -$(addprefix $(objpfx)bench-,$(bench-malloc)): $(shared-thread-library)
> >> -$(addprefix $(objpfx)bench-,pthread-locks): $(libm)
> >> +ifeq (${STATIC-BENCHTESTS},yes)
> >> ++link-benchtests = $(+link-static-tests)
> >> +link-libc-benchtests = $(link-libc-static)
> >> +libm-benchtests = $(common-objpfx)math/libm.a
> >> +thread-library-benchtests = $(static-thread-library)
> >> +else
> >> +link-libc-benchtests = $(link-libc)
> >> ++link-benchtests = $(+link-tests)
> >> +thread-library-benchtests = $(shared-thread-library)
> >> +libm-benchtests = $(libm)
> >> +endif
> >> +
> >> +$(addprefix $(objpfx)bench-,$(bench-math)): $(libm-benchtests)
> >> +$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm-benchtests)
> >> +$(addprefix $(objpfx)bench-,$(bench-pthread)):
> $(thread-library-benchtests)
> >> +$(addprefix $(objpfx)bench-,$(bench-malloc)):
> $(thread-library-benchtests)
> >> +$(addprefix $(objpfx)bench-,pthread-locks): $(libm-benchtests)
> >>
> >>
> >>
> >> @@ -270,9 +282,9 @@ bench-link-targets = $(timing-type)
> $(binaries-bench) $(binaries-benchset) \
> >>
> >>  $(bench-link-targets): %: %.o $(objpfx)json-lib.o \
> >>         $(link-extra-libs-tests) \
> >> -  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
> >> +  $(sort $(filter $(common-objpfx)lib%,$(link-libc-benchtests))) \
> >>    $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
> >> -       $(+link-tests)
> >> +       $(+link-benchtests)
> >>
> >>  $(bench-link-targets): LDFLAGS += $(link-bench-bind-now)
> >>
> >> diff --git a/benchtests/README b/benchtests/README
> >> index 44736d7e63..4d83a05b4b 100644
> >> --- a/benchtests/README
> >> +++ b/benchtests/README
> >> @@ -62,6 +62,16 @@ otherwise the above command may try to build the
> benchmark again.  Benchmarks
> >>  that require generated code to be executed during the build are
> skipped when
> >>  cross-building.
> >>
> >> +Building benchmarks as static executables:
> >> +=========================================
> >> +
> >> +To build benchmarks as static executables, on the build system, run:
> >> +
> >> +  $ make STATIC-BENCHTESTS=yes bench-build
> >> +
> >> +You can copy benchmark executables to another machine and run them
> >> +without copying the source nor build directories.
> >> +
> >>  Running subsets of benchmarks:
> >>  ==============================
> >>
> >> --
> >> 2.31.1
> >>
>
>
> --
> H.J.
>
H.J. Lu Aug. 9, 2021, 8:29 p.m. UTC | #6
On Mon, Aug 9, 2021 at 1:07 PM Noah Goldstein <goldstein.w.n@gmail.com> wrote:
>
>
>
> On Mon, Aug 9, 2021 at 3:34 PM H.J. Lu <hjl.tools@gmail.com> wrote:
>>
>> On Mon, Aug 9, 2021 at 12:10 PM Noah Goldstein <goldstein.w.n@gmail.com> wrote:
>> >
>> >
>> >
>> > On Fri, Jul 30, 2021 at 5:22 PM H.J. Lu via Libc-alpha <libc-alpha@sourceware.org> wrote:
>> >>
>> >> Building benchmarks as static executables:
>> >> =========================================
>> >>
>> >> To build benchmarks as static executables, on the build system, run:
>> >>
>> >>   $ make STATIC-BENCHTESTS=yes bench-build
>> >>
>> >
>> > Any chance you could add a -falign option for this?
>>
>> To build glibc or build a specific bench test?
>
>
> I think the functions being benchmarked are the important ones so
> if that's what you mean by a specific bench test then that should be
> good. The entire build would be fine as well imho.

I do

 $ BUILD_CC="gcc" CC="gcc" CXX="g++" CFLAGS="-O2 -g -ffoobar" .../configure

to pass -ffoobar to glibc build.

>
>>
>>
>> >>
>> >> You can copy benchmark executables to another machine and run them
>> >> without copying the source nor build directories.
>> >> ---
>> >>  benchtests/Makefile | 26 +++++++++++++++++++-------
>> >>  benchtests/README   | 10 ++++++++++
>> >>  2 files changed, 29 insertions(+), 7 deletions(-)
>> >>
>> >> diff --git a/benchtests/Makefile b/benchtests/Makefile
>> >> index 1530939a8c..4fcd73131a 100644
>> >> --- a/benchtests/Makefile
>> >> +++ b/benchtests/Makefile
>> >> @@ -110,11 +110,23 @@ else
>> >>  bench-malloc := $(filter malloc-%,${BENCHSET})
>> >>  endif
>> >>
>> >> -$(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
>> >> -$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm)
>> >> -$(addprefix $(objpfx)bench-,$(bench-pthread)): $(shared-thread-library)
>> >> -$(addprefix $(objpfx)bench-,$(bench-malloc)): $(shared-thread-library)
>> >> -$(addprefix $(objpfx)bench-,pthread-locks): $(libm)
>> >> +ifeq (${STATIC-BENCHTESTS},yes)
>> >> ++link-benchtests = $(+link-static-tests)
>> >> +link-libc-benchtests = $(link-libc-static)
>> >> +libm-benchtests = $(common-objpfx)math/libm.a
>> >> +thread-library-benchtests = $(static-thread-library)
>> >> +else
>> >> +link-libc-benchtests = $(link-libc)
>> >> ++link-benchtests = $(+link-tests)
>> >> +thread-library-benchtests = $(shared-thread-library)
>> >> +libm-benchtests = $(libm)
>> >> +endif
>> >> +
>> >> +$(addprefix $(objpfx)bench-,$(bench-math)): $(libm-benchtests)
>> >> +$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm-benchtests)
>> >> +$(addprefix $(objpfx)bench-,$(bench-pthread)): $(thread-library-benchtests)
>> >> +$(addprefix $(objpfx)bench-,$(bench-malloc)): $(thread-library-benchtests)
>> >> +$(addprefix $(objpfx)bench-,pthread-locks): $(libm-benchtests)
>> >>
>> >>
>> >>
>> >> @@ -270,9 +282,9 @@ bench-link-targets = $(timing-type) $(binaries-bench) $(binaries-benchset) \
>> >>
>> >>  $(bench-link-targets): %: %.o $(objpfx)json-lib.o \
>> >>         $(link-extra-libs-tests) \
>> >> -  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
>> >> +  $(sort $(filter $(common-objpfx)lib%,$(link-libc-benchtests))) \
>> >>    $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
>> >> -       $(+link-tests)
>> >> +       $(+link-benchtests)
>> >>
>> >>  $(bench-link-targets): LDFLAGS += $(link-bench-bind-now)
>> >>
>> >> diff --git a/benchtests/README b/benchtests/README
>> >> index 44736d7e63..4d83a05b4b 100644
>> >> --- a/benchtests/README
>> >> +++ b/benchtests/README
>> >> @@ -62,6 +62,16 @@ otherwise the above command may try to build the benchmark again.  Benchmarks
>> >>  that require generated code to be executed during the build are skipped when
>> >>  cross-building.
>> >>
>> >> +Building benchmarks as static executables:
>> >> +=========================================
>> >> +
>> >> +To build benchmarks as static executables, on the build system, run:
>> >> +
>> >> +  $ make STATIC-BENCHTESTS=yes bench-build
>> >> +
>> >> +You can copy benchmark executables to another machine and run them
>> >> +without copying the source nor build directories.
>> >> +
>> >>  Running subsets of benchmarks:
>> >>  ==============================
>> >>
>> >> --
>> >> 2.31.1
>> >>
>>
>>
>> --
>> H.J.
diff mbox series

Patch

diff --git a/benchtests/Makefile b/benchtests/Makefile
index 1530939a8c..4fcd73131a 100644
--- a/benchtests/Makefile
+++ b/benchtests/Makefile
@@ -110,11 +110,23 @@  else
 bench-malloc := $(filter malloc-%,${BENCHSET})
 endif
 
-$(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
-$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm)
-$(addprefix $(objpfx)bench-,$(bench-pthread)): $(shared-thread-library)
-$(addprefix $(objpfx)bench-,$(bench-malloc)): $(shared-thread-library)
-$(addprefix $(objpfx)bench-,pthread-locks): $(libm)
+ifeq (${STATIC-BENCHTESTS},yes)
++link-benchtests = $(+link-static-tests)
+link-libc-benchtests = $(link-libc-static)
+libm-benchtests = $(common-objpfx)math/libm.a
+thread-library-benchtests = $(static-thread-library)
+else
+link-libc-benchtests = $(link-libc)
++link-benchtests = $(+link-tests)
+thread-library-benchtests = $(shared-thread-library)
+libm-benchtests = $(libm)
+endif
+
+$(addprefix $(objpfx)bench-,$(bench-math)): $(libm-benchtests)
+$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm-benchtests)
+$(addprefix $(objpfx)bench-,$(bench-pthread)): $(thread-library-benchtests)
+$(addprefix $(objpfx)bench-,$(bench-malloc)): $(thread-library-benchtests)
+$(addprefix $(objpfx)bench-,pthread-locks): $(libm-benchtests)
 
 
 
@@ -270,9 +282,9 @@  bench-link-targets = $(timing-type) $(binaries-bench) $(binaries-benchset) \
 
 $(bench-link-targets): %: %.o $(objpfx)json-lib.o \
 	$(link-extra-libs-tests) \
-  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
+  $(sort $(filter $(common-objpfx)lib%,$(link-libc-benchtests))) \
   $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
-	$(+link-tests)
+	$(+link-benchtests)
 
 $(bench-link-targets): LDFLAGS += $(link-bench-bind-now)
 
diff --git a/benchtests/README b/benchtests/README
index 44736d7e63..4d83a05b4b 100644
--- a/benchtests/README
+++ b/benchtests/README
@@ -62,6 +62,16 @@  otherwise the above command may try to build the benchmark again.  Benchmarks
 that require generated code to be executed during the build are skipped when
 cross-building.
 
+Building benchmarks as static executables:
+=========================================
+
+To build benchmarks as static executables, on the build system, run:
+
+  $ make STATIC-BENCHTESTS=yes bench-build
+
+You can copy benchmark executables to another machine and run them
+without copying the source nor build directories.
+
 Running subsets of benchmarks:
 ==============================