1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-06-07 21:48:15 +00:00

Build: wrap make invocations with flock(1)

Lock each directory before entering it so when using -j, the same
dependency isn't built more than once at a time.

This doesn't get full -j parallelism though, since one make child
will be sitting idle waiting for flock to receive its lock and
continue making (which should then do nothing since it will have
been built already).  Unfortunately there's not much that can be
done to fix that since it can't proceed until its dependency is
built by another make process.
This commit is contained in:
joshua stein 2019-12-27 23:50:39 -06:00 committed by Andreas Kling
parent d622e4d224
commit 0b501335f5
10 changed files with 21 additions and 21 deletions

View file

@ -35,7 +35,6 @@ SHARED_TEST_OBJS = \
define execute-command define execute-command
$(1) $(1)
endef endef
all: $(PROGRAMS) all: $(PROGRAMS)

View file

@ -7,10 +7,10 @@ LIB_DEPS = GUI HTML Draw IPC Protocol Core
main.cpp: ../../Libraries/LibHTML/CSS/PropertyID.h main.cpp: ../../Libraries/LibHTML/CSS/PropertyID.h
../../Libraries/LibHTML/CSS/PropertyID.h: ../../Libraries/LibHTML/CSS/PropertyID.h:
@$(MAKE) -C ../../Libraries/LibHTML @flock ../../Libraries/LibHTML $(MAKE) -C ../../Libraries/LibHTML
main.cpp: ../../Servers/ProtocolServer/ProtocolClientEndpoint.h main.cpp: ../../Servers/ProtocolServer/ProtocolClientEndpoint.h
../../Servers/ProtocolServer/ProtocolClientEndpoint.h: ../../Servers/ProtocolServer/ProtocolClientEndpoint.h:
@$(MAKE) -C $(dir $(@)) @flock ../../Servers/ProtocolServer $(MAKE) -C $(dir $(@))
include ../../Makefile.common include ../../Makefile.common

View file

@ -6,7 +6,7 @@ LIBRARY = libaudio.a
AClientConnection.cpp: ../../Servers/AudioServer/AudioClientEndpoint.h AClientConnection.cpp: ../../Servers/AudioServer/AudioClientEndpoint.h
../../Servers/AudioServer/AudioClientEndpoint.h: ../../Servers/AudioServer/AudioClientEndpoint.h:
@$(MAKE) -C $(dir $(@)) @flock $(dir $(@)) $(MAKE) -C $(dir $(@))
install: install:
mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/LibAudio/ mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/LibAudio/

View file

@ -1,5 +1,3 @@
.NOTPARALLEL:
AK_OBJS = \ AK_OBJS = \
../../AK/StringImpl.o \ ../../AK/StringImpl.o \
../../AK/String.o \ ../../AK/String.o \
@ -62,7 +60,6 @@ OBJS = $(AK_OBJS) $(LIBC_OBJS)
EXTRA_OBJS = setjmp.ao crti.ao crtn.ao EXTRA_OBJS = setjmp.ao crti.ao crtn.ao
crt0.o: crt0.cpp crt0.o: crt0.cpp
$(QUIET) $(CXX) $(CXXFLAGS) -o crt0.o -c crt0.cpp
crtio.o: crti.ao crtio.o: crti.ao
$(QUIET) cp crti.ao crti.o $(QUIET) cp crti.ao crti.o
@ -76,7 +73,9 @@ DEFINES = -DSERENITY_LIBC_BUILD
LIBRARY = libc.a LIBRARY = libc.a
all: crt0.o $(EXTRA_OBJS) $(LIBRARY) install POST_LIBRARY_BUILD = $(QUIET) $(MAKE) install
all: crt0.o $(EXTRA_OBJS) $(LIBRARY)
install: install:
mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/sys/ mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/sys/

View file

