2025-08-18 17:51:31 +09:00
|
|
|
|
# 🚀 LLVM実装クイックスタートガイド
|
|
|
|
|
|
|
|
|
|
|
|
## 📋 今すぐ始める手順
|
|
|
|
|
|
|
|
|
|
|
|
### 1. **環境準備**(5分)
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# LLVM 17インストール確認
|
|
|
|
|
|
llvm-config --version # 17.x.x が表示されること
|
|
|
|
|
|
|
|
|
|
|
|
# Nyashプロジェクトで作業
|
|
|
|
|
|
cd /path/to/nyash
|
|
|
|
|
|
git checkout -b feature/llvm-poc
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. **最初のコミット**(10分)
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# Cargo.tomlを編集
|
|
|
|
|
|
echo '[dependencies]
|
|
|
|
|
|
inkwell = { version = "0.5", features = ["llvm17-0"] }
|
|
|
|
|
|
|
|
|
|
|
|
[features]
|
|
|
|
|
|
llvm = ["inkwell"]' >> Cargo.toml
|
|
|
|
|
|
|
|
|
|
|
|
# ディレクトリ作成
|
|
|
|
|
|
mkdir -p src/backend/llvm
|
|
|
|
|
|
|
|
|
|
|
|
# 最初のファイル作成
|
|
|
|
|
|
touch src/backend/llvm/mod.rs
|
|
|
|
|
|
touch src/backend/llvm/context.rs
|
|
|
|
|
|
touch src/backend/llvm/compiler.rs
|
|
|
|
|
|
|
|
|
|
|
|
# コミット
|
|
|
|
|
|
git add .
|
|
|
|
|
|
git commit -m "feat(llvm): Add inkwell dependency and basic structure"
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. **最小実装のコピペ**(20分)
|
|
|
|
|
|
|
|
|
|
|
|
**src/backend/llvm/mod.rs**:
|
|
|
|
|
|
```rust
|
|
|
|
|
|
pub mod context;
|
|
|
|
|
|
pub mod compiler;
|
|
|
|
|
|
|
|
|
|
|
|
pub use compiler::compile_to_object;
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**動作確認**:
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cargo build --features llvm
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 4. **テストプログラム作成**(5分)
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# テスト用Nyashファイル
|
2025-11-06 15:41:52 +09:00
|
|
|
|
cat > test_return_42.hako << 'EOF'
|
2025-08-18 17:51:31 +09:00
|
|
|
|
static box Main {
|
|
|
|
|
|
main() {
|
|
|
|
|
|
return 42
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
EOF
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🔍 詰まったときの確認ポイント
|
|
|
|
|
|
|
|
|
|
|
|
### **ビルドエラーの場合**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# LLVM関連の環境変数確認
|
|
|
|
|
|
echo $LLVM_SYS_170_PREFIX
|
|
|
|
|
|
|
|
|
|
|
|
# 設定されていない場合
|
|
|
|
|
|
export LLVM_SYS_170_PREFIX=$(llvm-config --prefix)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### **inkwellのバージョン問題**
|
|
|
|
|
|
```toml
|
|
|
|
|
|
# 代替バージョン
|
|
|
|
|
|
inkwell = { git = "https://github.com/TheDan64/inkwell", branch = "master", features = ["llvm17-0"] }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### **リンクエラーの場合**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# pkg-configの確認
|
|
|
|
|
|
pkg-config --libs --cflags llvm
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 📞 ヘルプが必要な場合
|
|
|
|
|
|
|
|
|
|
|
|
1. **GitHub Issue**にコメント
|
|
|
|
|
|
2. **具体的なエラーメッセージ**を貼る
|
|
|
|
|
|
3. **実行したコマンド**を記載
|
|
|
|
|
|
|
|
|
|
|
|
例:
|
|
|
|
|
|
```
|
|
|
|
|
|
inkwellのビルドでエラーが発生しました。
|
|
|
|
|
|
|
|
|
|
|
|
エラー:
|
|
|
|
|
|
```
|
|
|
|
|
|
error: failed to run custom build command for `llvm-sys v170.0.1`
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
実行コマンド:
|
|
|
|
|
|
```
|
|
|
|
|
|
cargo build --features llvm
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
環境:
|
|
|
|
|
|
- OS: Ubuntu 22.04
|
|
|
|
|
|
- LLVM: 17.0.6
|
|
|
|
|
|
- Rust: 1.75.0
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## ✅ 最初の成功確認
|
|
|
|
|
|
|
|
|
|
|
|
以下が動けば第一歩成功!
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# ビルドが通る
|
|
|
|
|
|
cargo build --features llvm
|
|
|
|
|
|
|
|
|
|
|
|
# テストが実行できる(まだ失敗してOK)
|
|
|
|
|
|
cargo test --features llvm test_llvm
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🎯 次のステップ
|
|
|
|
|
|
|
|
|
|
|
|
1. **context.rs**の実装
|
|
|
|
|
|
2. **compiler.rs**の実装
|
|
|
|
|
|
3. **return 42**の動作確認
|
|
|
|
|
|
|
|
|
|
|
|
詳細は[001-setup-inkwell-hello-world.md](./001-setup-inkwell-hello-world.md)を参照!
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
**Remember**: 完璧より進捗!最初は動くことが最優先です。🚀
|