Доступна стандартна Сі-бібліотека PicoLibc 1.1

Кіт Паккард (Keith Packard), активний розробник Debian, лідер проекту X.Org та творець безлічі X-розширень, включаючи XRender, XComposite та XRandR, представив випуск нової стандартної Сі-бібліотеки PicoLibc 1.1, що розвивається для застосування на вбудовуваних пристроях з обмеженим розміром постійного сховища та оперативної пам'яті. При розробці частина коду запозичена з бібліотеки newlib від проекту Сygwin та AVR Libc, що розвивалася для мікроконтролерів Atmel AVR. Код PicoLibc поширюється під ліцензією BSD. Підтримується збірка бібліотеки для архітектур ARM (32-bit), i386, RISC-V, x86_64 та PowerPC.

Кіт Паккард приступив до розробки після того, як не зміг знайти гідного варіанту Libc, який можна було використовувати на пристроях, що вбудовуються з невеликим ОЗУ. Проект розвивається з минулого року. На першому етапі проект був варіантом newlib, функції stdio в якому були замінені на компактний варіант з avrlibc (stdio в newlib не влаштовував великим споживанням ресурсів). Так як поточна діяльність Кита пов'язана з постійною роботою з архітектурою RISC-V та розвитком інструментарію для вбудованих пристроїв, нещодавно він переглянув стан реалізацій libc і дійшов висновку, що при невеликій доробці комбінація newlib і avrlibc може стати гарним універсальним рішенням. Спочатку проект розвивався під ім'ям "newlib-nano", але щоб уникнути плутанини з бібліотекою Newlib був перейменований на PicoLibc.

У поточному вигляді в Picolibc вже проведено роботу з видалення всього коду, що поставляється не під ліцензією BSD (цей код не використовувався при складанні для вбудованих пристроїв), що значно спростило ситуацію з ліцензією на проект. Реалізація локальних потоків переведена з 'struct _reent' на механізм TLS (локально-потокове сховище). Активовано за замовчуванням компактний варіант stdio, запозичений із коду бібліотеки avrlibc (специфічні для ATmel асемблерні вставки переписані на Сі). Для складання задіяний інструментарій Meson, що дозволило не прив'язуватися до складальних сценаріїв newlib і спростити перенесення змін із newlib. Доданий спрощений варіант коду ініціалізації (crt0), що прикріплюється до виконуваного файлу і виконується перед керуванням функції main().

У версії Picolibc 1.1:

  • Додано допоміжну бібліотеку для підтримки технології «semihosting«, що дозволяє коду, що виконується в оточенні відладника або емулятора, використовувати механізми введення/виведення хост-системи;
  • Для систем, що підтримують системні виклики open, close, read і write, до tinystdio додані стандартизовані POSIX-інтерфейси вводу/виводу stdio, включаючи функції fopen і fdopen, а також прив'язку stdin/stdout/stderr до певних у POSIX файлових дескрипторів;
  • Перенесено нещодавні зміни з кодової бази newlib. У тому числі додані заглушки libm для fenv.hякі можна використовувати на системах без підтримки обчислень з плаваючою точкою;
  • Доданий приклад складання програми Hello world з picolibc для систем ARM і RISC-V;
  • Видалено каталоги newlib, libm і mathfp, в яких містився експериментальний код, що не використовується.

Джерело: opennet.ru

Додати коментар або відгук