All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Makefile: fix use of -j without an argument
@ 2024-04-11 15:09 Matheus Tavares Bernardino
  2024-04-11 15:29 ` Philippe Mathieu-Daudé
  2024-04-12  8:02 ` Paolo Bonzini
  0 siblings, 2 replies; 6+ messages in thread
From: Matheus Tavares Bernardino @ 2024-04-11 15:09 UTC (permalink / raw
  To: qemu-devel; +Cc: pbonzini, martin, Alex Bennée, Thomas Huth

Our Makefile massages the given make arguments to invoke ninja
accordingly. One key difference is that ninja will parallelize by
default, whereas make only does so with -j<n> or -j. The make man page
says that "if the -j option is given without an argument, make will not
limit the number of jobs that can run simultaneously". We use to support
that by replacing -j with "" (empty string) when calling ninja, so that
it would do its auto-parallelization based on the number of CPU cores.

This was accidentally broken at d1ce2cc95b (Makefile: preserve
--jobserver-auth argument when calling ninja, 2024-04-02),
causing `make -j` to fail:

$ make -j V=1
  /usr/bin/ninja -v   -j -d keepdepfile all | cat
  make  -C contrib/plugins/ V="1" TARGET_DIR="contrib/plugins/" all
  ninja: fatal: invalid -j parameter
  make: *** [Makefile:161: run-ninja] Error

Let's fix that and indent the touched code for better readability.

Signed-off-by: Matheus Tavares Bernardino <quic_mathbern@quicinc.com>
---
 Makefile | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index 183756018f..d299c14dab 100644
--- a/Makefile
+++ b/Makefile
@@ -142,8 +142,12 @@ MAKE.k = $(findstring k,$(firstword $(filter-out --%,$(MAKEFLAGS))))
 MAKE.q = $(findstring q,$(firstword $(filter-out --%,$(MAKEFLAGS))))
 MAKE.nq = $(if $(word 2, $(MAKE.n) $(MAKE.q)),nq)
 NINJAFLAGS = $(if $V,-v) $(if $(MAKE.n), -n) $(if $(MAKE.k), -k0) \
-        $(or $(filter -l% -j%, $(MAKEFLAGS)), $(if $(filter --jobserver-auth=%, $(MAKEFLAGS)),, -j1)) \
-        -d keepdepfile
+        $(if $(filter -j, $(MAKEFLAGS)) \
+	     ,, \
+	     $(or \
+	          $(filter -l% -j%, $(MAKEFLAGS)), \
+	          $(if $(filter --jobserver-auth=%, $(MAKEFLAGS)),, -j1)) \
+        ) -d keepdepfile
 ninja-cmd-goals = $(or $(MAKECMDGOALS), all)
 ninja-cmd-goals += $(foreach g, $(MAKECMDGOALS), $(.ninja-goals.$g))
 
-- 
2.37.2



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] Makefile: fix use of -j without an argument
  2024-04-11 15:09 [PATCH] Makefile: fix use of -j without an argument Matheus Tavares Bernardino
