[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen stable-4.17] libs/util: Fix parallel build between flex/bison and CC rules



commit c622b8ace93cc38c73f47f5044dc3663ef93f815
Author:     Anthony PERARD <anthony.perard@xxxxxxxxxx>
AuthorDate: Fri Mar 3 07:55:24 2023 +0100
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Fri Mar 3 07:55:24 2023 +0100

    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@xxxxxxxxxx>
    Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
    Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    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 $<
--
generated by git-patchbot for /home/xen/git/xen.git#stable-4.17



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.