diff --git "a/content/posts/\347\274\226\350\257\221 LLVM \346\272\220\347\240\201\357\274\214\344\275\277\347\224\250 Clion \350\260\203\350\257\225 clang.md" "b/content/posts/\347\274\226\350\257\221 LLVM \346\272\220\347\240\201\357\274\214\344\275\277\347\224\250 Clion \350\260\203\350\257\225 clang.md"
index 7555a8a..176e9e6 100644
--- "a/content/posts/\347\274\226\350\257\221 LLVM \346\272\220\347\240\201\357\274\214\344\275\277\347\224\250 Clion \350\260\203\350\257\225 clang.md"
+++ "b/content/posts/\347\274\226\350\257\221 LLVM \346\272\220\347\240\201\357\274\214\344\275\277\347\224\250 Clion \350\260\203\350\257\225 clang.md"
@@ -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
+++
@@ -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
```
可选的构建类型说明:
@@ -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 的场景也依赖异常处理。
+
+
+
+
+
编译项目
```
diff --git a/public/index.html b/public/index.html
index b969d38..8e42c96 100644
--- a/public/index.html
+++ b/public/index.html
@@ -61,13 +61,13 @@
CYRUS STUDIO
calendar
- Dec 8, 2024
+ Dec 10, 2024
-
- 9 min read
+ 10 min read
diff --git a/public/index.xml b/public/index.xml
index be04597..a3da3ef 100644
--- a/public/index.xml
+++ b/public/index.xml
@@ -6,12 +6,12 @@
Recent content on CYRUS STUDIO
Hugo
zh-cn
- Sun, 08 Dec 2024 17:37:29 +0800
+ Tue, 10 Dec 2024 22:44:36 +0800
-
编译 LLVM 源码,使用 Clion 调试 clang
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/
- Sun, 08 Dec 2024 17:37:29 +0800
+ Tue, 10 Dec 2024 22:44:36 +0800
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/
版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/
1. LLVM 简介 LLVM 是一个开源的编译器基础架构,最初由 Chris Lattner 于 2000 年在伊利诺伊大学开发,后来成为一个广泛应用于编译器和程序分析的项目。
LLVM 的核心组件:
LLVM Core Libraries:提供用于编译器开发的核心工具集,包括代码生成、优化、目标机器描述等。
Clang:一个基于 LLVM 的 C、C++、Objective-C 编译器前端。
LLVM IR(Intermediate Representation):一种类似汇编的中间表示语言,是 LLVM 的核心抽象。代码在编译过程中先被转换为 LLVM IR,随后进行各种优化,再生成目标机器码。
LLVM Optimizer:对 LLVM IR 进行各种优化,如循环优化、内联展开等,以提升性能。
LLVM Code Generator:将优化后的 LLVM IR 转换为特定平台的机器码。
Linker:LLVM 也包含了一些链接器工具(如 LLD),用于将编译好的目标文件链接成可执行文件或库。
LLVM 的优势:
模块化设计:可用于多种语言的编译器开发(如 Rust、Swift)。
跨平台支持:支持多种处理器架构(如 x86、ARM、RISC-V)。
高度优化:提供丰富的优化技术,帮助生成更高效的机器码。
动态编译支持:适用于 JIT(即时编译),如 WebAssembly 和 Swift 的 REPL 环境。
LLVM 官网:https://llvm.org/
Getting Started with LLVM Core Libraries(中文版)
2. 下载 LLVM 在 Android NDK 中,LLVM/Clang 是默认的编译器。自 Android NDK r18 开始,Google 弃用了 GCC,全面转向使用 LLVM/Clang 作为 NDK 的编译工具链。
diff --git a/public/posts/index.html b/public/posts/index.html
index 2b63bb5..a101e73 100644
--- a/public/posts/index.html
+++ b/public/posts/index.html
@@ -61,13 +61,13 @@ Posts
calendar
- Dec 8, 2024
+ Dec 10, 2024
-
- 9 min read
+ 10 min read
diff --git a/public/posts/index.xml b/public/posts/index.xml
index 66cc5bb..b69dfa8 100644
--- a/public/posts/index.xml
+++ b/public/posts/index.xml
@@ -6,12 +6,12 @@
Recent content in Posts on CYRUS STUDIO
Hugo
zh-cn
- Sun, 08 Dec 2024 17:37:29 +0800
+ Tue, 10 Dec 2024 22:44:36 +0800
-
编译 LLVM 源码,使用 Clion 调试 clang
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/
- Sun, 08 Dec 2024 17:37:29 +0800
+ Tue, 10 Dec 2024 22:44:36 +0800
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/
版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/
1. LLVM 简介 LLVM 是一个开源的编译器基础架构,最初由 Chris Lattner 于 2000 年在伊利诺伊大学开发,后来成为一个广泛应用于编译器和程序分析的项目。
LLVM 的核心组件:
LLVM Core Libraries:提供用于编译器开发的核心工具集,包括代码生成、优化、目标机器描述等。
Clang:一个基于 LLVM 的 C、C++、Objective-C 编译器前端。
LLVM IR(Intermediate Representation):一种类似汇编的中间表示语言,是 LLVM 的核心抽象。代码在编译过程中先被转换为 LLVM IR,随后进行各种优化,再生成目标机器码。
LLVM Optimizer:对 LLVM IR 进行各种优化,如循环优化、内联展开等,以提升性能。
LLVM Code Generator:将优化后的 LLVM IR 转换为特定平台的机器码。
Linker:LLVM 也包含了一些链接器工具(如 LLD),用于将编译好的目标文件链接成可执行文件或库。
LLVM 的优势:
模块化设计:可用于多种语言的编译器开发(如 Rust、Swift)。
跨平台支持:支持多种处理器架构(如 x86、ARM、RISC-V)。
高度优化:提供丰富的优化技术,帮助生成更高效的机器码。
动态编译支持:适用于 JIT(即时编译),如 WebAssembly 和 Swift 的 REPL 环境。
LLVM 官网:https://llvm.org/
Getting Started with LLVM Core Libraries(中文版)
2. 下载 LLVM 在 Android NDK 中,LLVM/Clang 是默认的编译器。自 Android NDK r18 开始,Google 弃用了 GCC,全面转向使用 LLVM/Clang 作为 NDK 的编译工具链。
diff --git "a/public/posts/\347\274\226\350\257\221-llvm-\346\272\220\347\240\201\344\275\277\347\224\250-clion-\350\260\203\350\257\225-clang/index.html" "b/public/posts/\347\274\226\350\257\221-llvm-\346\272\220\347\240\201\344\275\277\347\224\250-clion-\350\260\203\350\257\225-clang/index.html"
index ae0247e..493e7ad 100644
--- "a/public/posts/\347\274\226\350\257\221-llvm-\346\272\220\347\240\201\344\275\277\347\224\250-clion-\350\260\203\350\257\225-clang/index.html"
+++ "b/public/posts/\347\274\226\350\257\221-llvm-\346\272\220\347\240\201\344\275\277\347\224\250-clion-\350\260\203\350\257\225-clang/index.html"
@@ -59,8 +59,8 @@
-
-
+
+
@@ -94,14 +94,14 @@ 编译 LLVM 源码,使用 Clion 调试 clang
calendar
- Dec 8, 2024
+ Dec 10, 2024
- 9 min read
+ 10 min read
@@ -247,8 +247,8 @@ 2. 下载 LLVM
D:\Projects\llvm-project\build>ninja --version
1.12.1
-运行 CMake 配置
-cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="/utf-8" -DLLVM_ENABLE_PROJECTS="llvm;clang;lld" ../llvm
+
运行 CMake 生成编译配置
+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
可选的构建类型说明:
+RTTI(Runtime Type Information)是运行时类型信息,用于在运行时获取对象的实际类型(如通过 typeid 和 dynamic_cast),主要用于支持多态类型检查和类型安全的类型转换。
+启用 RTTI:
+
编译项目
ninja
编译完成后大概 104GB
diff --git a/public/sitemap.xml b/public/sitemap.xml
index d3c7085..cb86ac4 100644
--- a/public/sitemap.xml
+++ b/public/sitemap.xml
@@ -3,13 +3,13 @@
xmlns:xhtml="http://www.w3.org/1999/xhtml">
https://cyrus-studio.github.io/blog/
- 2024-12-08T17:37:29+08:00
+ 2024-12-10T22:44:36+08:00
https://cyrus-studio.github.io/blog/posts/
- 2024-12-08T17:37:29+08:00
+ 2024-12-10T22:44:36+08:00
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/
- 2024-12-08T17:37:29+08:00
+ 2024-12-10T22:44:36+08:00
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/
2024-11-28T00:55:08+08:00