Standard C and C++ Library Support for Circle
  • C 51.2%
  • C++ 45%
  • Makefile 1.8%
  • Dockerfile 1%
  • Python 0.4%
  • Other 0.6%
Find a file
Stephan Mühlstrasser 9af9720c93
All checks were successful
Smoke Tests / host-aarch64-target-arm - Without Address Sanitizer (push) Successful in 4m21s
Smoke Tests / host-x64-target-arm - Without Address Sanitizer (push) Successful in 5m53s
Smoke Tests / host-aarch64-target-arm - With Address Sanitizer (push) Successful in 3m46s
Smoke Tests / host-x64-target-arm - With Address Sanitizer (push) Successful in 6m7s
Smoke Tests / host-aarch64-target-aarch64 - Without Address Sanitizer (push) Successful in 4m29s
Smoke Tests / host-aarch64-target-aarch64 - With Address Sanitizer (push) Successful in 4m56s
Smoke Tests / host-x64-target-aarch64 - Without Address Sanitizer (push) Successful in 7m2s
Smoke Tests / host-x64-target-aarch64 - With Address Sanitizer (push) Successful in 7m8s
Changelog entry for release v19.1
2026-02-05 21:06:17 +01:00
.forgejo/workflows Try longer timeout 2026-02-05 20:31:31 +01:00
.vscode Add doctest for testing, new socket sample 2025-10-12 22:01:35 +02:00
build Ignore newlib build directory. 2017-05-09 23:03:12 +02:00
doc Improve sockets documentation 2026-01-24 13:24:56 +01:00
docker Add missing package for netcat to Docker images 2026-01-16 19:34:38 +01:00
include Merge branch 'circle-socket' into circle-socket-2 2025-10-05 22:34:21 +02:00
install Ignore directory 2025-10-08 19:47:54 +02:00
libs Consume fix for unguarded Yield() call 2026-02-05 20:31:19 +01:00
samples Reformatted 2026-02-04 22:38:24 +01:00
src/circle-mbedtls Update Mbed TLS submodule to v2.28.10 2025-06-19 11:00:05 +02:00
testdata Added current temperature to SoC status 2025-11-04 20:42:22 +01:00
tests Disable UDP-related tests 2026-01-18 13:59:55 +01:00
.gitignore Enable checking header file dependencies where applicable 2020-02-07 13:05:25 +01:00
.gitmodules Merge branch 'develop' into circle-socket-2 2026-01-16 18:47:25 +01:00
CHANGELOG.md Changelog entry for release v19.1 2026-02-05 21:06:17 +01:00
circle-mbedtls.md Update circle-mbedtls.md 2025-06-19 11:08:09 +02:00
configure Fix miscompilation with Address Sanitizer 2026-02-04 19:36:43 +01:00
LICENSE Create LICENSE 2017-05-08 21:45:09 +02:00
Makefile Integrate new sample into top-level Makefile 2025-11-01 22:30:54 +01:00
README.md Improve README.md 2026-02-04 23:29:59 +01:00

circle-stdlib

Status badge for master branch Status badge for develop branch Open issues Closed issues

Project Home

This project moved from GitHub to Codeberg.

Canonical repository: https://codeberg.org/larchcone/circle-stdlib.git

Issues and pull requests need to be submitted on Codeberg.

The GitHub repository https://github.com/smuehlst/circle-stdlib.git is a read-only mirror. Pull requests on GitHub will be closed with a corresponding remark without further action.

For transitioning from GitHub to Codeberg the remote must be switched for the circle-stdlib and circle-newlib repositories:

git remote set-url origin https://codeberg.org/larchcone/circle-stdlib.git
cd libs/circle-newlib
git remote set-url origin https://codeberg.org/larchcone/circle-newlib.git

Overview

The goal of this project is to provide C and C++ standard library support for the Raspberry Pi bare-metal environment Circle.

Newlib is used as the standard C library. The fork circle-newlib contains the changes for building Newlib in combination with Circle.

mbed TLS can optionally be used for TLS connections in Circle (call configure with --opt-tls, see also the README file for circle-mbedtls).

Getting Started

Prerequisites

A toolchain from Arm GNU Toolchain Downloads:

Building the Libraries

Add the toolchain to the path, then:

git clone --recursive https://codeberg.org/larchcone/circle-stdlib.git
cd circle-stdlib
./configure
make

This configures the build for the default 32-bit toolchain with the arm-none-eabi- prefix.

The configure script has the following options:

$ ./configure -h
usage: configure [ <option> ... ]
Configure Circle with newlib standard C library and mbed TLS library.

Options:
  -d, --debug                    build with debug information, without optimizer
  -h, --help                     show usage message
  -k, --kasan                    build with Kernel Address Sanitizer support
  -n, --no-cpp                   do not support C++ standard library
  -o, --option <name>[=<value>]  additional preprocessor define (optionally with value)
                                 can be repeated
  --opt-tls                      build with mbed TLS support
  -p <string>, --prefix <string> prefix of the toolchain commands (default: arm-none-eabi-)
  --qemu                         build for running under QEMU in semihosting mode
  -r <number>, --raspberrypi <number>
                                 Circle Raspberry Pi model number (1, 2, 3, 4, 5, default: 1)
  --softfp                       use float ABI setting "softfp" instead of "hard"
  -s <path>, --stddefpath <path>
                                 path where stddef.h header is located (only necessary
                                 if script cannot determine it automatically)

To clean the project directory, the following commands can be used:

make clean
make mrproper   # removes the configuration too

Building the Samples

make build-samples

Running and Debugging the Programs

The resulting executables are normal Circle bare-metal applications. Circle's standard installation and debugging instructions apply.

For running the programs under QEMU see Circle's corresponding notes on QEMU.

Posix Socket Support

There is experimental support for the Posix socket interface. More details are available in SOCKETS.md.

Release History

See CHANGELOG.md.

License

This project is licensed under the GNU GENERAL PUBLIC LICENSE Version 3 - see the LICENSE file for details

Acknowledgements