Re: [PATCH 1/1] kbuild: deb-pkg: Allow parallel build

From: Masahiro Yamada
Date: Wed Mar 15 2023 - 12:42:33 EST


On Thu, Mar 16, 2023 at 12:57 AM Sedat Dilek <sedat.dilek@xxxxxxxxx> wrote:
>
> On Wed, Mar 15, 2023 at 3:24 PM Masahiro Yamada <masahiroy@xxxxxxxxxx> wrote:
> >
> > On Tue, Mar 14, 2023 at 3:56 AM Bastian Germann <bage@xxxxxxxxxxxxx> wrote:
> > >
> > > Am 13.03.23 um 18:59 schrieb Masahiro Yamada:
> > > > On Tue, Mar 14, 2023 at 2:10 AM Bastian Germann <bage@xxxxxxxxxxxxx> wrote:
> > > >>
> > > >> Currently, the only way to build the deb-pkg generated package parallely
> > > >> is adding -jN to the MAKEFLAGS environment variable. The package ignores
> > > >> the usual parallel build option that is described in Debian Policy §4.9.1.
> > > >
> > > >
> > > >
> > > > "dpkg-buildpackage -b -j16" worked for me.
> > >
> > > This ends up in DEB_BUILD_OPTIONS=parallel=16 being set and the call:
> > > /usr/bin/make -f ./Makefile ARCH=x86 KERNELRELEASE=6.3.0-rc2 KBUILD_BUILD_VERSION=1 olddefconfig all
> >
> >
> > "dpkb-buildpackage -j<N>" sets not only DEB_BUILD_OPTIONS
> > but also MAKEFLAGS.
> >
> >
> > This is clearly explained in "man dpkb-buildpackage".
> >
> >
> > -j, --jobs[=jobs|auto]
> > ...
> > Will add itself to the MAKEFLAGS environment variable, which should
> > cause all subsequent make invocations to inherit the option, thus
> > forcing the parallel setting on the packaging ...
> >
> >
> >
> >
> > Your statement sounds like
> >
> > 'MAKEFLAGS=-j<N> dpkg-buildpackage'
> >
> > is the only way to build packages in parallel.
> >
> > Apparently, dpkg-buildpackage provides a much shorter way
> > and invokes internal Make in parallel.
> >
> >
> >
> >
> > >
> > > So it is not used to run the actual build, just the top level `make -f debian/rules` invocation.
> > > You can set --jobs-force=16, which ends up in MAKEFLAGS but the point of the patch is that one can use
> > > the usual way of parallelizing.
> >
> >
> > What is the "usual" way in this context?
> >
> >
> > Do you mean
> > 'DEB_BUILD_OPTIONS=parallel=16 dpkg-buildpackage -b'
> > is the usual way for parallel building?
> >
> > If so, I agree. This patch caters to this case.
> >
> >
> > But, I think your code should go to debian/rules
> > instead of scripts/package/deb-build-option.
> > Kbuild's "make clean" works much faster with the parallel option.
> >
> >
> > Also, the commit description should explain the
> > benefit of this patch.
> >
> >
> > >
> > > Side note: Without the patch, the build is run with -j1 regardless of being called from the Linux Makefile
> > > or dpkg-buildpackage.
> >
> >
> > Try:
> >
> > $ make deb-pkg -j16
> >
> > and
> >
> > $ dpkg-buildpackage -b -j16
> >
> >
> > Both run the package building in parallel.
> >
> > You see a big difference in build speed w/wo the -j option.
> > (and the build logs are interleaved, since they
> > are emitted by multiple threads)
> >
> >
>
> I have no strong opinion in having a DEB_BUILD_OPTIONS...
>
> As you stated Masahiro I have seen it mostly in debian/rules.
>
> See the example from [1]:
>
> ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
> NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
> MAKEFLAGS += -j$(NUMJOBS)
> endif
>

Yup, this code looks good to me.




--
Best Regards
Masahiro Yamada