[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CADYN=9LxMhccyx6wncjO99am7z+8wNWoMzV3DCSyCdJYktGevg@mail.gmail.com>
Date: Mon, 21 Nov 2022 11:45:33 +0100
From: Anders Roxell <anders.roxell@...aro.org>
To: Björn Töpel <bjorn@...nel.org>
Cc: "David S. Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>, netdev@...r.kernel.org,
Björn Töpel <bjorn@...osinc.com>,
Lina Wang <lina.wang@...iatek.com>,
linux-kselftest@...r.kernel.org
Subject: Re: [PATCH net-next] selftests: net: Add cross-compilation support
for BPF programs
On Sat, 19 Nov 2022 at 18:19, Björn Töpel <bjorn@...nel.org> wrote:
>
> From: Björn Töpel <bjorn@...osinc.com>
>
> The selftests/net does not have proper cross-compilation support, and
> does not properly state libbpf as a dependency. Mimic/copy the BPF
> build from selftests/bpf, which has the nice side-effect that libbpf
> is built as well.
>
> Signed-off-by: Björn Töpel <bjorn@...osinc.com>
> ---
> Now that BPF builds are starting to show up in more places
> (selftests/net, and soon selftests/hid), maybe it would be cleaner to
> move parts of the BPF builds to lib.mk?
Yes, since its in tc-testing too.
Maybe thats what we should do already now?
Cheers,
Anders
>
> Björn
> ---
> tools/testing/selftests/net/bpf/Makefile | 45 +++++++++++++++++++++---
> 1 file changed, 41 insertions(+), 4 deletions(-)
>
> diff --git a/tools/testing/selftests/net/bpf/Makefile b/tools/testing/selftests/net/bpf/Makefile
> index 8ccaf8732eb2..a26cb94354f6 100644
> --- a/tools/testing/selftests/net/bpf/Makefile
> +++ b/tools/testing/selftests/net/bpf/Makefile
> @@ -1,14 +1,51 @@
> # SPDX-License-Identifier: GPL-2.0
>
> CLANG ?= clang
> +SCRATCH_DIR := $(OUTPUT)/tools
> +BUILD_DIR := $(SCRATCH_DIR)/build
> +BPFDIR := $(abspath ../../../lib/bpf)
> +APIDIR := $(abspath ../../../include/uapi)
> +
> CCINCLUDE += -I../../bpf
> -CCINCLUDE += -I../../../../lib
> CCINCLUDE += -I../../../../../usr/include/
> +CCINCLUDE += -I$(SCRATCH_DIR)/include
> +
> +BPFOBJ := $(BUILD_DIR)/libbpf/libbpf.a
> +
> +MAKE_DIRS := $(BUILD_DIR)/libbpf
> +$(MAKE_DIRS):
> + mkdir -p $@
>
> TEST_CUSTOM_PROGS = $(OUTPUT)/bpf/nat6to4.o
> all: $(TEST_CUSTOM_PROGS)
>
> -$(OUTPUT)/%.o: %.c
> - $(CLANG) -O2 -target bpf -c $< $(CCINCLUDE) -o $@
> +# Get Clang's default includes on this system, as opposed to those seen by
> +# '-target bpf'. This fixes "missing" files on some architectures/distros,
> +# such as asm/byteorder.h, asm/socket.h, asm/sockios.h, sys/cdefs.h etc.
> +#
> +# Use '-idirafter': Don't interfere with include mechanics except where the
> +# build would have failed anyways.
> +define get_sys_includes
> +$(shell $(1) $(2) -v -E - </dev/null 2>&1 \
> + | sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }') \
> +$(shell $(1) $(2) -dM -E - </dev/null | grep '__riscv_xlen ' | awk '{printf("-D__riscv_xlen=%d -D__BITS_PER_LONG=%d", $$3, $$3)}')
> +endef
> +
> +ifneq ($(CROSS_COMPILE),)
> +CLANG_TARGET_ARCH = --target=$(notdir $(CROSS_COMPILE:%-=%))
> +endif
> +
> +CLANG_SYS_INCLUDES = $(call get_sys_includes,$(CLANG),$(CLANG_TARGET_ARCH))
> +
> +$(TEST_CUSTOM_PROGS): $(BPFOBJ)
> + $(CLANG) -O2 -target bpf -c $(@:.o=.c) $(CCINCLUDE) $(CLANG_SYS_INCLUDES) -o $@
> +
> +$(BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile) \
> + $(APIDIR)/linux/bpf.h \
> + | $(BUILD_DIR)/libbpf
> + $(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(BUILD_DIR)/libbpf/ \
> + EXTRA_CFLAGS='-g -O0' \
> + DESTDIR=$(SCRATCH_DIR) prefix= all install_headers
> +
> +EXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(SCRATCH_DIR)
>
> -EXTRA_CLEAN := $(TEST_CUSTOM_PROGS)
>
> base-commit: 8bd8dcc5e47f0f9dc40187c3b8b42d992181eee1
> --
> 2.37.2
>
Powered by blists - more mailing lists