Skip to content

Commit f3cb2da

Browse files
cmnrdelgeeko1petervdonovanCopybara Bot
authored
Release v0.2.0 (#7)
### Updates & Changes - Third-party dependency gRPC (and its dependencies absl and protobuf) are now built from source for the C++ SDK to improve portability. We eventually plan to package these as statically linked libraries (fixes #6) ### Fixes & Improvements - Fix issue where C++ SDK could not be built on Ubuntu 22.04 due to a dependency issue with apt packaged version of gRPC - Resolve issue where `xronos-dashboard` would not run on ARM v8.0 (Raspberry Pi 4, NVIDIA Jetson Nano) due to a breaking change in a Grafana dependency - C++ SDK documentation fix broken link to examples in GitHub repository - Add missing LICENSE file in root of public/ folder - Add top-level README to for public repository GitOrigin-RevId: fdb9611089845d252ca17292249944ebc023efd8 --------- Co-authored-by: Christian Menard <christian@xronos.com> Co-authored-by: Jeff C. Jensen <11233838+elgeeko1@users.noreply.github.com> Co-authored-by: Peter Donovan <33707478+petervdonovan@users.noreply.github.com> Co-authored-by: Copybara Bot <copybara@xronos.com>
1 parent fef11c4 commit f3cb2da

120 files changed

Lines changed: 509 additions & 244 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

LICENSE

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
BSD 3-Clause License
2+
3+
Copyright © 2025 Xronos Inc. All rights reserved.
4+
5+
Redistribution and use in source and binary forms, with or without modification, are
6+
permitted provided that the following conditions are met:
7+
8+
1. Redistributions of source code must retain the above copyright notice, this list of
9+
conditions, and the following disclaimer.
10+
11+
2. Redistributions in binary form must reproduce the above copyright notice, this list
12+
of conditions, and the following disclaimer in the documentation and/or other
13+
materials provided with the distribution.
14+
15+
3. Neither the name of the copyright holder nor the names of its contributors may be
16+
used to endorse or promote products derived from this software without specific prior
17+
written permission.
18+
19+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20+
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21+
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22+
THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25+
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26+
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
27+
THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

README.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# Xronos
2+
3+
**Xronos** is a lightweight framework for building deterministic, component-based robotics applications in Python or C++.
4+
It supports real-time telemetry, system visualization, and modular design with a focus on clarity, scalability, and correctness.
5+
6+
## Features
7+
8+
- 🦾 **Turnkey Telemetry**: Built-in support for monitoring, tracing, and timing.
9+
- ⚙️ **Modern APIs**: Intuitive and consistent interfaces in both Python and C++.
10+
- 🪶 **Lightweight**: 20MB pip install; no OS version lock-in.
11+
- 🧩 **Modular Architecture**: Component-based design for separation of concerns.
12+
- ⏱️ **Deterministic Concurrency**: Reactor-based execution model guarantees predictable behavior.
13+
- 🧠 **Automatic System Visualization**: Architecture diagrams generated from code.
14+
15+
## Usage
16+
17+
For Python users, the [xronos PyPi package](https://pypi.org/project/xronos/) is published as a standalone Python
18+
package. Building from source is not required.
19+
20+
- **Python users**: Get started at [docs.xronos.com](https://docs.xronos.com)
21+
- **C++ users**: See [docs.xronos.com/cpp](https://docs.xronos.com/cpp)
22+
- **VS Code users**: The [Xronos VS Code Extension](https://marketplace.visualstudio.com/items?itemName=xronos.xronos) is optional and enables diagrams of your programs
23+
24+
## Repository Structure
25+
26+
```bash
27+
.
28+
├── base-images/: # Earthly base images
29+
├── cpp-sdk/: # C++ SDK
30+
├── docs/ # source for https://docs.xronos.com
31+
├── examples/: # python SDK examples
32+
├── lib/ # library components
33+
├── third-party/ # third-party libraries
34+
├── xronos/ # source for the xronos framework
35+
├── Earthfile # earthly build definitions
36+
└── README.md # project overview (this file)
37+
```
38+
39+
## Building from Source
40+
41+
To build locally:
42+
43+
1. [Install Docker](https://docker.com)
44+
2. [Install Earthly](https://earthly.dev/get-earthly)
45+
3. Run:
46+
47+
```bash
48+
earthly +build
49+
```
50+
51+
## Links
52+
53+
- Website: [https://xronos.com](https://xronos.com)
54+
- Python Package: [https://pypi.org/project/xronos](https://pypi.org/project/xronos/)
55+
- Documentation: [https://docs.xronos.com](https://docs.xronos.com)
56+
- C++ Docs: [https://docs.xronos.com/cpp](https://docs.xronos.com/cpp)

base-images/Earthfile

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,35 @@ WORKDIR /xronos
99
build-essential:
1010
# Warning: In QEMU emulation, this may crash with a segfault related to libc-bin
1111
# until you follow steps listed at https://github.com/docker/buildx/issues/1170#issuecomment-1159350550
12-
RUN apt update && apt install -y build-essential git libpthread-stubs0-dev software-properties-common lsb-release ca-certificates gpg wget
13-
RUN wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /usr/share/keyrings/kitware-archive-keyring.gpg
14-
RUN echo "deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/kitware.list
15-
RUN apt update
16-
RUN apt-cache madison cmake-data
17-
RUN apt install -y cmake=3.28.6-0kitware1ubuntu22.04.1 cmake-data=3.28.6-0kitware1ubuntu22.04.1
12+
ENV DEBIAN_FRONTEND=noninteractive
13+
ENV DISPLAY=localhost:0.0
14+
RUN apt-get update -qq
15+
RUN apt-get install -y -q --no-install-recommends apt-utils
16+
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
17+
18+
RUN apt-get install -y -q --no-install-recommends \
19+
build-essential \
20+
git \
21+
libpthread-stubs0-dev \
22+
software-properties-common \
23+
lsb-release \
24+
ca-certificates \
25+
gpg \
26+
wget \
27+
zlib1g-dev \
28+
gnupg
29+
RUN wget -qO- https://apt.kitware.com/keys/kitware-archive-latest.asc | gpg --dearmor - > /usr/share/keyrings/kitware-archive-keyring.gpg
30+
RUN echo "deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/kitware.list
31+
RUN apt-get update -qq
32+
RUN apt-get install -y -q --no-install-recommends \
33+
cmake=3.28.6-0kitware1ubuntu22.04.1 \
34+
cmake-data=3.28.6-0kitware1ubuntu22.04.1
1835

1936
clang-tools:
2037
FROM +build-essential
38+
ENV DEBIAN_FRONTEND=noninteractive
39+
ENV DISPLAY=localhost:0.0
2140
LET clang_tools_version=18
22-
RUN apt-get update -q
23-
RUN apt-get install -y software-properties-common wget gnupg
2441
RUN wget -qO- https://apt.llvm.org/llvm.sh | bash -s -- ${clang_tools_version}
2542
RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${clang_tools_version} 100
2643
RUN update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${clang_tools_version} 100
@@ -33,40 +50,19 @@ clang-tools:
3350
RUN update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-${clang_tools_version} 100
3451
RUN update-alternatives --install /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-${clang_tools_version} 100
3552

36-
grpc:
37-
FROM +build-essential
38-
GIT CLONE --branch v1.67.1 https://github.com/grpc/grpc grpc
39-
WORKDIR grpc/cmake/build
40-
RUN true # this is to invalidate the cache
41-
RUN CXX=/usr/bin/g++ cmake \
42-
-DCMAKE_THREAD_LIBS_INIT="-lpthread" \
43-
-DCMAKE_HAVE_THREADS_LIBRARY=1 \
44-
-DCMAKE_USE_WIN32_THREADS_INIT=0 \
45-
-DCMAKE_USE_PTHREADS_INIT=1 \
46-
-DTHREADS_PREFER_PTHREAD_FLAG=ON \
47-
-DgRPC_INSTALL=ON \
48-
-DgRPC_BUILD_TESTS=OFF \
49-
-DBUILD_SHARED_LIBS=ON \
50-
-DCMAKE_INSTALL_PREFIX=/xronos/grpc-install \
51-
../.. \
52-
&& make -j $(nproc) \
53-
&& make install \
54-
&& cd /xronos && rm -rf grpc
55-
WORKDIR /xronos
56-
SAVE ARTIFACT grpc-install
57-
5853
python:
5954
FROM +clang-tools
60-
RUN export DEBIAN_FRONTEND=noninteractive && \
61-
apt update && \
62-
add-apt-repository ppa:deadsnakes/ppa && \
63-
apt update && \
64-
apt install -y \
55+
ENV DEBIAN_FRONTEND=noninteractive
56+
ENV DISPLAY=localhost:0.0
57+
RUN gpg --keyserver keyserver.ubuntu.com --recv-keys 6A755776
58+
RUN gpg --export 6A755776 | gpg --dearmor > /etc/apt/trusted.gpg.d/deadsnakes-ppa.gpg
59+
RUN echo "deb [signed-by=/etc/apt/trusted.gpg.d/deadsnakes-ppa.gpg] http://ppa.launchpad.net/deadsnakes/ppa/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/deadsnakes-ppa.list
60+
RUN apt-get update -qq
61+
RUN apt-get install -y -q --no-install-recommends \
6562
python3.10-dev python3.10-venv \
6663
python3.11-dev python3.11-venv \
6764
python3.12-dev python3.12-venv \
68-
python3.13-dev python3.13-venv python3.13-nogil && \
69-
apt clean && rm -rf /var/lib/apt/lists/*
65+
python3.13-dev python3.13-venv python3.13-nogil
7066
# This is a workaround for a gcc bug. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118700
7167
RUN cp /usr/include/python3.13t/pyconfig.h ./
7268
RUN rm -rf /usr/include/python3.13t

cpp-sdk/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cmake_minimum_required(VERSION 3.28)
22

3-
project(xronos-sdk LANGUAGES CXX VERSION "0.1.0")
4-
set(PROJECT_VERSION "0.1.0")
3+
project(xronos-sdk LANGUAGES CXX VERSION "0.2.0")
4+
set(PROJECT_VERSION "0.2.0")
55

66
# require C++ 20
77
set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard." FORCE)
@@ -18,7 +18,7 @@ option(BUILD_SHARED_LIBS "Build using shared libraries" Off)
1818
option(CLANG_TIDY_ERROR "clang-tidy warnings are errors" Off)
1919
set(CLANG_TIDY_COMMAND "clang-tidy" CACHE STRING "The clang-tidy command to use")
2020

21-
set(INSTALL_DEFAULT ON)
21+
set(INSTALL_DEFAULT OFF)
2222
set(BUILD_TESTS_DEFAULT ON)
2323
set(RUN_CLANG_TIDY_DEFAULT OFF)
2424
set(BUILD_DOCS_DEFAULT OFF)
@@ -58,7 +58,6 @@ if(XRONOS_SDK_RUN_CLANG_TIDY)
5858
"${CLANG_TIDY_BASE_COMMAND};-header-filter=xronos/\(.*\)\\.hh")
5959
endif()
6060

61-
add_compile_options(-Wall -Wextra -pedantic -Werror)
6261

6362
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
6463

@@ -84,6 +83,7 @@ target_link_libraries(xronos-sdk
8483
xronos::xronos-telemetry
8584
xronos::xronos-telemetry-otel
8685
)
86+
target_compile_options(xronos-sdk PRIVATE -Wall -Wextra -pedantic -Werror)
8787

8888
if(XRONOS_SDK_RUN_CLANG_TIDY)
8989
set_target_properties(xronos-sdk PROPERTIES CXX_CLANG_TIDY

cpp-sdk/README.md

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,16 @@ See [docs.xronos.com](https://docs.xronos.com) for the most up-to-date system re
1515

1616
## Install Prerequisites
1717

18+
### Install build dependencies
19+
20+
```shell
21+
sudo apt install build-essential zlib1g-dev git
22+
```
23+
1824
### Install CMake
1925

20-
Ubuntu 24.04 (Noble) apt repositories include CMake 3.28 or later. If on an earlier
21-
version of Ubuntu, first add the Kitware apt repository:
26+
On systems older than Ubuntu 24.04, CMake 3.28 needs to be installed from the Kitware ppa.
27+
The following shows how to install CMake 3.28 on Ubuntu 22.04.
2228

2329
```shell
2430
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null
@@ -29,15 +35,7 @@ sudo apt update
2935
Install CMake:
3036

3137
```shell
32-
sudo apt install cmake
33-
```
34-
35-
### Install gRPC
36-
37-
Install gRPC (1.30 or later):
38-
39-
```shell
40-
sudo apt install libgrpc++-dev
38+
sudo apt install -y cmake=3.28.6-0kitware1ubuntu22.04.1 cmake-data=3.28.6-0kitware1ubuntu22.04.1
4139
```
4240

4341
## Build `xronos-sdk`
@@ -48,7 +46,7 @@ in this source repository.
4846

4947
```shell
5048
cmake -B build
51-
cmake --build build --target xronos-sdk -j
49+
cmake --build build --target xronos-sdk -j$(nproc)
5250
```
5351

5452
## Run the Hello World Example

cpp-sdk/docs/API.md

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,16 @@ See [docs.xronos.com](https://docs.xronos.com) for the most up-to-date system re
1616

1717
## Install Prerequisites
1818

19+
### Install build dependencies
20+
21+
```shell
22+
sudo apt install build-essential zlib1g-dev git
23+
```
24+
1925
### Install CMake
2026

21-
Ubuntu 24.04 (Noble) apt repositories include CMake 3.28 or later. If on an earlier
22-
version of Ubuntu, first add the Kitware apt repository:
27+
On systems older than Ubuntu 24.04, CMake 3.28 needs to be installed from the Kitware ppa.
28+
The following shows how to install CMake 3.28 on Ubuntu 22.04.
2329

2430
```shell
2531
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null
@@ -30,15 +36,7 @@ sudo apt update
3036
Install CMake:
3137

3238
```shell
33-
sudo apt install cmake
34-
```
35-
36-
### Install gRPC
37-
38-
Install gRPC (1.30 or later):
39-
40-
```shell
41-
sudo apt install libgrpc++-dev
39+
sudo apt install -y cmake=3.28.6-0kitware1ubuntu22.04.1 cmake-data=3.28.6-0kitware1ubuntu22.04.1
4240
```
4341

4442
## Create a Xronos C++ application
@@ -100,7 +98,7 @@ Generate the CMake project and build the Xronos SDK:
10098

10199
```shell
102100
cmake -B build
103-
cmake --build build --target xronos-sdk -j
101+
cmake --build build --target xronos-sdk -j$(nproc)
104102
```
105103

106104
then compile and run the hello world application:
@@ -118,4 +116,4 @@ You should see the output
118116

119117
## Additional Examples
120118

121-
See [https://github.com/xronos-inc/xronos/cpp-sdk/examples](https://github.com/xronos-inc/xronos/cpp-sdk/examples) for additional examples.
119+
See [https://github.com/xronos-inc/xronos/tree/main/cpp-sdk/examples](https://github.com/xronos-inc/xronos/tree/main/cpp-sdk/examples) for additional examples.

docs/.buildinfo

Lines changed: 0 additions & 4 deletions
This file was deleted.

docs/cpp/annotated.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<tr id="projectrow">
3535
<td id="projectlogo"><img alt="Logo" src="logo-banner.jpg"/></td>
3636
<td id="projectalign">
37-
<div id="projectname">xronos-sdk<span id="projectnumber">&#160;0.1.0</span>
37+
<div id="projectname">xronos-sdk<span id="projectnumber">&#160;0.2.0</span>
3838
</div>
3939
<div id="projectbrief">Xronos C++ SDK</div>
4040
</td>

docs/cpp/classes.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<tr id="projectrow">
3535
<td id="projectlogo"><img alt="Logo" src="logo-banner.jpg"/></td>
3636
<td id="projectalign">
37-
<div id="projectname">xronos-sdk<span id="projectnumber">&#160;0.1.0</span>
37+
<div id="projectname">xronos-sdk<span id="projectnumber">&#160;0.2.0</span>
3838
</div>
3939
<div id="projectbrief">Xronos C++ SDK</div>
4040
</td>

docs/cpp/classxronos_1_1sdk_1_1BaseReaction-members.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<tr id="projectrow">
3535
<td id="projectlogo"><img alt="Logo" src="logo-banner.jpg"/></td>
3636
<td id="projectalign">
37-
<div id="projectname">xronos-sdk<span id="projectnumber">&#160;0.1.0</span>
37+
<div id="projectname">xronos-sdk<span id="projectnumber">&#160;0.2.0</span>
3838
</div>
3939
<div id="projectbrief">Xronos C++ SDK</div>
4040
</td>

0 commit comments

Comments
 (0)