【LLVM】在Windows中配置LLVM开发环境

embedded/2024/9/25 1:21:37/

本文内容

  • 0.动机
  • 1. 安装Visual Studio 2019
  • 2 安装Python3
    • 已安装Python
    • 未安装Python
  • 3. 配置Visual Studio
  • 4.安装LLVM
    • 获取源码
    • 将LLVM切换到我们的目标版本
    • 编译LLVM

0.动机

想着ubuntu用着别手,看看能不能在Windows中进行开发。于是就动手实践了下 Getting Started with the LLVM System using Microsoft Visual Studio。安装是安装成功了,但用了一段时间后,我先说结论:
并不推荐大家在Win系统里进行开发!!!!!还是乖乖使用LINUX系

  1. 最重要的就是LLVM官方并不是十分支持Win环境,Bug多,很多新特性还是在UNIX系系统中才支持。
  2. 最明显的感受就是开发时不适应。比如,大部分教程教你使用opt试用pass时,调用的是动态库.so文件。但在win里动态库文件不叫这个,诸如此类的问题多得很。给小白实践带来很多小麻烦(大佬请忽视我说的话)。

LLVM

But,安装了就安装了吧,万一以后熟悉了还可以继续用。下面是安装步骤。

1. 安装Visual Studio 2019

首先,在 Visual Studio 安装程序的“工作负载”选项卡中,选择“ 使用 C++ 进行桌面开发”工作负载。
并更改安装位置到其他盘,不推荐直接安装在系统盘中。

勾选C++的桌面开发
我的位置配置方式,供大家参考:
目录结构

  • VisualStudio2019Pro
    • VisualStudio2019ProIDE
    • VisualStudio2019ProShared
      两个子文件夹分别承载IDE共享组件、工具SDK等
      文件夹架构
      点击位置中的‘更改’,配置为我们新建的文件夹
      位置配置方式
      点击’单个组件’选项卡,勾选“Git for Windows”,点击安装。已经有Git的可以不用勾选。
      安装git for window
      等待它安装完毕。
      等待安装
      会提醒你登录账户,但暂时不要登录,选以后再说
      继续但无需代码
      上菜单栏选项中,帮助-注册,点击使用产品密钥,输入神秘代码NYWVH-HT4XC-R2WYW-9Y3CM-X4V3Y,点击应用,即可完成。
      激活

2 安装Python3

已安装Python

可以使用以下命令来查看Python的安装路径

  1. 打开命令提示符面板: windows键+R,输入“cmd”,打开命令行。
  2. 输入以下代码查看安装路径
import sys
sys.path

python路径
这里显示我已经安装python3.9。

未安装Python

进入官网Python官网,选Download,安装最新的吧。
我以python-3.12.3为例,重新安装Python。
新Python
在安装选项中,勾选Add python.exe to PATH,这将允许为所有用户安装 psutil 进行回归测试,并使 Python 可从命令行使用。.上面那个也勾下,以免安装出问题。然后点击Customize installation
add

为所有用户安装
等待安装完毕
安装Python

3. 配置Visual Studio

找到Developer Command Prompt for VS 2019并以管理员身份运行
Developer Command Prompt for VS 2019
提前在你想安装LLVM的盘下创建空文件夹。但不要安装到包含空格的路径(例如c:\Documents and Settings\...),因为会失败。我这里以E:\llvm为例

输入命令

e:
cd /llvm

接着输入如下命令,注册 Microsoft 调试接口访问 (DIA) DLL。LLVM PDB 测试和LLDB 开发需要 DIA 库 。

regsvr32 "%VSINSTALLDIR%\DIA SDK\bin\msdia140.dll"
regsvr32 "%VSINSTALLDIR%\DIA SDK\bin\amd64\msdia140.dll"

键入每个命令一般都会弹出提示,点击确认即可。
成功

4.安装LLVM

获取源码

退出Developer Command Prompt for VS 2019并进入cmd命令行
键入以下命令安装psutil

pip install psutil

安装psutil
键入以下命令获取LLVM源码:

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

将LLVM切换到我们的目标版本

源码大小约为3GB。并且git方式下载的一般为最新的llvm版本。截止本文发出时,最新的版本已经到了LLVM 19。新版本有新特性,但并不代表一定好,而且新版本可能文档方面的资料少,这并不利于我们的开发工作。但我们可以使用git将其切换至指定版本。
进入lllvm-project目录,鼠标右键Open git bash here
键入

git tag

查看版本标签。例如我想切换的LLVM13的标签为llvmorg-13.0.1
gittag
键入命令,然后等待切换完毕

git checkout llvmorg-13.0.1

gitcheckout

编译LLVM