@ 2024-04-11 15:29 ` Philippe Mathieu-Daudé
  2024-04-11 15:38   ` Matheus Tavares Bernardino
  2024-04-12  8:02 ` Paolo Bonzini
  1 sibling, 1 reply; 6+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-04-11 15:29 UTC (permalink / raw
  To: Matheus Tavares Bernardino, qemu-devel
  Cc: pbonzini, martin, Alex Bennée, Thomas Huth,
	Martin Hundebøll

Hi Matheus,

On 11/4/24 17:09, Matheus Tavares Bernardino wrote:
> Our Makefile massages the given make arguments to invoke ninja
> accordingly. One key difference is that ninja will parallelize by
> default, whereas make only does so with -j<n> or -j. The make man page
> says that "if the -j option is given without an argument, make will not
> limit the number of jobs that can run simultaneously". We use to support
> that by replacing -j with "" (empty string) when calling ninja, so that
> it would do its auto-parallelization based on the number of CPU cores.
> 
> This was accidentally broken at d1ce2cc95b (Makefile: preserve
> --jobserver-auth argument when calling ninja, 2024-04-02),
> causing `make -j` to fail:
> 
> $ make -j V=1
>    /usr/bin/ninja -v   -j -d keepdepfile all | cat
>    make  -C contrib/plugins/ V="1" TARGET_DIR="contrib/plugins/" all
>    ninja: fatal: invalid -j parameter
>    make: *** [Makefile:161: run-ninja] Error
> 
> Let's fix that and indent the touched code for better readability.
> 
> Signed-off-by: Matheus Tavares Bernardino <quic_mathbern@quicinc.com>
> ---
>   Makefile | 8 ++++++--
>   1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 183756018f..d299c14dab 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -142,8 +142,12 @@ MAKE.k = $(findstring k,$(firstword $(filter-out --%,$(MAKEFLAGS))))
>   MAKE.q = $(findstring q,$(firstword $(filter-out --%,$(MAKEFLAGS))))
>   MAKE.nq = $(if $(word 2, $(MAKE.n) $(MAKE.q)),nq)
>   NINJAFLAGS = $(if $V,-v) $(if $(MAKE.n), -n) $(if $(MAKE.k), -k0) \
> -        $(or $(filter -l% -j%, $(MAKEFLAGS)), $(if $(filter --jobserver-auth=%, $(MAKEFLAGS)),, -j1)) \
> -        -d keepdepfile
> +        $(if $(filter -j, $(MAKEFLAGS)) \
> +	     ,, \
> +	     $(or \
> +	          $(filter -l% -j%, $(MAKEFLAGS)), \
> +	          $(if $(filter --jobserver-auth=%, $(MAKEFLAGS)),, -j1)) \
> +        ) -d keepdepfile
>   ninja-cmd-goals = $(or $(MAKECMDGOALS), all)
>   ninja-cmd-goals += $(foreach g, $(MAKECMDGOALS), $(.ninja-goals.$g))
>   

Apparently Martin sent the same patch (although not as nicely
indented) and Paolo queued it:
https://lore.kernel.org/qemu-devel/20240402081738.1051560-1-martin@geanix.com/


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Makefile: fix use of -j without an argument
  2024-04-11 15:29 ` Philippe Mathieu-Daudé
@ 2024-04-11 15:38   ` Matheus Tavares Bernardino
  2024-04-11 17:08     ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 6+ messages in thread
From: Matheus Tavares Bernardino @ 2024-04-11 15:38 UTC (permalink / raw
  To: Philippe Mathieu-Daudé
  Cc: Matheus Tavares Bernardino, qemu-devel, pbonzini, martin,
	Alex Bennée, Thomas Huth

Hi, Philippe

On Thu, 11 Apr 2024 17:29:58 +0200 =?UTF-8?Q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org> wrote:
>
> Hi Matheus,
> 
> On 11/4/24 17:09, Matheus Tavares Bernardino wrote:
> > Our Makefile massages the given make arguments to invoke ninja
> > accordingly. One key difference is that ninja will parallelize by
> > default, whereas make only does so with -j<n> or -j. The make man page
> > says that "if the -j option is given without an argument, make will not
> > limit the number of jobs that can run simultaneously". We use to support
> > that by replacing -j with "" (empty string) when calling ninja, so that
> > it would do its auto-parallelization based on the number of CPU cores.
> > 
> > This was accidentally broken at d1ce2cc95b (Makefile: preserve
> > --jobserver-auth argument when calling ninja, 2024-04-02),
> > causing `make -j` to fail:
> > 
> > $ make -j V=1
> >    /usr/bin/ninja -v   -j -d keepdepfile all | cat
> >    make  -C contrib/plugins/ V="1" TARGET_DIR="contrib/plugins/" all
> >    ninja: fatal: invalid -j parameter
> >    make: *** [Makefile:161: run-ninja] Error
> > 
> > Let's fix that and indent the touched code for better readability.
> > 
> > Signed-off-by: Matheus Tavares Bernardino <quic_mathbern@quicinc.com>
> > ---
> >   Makefile | 8 ++++++--
> >   1 file changed, 6 insertions(+), 2 deletions(-)
> > 
> > diff --git a/Makefile b/Makefile
> > index 183756018f..d299c14dab 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -142,8 +142,12 @@ MAKE.k = $(findstring k,$(firstword $(filter-out --%,$(MAKEFLAGS))))
> >   MAKE.q = $(findstring q,$(firstword $(filter-out --%,$(MAKEFLAGS))))
> >   MAKE.nq = $(if $(word 2, $(MAKE.n) $(MAKE.q)),nq)
> >   NINJAFLAGS = $(if $V,-v) $(if $(MAKE.n), -n) $(if $(MAKE.k), -k0) \
> > -        $(or $(filter -l% -j%, $(MAKEFLAGS)), $(if $(filter --jobserver-auth=%, $(MAKEFLAGS)),, -j1)) \
> > -        -d keepdepfile
> > +        $(if $(filter -j, $(MAKEFLAGS)) \
> > +	     ,, \
> > +	     $(or \
> > +	          $(filter -l% -j%, $(MAKEFLAGS)), \
> > +	          $(if $(filter --jobserver-auth=%, $(MAKEFLAGS)),, -j1)) \
> > +        ) -d keepdepfile
> >   ninja-cmd-goals = $(or $(MAKECMDGOALS), all)
> >   ninja-cmd-goals += $(foreach g, $(MAKECMDGOALS), $(.ninja-goals.$g))
> >   
> 
> Apparently Martin sent the same patch (although not as nicely
> indented) and Paolo queued it:
> https://lore.kernel.org/qemu-devel/20240402081738.1051560-1-martin@geanix.com/

Actually, this patch is a follow-up to that one, fixing a feature that was
accidentally broken.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Makefile: fix use of -j without an argument
  2024-04-11 15:38   ` Matheus Tavares Bernardino
