Commit 628add78 authored by Tiezhu Yang's avatar Tiezhu Yang Committed by Daniel Borkmann

bpf, docs: Update build procedure for manually compiling LLVM and Clang

The current LLVM and Clang build procedure in samples/bpf/README.rst is
out of date. See below that the links are not accessible any more.

  $ git clone http://llvm.org/git/llvm.git
  Cloning into 'llvm'...
  fatal: unable to access 'http://llvm.org/git/llvm.git/': Maximum (20) redirects followed
  $ git clone --depth 1 http://llvm.org/git/clang.git
  Cloning into 'clang'...
  fatal: unable to access 'http://llvm.org/git/clang.git/': Maximum (20) redirects followed

The LLVM community has adopted new ways to build the compiler. There are
different ways to build LLVM and Clang, the Clang Getting Started page [1]
has one way. As Yonghong said, it is better to copy the build procedure
in Documentation/bpf/bpf_devel_QA.rst to keep consistent.

I verified the procedure and it is proved to be feasible, so we should
update README.rst to reflect the reality. At the same time, update the
related comment in Makefile.

Additionally, as Fangrui said, the dir llvm-project/llvm/build/install is
not used, BUILD_SHARED_LIBS=OFF is the default option [2], so also change
Documentation/bpf/bpf_devel_QA.rst together.

At last, we recommend that developers who want the fastest incremental
builds use the Ninja build system [1], you can find it in your system's
package manager, usually the package is ninja or ninja-build [3], so add
ninja to build dependencies suggested by Nathan.

  [1] https://clang.llvm.org/get_started.html
  [2] https://www.llvm.org/docs/CMake.html
  [3] https://github.com/ninja-build/ninja/wiki/Pre-built-Ninja-packagesSigned-off-by: default avatarTiezhu Yang <yangtiezhu@loongson.cn>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Reviewed-by: default avatarNathan Chancellor <natechancellor@gmail.com>
Acked-by: default avatarYonghong Song <yhs@fb.com>
Cc: Fangrui Song <maskray@google.com>
Link: https://lore.kernel.org/bpf/1611279584-26047-1-git-send-email-yangtiezhu@loongson.cn
parent 443edcef
...@@ -501,16 +501,19 @@ All LLVM releases can be found at: http://releases.llvm.org/ ...@@ -501,16 +501,19 @@ All LLVM releases can be found at: http://releases.llvm.org/
Q: Got it, so how do I build LLVM manually anyway? Q: Got it, so how do I build LLVM manually anyway?
-------------------------------------------------- --------------------------------------------------
A: You need cmake and gcc-c++ as build requisites for LLVM. Once you have A: We recommend that developers who want the fastest incremental builds
that set up, proceed with building the latest LLVM and clang version use the Ninja build system, you can find it in your system's package
manager, usually the package is ninja or ninja-build.
You need ninja, cmake and gcc-c++ as build requisites for LLVM. Once you
have that set up, proceed with building the latest LLVM and clang version
from the git repositories:: from the git repositories::
$ git clone https://github.com/llvm/llvm-project.git $ git clone https://github.com/llvm/llvm-project.git
$ mkdir -p llvm-project/llvm/build/install $ mkdir -p llvm-project/llvm/build
$ cd llvm-project/llvm/build $ cd llvm-project/llvm/build
$ cmake .. -G "Ninja" -DLLVM_TARGETS_TO_BUILD="BPF;X86" \ $ cmake .. -G "Ninja" -DLLVM_TARGETS_TO_BUILD="BPF;X86" \
-DLLVM_ENABLE_PROJECTS="clang" \ -DLLVM_ENABLE_PROJECTS="clang" \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_BUILD_TYPE=Release \ -DCMAKE_BUILD_TYPE=Release \
-DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_RUNTIME=OFF
$ ninja $ ninja
......
...@@ -208,7 +208,7 @@ TPROGLDLIBS_xdpsock += -pthread -lcap ...@@ -208,7 +208,7 @@ TPROGLDLIBS_xdpsock += -pthread -lcap
TPROGLDLIBS_xsk_fwd += -pthread TPROGLDLIBS_xsk_fwd += -pthread
# Allows pointing LLC/CLANG to a LLVM backend with bpf support, redefine on cmdline: # Allows pointing LLC/CLANG to a LLVM backend with bpf support, redefine on cmdline:
# make M=samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang # make M=samples/bpf LLC=~/git/llvm-project/llvm/build/bin/llc CLANG=~/git/llvm-project/llvm/build/bin/clang
LLC ?= llc LLC ?= llc
CLANG ?= clang CLANG ?= clang
OPT ?= opt OPT ?= opt
......
...@@ -62,20 +62,26 @@ To generate a smaller llc binary one can use:: ...@@ -62,20 +62,26 @@ To generate a smaller llc binary one can use::
-DLLVM_TARGETS_TO_BUILD="BPF" -DLLVM_TARGETS_TO_BUILD="BPF"
We recommend that developers who want the fastest incremental builds
use the Ninja build system, you can find it in your system's package
manager, usually the package is ninja or ninja-build.
Quick sniplet for manually compiling LLVM and clang Quick sniplet for manually compiling LLVM and clang
(build dependencies are cmake and gcc-c++):: (build dependencies are ninja, cmake and gcc-c++)::
$ git clone http://llvm.org/git/llvm.git $ git clone https://github.com/llvm/llvm-project.git
$ cd llvm/tools $ mkdir -p llvm-project/llvm/build
$ git clone --depth 1 http://llvm.org/git/clang.git $ cd llvm-project/llvm/build
$ cd ..; mkdir build; cd build $ cmake .. -G "Ninja" -DLLVM_TARGETS_TO_BUILD="BPF;X86" \
$ cmake .. -DLLVM_TARGETS_TO_BUILD="BPF;X86" -DLLVM_ENABLE_PROJECTS="clang" \
$ make -j $(getconf _NPROCESSORS_ONLN) -DCMAKE_BUILD_TYPE=Release \
-DLLVM_BUILD_RUNTIME=OFF
$ ninja
It is also possible to point make to the newly compiled 'llc' or It is also possible to point make to the newly compiled 'llc' or
'clang' command via redefining LLC or CLANG on the make command line:: 'clang' command via redefining LLC or CLANG on the make command line::
make M=samples/bpf LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang make M=samples/bpf LLC=~/git/llvm-project/llvm/build/bin/llc CLANG=~/git/llvm-project/llvm/build/bin/clang
Cross compiling samples Cross compiling samples
----------------------- -----------------------
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment