Skip to content

Commit

Permalink
编译 LLVM 源码,使用 Clion 调试 clang
Browse files Browse the repository at this point in the history
  • Loading branch information
CYRUS-STUDIO committed Dec 10, 2024
1 parent e55762e commit 17ce96d
Show file tree
Hide file tree
Showing 7 changed files with 48 additions and 20 deletions.
24 changes: 21 additions & 3 deletions content/posts/编译 LLVM 源码,使用 Clion 调试 clang.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
+++
title = '编译 LLVM 源码,使用 Clion 调试 clang'
date = 2024-12-08T17:37:29.317577+08:00
date = 2024-12-10T22:44:36.801234+08:00
draft = false
+++

Expand Down Expand Up @@ -211,10 +211,10 @@ D:\Projects\llvm-project\build>ninja --version
```


运行 CMake 配置
运行 CMake 生成编译配置

```
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="/utf-8" -DLLVM_ENABLE_PROJECTS="llvm;clang;lld" ../llvm
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="/utf-8" -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_PROJECTS="llvm;clang;lld" ../llvm
```
可选的构建类型说明:

Expand All @@ -228,6 +228,24 @@ cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="/utf-8" -DLLVM_ENAB





RTTI(Runtime Type Information)是运行时类型信息,用于在运行时获取对象的实际类型(如通过 typeid 和 dynamic_cast),主要用于支持多态类型检查和类型安全的类型转换。





启用 RTTI:

- LLVM_ENABLE_RTTI:启用 RTTI 支持。

- LLVM_ENABLE_EH:启用异常处理支持,许多需要 RTTI 的场景也依赖异常处理。





编译项目

```
Expand Down
4 changes: 2 additions & 2 deletions public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,13 @@ <h1>CYRUS STUDIO</h1>
<title>calendar</title>
<rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line>
</svg>
Dec 8, 2024
Dec 10, 2024
<span class="posts-list-item-separator">-</span>
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-clock">
<title>clock</title>
<circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline>
</svg>
9 min read
10 min read
</span>
</li>

Expand Down
4 changes: 2 additions & 2 deletions public/index.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
<description>Recent content on CYRUS STUDIO</description>
<generator>Hugo</generator>
<language>zh-cn</language>
<lastBuildDate>Sun, 08 Dec 2024 17:37:29 +0800</lastBuildDate>
<lastBuildDate>Tue, 10 Dec 2024 22:44:36 +0800</lastBuildDate>
<atom:link href="https://cyrus-studio.github.io/blog/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>编译 LLVM 源码,使用 Clion 调试 clang</title>
<link>https://cyrus-studio.github.io/blog/posts/%E7%BC%96%E8%AF%91-llvm-%E6%BA%90%E7%A0%81%E4%BD%BF%E7%94%A8-clion-%E8%B0%83%E8%AF%95-clang/</link>
<pubDate>Sun, 08 Dec 2024 17:37:29 +0800</pubDate>
<pubDate>Tue, 10 Dec 2024 22:44:36 +0800</pubDate>
<guid>https://cyrus-studio.github.io/blog/posts/%E7%BC%96%E8%AF%91-llvm-%E6%BA%90%E7%A0%81%E4%BD%BF%E7%94%A8-clion-%E8%B0%83%E8%AF%95-clang/</guid>
<description>版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/&#xA;1. LLVM 简介 LLVM 是一个开源的编译器基础架构,最初由 Chris Lattner 于 2000 年在伊利诺伊大学开发,后来成为一个广泛应用于编译器和程序分析的项目。&#xA;LLVM 的核心组件:&#xA;LLVM Core Libraries:提供用于编译器开发的核心工具集,包括代码生成、优化、目标机器描述等。&#xA;Clang:一个基于 LLVM 的 C、C++、Objective-C 编译器前端。&#xA;LLVM IR(Intermediate Representation):一种类似汇编的中间表示语言,是 LLVM 的核心抽象。代码在编译过程中先被转换为 LLVM IR,随后进行各种优化,再生成目标机器码。&#xA;LLVM Optimizer:对 LLVM IR 进行各种优化,如循环优化、内联展开等,以提升性能。&#xA;LLVM Code Generator:将优化后的 LLVM IR 转换为特定平台的机器码。&#xA;Linker:LLVM 也包含了一些链接器工具(如 LLD),用于将编译好的目标文件链接成可执行文件或库。&#xA;LLVM 的优势:&#xA;模块化设计:可用于多种语言的编译器开发(如 Rust、Swift)。&#xA;跨平台支持:支持多种处理器架构(如 x86、ARM、RISC-V)。&#xA;高度优化:提供丰富的优化技术,帮助生成更高效的机器码。&#xA;动态编译支持:适用于 JIT(即时编译),如 WebAssembly 和 Swift 的 REPL 环境。&#xA;LLVM 官网:https://llvm.org/&#xA;Getting Started with LLVM Core Libraries(中文版)&#xA;2. 下载 LLVM 在 Android NDK 中,LLVM/Clang 是默认的编译器。自 Android NDK r18 开始,Google 弃用了 GCC,全面转向使用 LLVM/Clang 作为 NDK 的编译工具链。</description>
</item>
Expand Down
4 changes: 2 additions & 2 deletions public/posts/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,13 @@ <h1>Posts</h1>
<title>calendar</title>
<rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line>
</svg>
Dec 8, 2024
Dec 10, 2024
<span class="posts-list-item-separator">-</span>
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-clock">
<title>clock</title>
<circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline>
</svg>
9 min read
10 min read
</span>
</li>

Expand Down
4 changes: 2 additions & 2 deletions public/posts/index.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
<description>Recent content in Posts on CYRUS STUDIO</description>
<generator>Hugo</generator>
<language>zh-cn</language>
<lastBuildDate>Sun, 08 Dec 2024 17:37:29 +0800</lastBuildDate>
<lastBuildDate>Tue, 10 Dec 2024 22:44:36 +0800</lastBuildDate>
<atom:link href="https://cyrus-studio.github.io/blog/posts/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>编译 LLVM 源码,使用 Clion 调试 clang</title>
<link>https://cyrus-studio.github.io/blog/posts/%E7%BC%96%E8%AF%91-llvm-%E6%BA%90%E7%A0%81%E4%BD%BF%E7%94%A8-clion-%E8%B0%83%E8%AF%95-clang/</link>
<pubDate>Sun, 08 Dec 2024 17:37:29 +0800</pubDate>
<pubDate>Tue, 10 Dec 2024 22:44:36 +0800</pubDate>
<guid>https://cyrus-studio.github.io/blog/posts/%E7%BC%96%E8%AF%91-llvm-%E6%BA%90%E7%A0%81%E4%BD%BF%E7%94%A8-clion-%E8%B0%83%E8%AF%95-clang/</guid>
<description>版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/&#xA;1. LLVM 简介 LLVM 是一个开源的编译器基础架构,最初由 Chris Lattner 于 2000 年在伊利诺伊大学开发,后来成为一个广泛应用于编译器和程序分析的项目。&#xA;LLVM 的核心组件:&#xA;LLVM Core Libraries:提供用于编译器开发的核心工具集,包括代码生成、优化、目标机器描述等。&#xA;Clang:一个基于 LLVM 的 C、C++、Objective-C 编译器前端。&#xA;LLVM IR(Intermediate Representation):一种类似汇编的中间表示语言,是 LLVM 的核心抽象。代码在编译过程中先被转换为 LLVM IR,随后进行各种优化,再生成目标机器码。&#xA;LLVM Optimizer:对 LLVM IR 进行各种优化,如循环优化、内联展开等,以提升性能。&#xA;LLVM Code Generator:将优化后的 LLVM IR 转换为特定平台的机器码。&#xA;Linker:LLVM 也包含了一些链接器工具(如 LLD),用于将编译好的目标文件链接成可执行文件或库。&#xA;LLVM 的优势:&#xA;模块化设计:可用于多种语言的编译器开发(如 Rust、Swift)。&#xA;跨平台支持:支持多种处理器架构(如 x86、ARM、RISC-V)。&#xA;高度优化:提供丰富的优化技术,帮助生成更高效的机器码。&#xA;动态编译支持:适用于 JIT(即时编译),如 WebAssembly 和 Swift 的 REPL 环境。&#xA;LLVM 官网:https://llvm.org/&#xA;Getting Started with LLVM Core Libraries(中文版)&#xA;2. 下载 LLVM 在 Android NDK 中,LLVM/Clang 是默认的编译器。自 Android NDK r18 开始,Google 弃用了 GCC,全面转向使用 LLVM/Clang 作为 NDK 的编译工具链。</description>
</item>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@
<meta property="og:locale" content="zh_cn">
<meta property="og:type" content="article">
<meta property="article:section" content="posts">
<meta property="article:published_time" content="2024-12-08T17:37:29+08:00">
<meta property="article:modified_time" content="2024-12-08T17:37:29+08:00">
<meta property="article:published_time" content="2024-12-10T22:44:36+08:00">
<meta property="article:modified_time" content="2024-12-10T22:44:36+08:00">


</head>
Expand Down Expand Up @@ -94,14 +94,14 @@ <h1 class ="post-title">编译 LLVM 源码,使用 Clion 调试 clang</h1>
<title>calendar</title>
<rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line>
</svg>
Dec 8, 2024
Dec 10, 2024
</div>
<div>
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-clock">
<title>clock</title>
<circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline>
</svg>
9 min read
10 min read
</div>
</div>
</header>
Expand Down Expand Up @@ -247,8 +247,8 @@ <h1 id="2-下载-llvm"><strong>2. 下载 LLVM</strong></h1>

D:\Projects\llvm-project\build&gt;ninja --version
1.12.1
</code></pre><p>运行 CMake 配置</p>
<pre tabindex="0"><code>cmake -G &#34;Ninja&#34; -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS=&#34;/utf-8&#34; -DLLVM_ENABLE_PROJECTS=&#34;llvm;clang;lld&#34; ../llvm
</code></pre><p>运行 CMake 生成编译配置</p>
<pre tabindex="0"><code>cmake -G &#34;Ninja&#34; -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS=&#34;/utf-8&#34; -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_PROJECTS=&#34;llvm;clang;lld&#34; ../llvm
</code></pre><p>可选的构建类型说明:</p>
<ul>
<li>
Expand All @@ -264,6 +264,16 @@ <h1 id="2-下载-llvm"><strong>2. 下载 LLVM</strong></h1>
<p>MinSizeRel: 生成针对最小尺寸优化的构建,而非速度优化。适合用于空间受限的环境。</p>
</li>
</ul>
<p>RTTI(Runtime Type Information)是运行时类型信息,用于在运行时获取对象的实际类型(如通过 typeid 和 dynamic_cast),主要用于支持多态类型检查和类型安全的类型转换。</p>
<p>启用 RTTI:</p>
<ul>
<li>
<p>LLVM_ENABLE_RTTI:启用 RTTI 支持。</p>
</li>
<li>
<p>LLVM_ENABLE_EH:启用异常处理支持,许多需要 RTTI 的场景也依赖异常处理。</p>
</li>
</ul>
<p>编译项目</p>
<pre tabindex="0"><code>ninja
</code></pre><p>编译完成后大概 104GB</p>
Expand Down
6 changes: 3 additions & 3 deletions public/sitemap.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://cyrus-studio.github.io/blog/</loc>
<lastmod>2024-12-08T17:37:29+08:00</lastmod>
<lastmod>2024-12-10T22:44:36+08:00</lastmod>
</url><url>
<loc>https://cyrus-studio.github.io/blog/posts/</loc>
<lastmod>2024-12-08T17:37:29+08:00</lastmod>
<lastmod>2024-12-10T22:44:36+08:00</lastmod>
</url><url>
<loc>https://cyrus-studio.github.io/blog/posts/%E7%BC%96%E8%AF%91-llvm-%E6%BA%90%E7%A0%81%E4%BD%BF%E7%94%A8-clion-%E8%B0%83%E8%AF%95-clang/</loc>
<lastmod>2024-12-08T17:37:29+08:00</lastmod>
<lastmod>2024-12-10T22:44:36+08:00</lastmod>
</url><url>
<loc>https://cyrus-studio.github.io/blog/posts/%E4%BD%BF%E7%94%A8-opt-%E4%BC%98%E5%8C%96-llvm-ir%E5%AE%9A%E5%88%B6-clang-%E5%AE%9E%E7%8E%B0%E5%87%BD%E6%95%B0%E5%90%8D%E5%8A%A0%E5%AF%86/</loc>
<lastmod>2024-11-28T00:55:08+08:00</lastmod>
Expand Down

0 comments on commit 17ce96d

Please sign in to comment.