lkl: fix hijack and zpoline parallel builds

This is a follow up change for commit 3c97822a40 ("lkl: add tests
build barrier") tracked via https://github.com/lkl/linux/issues/558.
The hijack and zpoline libraries also share object files, so need extra
logic to avoid parallel build failures.

Add a new intermediate libhijack-priv-in.o prerequisite for the hijack
libraries, avoiding the .WAIT target which breaks make libraries_install
on older (e.g. 4.2.1) versions of make.
The existing liblkl$(SOSUF) target is currently unmatched, so fix it and
use it as a linker target which omits libhijack-priv-in.o.

Signed-off-by: David Disseldorp <ddiss@suse.de>
This commit is contained in:
David Disseldorp
2025-09-02 10:51:10 +10:00
parent 9f876c1618
commit 6784e53c14
3 changed files with 11 additions and 12 deletions

View File

@@ -87,13 +87,15 @@ $(OUTPUT)lib/lkl.o: bin/stat $(DOT_CONFIG)
$(MAKE) -C ../.. ARCH=lkl $(KOPT)
$(MAKE) -C ../.. ARCH=lkl $(KOPT) install INSTALL_PATH=$(OUTPUT)
# rules to link libs
# rules to link hijack libs
$(OUTPUT)%$(SOSUF): LDFLAGS += -shared
$(OUTPUT)%$(SOSUF): $(OUTPUT)%-in.o $(OUTPUT)liblkl.a
$(OUTPUT)%$(SOSUF): $(priv-libs-y:%=$(OUTPUT)%-in.o) $(OUTPUT)%-in.o $(OUTPUT)liblkl.a
$(QUIET_LINK)$(CC) $(LDFLAGS) $(LDFLAGS_$*-y) -o $@ $^ $(LDLIBS) $(LDLIBS_$*-y)
# liblkl is special
$(OUTPUT)liblkl$(SOSUF): $(OUTPUT)%-in.o $(OUTPUT)lib/lkl.o
$(OUTPUT)lib/liblkl$(SOSUF): $(OUTPUT)lib/liblkl-in.o $(OUTPUT)lib/lkl.o
$(QUIET_LINK)$(CC) $(LDFLAGS) $(LDFLAGS_$*-y) -o $@ $^ $(LDLIBS) $(LDLIBS_$*-y)
$(OUTPUT)liblkl.a: $(OUTPUT)lib/liblkl-in.o $(OUTPUT)lib/lkl.o
$(QUIET_AR)$(AR) -rc $@ $^
@@ -105,7 +107,6 @@ $(OUTPUT)%$(EXESUF): $(OUTPUT)%-in.o $(OUTPUT)liblkl.a
$(OUTPUT)%-in.o: $(OUTPUT)lib/lkl.o FORCE
$(Q)$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(patsubst %/,%,$(dir $*)) obj=$(notdir $*)
$(OUTPUT)cpfromfs$(EXESUF): cptofs$(EXESUF)
$(Q)if ! [ -e $@ ]; then ln -s $< $@; fi

View File

@@ -1,6 +1,7 @@
libs-y += lib/liblkl
ifneq ($(LKL_HOST_CONFIG_BSD),y)
priv-libs-$(LKL_HOST_CONFIG_POSIX) += lib/hijack/libhijack-priv
libs-$(LKL_HOST_CONFIG_POSIX) += lib/hijack/liblkl-hijack
libs-$(LKL_HOST_CONFIG_POSIX) += lib/hijack/liblkl-zpoline
endif

View File

@@ -1,14 +1,11 @@
libhijack-priv-y += hijack.o
libhijack-priv-y += init.o
libhijack-priv-y += xlate.o
libhijack-priv-y += dbg_handler.o
liblkl-hijack-y += preload.o
liblkl-hijack-y += hijack.o
liblkl-hijack-y += init.o
liblkl-hijack-y += xlate.o
liblkl-hijack-y += dbg_handler.o
liblkl-zpoline-y += zpoline.o
liblkl-zpoline-y += hijack.o
liblkl-zpoline-y += init.o
liblkl-zpoline-y += xlate.o
liblkl-zpoline-y += dbg_handler.o
# -std=gnu23/c23 fails due to HOST_CALL (*host_##name)()
CFLAGS_hijack.o += -std=gnu11