Keith Packard, un dezvoltator activ Debian, liderul proiectului X.Org și creatorul multor extensii X, inclusiv XRender, XComposite și XRandR, lansarea noii biblioteci standard C , care este dezvoltată pentru utilizarea pe dispozitive integrate cu un spațiu de stocare permanent și memorie RAM limitate. În timpul dezvoltării, o parte din cod a fost împrumutată din biblioteca proiectului Cygwin și , dezvoltată pentru microcontrolerele Atmel AVR. Codul PicoLibc este sub licența BSD. Se suportă compilarea bibliotecii pentru arhitecturi ARM (32-bit), i386, RISC-V, x86_64 și PowerPC.
Keith Packard a început dezvoltarea după ce nu a găsit o variantă adecvată de Libc care să poată fi utilizată pe dispozitive integrate cu RAM mică. Proiectul este în desfășurare din anul trecut. În prima etapă, proiectul a fost o variantă a newlib, în care funcțiile stdio au fost înlocuite cu o variantă compactă din avrlibc (stdio în newlib nu era satisfăcător din cauza consumului mare de resurse). Dat fiind că activitatea actuală a lui Keith este legată de lucrul constant cu arhitectura RISC-V și de dezvoltarea instrumentarului pentru dispozitive integrate, a revizuit recent starea implementărilor libc și a ajuns la concluzia că, cu unele modificări minore, combinația newlib și avrlibc ar putea fi o soluție universală bună. Inițial, proiectul a fost dezvoltat sub numele „newlib-nano”, dar pentru a evita confuzia cu biblioteca Newlib a fost redenumit în PicoLibc.
În forma sa actuală, în PicoLibc a fost realizată o muncă de eliminare a tot codul care nu este livrat sub licența BSD (acest cod nu a fost utilizat la compilarea pentru dispozitive integrate), ceea ce a simplificat considerabil situația licenței proiectului. Implementarea firului local a fost convertită din ‘struct _reent’ pe mecanismul TLS (). A fost activat implicit un variant compact de stdio, împrumutat din codul bibliotecii avrlibc (inserțiile assembler specifice ATmel au fost rescrise în C). Pentru compilare a fost folosit instrumentarul Meson, ceea ce a permis abținerea de la scenariile de compilare ale newlib și a simplificat transferul modificărilor din newlib. A fost adăugată o variantă simplificată a codului de inițializare (crt0), care se atașează fișierului executabil și este executată înainte de a transfera controlul funcției main().
În versiunea PicoLibc 1.1:
- A fost adăugată o bibliotecă auxiliară pentru suportul tehnologiei „«, permițând codului, care rulează în medii de depanare sau emulatoare, să utilizeze mecanismele de intrare/ieșire ale sistemului gazdă;
- Pentru sistemele care suportă apeluri de sistem open, close, read și write, în tinystdio au fost adăugate interfețe standardizate de intrare/ieșire POSIX, inclusiv funcțiile fopen și fdopen, precum și legarea stdin/stdout/stderr la descriptorii de fișiere specificați în POSIX;
- S-au transferat recentele modificări din baza de cod newlib. Printre acestea s-au inclus stubs libm pentru , care pot fi utilizate pe sisteme fără suport pentru calcule cu virgulă mobilă;
- Adăugat un exemplu de construcție a aplicației „Hello world” cu picolibc pentru sistemele ARM și RISC-V;
- Au fost șterse directoarele newlib, libm și mathfp, care conțineau cod experimental neutilizat.
Sursa: opennet.ro
