??LLVM 10.0.0是当前的最新版,从2020/3/24开始提供下载,在此记录的是LLVM 9.0.0版本的安装,其发布时间是2019/9/19,前端clang版本是9.0.0。由于安装的时候属于最新版本,前端只能安装
0、准备
??LLVM其官网下载地址为:https://releases.llvm.org/download.html#9.0.0 ,在此以centos源码安装为例。刚开始先从官网下载指定版本源码:
??在目录下新建
??
- flang:是产生LLVM IR的编译器前端和中端的源代码,地址:https://github.com/flang-compiler/flang
- flang-driver:是从clang派生的驱动程序,地址:https://github.com/flang-compiler/flang-driver
- llvm:该LLVM是LLVM的一个分支,具有与Fortran相关的增强功能
??把以上三个文件源码下载到
1、建立安装脚本
??安装过程需要使用到GCC,在此使用的GCC是
- step0.sh,配置选项
1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/bash INSTALL_PREFIX=/home/zgl/llvm-9.0.0 //安装路径 GCC_DIR=/home/zgl/gcc-8.2.0-exe //gcc的安装位置 CMAKE_OPTIONS="-G Ninja \ //Ninja配置选项 -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \ -DLLVM_CONFIG=$INSTALL_PREFIX/bin/llvm-config \ -DCMAKE_CXX_COMPILER=$INSTALL_PREFIX/bin/clang++ \ -DCMAKE_C_COMPILER=$INSTALL_PREFIX/bin/clang \ -DCMAKE_Fortran_COMPILER=$INSTALL_PREFIX/bin/flang \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_TARGETS_TO_BUILD=X86" |
- step1.sh,llvm参数
1 2 3 4 5 6 7 8 | #!/bin/bash . step0.sh cd ./llvm mkdir build && cd build cmake $CMAKE_OPTIONS -DLLVM_ENABLE_PROJECTS=lld -DCMAKE_C_COMPILER=$GCC_DIR/bin/gcc -DCMAKE_CXX_COMPILER=$GCC_DIR/bin/g++ .. ninja -j 64 ninja install |
- step2.sh,flang-driver参数
1 2 3 4 5 6 7 8 | #!/bin/bash . step0.sh cd ./flang-driver mkdir -p build && cd build cmake $CMAKE_OPTIONS -DCMAKE_C_COMPILER=$GCC_DIR/bin/gcc -DCMAKE_CXX_COMPILER=$GCC_DIR/bin/g++ .. ninja -j 32 ninja install |
- step3.sh,flang参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/bin/bash . step0.sh (cd ./flang/runtime/libpgmath mkdir -p build && cd build cmake $CMAKE_OPTIONS .. ninja -j 32 ninja install) cd ./flang mkdir -p build && cd build cmake $CMAKE_OPTIONS -G "Unix Makefiles" .. make -j 16 make install |
以上就是安装时需要的主要脚本,关于其它工具
2. 安装和使用
??建立了安装脚本之后,安装过程也就非常简单了,从
使用的时候同样需要先source环境,使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [zgl@aoide ~]$ clang -v clang version 9.0.0 Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /home/zgl/llvm-9.0.0/bin Found candidate GCC installation: ...... Found candidate GCC installation: ...... Found candidate GCC installation: ...... Found candidate GCC installation: ...... Found candidate GCC installation: ...... Selected GCC installation: ...... Candidate multilib: .;@m64 Candidate multilib: 32;@m32 Selected multilib: .;@m64 |
对于如下test.c测试代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | struct si{ long pot; int or; long *x; int *y; double z; int h; char c; short sh; }; struct t{ char str; int val; struct si s; double a; }; int main(){ typedef struct si arc; register arc *arcs; printf("%lu\n",sizeof(struct si)); return 0; } |
使用
对于如下hello.f90测试代码:
1 2 3 | program hello print *, "Fortran: Hello World!" end program hello |
使用
注意事项
- 前面也说到,若你只需要使用到
Clang 前端的话从LLVM官网下载的源码就足够了,若你还需要Flang 前端的话,就需要采用flang相关的LLVM进行安装,而不是LLVM官网下载的llvm-9.0.0.src.tar.xz 这个文件。 - 安装时需要先安装llvm,再安装clang或者flang-driver。
- 其他一些由于系统库版本或是其它原因在此也不做说明了。