编译LLVM需要使用到Cmake,而VS自带了cmake不需要我们安装。所以,我们要做的就是使用VS打开刚才切换完毕的llvm-project源码目录中的llvm子目录。
llvmdir

键入命令

cmake  -B build -DLLVM_ENABLE_PROJECTS=clang -DLLVM_TARGETS_TO_BUILD=X86 -Thost=x64
  • -B build: 这个选项告诉CMake在指定的目录中生成构建系统文件。在这里,build是构建目录的路径。如果该目录不存在,CMake会创建它。
  • -DLLVM_ENABLE_PROJECTS=clang: 这个选项,告诉CMake要构建LLVM项目的哪些部分。在这里,只构建了Clang,即C/C++编译器。
  • -LLVM_TARGETS_TO_BUILD=X86:告诉CMake要为哪些目标体系结构构建LLVM。在这里,只构建了X86体系结构的支持。
  • -Thost=x64: 默认情况下,CMake 生成的 Visual Studio 项目文件使用 32 位工具集。如果在 64 位版本的 Windows 上进行开发并希望使用 64 位工具集,需要传递该标志。这要求 CMake 3.8.0 或更高版本。

键入命令后开始构建:
cmake
构建完生成了一些配置信息以及一个build目录。在该目录下找到LLVM.sln并双击~~(666)~~ 。
然后在解决方案中找到ALL_BUILD,进行构建.(其实就是安装LLVM)。
ALL_BUILD
构建过程大概需要1-2小时。然后…准备好听电脑风扇狂转。
ass
大家可以自己写个Pass,做一下…就会发现很烦…
结束!


http://www.ppmy.cn/embedded/17623.html

相关文章

第12章 最佳的UI体验——Material Design实战

第12章 最佳的UI体验——Material Design实战 其实长久以来,大多数人都认为Android系统的UI并不算美观,至少没有iOS系统的美观。以至于很多IT公司在进行应用界面设计的时候,为了保证双平台的统一性,强制要求Android端的界面风格必…

20240417-算法复习打卡day57||● 647. 回文子串 ● 516.最长回文子序列● 动态规划总结篇

647. 回文子串 class Solution { public:int countSubstrings(string s) {vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));int result 0;for (int i s.size() - 1; i > 0; i--) {for (int j i; j < s.size(); j) {if (s[i] …

密码学 | Random Oracle 随机预言机

​ &#x1f951;原文&#xff1a;究竟什么才是随机预言机呢&#xff1f; - 玄星的回答 &#x1f951;答主指出&#xff1a; 英文维基明明对 随机预言机 给出了两个完全不同的理解&#xff0c;但这两个理解之间的连接词却是 “Stated differently”&#xff0c;即 “换句话说…

nginx配置说明

目录标题 基础配置说明配置说明思维导图基于反向代理的负载均衡器负载均衡策略 基础配置说明 需要注意的几个点&#xff1a; nginx 的 log 文件路径配置nginx.pid 所在路径配置include 所在路径配置&#xff0c;即 nginx.conf 所在路径在 server 中 listen 监听端口配置 root…

GenN2N: Generative NeRF2NeRF Translation

GenN2N: Generative NeRF2NeRF Translation GenN2N&#xff1a;生成NeRF2NeRF翻译 Xiangyue Liu1 Han Xue2 Kunming Luo1 Ping Tan12 Li Yi2,3,42 相约刘寒雪 2 昆明罗平谭 2 李毅 2, 3, 4 2 1 Hong Kong University of Science and Technology 2 Tsinghua Univ…

2024年深圳杯东三省数学建模联赛赛题浅析

深圳杯&东三省数学建模联赛赛题浅析 赛题难度 一图如下所示 题目复杂性技术需求数据处理主要难点总体评估A题&#xff1a;多个火箭残骸的准确定位222精确处理误差和定位精度1B题&#xff1a;批量工件并行切割下料问题344最大化材料利用率和多动态切割头协调3C题&#xff…

OpenHarmony音视频—opus

简介 Opus是一种用于在互联网上进行交互式语音和音频传输的编解码器。它可以从低比特率窄带语音扩展到非常高的高品质立体声音乐。 下载安装 直接在OpenHarmony-SIG仓中搜索opus并下载。 使用说明 以OpenHarmony 3.1 Beta的rk3568版本为例 将下载的opus库代码存在以下路径&a…

(三)登录和注册(handle_auto.go)

登录和注册(handle_auto.go) 文章目录 登录和注册(handle_auto.go)一、所需要的结构体信息二、注册三、登录四、退出 一、所需要的结构体信息 type UserAuth struct{}type LoginReq struct {Username string json:"username" binding:"required"Password …