2022-12-25 10:14:39 +00:00
libclayer
=========
2022-12-25 08:58:00 +00:00
2022-12-25 10:14:39 +00:00
[![Build status ](https://github.com/tailix/libclayer/actions/workflows/main.yml/badge.svg )](https://github.com/tailix/libclayer/actions/workflows/main.yml)
[![Build status (FreeBSD) ](https://api.cirrus-ci.com/github/tailix/libclayer.svg?task=Main%20(FreeBSD ))](https://cirrus-ci.com/github/tailix/libclayer)
2022-12-25 08:58:00 +00:00
2022-12-25 10:14:39 +00:00
libc for both hosted and freestanding environments.
2022-12-25 08:58:00 +00:00
Table of contents
-----------------
2022-12-25 10:14:39 +00:00
* [Overview ](#libclayer )
2022-12-25 08:58:00 +00:00
* [Table of contents ](#table-of-contents )
* [API ](#api )
* [Headers ](#headers )
* [Definitions ](#definitions )
* [Global variables ](#global-variables )
* [Configuration ](#configuration )
* [Non-default options ](#non-default-options )
* [Default options ](#default-options )
* [Tips ](#tips )
* [Installation ](#installation )
* [Development ](#development )
* [Cross ](#cross )
API
---
### Headers
We use [semantic versioning ](https://semver.org ) for stable APIs. Stable APIs
may only change when major version number is increased (or minor while major is
zero). Work-in-progress APIs can change at any time.
2022-12-25 10:06:58 +00:00
* [ctype.h ](/include/ctype.h )
* [errno.h ](/include/errno.h )
* [inttypes.h ](/include/inttypes.h )
* [setjmp.h ](/include/setjmp.h )
* [stdlib.h ](/include/stdlib.h )
* [string.h ](/include/string.h )
* [sys/types.h ](/include/sys/types.h )
2022-12-25 08:58:00 +00:00
Configuration
-------------
Because this library has no external dependencies, we use **autoconf** features
to control behavior of the library, and packages to choose it's components.
Configuration options also follow the [semantic versioning ](https://semver.org )
scheme and are split into stable and work-in-progress ones. Here we cover only
stable options.
### Non-default options
#### Features
2022-12-25 09:16:21 +00:00
* `--enable-checks` - enable usual tests
2022-12-25 08:58:00 +00:00
* `--enable-checks-all` - enable all checks
* `--enable-checks-cppcheck` - enable cppcheck
Jinja2
* `--enable-pkg-config[=PATH]` - install pkg-config files
[PATH='${libdir}/pkgconfig']
### Default options
#### Features
* `--(enable|disable)-float` - floating-point arithmetic
* `--(enable|disable)-werror` - fail on warning (`CFLAGS+='-Werror'`)
Tips
----
### Installation
```
./autogen.sh # if present
./configure
make
sudo make install
sudo ldconfig # on GNU/Linux
```
This is just a usual library. You can use most of it's APIs in hosted
environment.
### Development
```
./autogen.sh # if present
2022-12-25 09:04:30 +00:00
./configure --enable-checks # or --enable-checks-all, but see prerequisites
2022-12-25 08:58:00 +00:00
make
```
You can test with `make check` .
#### See also
* [GitHub Actions ](/.github/ ) for **GNU/Linux** build environment
* [Cirrus CI ](/.cirrus.yml ) for **FreeBSD** build environment
* [sourcehut CI ](/.openbsd.yml ) for **OpenBSD** build environment
### Cross
Create configuration script with `./autogen.sh` (if present).
Let's assume that your target triplet is `i386-elf` . Configure with
[cross-compiler ](https://wiki.osdev.org/GCC_Cross-Compiler ) in `$PATH` to make
without it in `$PATH` :
```
./configure \
--host='i386-elf' \
--disable-shared \
--enable-freestanding \
CC="$(which i386-elf-gcc)"
```
The variables include `AR` , `AS` , `CC` , `CCAS` , `LD` , `NM` , `OBJDUMP` , `RANLIB` ,
`STRIP` . See the generated `config.log` for more information.
To install into specific directory use full path: `DESTDIR="$(pwd)/dest" make
install` instead of `DESTDIR=dest make install` .