BPF target support in LLVM toolchain Build in buildroot environment

Hi,

My llvm-14.0.6 toolchain i built does not support ‘bpf’ target . I need to support ‘bpf’ target support to build samples/bpf/ in kernel source.
Currently llc support only below targets.
{{
clang/bin/llc --version
LLVM (http://llvm.org/):
LLVM version 14.0.6
Optimized build.
Default target: x86_64-ftnt-linux-gnu
Host CPU: rocketlake

Registered Targets:
x86 - 32-bit X86: Pentium-Pro and above
x86-64 - 64-bit X86: EM64T and AMD64
}}
i referred BPF: How can I enable BPF support in my LLVM toolchain? but it contains build-llvm.py specific fix which can not adopted to build root environment llvm package build . Request to share fix to add ‘bpf’ target as part of building llvm package?

Regards
Koti

BPF is in LLVM_ALL_TARGETS so is built when LLVM_TARGETS_TO_BUILD is set to all, its default value. It looks like your LLVM build was built with -DLLVM_TARGETS_TO_BUILD=X86 (or -DLLVM_TARGETS_TO_BUILD=host on an x86 machine); if you built it yourself, don’t do that, otherwise go talk to whoever built the LLVM you’re using.

Dear Clarke

Thank you for you reply. I just explored LLVM-14.0.6 configure log displayed during llvm-14.0.6 package build and i noticed “LLVM_TARGETS_TO_BUILD=X86;BPF” . both BPF and x86 target’s llvm package build is configured. Please see all configured log given below.
{{

host-llvm 14.0.6 Configuring
(mkdir -p /root/build/build/buildroot-build/build/host-llvm-14.0.6//buildroot-build && cd /root/build/build/buildroot-build/build/host-llvm-14.0.6//buildroot-build && rm -f CMakeCache.txt && PATH=“/fwebdev4/bin:/fwebdev4/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin” PKG_CONFIG=“/fwebdev4/bin/pkg-config” PKG_CONFIG_SYSROOT_DIR=“/” PKG_CONFIG_LIBDIR=“/fwebdev4/lib/pkgconfig:/fwebdev4/share/pkgconfig” PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 /fwebdev4/bin/cmake /root/build/build/buildroot-build/build/host-llvm-14.0.6/ -DCMAKE_INSTALL_SO_NO_EXE=0 -DCMAKE_FIND_ROOT_PATH=“/fwebdev4” -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=“BOTH” -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=“BOTH” -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=“BOTH” -DCMAKE_INSTALL_PREFIX=“/fwebdev4” -DCMAKE_C_FLAGS=“-O2 -I/fwebdev4/include” -DCMAKE_CXX_FLAGS=“-O2 -I/fwebdev4/include” -DCMAKE_EXE_LINKER_FLAGS=“-L/fwebdev4/lib -Wl,-rpath,/fwebdev4/lib” -DCMAKE_SHARED_LINKER_FLAGS=“-L/fwebdev4/lib -Wl,-rpath,/fwebdev4/lib” -DCMAKE_ASM_COMPILER=“/usr/bin/as” -DCMAKE_C_COMPILER=“/usr/bin/gcc” -DCMAKE_CXX_COMPILER=“/usr/bin/g++” -DCMAKE_C_COMPILER_LAUNCHER=“/fwebdev4/bin/ccache” -DCMAKE_CXX_COMPILER_LAUNCHER=“/fwebdev4/bin/ccache” -DCMAKE_COLOR_MAKEFILE=OFF -DBUILD_DOC=OFF -DBUILD_DOCS=OFF -DBUILD_EXAMPLE=OFF -DBUILD_EXAMPLES=OFF -DBUILD_TEST=OFF -DBUILD_TESTS=OFF -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON -DLLVM_ENABLE_PROJECTS=“” -DLLVM_CCACHE_BUILD=ON -DCMAKE_INSTALL_RPATH=“/fwebdev4/lib” -DLLVM_TARGETS_TO_BUILD="X86;BPF" -DLLVM_TARGET_ARCH=X86 -DBUILD_SHARED_LIBS=OFF -DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_ENABLE_LIBEDIT=OFF -DLLVM_INSTALL_TOOLCHAIN_ONLY=OFF -DLLVM_APPEND_VC_REV=OFF -DLLVM_ENABLE_BACKTRACES=OFF -DENABLE_CRASH_OVERRIDES=ON -DLLVM_ENABLE_FFI=OFF -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_ENABLE_THREADS=ON -DLLVM_ENABLE_ZLIB=ON -DLLVM_ENABLE_LIBXML2=OFF -DLLVM_ENABLE_Z3_SOLVER=OFF -DLLVM_ENABLE_PIC=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=14 -DLLVM_ENABLE_MODULES=OFF -DLLVM_ENABLE_MODULE_DEBUGGING=OFF -DLLVM_ENABLE_LIBCXX=OFF -DLLVM_ENABLE_LLD=OFF -DLLVM_DEFAULT_TARGET_TRIPLE=x86_64-ftnt-linux-gnu -DLLVM_ENABLE_BINDINGS=OFF -DLLVM_OPTIMIZED_TABLEGEN=ON -DLLVM_BUILD_UTILS=ON -DLLVM_INCLUDE_UTILS=ON -DLLVM_INSTALL_UTILS=ON -DLLVM_INCLUDE_TOOLS=ON -DLLVM_BUILD_TOOLS=ON -DLLVM_ENABLE_RTTI=ON -DLLVM_BUILD_EXTERNAL_COMPILER_RT=OFF -DLLVM_BUILD_RUNTIME=OFF -DLLVM_INCLUDE_RUNTIMES=OFF -DLLVM_ENABLE_WARNINGS=ON -DLLVM_ENABLE_PEDANTIC=ON -DLLVM_ENABLE_WERROR=OFF -DLLVM_BUILD_EXAMPLES=OFF -DLLVM_BUILD_DOCS=OFF -DLLVM_BUILD_TESTS=OFF -DLLVM_ENABLE_DOXYGEN=OFF -DLLVM_ENABLE_OCAMLDOC=OFF -DLLVM_ENABLE_SPHINX=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_GO_TESTS=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_BENCHMARKS=OFF )
}}
But still “llc” is Registered Target for x86 only as mentioned in my previous comment.

Regads
Koti

I use tc-build for building my selfmade LLVM toolchains on Debian/unstable AMD64.

BPF is now build by default in tc-build.

For details see:

That should work fine, are you sure you’re using the result of that build?

…is correct.

Is the build-log showing?

-- Targeting X86
-- Targeting BPF

Also, such information can be seen in CMakeCache.txt.

Do you build from a clean (build) environment (e.g. from scratch)?

Hi,
Yes. i am building from scratch.

– Targeting X86
– Targeting BPF
i referred CMakeCache.txt but contents didn’t shown above exact log.
Attached it for reference.

Regards
Koti
CMakeCache.txt (64.1 KB)

Your CmakeCache.txt has:

//Semicolon-separated list of targets to build, or "all".
LLVM_TARGETS_TO_BUILD:STRING=X86;BPF

Again, when you run your cmake line you should see:

-- Targeting BPF

Hi,

I am rebuilding llvm package to check if above statement is seen or not.
will share detailed log once found it …

Regards
Koti

You see this in the configure state before your build starts.

Hi,

The problem fixed after porting LLVM Backend bpf support patch exists in latest buildroot version code.

Thanks and Regards
Koti