Hi Shuah, CC kbuild, gpio On Thu, Sep 14, 2017 at 5:34 PM Shuah Khan <shuah@xxxxxxxxxx> wrote: > bpf test depends on clang and fails to compile when > > ------------------------------------------------------ > make -C tools/testing/selftests/bpf run_tests > > > make: clang: Command not found > Makefile:39: recipe for target '.linux-kselftest/tools/testing/selftests/bpf/test_pkt_access.o' failed > make: *** [./linux-kselftest/tools/testing/selftests/bpf/test_pkt_access.o] Error 127 > make: Leaving directory '.linux-kselftest/tools/testing/selftests/bpf' The above failure is indeed due to missing clang. > With "make TARGETS=bpf kselftest" it fails earlier: > > make[3]: Entering directory './linux-kselftest/tools/lib/bpf' > Makefile:40: tools/scripts/Makefile.arch: No such file or directory > Makefile:84: tools/build/Makefile.feature: No such file or directory > Makefile:143: tools/build/Makefile.include: No such file or directory This is due to srctree being "." instead of the actual source tree, when invoked as "make kselftest". When using "make -C tools/testing/selftests", srctree is correct. tools/testing/selftests/bpf/Makefile has: $(BPFOBJ): force $(MAKE) -C $(BPFDIR) OUTPUT=$(OUTPUT)/ to enter the tools/lib/bpf directory to force a build of libbpf.a Note that tools/gpio has the same issue. There seem to be _four_ different ways to build kselftests (Documentation/dev-tools/kselftest.rst): make kselftest make O=/path/to/output kselftest make -C tools/testing/selftests make O=/path/to/output -C tools/testing/selftests I'm not so fond of the latter two, as they basically run make from somewhere inside the tree, which complicates things. I believe we don't support this anywhere else. Each of the four seem to have (different) issues. Especially when you throw cross-compiling into the mix. And care about where installed headers end up (yes, kselftest calls headers_install internally). I'm working on fixes for some of them, but I don't know how to fix the srctree issue. Anyone with a suggestion? Thanks! > make[3]: *** No rule to make target 'tools/build/Makefile.include'. Stop. > make[3]: Leaving directory '.linux-kselftest/tools/lib/bpf' > Makefile:34: recipe for target './linux-kselftest/tools/testing/selftests/bpf/libbpf.a' failed > make[2]: *** [./linux-kselftest/tools/testing/selftests/bpf/libbpf.a] Error 2 > make[2]: Leaving directory './linux-kselftest/tools/testing/selftests/bpf' > Makefile:69: recipe for target 'all' failed > make[1]: *** [all] Error 2 > Makefile:1190: recipe for target 'kselftest' failed > make: *** [kselftest] Error 2 Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds