GitHub - woven-by-toyota/arene-base: A Foundational C++ Library for Safety-Critical Software.

2 min read Original article ↗

What is arene_base?

arene_base provides low level C++ facilities to help development of safety critical software in compliance with Woven by Toyota's C++ development best practices.

Feedback

We would love to hear from you if you have a question, concern, feature request, or bug report.

For general inquiries, you can contact us at: arene-base-public@woven.toyota

Feature Requests and Bug Reports

We welcome feature requests and improvement suggestions. Please open a GitHub issue to submit feature requests, bug reports, or other feedback. Issues will be addressed on a best-effort basis by the Arene Base developers.

Build and Test

The following are methods for building and testing the project.

Prerequisites

Currently, Arene Base is supported for use with the following platforms and toolchains. Supported toolchains and platforms may be added in the future.

  • Ubuntu (22.04+)
  • Bazel (version 7 is well tested; higher versions may or may not work) or Bazelisk installed
  • C++14 with Clang

How to build and test

To build all targets:

bazelisk build --  //arene/base/... //stdlib/...

To run all tests:

bazelisk test --  //arene/base/... //stdlib/...

To run specific tests:

# Run tests for a specific component
bazelisk test -- //arene/base/array/tests:all

# Run tests matching a pattern
bazelisk test -- //arene/base/math/tests:all

If you are using Bazel without Bazelisk, replace bazelisk with your bazel binary.

Consuming Arene Base in Your Project

It is currently easiest to use Arene Base with Bazel. When using Arene Base in a project, you can do so in the following ways.

Using Bzlmod (module.bazel)

If you're using Bzlmod, add arene-base to your MODULE.bazel file:

bazel_dep(name = "arene-base")

archive_override(
    module_name = "arene-base",
    urls = ["https://github.com/woven-by-toyota/arene-base/archive/main.zip"],
    strip_prefix = "arene-base-main",
)

Then include the desired targets in your BUILD files:

cc_binary(
    name = "arene_base_example",
    srcs = ["main.cpp"],
    deps = [
        "@arene-base//:array",
    ],
)

Configuration Notes

Using the stdlib Target

The stdlib target is a cut-down implementation of the C++ Standard Library, providing only those features required for Arene Base itself or explicitly requested. It only includes Standard Library features from C++14. Library features from later versions of the C++ Standard may be added to the arene::base namespace, provided they can be implemented using C++14 language features.

When using the //stdlib target in your dependencies, you need to pass an additional flag to Bazel:

bazel build --@arene-base//configs:use_toolchain_stdlib=false //your:target

This flag is only required when using //stdlib. Note that some targets may be incompatible with this flag (e.g., the //:filesystem and //:synchronization targets).