- GCC 16 には、組み込みシステム向けの超軽量 libc C である Picolibc のネイティブ サポートが統合されています。
- 統合によりターゲットが追加
*-picolibc-*そして新しいオプションとして--oslib=,--crt0=y--printf=. - Picolibc は、Newlib や Newlib-nano と比較してファームウェアのサイズを大幅に削減します。これは、IoT およびエッジ アプリケーションにとって重要です。
- GCC 16 では、このサポートを最新のアーキテクチャと C++20 の改善とデフォルトで組み合わせ、組み込みエコシステムにおける役割を強化しています。

の到着 Picolibc をネイティブにサポートする GCC 16 これはかなりの興奮を生み出している 組み込み開発の世界これは、単に同じ古いコンパイラの「別のバージョン」ではなく、 より軽量で洗練されたツールチェーン 1 バイトでも重要なマイクロコントローラ、IoT デバイス、エッジ システム向けです。
この動きの背後にはベテラン開発者がいる X.Orgでの活動で最もよく知られるキース・パッカード長年にわたり、組み込みシステム向けのミニマリストC標準ライブラリとしてPicolibcを推進してきました。GCC 16への統合により、このライブラリをリンクするためのカスタムパッチ、特殊な設定、ハックの必要性はついに解消されました。 Picolibc は GCC エコシステム内の第一級市民となる.
Picolibc とは何ですか? なぜ GCC 16 に統合されているのですか?
Picolibcは超軽量のC標準ライブラリです 32 ビットおよび 64 ビットの組み込みシステム向けに特別に設計されており、リソースの消費を最小限に抑えるという明確な目標を掲げ、Newlib と AVR Libc の統合とリファクタリングから生まれました。 ROMとRAM C言語の基本的な機能を犠牲にすることなく。
他の重い代替品とは異なり、Picolibcは、 リンカーは未使用のコードを簡単に破棄できます。ライブラリのどの部分が最終バイナリに実際に含まれるかを非常に細かく制御できます。これは、ストレージ容量が数キロバイト単位で、コードの追加セクションごとに大きな投資が必要となるマイクロコントローラに最適です。 追加コスト、消費、複雑さ.
これまで、GCCを介したPicolibcの使用は ほぼ手作業でツールチェーンを構築するライブラリのコンパイル、sysrootの調整、ブートスクリプトの修正、パッチの適用などにより、強力な成果が得られましたが、多くのチームがその摩擦に阻まれていました。GCC 16では、このシナリオは劇的に変化します。 コンパイラには直接的かつ公式のサポートが含まれています。 この組み込み libc 用。
重要なのは、GCC 16のコードツリーに、認識するために必要な変更が組み込まれていることです。 タイプのターゲット *-picolibc-* 設定オプション --with-picolibcしたがって、コンパイラをビルドする場合や、あらかじめビルドされたツールチェーンを使用する場合、 Picolibc が工場サポートオプションになる、DIYは一切なし。
GCC 16 における Picolibc の統合: 詳細と新しいオプション
GCC 16 リポジトリにマージされたパッチは、Picolibc を代替 libc として認識するだけでなく、 コンパイラ固有のオプションも導入されている 組み込みシステムでこの軽量環境を活用するように設計されています。
一方、GCCは、 スタイルのターゲット *-picolibc-* (たとえば、 arm-none-picolibc-eabiさらに、GCCをコンパイルする際に、 --with-picolibc コンフィギュレータがこのライブラリを主なターゲットとして環境を準備し、管理できるようにします。 sysroot、ヘッダー、ブートファイル Picolibc のコード。
この基本的な統合に加えて、パッチは一連の 非常に興味深い追加オプション Picolibc 用にコンパイルした場合:
--oslib=オペレーティングシステムやランタイム環境とのインターフェースを実装するさまざまなモジュールを選択できます。これはベアメタルで作業する場合に重要です。 軽量RTOS またはシミュレーターでも。--crt0=: Cブートファイルを指定します(crt0)を使用することができ、 ブートシーケンスを適応させる 各ボード、ブートローダ、または初期化の要件に応じて異なります。--printf=: 完全な実装とprintfまたは短縮版など 整数に焦点を当てたミニマリストバージョン これにより、プログラム メモリを大幅に節約できます。
この最後のオプションは、実際のプロジェクトでは大きな違いを生むことがよくあります。 関数の族 printf 通常は最も重い部分です libc から。基本的な UART ログに必要なものだけを残すなど、縮小版を選択できると、最終的なバイナリははるかにコンパクトになります。これは非常に低価格なデバイスでは非常に重要です。
一部のフローでは、次のようなマクロやフラグも使用されます。 -Dsystem-libc Picolibcに関連付けられたsysroot構成をコンパイラがこのライブラリを libcのデフォルト実装 GCC 呼び出しごとに数十のフラグを追加する必要はありません。
GCCにおける「libcの多様性」への道
PicolibcがGCC 16に取り込まれたのは突然のことではなかった。その前にGCCプロジェクト内で、その必要性について議論があった。 図書館の多様性を促進するC 正式にサポートされました。約1年前から、メーリングリスト上で、特定のコンテキストに合わせて異なるlibcを有効にすることに関する議論が行われており、Picolibcは組み込み環境における明確な候補として浮上しました。
この間、キース・パッカードは パッチの次バージョンを磨き上げて提出する リストへ gcc-patchesコンパイラの品質と保守性の基準を満たすように統合が調整されました。GCCメンテナーとの協議により、ターゲットの選択、サポートファイルの構成、カスタムオプションの使用などの詳細が調整されました。
この共同作業の結果は、単なるパッチではなく、 GCCの内部アーキテクチャとよく整合した拡張機能これは「libcの多様性」という考え方を強化するものです。特定の環境では、glibc、Newlib、uClibcとの通常の組み合わせに加えて、 Picolibcは軽量で持続可能な代替品としてリストに加わりました GCC ツリー自体の中で。
このアプローチは、次のようなアーキテクチャが求められる現在の業界のトレンドに非常によく適合しています。 RISC-V、新しいARMv9プロファイル、および専用SoC 特定のアプリケーション向け。モジュール化された最小限のlibcを使用することで、強力なサーバーと、わずか数キロバイトのフラッシュメモリを搭載したセンサーノードの両方に、同じコンパイラを簡単に適応させることができます。
Newlib、Newlib-nano、その他の軽量ライブラリとの関係
Picolibc が何をもたらすかを理解するには、他の従来の選択肢と比較しながら状況を把握すると役立ちます。Newlib は長年利用されてきました。 組み込み環境向けのlibcリファレンス GCC をベースにしており、そこから Newlib-nano などの派生版が生まれ、機能性を削減する代わりにサイズをいくらか縮小することを目指しています。
Picolibcも同じ起源を共有していますが、 モジュール性を重視したより積極的な再設計このアイデアは、Newlib を単に「少し小さくする」ということではなく、最新のリンカーが未使用のコードをより正確に削除できるように再構築し、含まれる機能と占有されるスペースの比率を最大化することです。
コミュニティ分析(例えば、組み込み開発ブログで公開された比較)によると、Picolibcへの切り替えは次のような意味を持つ可能性があります。 フラッシュ使用量、バイナリサイズ、スタック、ヒープの大幅な削減 Newlibとそのnano版と比較して、これは実際には、同じマイクロコントローラにより多くのアプリケーションロジックを収容できる、あるいはメモリ容量の少ないマイクロコントローラにダウングレードしてハードウェアコストを削減できることを意味します。
同時に、Picolibcプロジェクトは基本にとどまらず、そのリポジトリではサポートがどのように追加されているかを示しています。 16ビットターゲット、POSIX互換性の向上 また、ARM Cortex-M、RISC-V、組み込み MIPS など、それほど珍しくないアーキテクチャにとっても魅力的なさまざまな改良が施されています。
dietlibcやさまざまなnanolibなどの他の軽量代替品と比較して、Picolibcは 規模と規格への準拠のバランス これは、一貫性のある API、集中的なテスト、そして同時に非常に限定されたフットプリントが求められるプロジェクトに特に適しています。
組み込みワークフローでPicolibcを活用する方法
GCC 16への統合は、ファームウェア開発者の日々の業務に非常に具体的な変化をもたらします。これをより明確に理解するために、次のような典型的なプロジェクトを想像してみましょう。 クロスコンパイル対応ARM Cortex-M 開発用PCから。従来、次のようなツールチェーンは arm-none-eabi Newlib またはマイクロプロセッサ メーカーの独自の SDK に基づいています。
GCC 16では、すでに含まれているツールチェーンをビルドまたはダウンロードできます。 ターゲット arm-none-picolibc-eabiコンパイラをオプションで設定する場合 --with-picolibcこれで、この libc を、ヘッダー、sysroot、適切なブート ファイルとともに標準として使用する環境が準備されました。
そこから、新しいプレフィックスを使ってコンパイルが行われます。例えば、 arm-none-picolibc-eabi-gcc通常の最適化およびデバッグフラグとともに。サイズをさらに微調整したい場合は、オプション --printf= の変種を選択する printf プロジェクトのニーズを満たすものよりも軽量です。
Make、CMake、またはその他のビルドシステムを使用している環境では、変更は通常、 ツールチェーンの定義を調整する: 新しいプレフィックスを指定し、リンクオプションを調整し、起動スクリプト(crt0)とリンカースクリプトファイルがPicolibcの構成に適合している必要があります。多くの場合、この調整は、ベンダーSDKから「純粋な」GCCツールチェーンへの移行に必要な調整よりもはるかに小さくなります。
このフローは、独自の環境や閉鎖的な環境を放棄し、異なるマイクロコントローラファミリ間の移植性を獲得し、 100%オープンで監査可能なツールチェーン産業、医療、自動車などの分野でますます価値が高まっています。
IoT、エッジコンピューティング、規制対象分野への影響
この統合のタイミングは偶然ではない。それは、 IoTデバイスとエッジシステム 非常に限られたリソースで動作し、多くの場合バッテリー駆動で大量に導入されるアプリケーション。このようなシナリオでは、プログラムメモリを節約することで、 より安価なマイクロコントローラを使用する ユニットコストを大幅に削減します。
ファームウェアのサイズを小さくすると、次のような問題も簡素化されます。 OTAアップデート1キロバイト削減するごとに、転送速度が上がり、消費電力が減り、不安定なネットワークにおけるエラー発生率も低下します。Picolibcは、GCC 16と組み合わせることで、よりコンパクトなバイナリを実現し、こうした操作に直接的な影響を与えます。
規制産業(医療、自動車、鉄道など)においても、その利点は顕著です。LIBCの正式な認証には特定のツールとプロセスが必要ですが、 小さく、モジュール化されており、比較的簡単に監査できるライブラリ これにより、認定されたツールチェーンや徹底したセキュリティレビューを受けたツールチェーンを提供できるようになります。
同時に、ピコリブックへのこの賭けは、 オープンシリコンツールチェーンRISC-Vエコシステムも同様です。これらの環境では、ISAがオープンであるだけでなく、コンパイラ、libc、その他のツールチェーンも透明性が高く、コミュニティによってメンテナンスされています。
GCC 16、最新のアーキテクチャ(ARMv9.6-A、RISC-V、AMD Zen 6や新しいIntelプロセッサなどの新しい世代のx86)のサポート、軽量libcとしてのPicolibcの組み合わせにより、GNUコンパイラは次のように強化されます。 スマートデバイスの新たな波の中心となる柱ウェアラブルからローカル分析機能を備えた産業用センサーまで。
GCC 16のステータス、その他の新機能、サポートの成熟度
GCC16は次のように計画されている。 典型的なリリースサイクルにおけるコンパイラのメジャーバージョンメンテナーの計画通りに進めば、リリース時期は3月から4月頃と見込まれています。開発の最終段階(ステージ4)への移行が確認されると、焦点は ドキュメント化と回帰修正非常に正当な理由がある場合を除き、新しい機能を認めません。
最新の報告書では、解決すべき問題がいくつか残っていると述べられている。 優先度回帰P1これらは最も重大なバグです。これらのバグの数がゼロ、または許容レベルに達するまで、GCC 16.1の最初のリリース候補版は生成されません。この規律により、 Picolibcのサポートは十分に成熟した状態に到達しました 実際のプロジェクトで使い始めます。
Picolibcのサポートに加えて、GCC 16には多くの新機能が組み込まれています。ターゲットのサポート Armv9.6-AAMD Zen 6アーキテクチャの初期実装( Znver6)は、新しいISA機能により、 AMD GPUのマネージドメモリ、Nova Lake や Wildcat Lake などの次世代 Intel プロセッサのサポート、LTO (Link Time Optimization) のデフォルト パーティション数の増加など、さまざまな改善が行われています。
言語に関して、最も目に見える決定の一つは C++20が標準規格となる 他に何も指定されていない場合。Algol 68言語用の新しいフロントエンドも追加され、GCCでサポートされる言語のリストが拡張されました。これらすべてが バグ修正とマイナーな最適化 さまざまなバックエンドに分散されます。
全体として見ると、GCC 16 は単なる「Picolibc が組み込まれたバージョン」ではありません。アーキテクチャサポート、C++ の近代化、そして現在のハードウェアへの対応という点で強力なリリースであり、軽量 libc の追加はより広範な取り組みの一環です。 現代のニーズに適応するためのより広範な戦略 デスクトップでも、とりわけ組み込みシステムでも、開発の。
技術コミュニティや専門メディアは、Picolibcのサポートや「libcの多様性」の考え方に焦点を当てた記事から、AMD Zen 6のような新しいアーキテクチャの影響の分析、ソーシャルメディアでの議論まで、これらの開発を取り上げてきました。 レトロコンソールから産業用制御まで、さまざまなプロジェクトで GCC 16 を活用する方法.
GCC 16.1の最終リリースが近づき、Picolibcを統合した最初のツールチェーンが安定するにつれて、より多くの実際の使用例、サイズとパフォーマンスの比較テスト、実用的なガイドが登場するでしょう。 ベアメタル、リンカースクリプト、および特定のブートシーケンス この新しい組み合わせを使用します。
Picolibc の GCC 16 でのサポートは、組み込みエコシステムにとっての転換点となります。 超軽量の LIBC を採用する際の摩擦が大幅に軽減され、より小型で保守しやすいファームウェアの実現が可能になります。 これは、多様なアーキテクチャに適応できるオープンで構成可能なツールチェーンへの一般的なトレンドと一致しています。多くの開発チームにとって、今すぐPicolibcを使ってGCC 16ブランチのテストを開始し、サイズ、パフォーマンス、保守性への影響を測定し、今後の製品への統合を評価することは価値があります。