- GCC 16 інтегрує вбудовану підтримку Picolibc, надлегкої libc C, орієнтованої на вбудовані системи.
- Інтеграція додає цілі
*-picolibc-*та нові опції, такі як--oslib=,--crt0=y--printf=. - Picolibc значно зменшує розмір прошивки порівняно з Newlib та Newlib-nano, що є ключовим для IoT та edge-додатків.
- GCC 16 поєднує цю підтримку з покращеннями сучасних архітектур та C++20 за замовчуванням, посилюючи свою роль у вбудованій екосистемі.

Прибуття GCC 16 з вбудованою підтримкою Picolibc Це викликає неабиякий ажіотаж у світ вбудованої розробкиЦе не просто "інша версія" того ж старого компілятора, а важливий крок до набагато легші та досконаліші ланцюжки інструментів для мікроконтролерів, пристроїв Інтернету речей та периферійних систем, де кожен байт має значення.
За цим кроком стоїть досвідчений розробник Кіт Паккард, найбільш відомий своєю роботою над X.Orgяка роками просувала Picolibc як мінімалістичну стандартну бібліотеку C для вбудованих систем. З її інтеграцією в GCC 16 потреба в користувацьких патчах, дивних конфігураціях та хаках для зв'язування цієї бібліотеки нарешті зникла. Picolibc стає повноцінним громадянином в екосистемі GCC.
Що таке Picolibc і чому він інтегрований у GCC 16?
Picolibc — це надлегка стандартна бібліотека C Розроблений спеціально для 32- та 64-бітних вбудованих систем, він народився в результаті конвергенції та рефакторингу Newlib та AVR Libc з чіткою метою: мінімізувати споживання ресурсів. ROM і RAM не відмовляючись від основних функцій мови C.
На відміну від інших важчих альтернатив, Picolibc розроблений таким чином, що Лінкер може легко відкинути невикористаний код.пропонуючи дуже точний контроль над тим, які частини бібліотеки фактично потрапляють у кінцевий бінарний файл. Це ідеально підходить для мікроконтролерів, де обсяг пам'яті вимірюється кількома кілобайтами, а кожен додатковий розділ коду являє собою значну інвестицію. додаткові витрати, споживання та складність.
Досі використання Picolibc з GCC включало зібрати ланцюжок інструментів майже вручнуКомпіляція бібліотеки, налаштування sysroot, модифікація завантажувальних скриптів, застосування патчів тощо дали потужні результати, але суперечності стримували багато команд. З GCC 16 цей сценарій радикально змінюється, оскільки Компілятор включає пряму та офіційну підтримку. для цієї вбудованої бібліотеки libc.
Ключовим є те, що дерево коду GCC 16 включає необхідні зміни для розпізнавання цілі типу *-picolibc-* та опцію конфігурації --with-picolibcТаким чином, під час збирання компілятора або використання попередньо створеного набору інструментів, Picolibc стає заводською опцією, без жодних робіт по-справжньому.
Інтеграція Picolibc в GCC 16: деталі та нові опції
Патч, який було об'єднано з репозиторієм GCC 16, не лише додає розпізнавання Picolibc як альтернативної libc: Також представлені опції, специфічні для компілятора розроблений для використання цього легкого середовища у вбудованих системах.
З одного боку, GCC тепер може безперебійно працювати з цілі стилю *-picolibc-* (наприклад, arm-none-picolibc-eabiКрім того, під час компіляції GCC можна передавати --with-picolibc щоб конфігуратор готував середовище з цією бібліотекою як основною цільовою метою, керуючи sysroot, заголовкові файли та файли завантаження акорди до Picolibc.
Поряд із цією базовою інтеграцією, патч відкриває низку дуже цікаві додаткові опції після компіляції для Picolibc:
--oslib=Це дозволяє вибирати різні модулі, що реалізують інтерфейс з операційною системою або середовищем виконання, що є ключовим, якщо ви працюєте в "голом металі", з Легка ОС реального часу або в симуляторах.--crt0=: вказує завантажувальний файл C (crt0) для використання, що дає простір для адаптувати послідовність завантаження для кожної плати, завантажувача або вимог ініціалізації.--printf=: пропонує вибір між повним впровадженнямprintfабо скорочені версії, наприклад мінімалістичні версії, зосереджені на цілих числах що економить значну кількість програмної пам'яті.
Цей останній варіант часто має велике значення в реальних проектах: сімейство функцій printf Зазвичай це найважча частина з libc. Можливість обрати скорочену версію, можливо, зберігаючи лише те, що необхідно для базових журналів UART, дозволяє зробити кінцевий бінарний файл набагато компактнішим, що є життєво важливим для дуже недорогих пристроїв.
Деякі потоки також використовують макроси та прапорці, такі як -Dsystem-libc та конфігурації sysroot, пов'язані з Picolibc, щоб компілятор розглядав цю бібліотеку як реалізація libc за замовчуванням без необхідності додавати десятки прапорців до кожного виклику GCC.
Шлях до «різноманітності libc» у GCC
Включення Picolibc до GCC 16 не виникло з нізвідки; йому передували дебати всередині самого проекту GCC щодо необхідності Сприяти різноманітності бібліотек C офіційно підтримується. Близько року тому в списках розсилки вже обговорювалося питання про ввімкнення різних бібліотек бібліотек (libc), адаптованих до конкретних контекстів, і Picolibc виглядала як явний кандидат для вбудованого світу.
За цей час Кіт Пакард пішов відшліфувати та надсилати наступні версії патча до списку gcc-patchesІнтеграцію було налаштовано відповідно до стандартів якості та зручності підтримки компілятора. Обговорення з розробниками GCC удосконалили такі деталі, як вибір цілі, організація допоміжних файлів та використання користувацьких опцій.
Результатом цього спільного процесу є інтеграція, яка не є простим патчем, а розширення, добре узгоджене з внутрішньою архітектурою GCCЦе підкріплює ідею «різноманітності libc»: тепер, окрім звичайних комбінацій з glibc, Newlib або uClibc у певних середовищах, Picolibc приєднується до списку як легка та екологічна альтернатива в самому дереві GCC.
Такий підхід дуже добре відповідає сучасним тенденціям галузі, де такі архітектури, як RISC-V, нові профілі ARMv9 та спеціалізовані SoC для конкретних застосувань. Наявність модульної та мінімалістичної libc полегшує адаптацію одного й того ж компілятора як до потужного сервера, так і до сенсорного вузла з лише кількома кілобайтами флеш-пам'яті.
Зв'язок з Newlib, Newlib-nano та іншими легкими бібліотеками libc
Щоб зрозуміти, що пропонує 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 з крос-компіляцією з ПК розробника. Традиційно, такі інструментальні ланцюги, як arm-none-eabi на основі Newlib або власних SDK від виробника мікропроцесора.
За допомогою GCC 16 ви можете створити або завантажити набір інструментів, який вже включає ціль arm-none-picolibc-eabiПід час налаштування компілятора з опцією --with-picolibcТепер середовище готове використовувати цю libc як стандартну, з її заголовками, системним коренем та відповідними файлами завантаження.
Звідти компіляція виконується з використанням нового префікса, наприклад arm-none-picolibc-eabi-gccразом зі звичайними прапорцями оптимізації та налагодження. Якщо ви хочете ще більше налаштувати розмір, ви можете скористатися опцією --printf= вибрати варіант printf легший, ніж відповідає потребам проекту.
У середовищах, що використовують Make, CMake або інші системи збірки, зміни зазвичай обмежуються налаштувати визначення ланцюжка інструментів: вкажіть новий префікс, можливо, адаптуйте деякі параметри зв'язування та перевірте, чи спрацьовують скрипти запуску (crt0) та файли скриптів компонувальника відповідають організації Picolibc. У багатьох випадках це коригування набагато менше, ніж те, що вже потрібно для переходу від SDK постачальника до "чистого" інструментарію GCC.
Цей потік прокладає шлях до відмови від власницьких або закритих середовищ, отримання портативності між різними сімействами мікроконтролерів та підтримки... 100% відкритий та аудитований ланцюжок інструментів, що дедалі цінується в таких секторах, як промисловість, медицина чи автомобілебудування.
Вплив на Інтернет речей, периферійні обчислення та регульовані сектори
Час цієї інтеграції не випадковий: він збігається з жорстким розширенням Пристрої Інтернету речей та периферійні системи які працюють з дуже обмеженими ресурсами, часто живляться від батарейок та розгортаються масово. У таких сценаріях економія програмної пам'яті просто дозволяє, використовувати дешевші мікроконтролери та значно зменшити собівартість одиниці продукції.
Зменшення розміру прошивки також спрощує такі проблеми, як Оновлення OTAде кожен менший кілобайт означає швидшу передачу, менше споживання енергії та меншу ймовірність помилок у нестабільних мережах. Picolibc, забезпечуючи набагато компактніші бінарні файли в поєднанні з GCC 16, має прямий вплив на ці типи операцій.
У регульованих галузях (охорона здоров'я, автомобілебудування, залізниця тощо) переваги також помітні. Хоча формальна сертифікація LIBC вимагає певних інструментів і процесів, наявність доступу до невелика, модульна та відносно проста в аудиті бібліотека Це відкриває шлях для пропонування сертифікованих ланцюжків інструментів або тих, що пройшли ретельну перевірку безпеки.
Водночас, ця ставка на Picolibc відповідає тенденції до відкриті кремнієві ланцюжки інструментівяк і в екосистемі RISC-V. У цих середовищах не тільки ISA є відкритим, але й компілятор, libc та решта інструментарію також прозорі та підтримуються спільнотою.
Поєднання GCC 16, підтримки сучасних архітектур (ARMv9.6-A, RISC-V, нових поколінь x86, таких як AMD Zen 6 або нові процесори Intel) та Picolibc як легкої libc посилює компілятор GNU, оскільки центральний стовп для нової хвилі розумних пристроїв, від носимих пристроїв до промислових датчиків з можливостями локального аналізу.
Статус GCC 16, інші нові функції та зрілість підтримки
GCC 16 заплановано як основна версія компілятора в його типовому циклі випускуз приблизним вікном випуску між березнем і квітнем, якщо все піде за планом розробників. Після підтвердження переходу до фінальної фази розробки (етап 4), увага зосередилася виключно на документація та корекція регресії, не допускаючи нових функцій, окрім дуже обґрунтованих випадків.
У найновішому звіті зазначалося, що кілька питань залишаються невирішеними пріоритетні регресії P1Це найкритичніші помилки. Доки кількість цих помилок не досягне нуля або прийнятного рівня, перші версії-кандидати для GCC 16.1 не будуть створені. Ця дисципліна гарантує, що Підтримка Picolibc з'являється в достатньо зрілому стані почати використовувати його в реальних проектах.
Окрім підтримки Picolibc, GCC 16 включає низку нових функцій: підтримку цільової Armv9.6-A, початкова реалізація для архітектури AMD Zen 6 (ідентифікованої як Znver6) з новими можливостями ISA, покращеннями в управлінні керована пам'ять у графічних процесорах AMD, підтримка процесорів Intel наступного покоління, таких як Nova Lake та Wildcat Lake, а також збільшення кількості розділів за замовчуванням в LTO (оптимізація часу з’єднання), серед інших покращень.
Щодо мови, одне з найпомітніших рішень полягає в тому, що 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, відкриваючи шлях до менших та зручніших у обслуговуванні прошивок. Це узгоджується із загальною тенденцією до відкритих, налаштовуваних інструментальних ланцюжків, адаптованих до різноманітних архітектур. Для багатьох команд розробників варто почати тестувати гілки GCC 16 за допомогою Picolibc вже зараз, виміряти вплив на розмір, продуктивність та зручність обслуговування, а також оцінити їх інтеграцію в майбутні продукти.
Зміст
- Що таке Picolibc і чому він інтегрований у GCC 16?
- Інтеграція Picolibc в GCC 16: деталі та нові опції
- Шлях до «різноманітності libc» у GCC
- Зв'язок з Newlib, Newlib-nano та іншими легкими бібліотеками libc
- Як використовувати Picolibc у вбудованому робочому процесі
- Вплив на Інтернет речей, периферійні обчислення та регульовані сектори
- Статус GCC 16, інші нові функції та зрілість підтримки