LLVM编译

这篇具有很好参考价值的文章主要介绍了LLVM编译。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

欢迎到我的博客来阅读这篇文章: https://qiu-weidong.github.io/2022/05/01/llvm/build/

Windows下编译LLVM

安装Visual Studio

首先需要下载Visual Studio Installer的安装程序VisualStudioSetup.exe,下载链接: https://visualstudio.microsoft.com/zh-hans/downloads/。选择社区版,点击免费下载

下载后,双击运行VisualStudioSetup.exe。一路下一步即可安装Visual Studio Installer

接下来,点击任务栏左侧的搜索图标,搜索Visual Studio Installer,找到并启动。然后点击可用标签,在列表中找到社区版的Visual Studio,写这篇博客的时候,最新的Visual Studio版本是Visual Studio Community 2022,点击安装,即可进入相关配置界面。

根据需要选择工作负荷和组件。对于编译LLVM的需求来说,需要安装使用C++的桌面开发这个工作负荷。勾选后,点击安装,即可进行安装,等待安装完成即可。

安装完成之后,再次点击任务栏左侧的搜索图标,搜索Developer Powershell for VS 2022,并启动它。也可以点击开始菜单,滚动到字母V,找到Visual Studio 2022文件夹,点击展开,找到Developer Powershell for VS 2022,点击打开。

Developer Powershell for VS 2022类似windows上的Powershell工具,不同之处在于Developer Powershell for VS 2022添加了Visual Studio的相关工具到环境变量。例如,对于Visual Studio中的cl工具,如果在普通的Powershell里面输入cl命令,会提示无法将"cl"项识别为 cmdlet、函数、脚本文件或可运行程序的名称,而在Developer Powershell for VS 2022则会输出如下信息:

用于 x86 的 Microsoft (R) C/C++ 优化编译器 19.31.31107 版
版权所有(C) Microsoft Corporation。保留所有权利。

用法: cl [ 选项... ] 文件名... [ /link 链接选项... ]

因此,我们采用Developer Powershell for VS 2022作为编译LLVM的终端工具。

下载LLVM源码

使用git下载LLVM源代码,注意要禁用自动转译行结束符。

git clone --config core.autocrlf=false https://github.com/llvm/llvm-project.git

或者点击链接https://github.com/llvm/llvm-project/releases,直接下载需要版本的源代码。在编写这篇博客的时候,LLVM的最新版本是14.0.3 。

编译LLVM

打开Developer Powershell for VS 2022,进入到LLVM源码目录,这个源码目录是指有clang、llvm等子目录的目录。
新建一个文件夹用来存放编译结果,并进入新建的目录:

mkdir build
cd build

使用cmake来生成相关的构建文件:

cmake -G Ninja -DCMAKE_BUILD_TYPE=RELEASE -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_ENABLE_PROJECTS="clang"  -DLLVM_OPTIMIZED_TABLEGEN=ON ../llvm

其中-G Ninja参数表示生成Ninja系统的构建文件,采用Ninja系统会有比较快的编译速度。如果要使用其他的构建系统,只需要在-G参数的后面指定要使用的系统即可。可选的构建系统有Unix MakefilesVisual Studio 15 VS2017Visual Studio 16 VS2019Xcode等等。

-DCMAKE_BUILD_TYPE=RELEASE表示生成Release版本的LLVM,这种构建方式会进行优化,并且生成的目标文件体积会更小。如果不想生成数十GB的目标文件,请采用Release构建方式。如果需要调试,那么可以选用Debug构建方式。此外,还有RELWITHDEBINFO和MINSIZEREL方式的构建,RELWITHDEBINFO方式是使用调试符号的发布构建,而MINSIZEREL则是以优化文件大小为主的构建。

