xcc700 — ESP32向けミニCコンパイラ(自己宿主型)

Tool

概要

xcc700は、ESP32(Xtensaアーキテクチャ)向けに書かれた小規模で自己宿主(self-hosting)可能なCコンパイラです。ソースはCで実装されており、ミニマルな言語機能とシンプルなコード生成器、ELFファイル出力機能を備えます。学習用やデバッグ用、迅速なホットフィックスやCIでの軽量ビルド用途に向いており、大規模なフルスペックのコンパイラに頼らずにESP32向けコードを生成できるのが特徴です。リポジトリは小規模で理解しやすく、改変や拡張がしやすい設計になっています。(約300字)

GitHub

リポジトリの統計情報

  • スター数: 14
  • フォーク数: 0
  • ウォッチャー数: 14
  • コミット数: 3
  • ファイル数: 4
  • メインの言語: C

主な特徴

  • 小型で読みやすい実装: ソースは少数ファイルにまとまっており、コンパイラ全体の構造を把握しやすい。
  • Xtensa向けコード生成: ESP32のXtensaアーキテクチャに対するバイトコード(命令)生成とELF出力をサポート。
  • 自己宿主性(セルフホスティング)を目指す設計: コンパイラ自体をコンパイルして実行可能な出力を生成できる構成。
  • 実務的なユースケースに対応: ホットフィックスやテスト/デバッグの高速なターンアラウンド、CI上での軽量ビルドに有用。

技術的なポイント

xcc700は「小さくて実用的」を目標にしたミニコンパイラで、以下の技術ポイントが注目に値します。まずフロントエンドは最小限のC言語構文を解析し、内部表現を生成することでコンパイル全体の複雑さを抑えています。次にバックエンドはXtensa向けの基本的なバイトコード生成器を備え、命令選択と簡易的なレジスタ割当ての仕組みで実機向けコードを出力します。ELFライタが再利用可能な形で実装されており、生成したコードを直接ELFフォーマットで梱包してESP32上で実行可能にする点も実用的です。自己宿主性により、コンパイラ自身を対象のプラットフォーム上でビルド・テストできるため、実機での検証が容易です。設計は教育的かつ拡張志向で、言語拡張や最適化パスの追加、異なるターゲット向けのバックエンド実装などが比較的容易に行える構造になっています。(約700字)

プロジェクトの構成

主要なファイルとディレクトリ:

  • LICENSE: file — ライセンス情報。プロジェクトの利用条件を記載。
  • Readme.md: file — プロジェクト概要、ビルド例、簡単な使い方やサンプル出力が記載されています。
  • release: dir — リリース関連の成果物やビルド済みバイナリを格納する目的のディレクトリ(リポジトリ内の配布物を想定)。
  • xcc700.c: file — コンパイラ本体の実装ファイル。パーサ、コード生成、ELF出力など主要ロジックがここにまとまっています。

各ファイルの役割(補足)

  • xcc700.cはエントリポイントを含み、コマンドライン引数の解析、ソース読み込み、コンパイル処理の流れ制御を担います。内部に簡易的な字句解析・構文解析とコード生成の実装があり、ミニマルながら自己完結しています。
  • Readme.mdにはビルド例(例: ./xcc700 xcc700.c -o xcc700.elf)や「BUILD COMPLETED」などのサンプル出力が示されており、実行確認がしやすくなっています。
  • releaseディレクトリは配布向けの出力やテスト用バイナリを置く想定で、CIや手元での展開に便利です。

まとめ

小規模で学習しやすく、ESP32向けに実用的な自己宿主型ミニCコンパイラです(約50字)。

リポジトリ情報:

READMEの抜粋:

xcc700: Self-hosting mini C compiler for esp32 / Xtensa

Why look into this project?

  • A compiler you can fully grasp and tweak, on a modern platform where small is still cool.
  • Basic features, not too entrenched, easy to morph into your language of choice.
  • Reusable ELF writer, and a basic Xtensa bytecodes emitter.
  • Possibly useful for hotfixes, CI, quick test/debug turnaround on esp32.

Sample output

./xcc700 xcc700.c -o xcc700.elf 

[ xcc700 ] BUILD COMPLETED > OK
> I...