Loading repository data…
Loading repository data…
redox-os / repository
Mirror of https://gitlab.redox-os.org/redox-os/relibc
relibc is a portable C standard library written in Rust and is under heavy development, this library contains the following items:
The motivation for this project is twofold: Reduce issues that the Redox developers were having with newlib, and create a more stable and safe alternative to C standard libraries written in C. It is mainly designed to be used under Redox, as an alternative to newlib, but it also supports Linux via the sc crate.
Currently Redox and Linux are supported.
redox-rtredox-rt is a runtime library that provides much of the code that enables POSIX on Redox, like fork, exec, signal handling, etc.
Relibc uses it as backend in src/platform/redox, and it's intended to eventually be usable independently, without relibc.
include - Header files (mostly macros and variadic functions cbindgen can't generate)src - Source filessrc/c - C codesrc/crt0 - Runtime codesrc/crti - Runtime codesrc/crtn - Runtime codesrc/header - Header files implementationsrc/header/* - Each folder has a cbindgen.toml file, it generates a C-to-Rust interface and header filessrc/ld_so - Dynamic loader codesrc/platform - Platform-specific and common codesrc/platform/redox - Redox-specific codesrc/platform/linux - Linux-specific codesrc/pthread - pthread implementationsrc/sync - Synchronization primitivestests - C tests (each MR needs to give success in all of them)To download the relibc sources run the following command:
git clone --recursive https://gitlab.redox-os.org/redox-os/relibc
To build relibc out of the Redox build system, do the following steps:
cbindgencargo install cbindgen
expect toolsudo apt install expect
sudo dnf install expect
sudo pacman -S expect
To build the relibc library objects, run the following command:
make all
make clean
Inside of your Redox build system, run:
make prefix
If you need to rebuild relibc for testing a Cookbook recipe, run:
touch relibc
make prefix r.recipe-name
Touching (changing the "last modified time" of) the relibc folder is needed to trigger recompilation for make prefix. Replace recipe-name with your desired recipe name.
Note: Do not edit relibc inside prefix folder! Do your work on relibc folder directly inside your Redox build system instead.
Relibc has a test suite that also runs every time a new commit get pushed. You can see .gitlab-ci.yml to see how it's being executed. That being said, ./check.sh is the recommended way to run tests. Here's few examples:
./check.sh - Run build, without running the test./check.sh --test - Run all tests in x86_64 Redox using Redoxer./check.sh --test --host - Run all tests in host (Linux)./check.sh --test --arch=aarch64 - Run all tests in specified arch
x86_64, aarch64, i586, or riscv64gc./check.sh --test=stdio/printf - Run a single test
--host or --archCouple of notes:
make clean--host. You can install it using cargo install redoxerx86_64-linux-gnu-ar: command not found (or similar)The Makefile expects GNU compiler tools prefixed with the platform specifier, as would be present when you installed a cross compiler. Since you are building for your own platform, some Linux distributions (like Manjaro) don't install/symlink the prefixed executables.
An easy fix would be to replace the corresponding lines in config.mk, e.g.
ifeq ($(TARGET),x86_64-unknown-linux-gnu)
- export CC=x86_64-linux-gnu-gcc
- export LD=x86_64-linux-gnu-ld
- export AR=x86_64-linux-gnu-ar
- export NM=x86_64-linux-gnu-nm
+ export CC=gcc
+ export LD=ld
+ export AR=ar
+ export NM=nm
export OBJCOPY=objcopy
export CPPFLAGS=
LD_SO_PATH=lib/ld64.so.1
endif
Before starting to contribute, read this document.
This project is funded through NGI Zero Core, a fund established by NLnet with financial support from the European Commission's Next Generation Internet program. Learn more at the NLnet project page.