@ -66,7 +66,7 @@ LIBRARY = libgui.a
GWindowServerConnection.cpp: ../../Servers/WindowServer/WindowServerEndpoint.h GWindowServerConnection.cpp: ../../Servers/WindowServer/WindowServerEndpoint.h
../../Servers/WindowServer/WindowServerEndpoint.h: ../../Servers/WindowServer/WindowServerEndpoint.h:
@$(MAKE) -C $(dir $(@)) @flock $(dir $(@)) $(MAKE) -C $(dir $(@))
install: install:
mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/LibGUI/ mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/LibGUI/

View file

@ -71,10 +71,10 @@ GENERATE_CSS_PROPERTYID_CPP = CodeGenerators/Generate_CSS_PropertyID_cpp/Generat
GENERATE_CSS_PROPERTYID_H = CodeGenerators/Generate_CSS_PropertyID_h/Generate_CSS_PropertyID_h GENERATE_CSS_PROPERTYID_H = CodeGenerators/Generate_CSS_PropertyID_h/Generate_CSS_PropertyID_h
$(GENERATE_CSS_PROPERTYID_H): $(GENERATE_CSS_PROPERTYID_H):
@$(MAKE) -C $(dir $(GENERATE_CSS_PROPERTYID_H)) @flock $(dir $(GENERATE_CSS_PROPERTYID_H)) $(MAKE) -C $(dir $(GENERATE_CSS_PROPERTYID_H))
$(GENERATE_CSS_PROPERTYID_CPP): $(GENERATE_CSS_PROPERTYID_CPP):
@$(MAKE) -C $(dir $(GENERATE_CSS_PROPERTYID_CPP)) @flock $(dir $(GENERATE_CSS_PROPERTYID_CPP)) $(MAKE) -C $(dir $(GENERATE_CSS_PROPERTYID_CPP))
CSS/DefaultStyleSheetSource.cpp: CSS/Default.css Scripts/GenerateStyleSheetSource.sh CSS/DefaultStyleSheetSource.cpp: CSS/Default.css Scripts/GenerateStyleSheetSource.sh
@echo "GENERATE $@" @echo "GENERATE $@"
@ -82,11 +82,11 @@ CSS/DefaultStyleSheetSource.cpp: CSS/Default.css Scripts/GenerateStyleSheetSourc
CSS/PropertyID.h: CSS/Properties.json $(GENERATE_CSS_PROPERTYID_H) CSS/PropertyID.h: CSS/Properties.json $(GENERATE_CSS_PROPERTYID_H)
@echo "GENERATE $@" @echo "GENERATE $@"
$(QUIET) $(GENERATE_CSS_PROPERTYID_H) $< > $@ $(QUIET) flock CSS $(GENERATE_CSS_PROPERTYID_H) $< > $@
CSS/PropertyID.cpp: CSS/Properties.json $(GENERATE_CSS_PROPERTYID_CPP) CSS/PropertyID.cpp: CSS/Properties.json $(GENERATE_CSS_PROPERTYID_CPP)
@echo "GENERATE $@" @echo "GENERATE $@"
$(QUIET) $(GENERATE_CSS_PROPERTYID_CPP) $< > $@ $(QUIET) flock CSS $(GENERATE_CSS_PROPERTYID_CPP) $< > $@
EXTRA_CLEAN = CSS/DefaultStyleSheetSource.cpp CSS/PropertyID.h CSS/PropertyID.cpp EXTRA_CLEAN = CSS/DefaultStyleSheetSource.cpp CSS/PropertyID.h CSS/PropertyID.cpp

View file

@ -6,6 +6,6 @@ LIBRARY = libprotocol.a
Download.cpp: ../../Servers/ProtocolServer/ProtocolClientEndpoint.h Download.cpp: ../../Servers/ProtocolServer/ProtocolClientEndpoint.h
../../Servers/ProtocolServer/ProtocolClientEndpoint.h: ../../Servers/ProtocolServer/ProtocolClientEndpoint.h:
@$(MAKE) -C $(dir $(@)) @flock $(dir $(@)) $(MAKE) -C $(dir $(@))
include ../../Makefile.common include ../../Makefile.common

View file

@ -23,6 +23,6 @@ ifeq ($(UNAME_S),Darwin)
test: test:
else else
test: test:
$(QUIET) $(MAKE) -C AK/Tests clean all clean $(QUIET) flock AK/Tests $(MAKE) -C AK/Tests clean all clean
endif endif

View file

@ -103,19 +103,21 @@ $(PROGRAM): $(STATIC_LIB_DEPS) $(SUFFIXED_OBJS) $(EXTRA_OBJS)
$(LIBRARY): $(SUFFIXED_OBJS) $(EXTRA_OBJS) $(LIBRARY): $(SUFFIXED_OBJS) $(EXTRA_OBJS)
@echo "LIB $@" @echo "LIB $@"
$(QUIET) $(AR) rcs $@ $(OBJS) $(EXTRA_OBJS) $(LIBS) $(QUIET) $(AR) rcs $@ $(OBJS) $(EXTRA_OBJS) $(LIBS)
$(POST_LIBRARY_BUILD)
#.PHONY: $(STATIC_LIB_DEPS)
$(STATIC_LIB_DEPS): $(STATIC_LIB_DEPS):
@$(MAKE) -C $(dir $(@)) @flock $(dir $(@)) $(MAKE) -C $(dir $(@))
IPCCOMPILER = $(SERENITY_BASE_DIR)/DevTools/IPCCompiler/IPCCompiler IPCCOMPILER = $(SERENITY_BASE_DIR)/DevTools/IPCCompiler/IPCCompiler
IPCCOMPILER: $(IPCCOMPILER) IPCCOMPILER: $(IPCCOMPILER)
$(IPCCOMPILER): $(IPCCOMPILER):
@$(MAKE) -C $(dir $(@)) @flock $(dir $(@)) $(MAKE) -C $(dir $(@))
FORMCOMPILER = $(SERENITY_BASE_DIR)/DevTools/FormCompiler/FormCompiler FORMCOMPILER = $(SERENITY_BASE_DIR)/DevTools/FormCompiler/FormCompiler
FORMCOMPILER: $(FORMCOMPILER) FORMCOMPILER: $(FORMCOMPILER)
$(FORMCOMPILER): $(FORMCOMPILER):
@$(MAKE) -C $(dir $(@)) @flock $(dir $(@)) $(MAKE) -C $(dir $(@))
.DEFAULT_GOAL := all .DEFAULT_GOAL := all

View file

@ -1,17 +1,17 @@
subdirs: $(SUBDIRS) subdirs: $(SUBDIRS)
$(SUBDIRS): $(SUBDIRS):
@$(MAKE) -C $@ @flock $@ $(MAKE) -C $@
all: $(subdirs) all: $(subdirs)
SUBDIRS_CLEAN = $(addsuffix .clean,$(SUBDIRS)) SUBDIRS_CLEAN = $(addsuffix .clean,$(SUBDIRS))
clean: $(SUBDIRS_CLEAN) clean: $(SUBDIRS_CLEAN)
$(SUBDIRS_CLEAN): %.clean: $(SUBDIRS_CLEAN): %.clean:
@$(MAKE) -C $* clean @flock $* $(MAKE) -C $* clean
SUBDIRS_INSTALL = $(addsuffix .install,$(SUBDIRS)) SUBDIRS_INSTALL = $(addsuffix .install,$(SUBDIRS))
install: $(SUBDIRS_INSTALL) install: $(SUBDIRS_INSTALL)
$(SUBDIRS_INSTALL): %.install: $(SUBDIRS_INSTALL): %.install:
@$(MAKE) -C $* install @flock $* $(MAKE) -C $* install
.PHONY: all clean install $(SUBDIRS) .PHONY: all clean install $(SUBDIRS)