4.2 KiB
libkernaux
Auxiliary library for kernel development.
Table of contents
API
Headers
We use semantic versioning 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.
- Basic features
- Macros (non-breaking since 0.6.0)
- Stack trace (planned)
- libc replacement (work in progress)
Definitions
#define
the following C preprocessor macros before including <kernaux.h>
and
<kernaux/*.h>
files. They have effect on your code, not the library code.
KERNAUX_ACCESS_PRIVATE
- disable access modifier "private". Don't do this!KERNAUX_ACCESS_PROTECTED
- disable access modifier "protected". Only do this in a file where you implement an inherited type.KERNAUX_BITFIELDS
- enable bitfields in packed structs. It doesn't follow the C standard and may be incompatible with some compilers.
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 scheme and are split into stable and work-in-progress ones. Here we cover only stable options.
Non-default options
Features
--enable-checks
- enable usual tests--enable-checks-all
- enable all checks--enable-checks-cppcheck
- enable cppcheck Jinja2--enable-pkg-config[=PATH]
- install pkg-config files [PATH='${libdir}/pkgconfig']
Packages
--with-libc
- provides the replacement for some standard C functions. Useful in freestanding environment, where no libc is present.
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
./configure --enable-checks # or --enable-checks-all, but see prerequisites
make
You can test with make check
.
See also
- GitHub Actions for GNU/Linux build environment
- Cirrus CI for FreeBSD build environment
- sourcehut CI 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 in $PATH
to make
without it in $PATH
:
./configure \
--host='i386-elf' \
--disable-shared \
--enable-freestanding \
--with-libc \
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
.