sdcc: fix the device library race in parallel builds

The mcs51 library target writes into ../build/$(PORT) without depending on
it, so with -j the archiver can start before the directory exists and the
toolchain build fails with

  sdar: ../build/small/mcs51.lib: No such file or directory

It is intermittent: the same tree builds fine on a retry.
This commit is contained in:
DrDoof committed 2026-10-28 17:40:19 +01:00
1 parent 01fc5db9a3
commit 8954637bbc
1 file changed
+23
@@ -0,0 +1,23 @@
Parallel builds race: the library target writes into ../build/$(PORT) but does
not depend on it, so with -j the archiver can run before the directory exists:
sdar: ../build/small/mcs51.lib: No such file or directory
Give the target an order-only dependency on its output directory.
Index: device/lib/mcs51/Makefile.in
===================================================================
--- device/lib/mcs51/Makefile.in (revision 17011)
+++ device/lib/mcs51/Makefile.in (working copy)
@@ -30,7 +30,10 @@
all: $(PORTDIR)/$(LIB)
-$(PORTDIR)/$(LIB): $(OBJ) Makefile
+$(PORTDIR):
+ mkdir -p $@
+
+$(PORTDIR)/$(LIB): $(OBJ) Makefile | $(PORTDIR)
ifeq ($(LIB_TYPE), SDCCLIB)
rm -f $@; \
$(top_builddir)/bin/sdcclib -a $@ $(OBJ)