On Thu, Jan 16, 2020 at 1:05 AM Toke Høiland-Jørgensen <toke@xxxxxxxxxx> wrote: > > 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... :) Ah, right, unconditional $(error), completely missed that few times, thanks! > > -Toke >