| Upstream-Status: Backport [767e0316450911f1158bd4f7fd8dcd066bae5c55] |
| Signed-off-by: Ross Burton <ross.burton@arm.com> |
| |
| From 0ce0a85597db48a2fca619bd95e34af091e54ae8 Mon Sep 17 00:00:00 2001 |
| From: Ross Burton <ross.burton@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 |
| |