• Jean-Philippe Brucker's avatar
    tools: Help cross-building with clang · cebdb737
    Jean-Philippe Brucker authored
    Cross-compilation with clang uses the -target parameter rather than a
    toolchain prefix. Just like the kernel Makefile, add that parameter to
    CFLAGS when CROSS_COMPILE is set.
    
    Unlike the kernel Makefile, we use the --sysroot and --gcc-toolchain
    options because unlike the kernel, tools require standard libraries.
    Commit c91d4e47 ("Makefile: Remove '--gcc-toolchain' flag") provides
    some background about --gcc-toolchain. Normally clang finds on its own
    the additional utilities and libraries that it needs (for example GNU ld
    or glibc). On some systems however, this autodetection doesn't work.
    There, our only recourse is asking GCC directly, and pass the result to
    --sysroot and --gcc-toolchain. Of course that only works when a cross
    GCC is available.
    
    Autodetection worked fine on Debian, but to use the aarch64-linux-gnu
    toolchain from Archlinux I needed both --sysroot (for crt1.o) and
    --gcc-toolchain (for crtbegin.o, -lgcc). The --prefix parameter wasn't
    needed there, but it might be useful on other distributions.
    
    Use the CLANG_CROSS_FLAGS variable instead of CLANG_FLAGS because it
    allows tools such as bpftool, that need to build both host and target
    binaries, to easily filter out the cross-build flags from CFLAGS.
    Signed-off-by: default avatarJean-Philippe Brucker <jean-philippe@linaro.org>
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Acked-by: default avatarQuentin Monnet <quentin@isovalent.com>
    Acked-by: default avatarNick Desaulniers <ndesaulniers@google.com>
    Link: https://lore.kernel.org/bpf/20211216163842.829836-2-jean-philippe@linaro.org
    cebdb737
Makefile.include 5.23 KB