简介
依赖
- cmake-3.8+
安装方法见上篇博文,http://www.jb51.cc/article/p-caxcirdq-ke.html - python-2.7
- libffi-3.2.1
- 下载libffi 地址:ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz
用下面命令编译安装libffi
-i include/Makefile.in &&
sed -e '/^includedir/ s/=.*$/=@includedir@/' \
-e 's/^Cflags: -I${includedir}/Cflags:/' \ -i libffi.pc.in &&
./configure --prefix=/usr --disable-static &&
make
sudo make install
整理源码
从官网下载源码 http://releases.llvm.org/download.html#3.9.1
解压 llvm-3.9.1.src.tar.xz 后重命名为llvm
解压cfe-3.9.1.src.tar.xz 后重命名为clang 放到llvm/tools目录
解压lld-3.9.0.src.tar.xz后重命名为ldd 放到llvm/tools目录
解压lld-3.9.0.src.tar.xz后重命名为lld 放到llvm/tools目录
解压lldb-3.9.1.src.tar.xz后重命名为lldb 放到llvm/tools目录
解压clang-tools-extra-3.9.1.src.tar.xz后重命名为extra 放到llvm/tools目录
解压后compiler-rt-3.9.1.src.tar.xz重命名为 compiler-rt 放到目录llvm/projects目录
解压libcxx-3.9.1.src.tar.xz后重命名为libcxx 放到目录llvm/projects目录
解压libcxxabi-3.9.1.src.tar.xz后重命名为libcxxabi 放到目录llvm/projects目录
解压后重命名为 放到目录
最后结构是这样的
$ tree -d -L 2
.
├── bindings
│ ├── go
│ ├── ocaml
│ └── python
├── cmake
│ ├── modules
│ └── platforms
├── docs
│ ├── CommandGuide
│ ├── Frontend
│ ├── HistoricalNotes
│ ├── _ocamldoc
│ ├── _static
│ ├── TableGen
│ ├── _templates
│ ├── _themes
│ └── tutorial
├── examples
│ ├── BrainF
│ ├── ExceptionDemo
│ ├── Fibonacci
│ ├── HowToUseJIT
│ ├── Kaleidoscope
│ ├── ModuleMaker
│ ├── OCaml-Kaleidoscope
│ └── ParallelJIT
├── include
│ ├── llvm
│ └── llvm-c
├── lib
│ ├── Analysis
│ ├── AsmParser
│ ├── Bitcode
│ ├── CodeGen
│ ├── DebugInfo
│ ├── ExecutionEngine
│ ├── Fuzzer
│ ├── IR
│ ├── IRReader
│ ├── LibDriver
│ ├── LineEditor
│ ├── Linker
│ ├── LTO
│ ├── MC
│ ├── Object
│ ├── ObjectYAML
│ ├── Option
│ ├── Passes
│ ├── ProfileData
│ ├── Support
│ ├── TableGen
│ ├── Target
│ └── Transforms
├── projects
│ ├── compiler-rt
│ ├── libcxx
│ └── libcxxabi
├── resources
├── runtimes
├── test
│ ├── Analysis
│ ├── Assembler
│ ├── Bindings
│ ├── Bitcode
│ ├── BugPoint
│ ├── CodeGen
│ ├── DebugInfo
│ ├── Examples
│ ├── ExecutionEngine
│ ├── Feature
│ ├── FileCheck
│ ├── Instrumentation
│ ├── Integer
│ ├── JitListener
│ ├── LibDriver
│ ├── Linker
│ ├── LTO
│ ├── MC
│ ├── Object
│ ├── ObjectYAML
│ ├── Other
│ ├── SymbolRewriter
│ ├── TableGen
│ ├── ThinLTO
│ ├── tools
│ ├── Transforms
│ ├── Unit
│ ├── Verifier
│ └── YAMLParser
├── tools
│ ├── bugpoint
│ ├── bugpoint-passes
│ ├── clang
│ ├── dsymutil
│ ├── extra
│ ├── gold
│ ├── llc
│ ├── lld
│ ├── lldb
│ ├── lli
│ ├── llvm-ar
│ ├── llvm-as
│ ├── llvm-as-fuzzer
│ ├── llvm-as-parasitic-coverage-repro
│ ├── llvm-bcanalyzer
│ ├── llvm-config
│ ├── llvm-cov
│ ├── llvm-c-test
│ ├── llvm-cxxdump
│ ├── llvm-diff
│ ├── llvm-dis
│ ├── llvm-dwarfdump
│ ├── llvm-dwp
│ ├── llvm-extract
│ ├── llvm-go
│ ├── llvm-jitlistener
│ ├── llvm-link
│ ├── llvm-lto
│ ├── llvm-mc
│ ├── llvm-mc-fuzzer
│ ├── llvm-mcmarkup
│ ├── llvm-nm
│ ├── llvm-objdump
│ ├── llvm-pdbdump
│ ├── llvm-profdata
│ ├── llvm-readobj
│ ├── llvm-rtdyld
│ ├── llvm-shlib
│ ├── llvm-size
│ ├── llvm-split
│ ├── llvm-stress
│ ├── llvm-symbolizer
│ ├── llvm-vtabledump
│ ├── lto
│ ├── msbuild
│ ├── obj2yaml
│ ├── opt
│ ├── sancov
│ ├── sanstats
│ ├── verify-uselistorder
│ ├── xcode-toolchain
│ └── yaml2obj
├── unittests
│ ├── ADT
│ ├── Analysis
│ ├── AsmParser
│ ├── Bitcode
│ ├── CodeGen
│ ├── DebugInfo
│ ├── ExecutionEngine
│ ├── IR
│ ├── LineEditor
│ ├── Linker
│ ├── MC
│ ├── MI
│ ├── ObjectYAML
│ ├── Option
│ ├── ProfileData
│ ├── Support
│ └── Transforms
└── utils
├── abtest
├── bugpoint
├── buildit
├── count
├── crosstool
├── emacs
├── FileCheck
├── fpcmp
├── gdb-scripts
├── git
├── git-svn
├── jedit
├── kate
├── KillTheDoctor
├── lint
├── lit
├── llvm-build
├── llvm-lit
├── LLVMVisualizers
├── Misc
├── not
├── PerfectShuffle
├── release
├── TableGen
├── Target
├── testgen
├── textmate
├── unittest
├── valgrind
├── vim
└── yaml-bench
编译
cmake -G "Unix Makefiles" \
-DPYTHON_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \ -DPYTHON_LIBRARY=$(python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))") \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_ENABLE_FFI=ON \ -DLLVM_BUILD_LLVM_DYLIB=ON \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ -DLLVM_TARGETS_TO_BUILD="host" \ -Wno-dev \ ../llvm
make -j4
sudo make install
如果安装了Ninja也可以用它来编译,速度比make要快很多(也耗资源 ninja install时候虚拟机卡半死了) cmake配置替换成这个就可以了
cmake -G Ninja
编译过程是相似的
ninja -j2
ninja install
#测试
-
常见问题
- Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
cmake找不到python的头文件和库文件 添加这一段就好了 如果使用python3 用 python3 -c … 代替 python -c ….就可以
$ cmake .. \
-DPYTHON_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \ -DPYTHON_LIBRARY=$(python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))")
- Could NOT find SWIG (missing: SWIG_EXECUTABLE SWIG_DIR)
sudo apt-get install swig
- llvm/tools/lldb/include/lldb/Host/Editline.h:49:22: fatal error: histedit.h: 没有那个文件或目录
#include
sudo apt-get install libedit-dev
- q