Classic Makefile anti-pattern of just fundamentally not understanding
how parallel jobs work.  One day, people will stop using Make :)

Ross

On Thu, 22 Jul 2021 at 20:27, Khem Raj <raj.k...@gmail.com> wrote:
>
> ah thanks I think binutils upgrade patch was also seeing this problem.
>
> On Thu, Jul 22, 2021 at 8:39 AM Ross Burton <r...@burtonini.com> wrote:
> >
> > Fix a Makefile race resulting in the target creating a directory being
> > executed after the target to write into that directory.
> >
> > [ YOCTO #14485 ]
> >
> > Signed-off-by: Ross Burton <ross.bur...@arm.com>
> > ---
> >  .../0001-Fix-build-race-in-Makefile.patch     | 56 +++++++++++++++++++
> >  meta/recipes-graphics/glew/glew_2.2.0.bb      |  1 +
> >  2 files changed, 57 insertions(+)
> >  create mode 100644 
> > meta/recipes-graphics/glew/glew/0001-Fix-build-race-in-Makefile.patch
> >
> > diff --git 
> > a/meta/recipes-graphics/glew/glew/0001-Fix-build-race-in-Makefile.patch 
> > b/meta/recipes-graphics/glew/glew/0001-Fix-build-race-in-Makefile.patch
> > new file mode 100644
> > index 0000000000..7edcfe8de8
> > --- /dev/null
> > +++ b/meta/recipes-graphics/glew/glew/0001-Fix-build-race-in-Makefile.patch
> > @@ -0,0 +1,56 @@
> > +Upstream-Status: Submitted [https://github.com/nigels-com/glew/pull/311]
> > +Signed-off-by: Ross Burton <ross.bur...@arm.com>
> > +
> > +From 0ce0a85597db48a2fca619bd95e34af091e54ae8 Mon Sep 17 00:00:00 2001
> > +From: Ross Burton <ross.bur...@arm.com>
> > +Date: Thu, 22 Jul 2021 16:31:11 +0100
> > +Subject: [PATCH] Fix build race in Makefile
> > +
> > +The current rule for the binaries is:
> > +
> > +glew.bin: glew.lib bin bin/$(GLEWINFO.BIN) bin/$(VISUALINFO.BIN)
> > +
> > +In parallel builds, all of those targets happen at the same time. This
> > +means that 'bin' can happen *after* 'bin/$(GLEWINFO.BIN)', which is a
> > +problem as the 'bin' target's responsibility is to create the directory
> > +that the other target writes into.
> > +
> > +Solve this by not having a separate 'create directory' target which is
> > +fundamentally racy, and simply mkdir in each target which writes into it.
> > +---
> > + Makefile | 9 ++++-----
> > + 1 file changed, 4 insertions(+), 5 deletions(-)
> > +
> > +diff --git a/Makefile b/Makefile
> > +index d0e4614..04af44c 100644
> > +--- a/Makefile
> > ++++ b/Makefile
> > +@@ -171,21 +171,20 @@ VISUALINFO.BIN.OBJ := $(VISUALINFO.BIN.OBJ:.c=.o)
> > + # Don't build glewinfo or visualinfo for NaCL, yet.
> > +
> > + ifneq ($(filter nacl%,$(SYSTEM)),)
> > +-glew.bin: glew.lib bin
> > ++glew.bin: glew.lib
> > + else
> > +-glew.bin: glew.lib bin bin/$(GLEWINFO.BIN) bin/$(VISUALINFO.BIN)
> > ++glew.bin: glew.lib bin/$(GLEWINFO.BIN) bin/$(VISUALINFO.BIN)
> > + endif
> > +
> > +-bin:
> > +-      mkdir bin
> > +-
> > + bin/$(GLEWINFO.BIN): $(GLEWINFO.BIN.OBJ) $(LIB.SHARED.DIR)/$(LIB.SHARED)
> > ++      @mkdir -p $(dir $@)
> > +       $(CC) $(CFLAGS) -o $@ $(GLEWINFO.BIN.OBJ) $(BIN.LIBS)
> > + ifneq ($(STRIP),)
> > +       $(STRIP) -x $@
> > + endif
> > +
> > + bin/$(VISUALINFO.BIN): $(VISUALINFO.BIN.OBJ) 
> > $(LIB.SHARED.DIR)/$(LIB.SHARED)
> > ++      @mkdir -p $(dir $@)
> > +       $(CC) $(CFLAGS) -o $@ $(VISUALINFO.BIN.OBJ) $(BIN.LIBS)
> > + ifneq ($(STRIP),)
> > +       $(STRIP) -x $@
> > +--
> > +2.25.1
> > +
> > diff --git a/meta/recipes-graphics/glew/glew_2.2.0.bb 
> > b/meta/recipes-graphics/glew/glew_2.2.0.bb
> > index 8948444e08..92b6083648 100644
> > --- a/meta/recipes-graphics/glew/glew_2.2.0.bb
> > +++ b/meta/recipes-graphics/glew/glew_2.2.0.bb
> > @@ -6,6 +6,7 @@ LICENSE = "MIT"
> >  LIC_FILES_CHKSUM = 
> > "file://LICENSE.txt;md5=2ac251558de685c6b9478d89be3149c2"
> >
> >  SRC_URI = "${SOURCEFORGE_MIRROR}/project/glew/glew/${PV}/glew-${PV}.tgz \
> > +           file://0001-Fix-build-race-in-Makefile.patch \
> >             file://no-strip.patch"
> >
> >  SRC_URI[md5sum] = "3579164bccaef09e36c0af7f4fd5c7c7"
> > --
> > 2.25.1
> >
> >
> > 
> >
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#154083): 
https://lists.openembedded.org/g/openembedded-core/message/154083
Mute This Topic: https://lists.openembedded.org/mt/84381877/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to