Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
FROM debian:bookworm

# Users and passwords
ARG BUILD_USER=build-user
ARG UID=1000
ARG GID=1000
ARG BUILD_USER_PWD=pwd

RUN rm -rf /var/lib/apt/lists/*

# Generate and set locale
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y locales \
&& sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \
&& dpkg-reconfigure --frontend=noninteractive locales

RUN locale-gen --purge en_US.UTF-8
RUN update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8

# Package installs
RUN apt-get update && apt-get install -y \
sudo \
cmake \
clang \
clang-format \
ninja-build \
g++ \
gdb \
git \
libgtest-dev \
libgmock-dev \
&& rm -rf /var/lib/apt/lists/*

# some utilities for runtime
RUN apt-get update && apt-get install -y \
vim \
net-tools \
curl \
zsh \
wget \
&& rm -rf /var/lib/apt/lists/*

# Create group and user
RUN groupadd --gid=$GID $BUILD_USER
RUN useradd --create-home --shell /bin/bash $BUILD_USER --uid=$UID -g $BUILD_USER
RUN echo "$BUILD_USER:$BUILD_USER_PWD" | chpasswd
RUN usermod -aG sudo $BUILD_USER
RUN echo "$BUILD_USER ALL=(ALL) ALL" >> /etc/sudoers
RUN mkdir -p /home/$BUILD_USER/farbot

USER $BUILD_USER:$BUILD_USER
WORKDIR /home/build-user/farbot

RUN wget -qO- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh | zsh || true
RUN sed -i 's/ZSH_THEME="robbyrussell"/ZSH_THEME="gentoo"/g' ~/.zshrc
21 changes: 21 additions & 0 deletions .devcontainer/build_docker_image.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/bin/bash

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
source "$DIR/common.sh"

docker build --tag $DOCKER_IMAGE_TAG \
--build-arg UID=$(id -u) \
--build-arg GID=$(id -g) \
--build-arg BUILD_USER=$BUILD_USER \
$DIR
ret=$?

if [[ -n "$(docker ps --all -q -f status=exited)" ]] ; then
docker rm $(docker ps --all -q -f status=exited)
fi

if [[ -n "$(docker images --filter "dangling=true" -q --no-trunc)" ]] ; then
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
fi

exit $ret
2 changes: 2 additions & 0 deletions .devcontainer/common.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
DOCKER_IMAGE_TAG="farbot"
BUILD_USER="build-user"
23 changes: 23 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"name": "farbot",
"build": {
"dockerfile": "Dockerfile"
},
"runArgs" : ["--rm",
"--network=host"
],
"workspaceMount": "source=${localWorkspaceFolder},target=/home/build-user/farbot,type=bind,consistency=delegated",
"workspaceFolder": "/home/build-user/farbot",
"settings": {
"terminal.integrated.shell.linux": "/bin/zsh",
"terminal.integrated.detectLocale": "off"
},
"extensions": [
"eamodio.gitlens",
"ms-vscode.cpptools",
"twxs.cmake",
"ms-vscode.cmake-tools",
"xaver.clang-format",
"sonarsource.sonarlint-vscode"
]
}
21 changes: 21 additions & 0 deletions .devcontainer/run_docker_image.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/bin/bash

SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
REPO_DIR=$(readlink -f $SCRIPT_DIR/..)



DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
source "$DIR/common.sh"

docker run \
--rm \
--network=host \
--mount type=bind,source=$HOME/.gitconfig,target=/home/build-user/.gitconfig \
--mount type=bind,source=$HOME/.local,target=/home/$BUILD_USER/.local \
--mount type=bind,source=$REPO_DIR,target=/home/$BUILD_USER/farbot \
-ti $DOCKER_IMAGE_TAG:latest /bin/zsh

## logging in to a running container:
## get id with: docker ps
## docker exec -it <id> /bin/bash
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
build/
24 changes: 23 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,32 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -latomic")
endif()

set(TARGET_NAME ${PROJECT_NAME})
add_library(${TARGET_NAME} INTERFACE)
target_include_directories(${TARGET_NAME} INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
add_library(${PROJECT_NAME}::${TARGET_NAME} ALIAS ${TARGET_NAME})

option(BUILD_TESTS "Build tests" ON)
if(BUILD_TESTS)
add_executable(gtestrunner test/test.cpp include/farbot/AsyncCaller.hpp include/farbot/RealtimeTraits.hpp include/farbot/RealtimeObject.hpp include/farbot/detail/RealtimeObject.tcc include/farbot/fifo.hpp include/farbot/detail/fifo.tcc ${GTEST_DIR}/src/gtest_main.cc ${GTEST_DIR}/src/gtest-all.cc)
target_include_directories(gtestrunner PRIVATE include ${GTEST_DIR} ${GTEST_DIR}/include)
target_link_libraries(gtestrunner Threads::Threads)

gtest_add_tests(TARGET gtestrunner SOURCES test/test.cpp)
endif()

install(DIRECTORY include/farbot DESTINATION ${CMAKE_INSTALL_PREFIX}/include)
include(GNUInstallDirs)
install(TARGETS ${TARGET_NAME}
EXPORT ${PROJECT_NAME}-targets
)
install(EXPORT ${PROJECT_NAME}-targets
NAMESPACE ${PROJECT_NAME}::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
)
install(DIRECTORY include/farbot DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
5 changes: 5 additions & 0 deletions cmake/farbot-config.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
get_filename_component(farbot_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)

if(NOT TARGET farbot::farbot)
include("${farbot_CMAKE_DIR}/farbot-targets.cmake")
endif()
11 changes: 6 additions & 5 deletions include/farbot/AsyncCaller.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ namespace farbot
*
* The non-realtime thread must call process() to process the lambdas.
*/
template <fifo_options::concurrency caller_concurrency = fifo_options::concurrency::multiple>
template <fifo_options::concurrency caller_concurrency = fifo_options::concurrency::multiple,
typename function_type = std::function<void()> >
class AsyncCaller
{
public:
Expand All @@ -31,7 +32,7 @@ class AsyncCaller
*
* Return false if there was not enough room in the underlying fifo.
*/
bool callAsync (std::function<void()> && lambda)
bool callAsync (function_type && lambda)
{
return ringbuffer.push (std::move (lambda));
}
Expand All @@ -49,7 +50,7 @@ class AsyncCaller
bool process()
{
auto didProcess = false;
std::function<void()> lambda;
function_type lambda;

while (ringbuffer.pop (lambda))
{
Expand All @@ -62,6 +63,6 @@ class AsyncCaller
return didProcess;
}
private:
fifo<std::function<void()>, fifo_options::concurrency::single, caller_concurrency> ringbuffer;
fifo<function_type, fifo_options::concurrency::single, caller_concurrency> ringbuffer;
};
}
}