lkml.org 
[lkml]   [2019]   [Oct]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v5 bpf-next 00/15] samples: bpf: improve/fix cross-compilation
    On Fri, Oct 11, 2019 at 03:27:53AM +0300, Ivan Khoronzhuk wrote:
    > This series contains mainly fixes/improvements for cross-compilation
    > but not only, tested for arm, arm64, and intended for any arch.
    > Also verified on native build (not cross compilation) for x86_64
    > and arm, arm64.
    >
    > Initial RFC link:
    > https://lkml.org/lkml/2019/8/29/1665
    >
    > Prev. version:
    > https://lkml.org/lkml/2019/10/9/1045
    >
    > Besides the patches given here, the RFC also contains couple patches
    > related to llvm clang
    > arm: include: asm: swab: mask rev16 instruction for clang
    > arm: include: asm: unified: mask .syntax unified for clang
    > They are necessarily to verify arm 32 build.
    >
    > Also, couple more fixes were added but are not merged in bpf-next yet,
    > they can be needed for verification/configuration steps, if not in
    > your tree the fixes can be taken here:
    > https://www.spinics.net/lists/netdev/msg601716.html
    > https://www.spinics.net/lists/netdev/msg601714.html
    > https://www.spinics.net/lists/linux-kbuild/msg23468.html
    >
    > Now, to build samples, SAMPLE_BPF should be enabled in config.
    >
    > The change touches not only cross-compilation and can have impact on
    > other archs and build environments, so might be good idea to verify
    > it in order to add appropriate changes, some warn options could be
    > tuned also.
    >
    > All is tested on x86-64 with clang installed (has to be built containing
    > targets for arm, arm64..., see llc --version, usually it's present already)
    >
    > Instructions to test native on x86_64
    > =================================================
    > Native build on x86_64 is done in usual way and shouldn't have difference
    > except HOSTCC is now printed as CC wile building the samples.
    >
    > Instructions to test cross compilation on arm64
    > =================================================
    > #Toolchain used for test:
    > gcc version 8.3.0
    > (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36))
    >
    > # Get some arm64 FS, containing at least libelf
    > I've used sdk for TI am65x got here:
    > http://downloads.ti.com/processor-sdk-linux/esd/AM65X/latest/exports/\
    > ti-processor-sdk-linux-am65xx-evm-06.00.00.07-Linux-x86-Install.bin
    >
    > # Install this binary to some dir, say "sdk".
    > # Configure kernel (use defconfig as no matter), but clean everything
    > # before.
    > make ARCH=arm64 -C tools/ clean
    > make ARCH=arm64 -C samples/bpf clean
    > make ARCH=arm64 clean
    > make ARCH=arm64 defconfig
    >
    > # Enable SAMPLE_BPF and it's dependencies in config
    >
    > # The kernel version used in sdk doesn't correspond to checked one,
    > # but for this verification only headers need to be syched,
    > # so install them (can be enabled in config):
    > make ARCH=arm64 headers_install
    >
    > # or on SDK if need keep them in sync (not necessarily to verify):
    >
    > make ARCH=arm64 INSTALL_HDR_PATH=/../sdk/\
    > ti-processor-sdk-linux-am65xx-evm-06.00.00.07/linux-devkit/sysroots/\
    > aarch64-linux/usr headers_install
    >
    > # Build samples
    > make samples/bpf/ ARCH=arm64 CROSS_COMPILE="aarch64-linux-gnu-"\
    > SYSROOT="/../sdk/ti-processor-sdk-linux-am65xx-evm-06.00.00.07/\
    > linux-devkit/sysroots/aarch64-linux"
    >
    > Instructions to test cross compilation on arm
    > =================================================
    > #Toolchains used for test:
    > arm-linux-gnueabihf-gcc (Linaro GCC 7.2-2017.11) 7.2.1 20171011
    > or
    > arm-linux-gnueabihf-gcc
    > (GNU Toolchain for the A-profile Architecture 8.3-2019.03 \
    > (arm-rel-8.36)) 8.3.0
    >
    > # Get some FS, I've used sdk for TI am52xx got here:
    > http://downloads.ti.com/processor-sdk-linux/esd/AM57X/05_03_00_07/exports/\
    > ti-processor-sdk-linux-am57xx-evm-05.03.00.07-Linux-x86-Install.bin
    >
    > # Install this binary to some dir, say "sdk".
    > # Configure kernel, but clean everything before.
    > make ARCH=arm -C tools/ clean
    > make ARCH=arm -C samples/bpf clean
    > make ARCH=arm clean
    > make ARCH=arm omap2plus_defconfig
    >
    > # The kernel version used in sdk doesn't correspond to checked one, but
    > # headers only should be synched,
    > # so install them (can be enabled in config):
    >
    > make ARCH=arm headers_install
    >
    > # or on SDK if need keep them in sync (not necessarily):
    >
    > make ARCH=arm INSTALL_HDR_PATH=/../sdk/\
    > ti-processor-sdk-linux-am57xx-evm-05.03.00.07/linux-devkit/sysroots/\
    > armv7ahf-neon-linux-gnueabi/usr headers_install
    >
    > # Build samples
    > make samples/bpf/ ARCH=arm CROSS_COMPILE="arm-linux-gnueabihf-"\
    > SYSROOT="/../sdk/ti-processor-sdk-linux-am57xx-evm-05.03\
    > .00.07/linux-devkit/sysroots/armv7ahf-neon-linux-gnueabi"
    >
    >
    > Based on bpf-next/master
    >
    > v5..v4:
    > - any changes, only missed SOBs are added
    >
    > v4..v3:
    > - renamed CLANG_EXTRA_CFLAGS on BPF_EXTRA_CFLAGS
    > - used filter for ARCH_ARM_SELECTOR
    > - omit "-fomit-frame-pointer" and use same flags for native and "cross"
    > - used sample/bpf prefixes
    > - use C instead of C++ compiler for test_libbpf target
    >
    > v3..v2:
    > - renamed makefile.progs to makeifle.target, as more appropriate
    > - left only __LINUX_ARM_ARCH__ for D options for arm
    > - for host build - left options from KBUILD_HOST for compatibility reasons
    > - split patch adding c/cxx/ld flags to libbpf by modules
    > - moved readme change to separate patch
    > - added patch setting options for cross-compile
    > - fixed issue with option error for syscall_nrs.S,
    > avoiding overlap for ccflags-y.
    >
    > v2..v1:
    > - restructured patches order
    > - split "samples: bpf: Makefile: base progs build on Makefile.progs"
    > to make change more readable. It added couple nice extra patches.
    > - removed redundant patch:
    > "samples: bpf: Makefile: remove target for native build"
    > - added fix:
    > "samples: bpf: makefile: fix cookie_uid_helper_example obj build"
    > - limited -D option filter only for arm
    > - improved comments
    > - added couple instructions to verify cross compilation for arm and
    > arm64 arches based on TI am57xx and am65xx sdks.
    > - corrected include a little order
    >
    > Ivan Khoronzhuk (15):
    > samples/bpf: fix HDR_PROBE "echo"
    > samples/bpf: fix cookie_uid_helper_example obj build
    > samples/bpf: use --target from cross-compile
    > samples/bpf: use own EXTRA_CFLAGS for clang commands
    > samples/bpf: use __LINUX_ARM_ARCH__ selector for arm
    > samples/bpf: drop unnecessarily inclusion for bpf_load
    > samples/bpf: add makefile.target for separate CC target build
    > samples/bpf: base target programs rules on Makefile.target
    > samples/bpf: use own flags but not HOSTCFLAGS
    > samples/bpf: use target CC environment for HDR_PROBE
    > libbpf: don't use cxx to test_libpf target
    > libbpf: add C/LDFLAGS to libbpf.so and test_libpf targets
    > samples/bpf: provide C/LDFLAGS to libbpf
    > samples/bpf: add sysroot support
    > samples/bpf: add preparation steps and sysroot info to readme
    >
    > samples/bpf/Makefile | 164 ++++++++++--------
    > samples/bpf/Makefile.target | 75 ++++++++
    > samples/bpf/README.rst | 41 ++++-
    > tools/lib/bpf/Makefile | 23 +--
    > .../bpf/{test_libbpf.cpp => test_libbpf.c} | 14 +-
    > 5 files changed, 218 insertions(+), 99 deletions(-)
    > create mode 100644 samples/bpf/Makefile.target
    > rename tools/lib/bpf/{test_libbpf.cpp => test_libbpf.c} (61%)
    >
    > --
    > 2.17.1
    >

    For native compilation on x86_64 and aarch64

    Tested-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>

    \
     
     \ /
      Last update: 2019-10-11 14:08    [W:5.994 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site