diff options
Diffstat (limited to '0047-libs-util-Fix-parallel-build-between-flex-bison-and-.patch')
-rw-r--r-- | 0047-libs-util-Fix-parallel-build-between-flex-bison-and-.patch | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/0047-libs-util-Fix-parallel-build-between-flex-bison-and-.patch b/0047-libs-util-Fix-parallel-build-between-flex-bison-and-.patch new file mode 100644 index 0000000..f3e6d36 --- /dev/null +++ b/0047-libs-util-Fix-parallel-build-between-flex-bison-and-.patch @@ -0,0 +1,50 @@ +From c622b8ace93cc38c73f47f5044dc3663ef93f815 Mon Sep 17 00:00:00 2001 +From: Anthony PERARD <anthony.perard@citrix.com> +Date: Fri, 3 Mar 2023 07:55:24 +0100 +Subject: [PATCH 47/89] libs/util: Fix parallel build between flex/bison and CC + rules + +flex/bison generate two targets, and when those targets are +prerequisite of other rules they are considered independently by make. + +We can have a situation where the .c file is out-of-date but not the +.h, git checkout for example. In this case, if a rule only have the .h +file as prerequiste, make will procced and start to build the object. +In parallel, another target can have the .c file as prerequisite and +make will find out it need re-generating and do so, changing the .h at +the same time. This parallel task breaks the first one. + +To avoid this scenario, we put both the header and the source as +prerequisite for all object even if they only need the header. + +Reported-by: Andrew Cooper <Andrew.Cooper3@citrix.com> +Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> +Acked-by: Andrew Cooper <andrew.cooper3@citrix.com> +master commit: bf652a50fb3bb3b1b3d93db6fb79bc28f978fe75 +master date: 2023-02-09 18:26:17 +0000 +--- + tools/libs/util/Makefile | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/tools/libs/util/Makefile b/tools/libs/util/Makefile +index 493d2e00be..fee4ea0dc7 100644 +--- a/tools/libs/util/Makefile ++++ b/tools/libs/util/Makefile +@@ -40,6 +40,14 @@ include $(XEN_ROOT)/tools/libs/libs.mk + + $(OBJS-y) $(PIC_OBJS): $(AUTOINCS) + ++# Adding the .c conterparts of the headers generated by flex/bison as ++# prerequisite of all objects. ++# This is to tell make that if only the .c file is out-of-date but not the ++# header, it should still wait for the .c file to be rebuilt. ++# Otherwise, make doesn't considered "%.c %.h" as grouped targets, and will run ++# the flex/bison rules in parallel of CC rules which only need the header. ++$(OBJS-y) $(PIC_OBJS): libxlu_cfg_l.c libxlu_cfg_y.c libxlu_disk_l.c ++ + %.c %.h:: %.y + @rm -f $*.[ch] + $(BISON) --output=$*.c $< +-- +2.40.0 + |