@ 2024-04-11 17:08     ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 6+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-04-11 17:08 UTC (permalink / raw
  To: Matheus Tavares Bernardino
  Cc: qemu-devel, pbonzini, martin, Alex Bennée, Thomas Huth

On 11/4/24 17:38, Matheus Tavares Bernardino wrote:
> Hi, Philippe
> 
> On Thu, 11 Apr 2024 17:29:58 +0200 =?UTF-8?Q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org> wrote:
>>
>> Hi Matheus,
>>
>> On 11/4/24 17:09, Matheus Tavares Bernardino wrote:
>>> Our Makefile massages the given make arguments to invoke ninja
>>> accordingly. One key difference is that ninja will parallelize by
>>> default, whereas make only does so with -j<n> or -j. The make man page
>>> says that "if the -j option is given without an argument, make will not
>>> limit the number of jobs that can run simultaneously". We use to support
>>> that by replacing -j with "" (empty string) when calling ninja, so that
>>> it would do its auto-parallelization based on the number of CPU cores.
>>>
>>> This was accidentally broken at d1ce2cc95b (Makefile: preserve
>>> --jobserver-auth argument when calling ninja, 2024-04-02),
>>> causing `make -j` to fail:
>>>
>>> $ make -j V=1
>>>     /usr/bin/ninja -v   -j -d keepdepfile all | cat
>>>     make  -C contrib/plugins/ V="1" TARGET_DIR="contrib/plugins/" all
>>>     ninja: fatal: invalid -j parameter
>>>     make: *** [Makefile:161: run-ninja] Error
>>>
>>> Let's fix that and indent the touched code for better readability.
>>>
>>> Signed-off-by: Matheus Tavares Bernardino <quic_mathbern@quicinc.com>
>>> ---
>>>    Makefile | 8 ++++++--
>>>    1 file changed, 6 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/Makefile b/Makefile
>>> index 183756018f..d299c14dab 100644
>>> --- a/Makefile
>>> +++ b/Makefile
>>> @@ -142,8 +142,12 @@ MAKE.k = $(findstring k,$(firstword $(filter-out --%,$(MAKEFLAGS))))
>>>    MAKE.q = $(findstring q,$(firstword $(filter-out --%,$(MAKEFLAGS))))
>>>    MAKE.nq = $(if $(word 2, $(MAKE.n) $(MAKE.q)),nq)
>>>    NINJAFLAGS = $(if $V,-v) $(if $(MAKE.n), -n) $(if $(MAKE.k), -k0) \
>>> -        $(or $(filter -l% -j%, $(MAKEFLAGS)), $(if $(filter --jobserver-auth=%, $(MAKEFLAGS)),, -j1)) \
>>> -        -d keepdepfile
>>> +        $(if $(filter -j, $(MAKEFLAGS)) \
>>> +	     ,, \
>>> +	     $(or \
>>> +	          $(filter -l% -j%, $(MAKEFLAGS)), \
>>> +	          $(if $(filter --jobserver-auth=%, $(MAKEFLAGS)),, -j1)) \
>>> +        ) -d keepdepfile
>>>    ninja-cmd-goals = $(or $(MAKECMDGOALS), all)
>>>    ninja-cmd-goals += $(foreach g, $(MAKECMDGOALS), $(.ninja-goals.$g))
>>>    
>>
>> Apparently Martin sent the same patch (although not as nicely
>> indented) and Paolo queued it:
>> https://lore.kernel.org/qemu-devel/20240402081738.1051560-1-martin@geanix.com/
> 
> Actually, this patch is a follow-up to that one, fixing a feature that was
> accidentally broken.

Oops sorry I missed that, I was not expecting this patch to be merged
in 9.0 :/


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Makefile: fix use of -j without an argument
  2024-04-11 15:09 [PATCH] Makefile: fix use of -j without an argument Matheus Tavares Bernardino
  2024-04-11 15:29 ` Philippe Mathieu-Daudé
@ 2024-04-12  8:02 ` Paolo Bonzini
  1 sibling, 0 replies; 6+ messages in thread
From: Paolo Bonzini @ 2024-04-12  8:02 UTC (permalink / raw
  To: Matheus Tavares Bernardino
  Cc: qemu-devel, martin, Alex Bennée, Thomas Huth

On Thu, Apr 11, 2024 at 5:46 PM Matheus Tavares Bernardino
<quic_mathbern@quicinc.com> wrote:
> +        $(if $(filter -j, $(MAKEFLAGS)) \
> +            ,, \
> +            $(or \
> +                 $(filter -l% -j%, $(MAKEFLAGS)), \
> +                 $(if $(filter --jobserver-auth=%, $(MAKEFLAGS)),, -j1)) \
> +        ) -d keepdepfile

This is more easily written as $(filter-out -j, $(or ...)).

I've sent a v2.

Paolo

>  ninja-cmd-goals = $(or $(MAKECMDGOALS), all)
>  ninja-cmd-goals += $(foreach g, $(MAKECMDGOALS), $(.ninja-goals.$g))
>
> --
> 2.37.2
>



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Makefile: fix use of -j without an argument
       [not found] <CABgObfa5NVGTTC_D09tomXf6FhYnbCt6wY_K_L32cWLXOhaJgg@mail.gmail.com>
@ 2024-04-12 11:56 ` Matheus Tavares Bernardino
  0 siblings, 0 replies; 6+ messages in thread
From: Matheus Tavares Bernardino @ 2024-04-12 11:56 UTC (permalink / raw
  To: Paolo Bonzini
  Cc: Matheus Tavares Bernardino, qemu-devel, martin, Alex Bennée,
	Thomas Huth

On Fri, 12 Apr 2024 10:02:54 +0200 Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> On Thu, Apr 11, 2024 at 5:46 PM Matheus Tavares Bernardino
> <quic_mathbern@quicinc.com> wrote:
> > +        $(if $(filter -j, $(MAKEFLAGS)) \
> > +            ,, \
> > +            $(or \
> > +                 $(filter -l% -j%, $(MAKEFLAGS)), \
> > +                 $(if $(filter --jobserver-auth=%, $(MAKEFLAGS)),, -j1)) \
> > +        ) -d keepdepfile
> 
> This is more easily written as $(filter-out -j, $(or ...)).
> 
> I've sent a v2.

Thanks! 


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-04-12 11:57 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-11 15:09 [PATCH] Makefile: fix use of -j without an argument Matheus Tavares Bernardino
2024-04-11 15:29 ` Philippe Mathieu-Daudé
2024-04-11 15:38   ` Matheus Tavares Bernardino
2024-04-11 17:08     ` Philippe Mathieu-Daudé
2024-04-12  8:02 ` Paolo Bonzini
     [not found] <CABgObfa5NVGTTC_D09tomXf6FhYnbCt6wY_K_L32cWLXOhaJgg@mail.gmail.com>
2024-04-12 11:56 ` Matheus Tavares Bernardino

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.