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] -=-=-=-=-=-=-=-=-=-=-=-