-DLLVM_TARGETS_TO_BUILD="X86"表示编译的目标平台是X86平台。如果你的电脑不是X86架构,或者你需要编译的LLVM在其他的机器上使用,请将它设置为相应的架构。可选的目标机器有AArch64、AMDGPU、ARM、BPF、Hexagon、Lanai、Mips、MSP430、NVPTX、PowerPC、RISCV、Sparc、SystemZ、WebAssembly、X86、XCore

-DLLVM_ENABLE_PROJECTS="clang"表示我们除了编译LLVM以外,还要编译clang。如果还需要编译其他工具,则在后面添加,并用分号分割。比如,要编译clang和lldb,则需要设置为-DLLVM_ENABLE_PROJECTS="clang;lldb"

-DLLVM_OPTIMIZED_TABLEGEN=ON表示对TABLEGEN开启优化,对于调试模式,这有利于提高编译速度。

另外一些可能需要修改的配置如下所示:

  • LLVM_ENABLE_EH=ON: 如果要启用异常,则配置

  • LLVM_ENABLE_RTTI=ON: 如果要启用RTTI

生成了构建文件之后,接下来进入编译。

建议关闭所有的应用程序,只保留Developer Powershell for VS 2022。因为Ninja会使用几乎所有的CPU核,可能导致其他应用卡顿,这也是我们使用Developer Powershell for VS 2022而不是Visual Studio IDE来编译的原因。

运行编译命令:

ninja 

经过漫长的等待,如果没有报错,则表示编译成功,进入安装过程。
使用以下命令测试是否成功编译:

bin/clang --version

如果得到以下输出,表示clang编译成功。

clang version 14.0.3
Target: i686-pc-windows-msvc
Thread model: posix
InstalledDir: path-to-llvm-source-code\build\bin

安装LLVM

以管理员方式重新打开Developer Powershell for VS 2022,并切换到之前的build目录。运行安装命令:

ninja install

成功将llvm安装到我们的电脑里面。安装路径在C:\Program Files (x86)\LLVM或者C:\Program Files\LLVM。找到安装目录,将C:\Program Files (x86)\LLVM\binC:\Program Files (x86)\LLVM\lib添加到环境变量。并使用以下命令进行测试:

clang --version

如果能得到相关clang的版本信息,则表示安装成功。

测试clang

新建一个cpp文件main.cpp。

#include <iostream>

int main(int argc, const char ** argv) {
    std::cout << "Hello Clang World!" << std::endl;
}

使用clang编译该文件:

clang main.cpp -o main.exe

编译得到可执行文件main.exe,运行它,得到输出:

Hello Clang World!

Linux下编译LLVM

安装编译器

需要安装gcc、g++、ninja、cmake等工具,一般linux系统会自带,如果没有,则使用apt安装即可,命令如下:

sudo apt install–y gcc g++ cmake ninja-build

下载LLVM源代码

这部分和windows下类似,使用如下所示git命令:

git clone https://github.com/llvm/llvm-project.git

同样地,也可以到https://github.com/llvm/llvm-project/releases去下载相应代码。

编译LLVM

同windows下一样,进入源代码目录,新建build文件夹,然后进入build。

mkdir build
cd build

使用cmake来生成构建文件,推荐使用Ninja

cmake -G Ninja -DCMAKE_BUILD_TYPE=RELEASE -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_ENABLE_PROJECTS="clang"  -DLLVM_OPTIMIZED_TABLEGEN=ON ../llvm

相关配置前面已经说明,这里不再重复。

接下来运行编译命令:

ninja

安装LLVM

编译完成后,执行安装命令即可:文章来源地址https://www.toymoban.com/news/detail-465232.html

sudo ninja build

