From: Bochao Cao <[email protected]>

Add %.skel.h to net/bpf.mk. Build a host bpftool bootstrap when BPFTOOL is
not supplied.

Write the skeleton to a temporary file and rename it on success, so a
failed command does not leave a partial header.

Signed-off-by: Bochao Cao <[email protected]>
---
 tools/testing/selftests/net/bpf.mk | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/tools/testing/selftests/net/bpf.mk 
b/tools/testing/selftests/net/bpf.mk
index a4f6755dd8941..2ded0f65dafa9 100644
--- a/tools/testing/selftests/net/bpf.mk
+++ b/tools/testing/selftests/net/bpf.mk
@@ -49,5 +49,30 @@ $(BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile)   
               \
        $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(BUILD_DIR)/libbpf/ \
                    EXTRA_CFLAGS='-g -O0'                                      \
                    DESTDIR=$(SCRATCH_DIR) prefix= all install_headers
 
 EXTRA_CLEAN += $(SCRATCH_DIR)
+
+# Build a host bpftool only when a test needs a generated skeleton.
+BPFTOOL_BUILD := $(BUILD_DIR)/bpftool
+ifeq ($(origin BPFTOOL),undefined)
+BPFTOOL := $(BPFTOOL_BUILD)/bootstrap/bpftool
+BPFTOOL_DEP := $(BPFTOOL)
+else
+BPFTOOL_DEP := $(shell command -v $(BPFTOOL))
+endif
+
+$(BPFTOOL_BUILD)/bootstrap/bpftool: \
+       $(wildcard $(top_srcdir)/tools/bpf/bpftool/*.[ch]) \
+       $(top_srcdir)/tools/bpf/bpftool/Makefile \
+       $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile)
+       $(call msg,MAKE,,$@)
+       $(Q)mkdir -p $(BPFTOOL_BUILD)
+       $(Q)$(MAKE) $(submake_extras) -C $(top_srcdir)/tools/bpf/bpftool \
+               OUTPUT=$(BPFTOOL_BUILD)/ ARCH= CROSS_COMPILE= bootstrap
+
+$(OUTPUT)/%.skel.h: $(OUTPUT)/%.bpf.o $(BPFTOOL_DEP)
+       $(call msg,GEN-SKEL,,$@)
+       $(Q)$(BPFTOOL) gen skeleton $< name $(notdir $*) > [email protected]
+       $(Q)mv [email protected] $@
+
+EXTRA_CLEAN += $(wildcard $(OUTPUT)/*.skel.h $(OUTPUT)/*.skel.h.tmp)

-- 
Git-155)



Reply via email to