MikhayEeer Home

avatar

MikhayEeer's note station
Share some notes during my study and work.
UCAS在读研究生
技术栈:
 C/C++/Python/Golang/Linux/Git
对新技术和新事物充满研究激情,欢迎一起交流探讨!
博客有任何问题或建议,欢迎联系我!

Mikhay.Eeer@outlook.com Email

View My GitHub Profile MikhayEeer

28 February 2025

llvm源码ubuntu+cmake编译

by mikhayeeer

文章CSDN链接-LLVM源码编译

源码编译

之前找到的教程大部分是预编译的代码解压安装 源码编译参考文献:

源码的位置不要找错了,是这个仓库

源码所属仓库 llvm/llvm-project.

准备环境

Ubuntu 最好可以准备ninja

sudo apt-get install build-essential zlib1g-dev python

仅为自己安装

笔者最终使用的是服务器集群进行编译,没有root权限,所以只能安装到自己的用户目录~

apt download <package>
# 会下载一个deb文件

dpkg -x <package>.deb ~/path/to/install

vim ~/.bashrc

进入vim编辑

export PATH = $PATH:~/path/to/install/usr/bin # 这种安装会在指定目录下创建usr/bin目录

编辑后刷新环境变量

source ~/.bashrc

下载源码

真正的源码是llvm-project仓库的内容 – llvm/llvm-project.

直接克隆github的太慢且多次断联

尝试了缓冲区、超时时间、禁用HTTP/2、使用代理、浅层克隆、单分支克隆均无果

选择国内镜像进行克隆

git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm-project.git --depth 1 --branch main

git fetch

如果担心下载的内容不够,可以不使用浅克隆与单分支

时间会比较长

git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm-project.git

cmake构建

cd llvm-project
mkdir build 
cd build

cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX="/mnt/d/Work/llvm/llvm-install" -DLLVM_ENABLE_PROJECTS=clang ../llvm

遇到报错

CMake Error at cmake/modules/GetHostTriple.cmake:54 (message):
  Failed to execute /mnt/d/Work/llvm/llvm-project/llvm/cmake/config.guess
Call Stack (most recent call first):
  cmake/config-ix.cmake:483 (get_host_triple)
  CMakeLists.txt:987 (include)

查找类似错误 Windows 用 CMake 构建 LLVM 时出现 cmake/config-ix.cmake:401 (get_host_triple) 错误 - Stack Overflow

~~修改后的构建命令

# 命令无用
cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX="/mnt/d/Work/llvm/llvm-install" -DLLVM_ENABLE_PROJECTS=clang -DLLVM_HOST_TRIPLE=x86_64 ../llvm

~~ 该方案不起效

第二篇参考Ubuntu20.04编译OLLVM踩坑_llvm config.guess-CSDN博客 主要的原因是在config.guess文件中存在一些DOS行结尾(DOS line endings),需要将其转换为Unix行结尾。

笔者出错猜测是因为没有在WSL中配置git,所以是在主机Windows进行git拉取,可能导致了一些编码问题

sudo apt-get install dos2unix
dos2unix path/to/config.guess

构建成功 Configure Done

编译

ninja

cmake --build .

都遇到了WSL直接崩溃死机,退出到windows的情况

free -h # WSL 分配了8GB内存, Swap分区 2GB

nproc # 能看到有16个核心

一开始选用WSL进行编译,分配的内存8GB,SWAP分区2GB,CPU16核心, 一进行编译就WSL崩溃 服务器配置是2048GB内存,192核心

转移到服务器上继续运行 编译用时12小时以上

安装与Path

cmake --build . --target install

# 或者
ninja install

安装的目录是前面设置的Prefix_Path 安装好后,该目录下有bin等四个文件夹

vim ~/.bashrc

修改文件

export PATH = $PATH:/path/to/llvm/install/bin

然后刷新环境变量

source ~/.bashrc

验证命令llvm-as --version

(base) root@panda:~$ llvm-as --version
Ubuntu LLVM version 14.0.0
  
  Optimized build.
  Default target: x86_64-pc-linux-gnu
  Host CPU: ivybridge

错误源码

一开始找到的源码是不对的,实际上应该不是源码,而是预编译的代码,用于安装的

下载源码-out

LLVM18.src.tar.xz clang18.src.tar.xz

tar.gz和tar.xz的解压命令不一致

tar -xJvf *.tar.xz

tar -xzvf *.tar.gz

解压后,组织一下目录

llvm
|--	llvm-src
	|-- tools
	    |-- clang 
|-- llvm-build
|-- llvm-install

准备编译

cd llvm-build
cmake /mnt/d/Work/llvm/llvm-src -G Ninja -DCMAKE_BUILD_TYPE="Debug" -DCMAKE_INSTALL_PREFIX="../llvm-install"

该源码有问题,缺少很多.cmake文件,应该不是这一份源码

tags: Git - #llvm