使用 LLVM 作为后端,dart 为前端实现一个简易的编程语言。
通过 dart FFI 和 ffi_gen
调用 LLVM-C 接口;
在dart端处理词法分析、构建模块并生成 .o 目标文件然后使用clang
完成链接,生成一个可执行文件。
llvm version: >= 16.0.6
在根文件夹下可以简单运行:
dart run bin/run.dart stack_com
stack_com.kc 在 kc/bin
文件夹下
测试 所有kc文件:
dart test test/test_all_test.dart
在运行之前要做一些准备
需要安装Visual Studio, Window SDK, msys2
选择一个配置环境:
打开cmd/pwsh
clang64
pacman -S mingw-w64-clang-x86_64-toolchain mingw-w64-clang-x86_64-llvm mingw-w64-clang-x86_64-cmake mingw-w64-clang-x86_64-ninja mingw-w64-clang-x86_64-zstd mingw-w64-clang-x86_64-zlib
clang64
toolchain默认包含clang
,其他环境使用gcc
,所以这里需要在mingw64
环境下装一个clang
:
pacman -S mingw-w64-x86_64-clang
首先安装 pactoys:
pacman -S pactoys
使用:p
省略前缀:
clang64
:
pacboy -S toolchain:p llvm:p ninja:p cmake:p zlib:p zstd:p
pacman -S mingw-w64-x86_64-lldb
lldb
调试使用,mingw64
的lldb
好像支持中文,比较好用
接着进入llvm_lang目录:
cmake -S. -B build -G Ninja
ninja -C build install
cd ..
注意在执行dart run bin/run.dart
时,确保和上面是同一个环境
参数添加-g
开启调试;
如果不是clang64
环境,lldb
好像有些问题,可以使用gdb
直接使用brew安装
brew install llvm
之后使用 vscode 打开 llvm_lang
项目运行install
完成安装。
windows msys2 需要添加环境变量
将clang64
添加到环境PATH
中
修改.vscode\launch.json
:
下面<msys2-path>
替换为真实路径
"env":{
"PATH":"<msys2-path>\\clang64\\bin;${env:PATH}",
},