プログラミング
SDCC – Small Device C Compiler
SDCC – Small Device C Compiler (sdcc.sourceforge.net)
要約
SDCC(Small Device C Compiler)は、Intel MCS51、Zilog Z80、Microchip PIC、STMicroelectronics STM8など、多様なマイクロコントローラーをターゲットとする、リターゲット可能で最適化された標準C(ANSI C89、ISO C99、ISO C11、ISO C23)コンパイラスイートである。アセンブラ、リンカ、プリプロセサ、シミュレータ、デバッガなどを含む複数のコンポーネントから構成され、GPLライセンス下で提供されている。最近のリリースでは、C23規格への対応強化や、Rabbit 4000/5000/6000、f8lなどの新しいターゲットへの実験的な対応が進められている。また、プロジェクトは外部からの資金提供を受け、Padauk、Rabbit、Toshiba TLCSマイクロコントローラーのサポート改善、最新ISO C規格への対応強化、リンク時最適化などの開発を進めている。
全文翻訳
SDCC - Small Device C Compiler
SDCC ホーム
ニュース
プラットフォーム
ダウンロード
サポート
誰が
スナップショット
Linux
Windows
Mac OS X
ドキュメント
ソース
ドキュメント
SDCC マニュアル (pdf)
SDCC at SourceForge
ファイルリリース
svn リポジトリ
git ミラー
メーリングリスト
課題トラッカー
フォーラム
SDCC Wiki
リンクとその他!
Open HubによるSDCCメトリクス
SDCCとは?
SDCCは、Intel MCS51ベースのマイクロプロセッサー(8031、8032、8051、8052など)、Maxim(旧Dallas)DS80C390バリアント、Freescale(旧Motorola)HC08ベース(hc08、s08)、Zilog Z80ベースMCU(Z80、Z80N、Z180、SM83、Rabbit 2000、2000A、3000A、4000、SM83、TLCS-90、eZ80、R800)、Padauk(pdk14、pdk15)、STMicroelectronics STM8、MOS 6502およびWDC 65C02をターゲットとする、リターゲット可能で最適化された標準C(ANSI C89、ISO C99、ISO C11、ISO C23)コンパイラスイートです。Rabbit 5000、6000、Padauk pdk13、およびf8とf8lターゲットのサポート作業が進められています。Microchip PIC16およびPIC18ターゲットはメンテナンスされていません。SDCCは他のマイクロプロセッサー向けにリターゲット可能です。
SDCCスイートは、異なるFOSSライセンスを持つ様々なソースから派生した複数のコンポーネントのコレクションです。SDCCコンパイラスイートには以下が含まれます。
sdasおよびsdld、ASXXXXをベースにしたリターゲット可能アセンブラおよびリンカ、Alan Baldwin作(GPL)。
sdcppプリプロセサ、GCC cppをベース(GPL)。
ucsimシミュレータ、Daniel Drotos作(GPL)。
sdcdbソースレベルデバッガ、Sandeep Dutta作(GPL)。
sdbinutilsライブラリアーカイブユーティリティ(sdar、sdranlib、sdnmを含む)、GNU Binutilsから派生(GPL)。
SDCCランタイムライブラリ(GPL+LE)。
Picデバイスライブラリおよびヘッダーファイルは、Microchipのヘッダー(.inc)およびリンカスクリプト(.lkr)ファイルから派生しています。Microchipは「ヘッダーファイルは、Authentic Microchipデバイスでのみ使用できることを明記しなければならない」と要求しており、これはGPLとの互換性を損なう可能性があります。
gcc-test回帰テスト、gcc-testsuiteから派生(明示的なライセンスは指定されていませんが、GCCの一部であるため、おそらくGPLライセンス)。
packihx(パブリックドメイン)。
makebin(zlib/libpngライセンス)。
sdcc Cコンパイラ、Sandeep Dutta作(GPL)。
機能の一部には以下が含まれます。
基盤となるハードウェアの効果的な利用を可能にする、広範なMCU固有の言語拡張。
グローバル副式除去、ループ最適化(ループ不変、帰納変数強度削減およびループ反転)、定数畳み込みおよび伝播、コピー伝播、デッドコード除去、switch文用のジャンプテーブルなどの標準的な最適化。
グローバルレジスタアロケータを含むMCU固有の最適化。
他の8ビットMCUに適した、適応可能なMCU固有のバックエンド。
独立したルールベースのピープホールオプティマイザ。
char(8ビット、1バイト)、short(16ビット、2バイト)、int(16ビット、2バイト)、long(32ビット、4バイト)、long long(64ビット、8バイト)、float(4バイトIEEE)、_Bool/boolおよび_BitIntの完全なデータ型範囲。
関数内の任意の場所にインラインアセンブラコードを追加する機能。
アセンブラで書き直すべきものを決定するのに役立つ、関数の複雑さに関するレポートを作成する機能。
自動回帰テストの良い選択肢。
SDCCは元々Sandeep Duttaによって書かれ、GPLライセンスの下でリリースされました。初期リリース以来、数多くのバグ修正と改善が行われてきました。1999年12月以降、コードはSourceForgeに移管され、「ユーザーから開発者になった」人々が同じソースツリーにアクセスできるようになりました。SDCCは、すべてのユーザーと開発者の入力により、常に更新されています。
ニュース
2026-06-22: SDCC 4.6.0 リリース。
STM8、MCS-51、DS390、HC08、S08、Z80、Z180、Rabbit、R800、SM83、eZ80(Z80モード)、Z80N、TLCS-90、MOS 6502、WDC 65C02、Padauk、PICマイクロプロセッサー向けのポータブル最適化コンパイラであるSDCCの新しいリリースが利用可能になりました。(http://sdcc.sourceforge.net)。GNU/Linux amd64、Windows x86およびamd64、macOS amd64向けのソース、ドキュメント、バイナリが利用可能です。
SDCC 4.6.0 新機能リスト:
C2y _Countof演算子
C2y 8進数
C2y if-declaration
C2y 条件演算子で第2オペランドが省略されたもの(元々はGNU拡張)
C99 複合リテラル
C23 ストレージクラス指定子付き複合リテラル
実験的なf8lポート
C2y 幅1の符号付きビット精度整数型
C2y ビット精度整数型をenumの固定基底型として使用
C2y umaxabs
C2y ビットユーティリティ
realloc(ptr, 0) がC90セマンティクスではなくC99セマンティクスに従うようになりました
Rabbit 4000用r4kポート
Rabbit 5000および6000用実験的なr5kおよびr6kポート
z80関連ポートでのDynamic C呼び出し規約のサポート
z80関連ポートのコード生成の大幅な改善
ez80ポートがez80_z80ポートに取って代わりました
C2y 関数 uabs, ulabs, ullabs
無効なC2y(一部はC23までUBだった)に関する診断の改善
C23 constexpr(大部分)
C2y コンテナofマクロ
[static assignment-expression] 配列パラメータ構文に基づく診断
境界外アクセスが発生する配列パラメータの警告
基本的なパラメータ前方宣言(GNU拡張)
C23 va_startおよび可変引数関数
_Optional修飾子
通常のintビットフィールドは符号付きです
strsep
uCsimでのTLCS-870C(1)サポート
Rabbitポートでの__farサポート(データ用に1MBアドレス空間を使用)
2026-06-14: SDCC 4.6.0 RC2 リリース。
amd64 GNU/Linux、amd64 Windows、amd64 macOS向けのSDCC 4.6.0 Release Candidate 2ソース、ドキュメント、バイナリパッケージが、http://sourceforge.net/projects/sdcc/files/ の対応するフォルダで利用可能です。
2026-05-28: SDCC 4.6.0 RC1 リリース。
amd64 GNU/Linux、amd64 Windows、amd64 macOS向けのSDCC 4.6.0 Release Candidate 1ソース、ドキュメント、バイナリパッケージが、http://sourceforge.net/projects/sdcc/files/ の対応するフォルダで利用可能です。
2025-10-15: SDCCが資金提供を受けました。
SDCCは主に無給のボランティア作業によって開発されています。時折、大学職員が有給の時間中にSDCCで作業することを許可されたり、マイクロコントローラーベンダーからSDCC開発者がハードウェアサンプルを受け取ったりするなど、外部からのサポートもありましたが、その限界を感じることもあります。特に、SDCCで作業する数時間があっても、機能やバグの作業を開始したものの、その時間内に完了できなかったり、バグの原因を完全に特定することさえできなかったりすることがありました。そして、その機能やバグの作業に戻るまで長い時間がかかると、再び取り掛かるのに余分な時間や労力がかかります。代わりに、SDCCの別の側面に取り掛かることもありました。SDCCで作業するための資金が利用可能であることは、これらの状況で非常に役立つと私は考えています。SDCCでの作業を止めて他の有給の仕事に戻る必要はなく、この作業が有給の仕事になるため、機能やバグの作業を続けることができます。SDCC開発者はSDCCプロジェクトへの資金提供を申請しており、最近2つの重要な申請が成功したことを発表できることを嬉しく思います。NGI0 Commons Fundは、様々なターゲットハードウェアのSDCCサポートを改善するために寄付します。また、SDCCを非フリーコンパイラと比較して競争力のあるものにするための、マシンに依存しない改善を実装します。ハードウェア固有の改善には、Padaukの人気のある低コストマイクロコントローラーのサポート改善、古いIoTデバイスで一般的なRabbitマイクロコントローラーのサポート改善、東芝TLCSマイクロコントローラーのサポート改善が含まれる予定です。マシンに依存しない改善の焦点は、最新のISO C規格のサポート強化、ローカル変数のメモリ使用量を削減する最適化、そして未使用の関数やオブジェクトを最適化して削除するリンク時最適化の実装に置かれます。後者は、近年SDCCユーザーから最も要望の多い機能です。このプロジェクトは5人のSDCC開発者が共同で行います。Sovereign Tech Fundは、組み込みファームウェアの安全性とセキュリティのためにSDCCを改善する作業を委託しました。安全性とセキュリティに関連する最新のC規格および方言のサポートを改善し、SDCCをポスト量子暗号化に対応させ、潜在的なサイドチャネル攻撃の緩和策に取り組み、あまり使用されないコンポーネントもカバーする拡張テストを通じてSDCCの信頼性を向上させます。