到了这里,关于LLVM编译的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 智能合约协议和提案(文章不断跟新,欢迎评论补充&纠正!)

    描述 : ERC-20是基于以太坊区块链技术的一种代币标准协议。它规定了一系列的规范和接口,使得不同的代币可以在以太坊网络上遵循同样的规则,从而实现互操作性和互换性。这种标准协议对于以太坊生态系统的发展起到了重要的推动作用,为众多区块链项目提供了代币发

    2024年04月29日
    浏览(40)
  • LLVM编译报错解决:collect2: fatal error: ld terminated with signal 9 [Killed]

    克隆代码到本地 配置编译选项 generator一般使用Ninja,而 options 中必须要传入的参数是构建类型 CMAKE_BUILD_TYPE 不同的CMAKE_BUILD_TYPE区别如下: Build Type Optimization Debug Info Assertion Release For Speed No No Debug None Yes Yes RelWithDebInfo For Speed Yes No MinSizeRel For Size No No Release适合LLVM和Clang的用户

    2024年02月11日
    浏览(39)
  • SPEC CPU 2017 x86_64 Ubuntu 22.04 LTS LLVM 16.0.6 编译 intrate intspeed

    编译成功日志 安装openmp,其中有日志 -- Installing: /usr/local/lib/libomp.so  

    2024年02月15日
    浏览(89)
  • 【C语言进阶篇】看完这篇结构体文章,我向数据结构又进了一大步!(结构体进阶详解)

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 :《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,结构体的基本使用和常见错误在上一篇详细讲解过了,不知道大家都学会了没有。    ⛳️ 今天给大家来个硬菜,教点高

    2024年02月15日
    浏览(46)
  • 通过Python+Selenium获取我的所有文章质量分

    大家好,我是空空star,本篇给大家分享一下 《通过Python+Selenium获取我的所有文章质量分》 。 目前在质量分查询界面只能一篇文章一篇文章查,如果我们想快速知道我们哪些文章质量分不是高质量,手动一篇一篇查太慢,借助Selenium代替手动,快速查出我们所有文章的质量分

    2024年02月16日
    浏览(33)
  • 【通知】我的教学文章《Rust跟我学》已全部上线

    大家好,我是get_local_info开源库作者带剑书生,现在我的《Rust跟我学》专栏文章已全部上线,它记录了我在写库时获得的重要Rust经验和技巧,是不同于《Rust语言编程》等简单实践的书籍。为您节省了学习时间,让您可以快速上手熟悉Rust并进入项目。 具体介绍,请翻看我的上

    2024年01月20日
    浏览(50)
  • 利用Figlet工具创建酷炫Linux Centos8服务器-登录欢迎界面-SHELL自动化编译安装代码

    因为我们需要生成需要的特定字符,所以需要在当前服务器中安装Figlet,默认没有安装包的,其实如果我们也只要在一台环境中安装,然后需要什么字符只要复制到需要的服务器中,并不需要所有都安装。同样的,我们也可以利用此生成的字符用到脚本运行的开始起头部分,

    2024年02月12日
    浏览(57)
  • 看完这篇文章,才发现我的测试用例写的就是垃圾

    测试用例编写作为测试技能最基础的一个能力,大家应该或多或少都有自己写用例的习惯和思考方式,这里分享一些需求分析和编写用例的经验,主要针对功能测试,旨在尽量降低测试遗漏的可能性,而对于新同学来说,则希望可以达到入门的效果。最后会分享一个小工具,

    2024年02月15日
    浏览(37)
  • 【论文阅读】图像信息隐藏文章汇总(含代码)

    Large-capacity Image Steganography Based on Invertible Neural Networks CVPR2021;可逆网络ISN,大容量的实现是靠RGB通道的累加;无公开代码 Multitask Identity-Aware Image Steganography via Minimax Optimization IEEE Transactions on Image Processing2021;提出直接识别防止接收端泄密、其中恢复分支可选;主要涉及身份信息

    2024年04月09日
    浏览(51)
  • 一个合格(优秀)的前端都应该阅读这些文章

    的确,有些标题党了。起因是微信群里,有哥们问我,你是怎么学习前端的呢?能不能共享一下学习方法。一句话也挺触动我的,我真的不算是什么大佬,对于学习前端知识,我也不能说是掌握了什么捷径。当然,我个人的学习方法这篇文章已经在写了,预计这周末会在我个

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包