Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

selftests/bpf: Allow building with extra flags

In order to specify extra compilation or linking flags to BPF selftests,
it is possible to set EXTRA_CFLAGS and EXTRA_LDFLAGS from the command
line. The problem is that they are not propagated to sub-make calls
(runqslower, bpftool, libbpf) and in the better case are not applied, in
the worse case cause the entire build fail.

Propagate EXTRA_CFLAGS and EXTRA_LDFLAGS to the sub-makes.

This, for instance, allows to build selftests as PIE with

$ make EXTRA_CFLAGS='-fPIE' EXTRA_LDFLAGS='-pie'

Without this change, the command would fail because libbpf.a would not
be built with -fPIE and other PIE binaries would not link against it.

The only problem is that we have to explicitly provide empty
EXTRA_CFLAGS='' and EXTRA_LDFLAGS='' to the builds of kernel modules as
we don't want to build modules with flags used for userspace (the above
example would fail as kernel doesn't support PIE).

Signed-off-by: Viktor Malik <vmalik@redhat.com>
Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>

authored by

Viktor Malik and committed by
Andrii Nakryiko
ec8d3b5c 5f67329c

+23 -11
+23 -11
tools/testing/selftests/bpf/Makefile
··· 297 297 $(OUTPUT)/bpf_testmod.ko: $(VMLINUX_BTF) $(RESOLVE_BTFIDS) $(wildcard bpf_testmod/Makefile bpf_testmod/*.[ch]) 298 298 $(call msg,MOD,,$@) 299 299 $(Q)$(RM) bpf_testmod/bpf_testmod.ko # force re-compilation 300 - $(Q)$(MAKE) $(submake_extras) RESOLVE_BTFIDS=$(RESOLVE_BTFIDS) -C bpf_testmod 300 + $(Q)$(MAKE) $(submake_extras) -C bpf_testmod \ 301 + RESOLVE_BTFIDS=$(RESOLVE_BTFIDS) \ 302 + EXTRA_CFLAGS='' EXTRA_LDFLAGS='' 301 303 $(Q)cp bpf_testmod/bpf_testmod.ko $@ 302 304 303 305 $(OUTPUT)/bpf_test_no_cfi.ko: $(VMLINUX_BTF) $(RESOLVE_BTFIDS) $(wildcard bpf_test_no_cfi/Makefile bpf_test_no_cfi/*.[ch]) 304 306 $(call msg,MOD,,$@) 305 307 $(Q)$(RM) bpf_test_no_cfi/bpf_test_no_cfi.ko # force re-compilation 306 - $(Q)$(MAKE) $(submake_extras) RESOLVE_BTFIDS=$(RESOLVE_BTFIDS) -C bpf_test_no_cfi 308 + $(Q)$(MAKE) $(submake_extras) -C bpf_test_no_cfi \ 309 + RESOLVE_BTFIDS=$(RESOLVE_BTFIDS) \ 310 + EXTRA_CFLAGS='' EXTRA_LDFLAGS='' 307 311 $(Q)cp bpf_test_no_cfi/bpf_test_no_cfi.ko $@ 308 312 309 313 $(OUTPUT)/bpf_test_modorder_x.ko: $(VMLINUX_BTF) $(RESOLVE_BTFIDS) $(wildcard bpf_test_modorder_x/Makefile bpf_test_modorder_x/*.[ch]) 310 314 $(call msg,MOD,,$@) 311 315 $(Q)$(RM) bpf_test_modorder_x/bpf_test_modorder_x.ko # force re-compilation 312 - $(Q)$(MAKE) $(submake_extras) RESOLVE_BTFIDS=$(RESOLVE_BTFIDS) -C bpf_test_modorder_x 316 + $(Q)$(MAKE) $(submake_extras) -C bpf_test_modorder_x \ 317 + RESOLVE_BTFIDS=$(RESOLVE_BTFIDS) \ 318 + EXTRA_CFLAGS='' EXTRA_LDFLAGS='' 313 319 $(Q)cp bpf_test_modorder_x/bpf_test_modorder_x.ko $@ 314 320 315 321 $(OUTPUT)/bpf_test_modorder_y.ko: $(VMLINUX_BTF) $(RESOLVE_BTFIDS) $(wildcard bpf_test_modorder_y/Makefile bpf_test_modorder_y/*.[ch]) 316 322 $(call msg,MOD,,$@) 317 323 $(Q)$(RM) bpf_test_modorder_y/bpf_test_modorder_y.ko # force re-compilation 318 - $(Q)$(MAKE) $(submake_extras) RESOLVE_BTFIDS=$(RESOLVE_BTFIDS) -C bpf_test_modorder_y 324 + $(Q)$(MAKE) $(submake_extras) -C bpf_test_modorder_y \ 325 + RESOLVE_BTFIDS=$(RESOLVE_BTFIDS) \ 326 + EXTRA_CFLAGS='' EXTRA_LDFLAGS='' 319 327 $(Q)cp bpf_test_modorder_y/bpf_test_modorder_y.ko $@ 320 328 321 329 ··· 343 335 BPFTOOL_OUTPUT=$(HOST_BUILD_DIR)/bpftool/ \ 344 336 BPFOBJ_OUTPUT=$(BUILD_DIR)/libbpf/ \ 345 337 BPFOBJ=$(BPFOBJ) BPF_INCLUDE=$(INCLUDE_DIR) \ 346 - EXTRA_CFLAGS='-g $(OPT_FLAGS) $(SAN_CFLAGS)' \ 347 - EXTRA_LDFLAGS='$(SAN_LDFLAGS)' && \ 338 + EXTRA_CFLAGS='-g $(OPT_FLAGS) $(SAN_CFLAGS) $(EXTRA_CFLAGS)' \ 339 + EXTRA_LDFLAGS='$(SAN_LDFLAGS) $(EXTRA_LDFLAGS)' && \ 348 340 cp $(RUNQSLOWER_OUTPUT)runqslower $@ 349 341 350 342 TEST_GEN_PROGS_EXTENDED += $(TRUNNER_BPFTOOL) ··· 377 369 $(HOST_BPFOBJ) | $(HOST_BUILD_DIR)/bpftool 378 370 $(Q)$(MAKE) $(submake_extras) -C $(BPFTOOLDIR) \ 379 371 ARCH= CROSS_COMPILE= CC="$(HOSTCC)" LD="$(HOSTLD)" \ 380 - EXTRA_CFLAGS='-g $(OPT_FLAGS)' \ 372 + EXTRA_CFLAGS='-g $(OPT_FLAGS) $(EXTRA_CFLAGS)' \ 373 + EXTRA_LDFLAGS='$(EXTRA_LDFLAGS)' \ 381 374 OUTPUT=$(HOST_BUILD_DIR)/bpftool/ \ 382 375 LIBBPF_OUTPUT=$(HOST_BUILD_DIR)/libbpf/ \ 383 376 LIBBPF_DESTDIR=$(HOST_SCRATCH_DIR)/ \ ··· 389 380 $(BPFOBJ) | $(BUILD_DIR)/bpftool 390 381 $(Q)$(MAKE) $(submake_extras) -C $(BPFTOOLDIR) \ 391 382 ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) \ 392 - EXTRA_CFLAGS='-g $(OPT_FLAGS)' \ 383 + EXTRA_CFLAGS='-g $(OPT_FLAGS) $(EXTRA_CFLAGS)' \ 384 + EXTRA_LDFLAGS='$(EXTRA_LDFLAGS)' \ 393 385 OUTPUT=$(BUILD_DIR)/bpftool/ \ 394 386 LIBBPF_OUTPUT=$(BUILD_DIR)/libbpf/ \ 395 387 LIBBPF_DESTDIR=$(SCRATCH_DIR)/ \ ··· 413 403 $(APIDIR)/linux/bpf.h \ 414 404 | $(BUILD_DIR)/libbpf 415 405 $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(BUILD_DIR)/libbpf/ \ 416 - EXTRA_CFLAGS='-g $(OPT_FLAGS) $(SAN_CFLAGS)' \ 417 - EXTRA_LDFLAGS='$(SAN_LDFLAGS)' \ 406 + EXTRA_CFLAGS='-g $(OPT_FLAGS) $(SAN_CFLAGS) $(EXTRA_CFLAGS)' \ 407 + EXTRA_LDFLAGS='$(SAN_LDFLAGS) $(EXTRA_LDFLAGS)' \ 418 408 DESTDIR=$(SCRATCH_DIR) prefix= all install_headers 419 409 420 410 ifneq ($(BPFOBJ),$(HOST_BPFOBJ)) ··· 422 412 $(APIDIR)/linux/bpf.h \ 423 413 | $(HOST_BUILD_DIR)/libbpf 424 414 $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) \ 425 - EXTRA_CFLAGS='-g $(OPT_FLAGS)' ARCH= CROSS_COMPILE= \ 415 + ARCH= CROSS_COMPILE= \ 416 + EXTRA_CFLAGS='-g $(OPT_FLAGS) $(EXTRA_CFLAGS)' \ 417 + EXTRA_LDFLAGS='$(EXTRA_LDFLAGS)' \ 426 418 OUTPUT=$(HOST_BUILD_DIR)/libbpf/ \ 427 419 CC="$(HOSTCC)" LD="$(HOSTLD)" \ 428 420 DESTDIR=$(HOST_SCRATCH_DIR)/ prefix= all install_headers