• Ihor Solodrai's avatar
    selftests/bpf: Use auto-dependencies for test objects · 844f7315
    Ihor Solodrai authored
    Make use of -M compiler options when building .test.o objects to
    generate .d files and avoid re-building all tests every time.
    
    Previously, if a single test bpf program under selftests/bpf/progs/*.c
    has changed, make would rebuild all the *.bpf.o, *.skel.h and *.test.o
    objects, which is a lot of unnecessary work.
    
    A typical dependency chain is:
    progs/x.c -> x.bpf.o -> x.skel.h -> x.test.o -> trunner_binary
    
    However for many tests it's not a 1:1 mapping by name, and so far
    %.test.o have been simply dependent on all %.skel.h files, and
    %.skel.h files on all %.bpf.o objects.
    
    Avoid full rebuilds by instructing the compiler (via -MMD) to
    produce *.d files with real dependencies, and appropriately including
    them. Exploit make feature that rebuilds included makefiles if they
    were changed by setting %.test.d as prerequisite for %.test.o files.
    
    A couple of examples of compilation time speedup (after the first
    clean build):
    
    $ touch progs/verifier_and.c && time make -j8
    Before: real	0m16.651s
    After:  real	0m2.245s
    $ touch progs/read_vsyscall.c && time make -j8
    Before: real	0m15.743s
    After:  real	0m1.575s
    
    A drawback of this change is that now there is an overhead due to make
    processing lots of .d files, which potentially may slow down unrelated
    targets. However a time to make all from scratch hasn't changed
    significantly:
    
    $ make clean && time make -j8
    Before: real	1m31.148s
    After:  real	1m30.309s
    Suggested-by: default avatarEduard Zingerman <eddyz87@gmail.com>
    Signed-off-by: default avatarIhor Solodrai <ihor.solodrai@pm.me>
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/VJihUTnvtwEgv_mOnpfy7EgD9D2MPNoHO-MlANeLIzLJPGhDeyOuGKIYyKgk0O6KPjfM-MuhtvPwZcngN8WFqbTnTRyCSMc2aMZ1ODm1T_g=@pm.me
    844f7315
Makefile 31.7 KB