Description: mk: install symlinks before build step A race condition can happen during parallel builds, where a header might be installed in RTE_OUT/include before CFLAGS is recursively expanded. This causes GCC to sometimes pick the header path as SRCDIR/... and sometimes as RTE_OUT/include/... making the build unreproducible, as the full path is used for the expansion of __FILE__ and in the DWARF directory listing. Installing all symlinks before all builds solves the problem. It is still suboptimal, as the (fixed) path recorded in the DWARF dir listing will include the user-configurable build output directory, and thus will result in a different binary between different users despite all other conditions being equal, but it is a simpler approach that will anyway be obsolete once the build system is switched to Meson. Origin: http://dpdk.org/dev/patchwork/patch/28391/ Forwarded: yes Author: Luca Boccassi Last-Update: 2017-09-05 --- mk/rte.lib.mk | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) --- a/mk/rte.lib.mk +++ b/mk/rte.lib.mk @@ -59,14 +59,19 @@ endif _BUILD = $(LIB) -_INSTALL = $(INSTALL-FILES-y) $(SYMLINK-FILES-y) $(RTE_OUTPUT)/lib/$(LIB) +PREINSTALL = $(SYMLINK-FILES-y) +_INSTALL = $(INSTALL-FILES-y) $(RTE_OUTPUT)/lib/$(LIB) _CLEAN = doclean .PHONY: all all: install .PHONY: install +ifeq ($(SYMLINK-FILES-y),) install: build _postinstall +else +install: _preinstall build _postinstall +endif _postinstall: build