Andrii Nakryiko <andrii.nakryiko@xxxxxxxxx> writes: > On Wed, Jan 15, 2020 at 2:06 PM Toke Høiland-Jørgensen <toke@xxxxxxxxxx> wrote: >> >> Andrii Nakryiko <andrii.nakryiko@xxxxxxxxx> writes: >> >> > On Wed, Jan 15, 2020 at 6:13 AM Toke Høiland-Jørgensen <toke@xxxxxxxxxx> wrote: >> >> >> >> From: Toke Høiland-Jørgensen <toke@xxxxxxxxxx> >> >> >> >> The runqslower tool refuses to build without a file to read vmlinux BTF >> >> from. The build fails with an error message to override the location by >> >> setting the VMLINUX_BTF variable if autodetection fails. However, the >> >> Makefile doesn't actually work with that override - the error message is >> >> still emitted. >> > >> > Do you have example command with VMLINUX_BTF override that didn't work >> > (and what error message was emitted)? >> >> Before this patch: >> >> $ cd ~/build/linux/tools/bpf/runqslower >> $ make >> Makefile:18: *** "Can't detect kernel BTF, use VMLINUX_BTF to specify it explicitly". Stop. >> >> $ make VMLINUX_BTF=~/build/linux/vmlinux >> Makefile:18: *** "Can't detect kernel BTF, use VMLINUX_BTF to specify it explicitly". Stop. > > Ok, so this is strange. Try make clean and run with V=1, it might help > to debug this. This could happen if ~/build/linux/vmlinux doesn't > exist, but I assume you double-checked that. It works for me just fine > (Makefile won't do VMLINUX_BTF := assignment, if it's defined through > make invocation, so your change should be a no-op in that regard): > > $ make clean > $ make VMLINUX_BTF=~/linux-build/default/vmlinux V=1 > ... > .output/sbin/bpftool btf dump file ~/linux-build/default/vmlinux > format c > .output/vmlinux.h > ... > > Wonder what your output looks like? $ make clean Makefile:18: *** "Can't detect kernel BTF, use VMLINUX_BTF to specify it explicitly". Stop. $ make VMLINUX_BTF=~/build/linux/vmlinux V=1 Makefile:18: *** "Can't detect kernel BTF, use VMLINUX_BTF to specify it explicitly". Stop. Take another look at the relevant part of the makefile: ifneq ("$(wildcard /sys/kernel/btf/vmlinux)","") VMLINUX_BTF := /sys/kernel/btf/vmlinux else ifneq ("$(wildcard /boot/vmlinux-$(KERNEL_REL))","") VMLINUX_BTF := /boot/vmlinux-$(KERNEL_REL) else $(error "Can't detect kernel BTF, use VMLINUX_BTF to specify it explicitly") endif That if/else doesn't actually consider the value of VMLINUX_BTF; so the override only works if one of the files being considered by the auto-detection actually exists... :) -Toke