Skip to content
Draft
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
11 changes: 5 additions & 6 deletions .github/workflows/build_binary.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
- name: 'Setup GCC'
uses: egor-tensin/setup-gcc@v2
with:
version: '14'
version: '16'
platform: 'x64'

- name: 'Setup CMake'
Expand All @@ -36,11 +36,10 @@ jobs:
cmake-version: '3.31.x'

- name: 'Configure CMake'
env:
CXX: g++

run: |
cmake --preset linux-gcc-release
cmake --preset linux-gcc-release \
-DCMAKE_C_COMPILER=gcc-16 \
-DCMAKE_CXX_COMPILER=g++-16

- name: 'Build'
run: |
Expand Down Expand Up @@ -91,7 +90,7 @@ jobs:
needs: ['build-binary']
uses: './.github/workflows/test_unit_cpp.yml'
with:
artifact-name: cpp_bindings_linux_tests
artifact-name: libcpp_bindings_linux

permissions:
contents: read
Expand Down
53 changes: 28 additions & 25 deletions .github/workflows/code_coverage_cpp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,29 +28,34 @@ jobs:
with:
fetch-depth: 0

- name: 'Install Clang and compiler-rt (profile)'
run: |
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/llvm-apt.gpg
echo "deb [signed-by=/usr/share/keyrings/llvm-apt.gpg] https://apt.llvm.org/$(lsb_release -cs)/ llvm-toolchain-$(lsb_release -cs)-21 main" | sudo tee /etc/apt/sources.list.d/llvm-21.list
sudo apt-get update
sudo apt-get install -y clang-21 libclang-rt-21-dev llvm-21
- name: 'Setup GCC'
uses: egor-tensin/setup-gcc@v2
with:
version: '16'
platform: 'x64'

- name: 'Setup CMake'
uses: jwlawson/actions-setup-cmake@v2
with:
cmake-version: '3.31.x'

- name: 'Configure CMake (coverage preset)'
- name: 'Install coverage dependencies'
run: |
cmake --preset coverage \
-DCMAKE_C_COMPILER=clang-21 \
-DCMAKE_CXX_COMPILER=clang++-21
sudo apt-get update
sudo apt-get install -y lcov socat

- name: 'Build'
run: cmake --build --preset coverage
- name: 'Configure CMake (coverage)'
run: |
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_C_COMPILER=gcc-16 \
-DCMAKE_CXX_COMPILER=g++-16 \
-DCMAKE_CXX_FLAGS=--coverage \
-DCMAKE_EXE_LINKER_FLAGS=--coverage \
-DCMAKE_SHARED_LINKER_FLAGS=--coverage

- name: 'Install test dependencies'
run: sudo apt-get install -y socat
- name: 'Build'
run: cmake --build build

- name: 'Start virtual serial echo (socat)'
run: |
Expand All @@ -64,21 +69,19 @@ jobs:
env:
LD_LIBRARY_PATH: '${{ github.workspace }}/build'
SERIAL_TEST_PORT: '${{ env.SERIAL_TEST_PORT_IN }}'
LLVM_PROFILE_FILE: 'default.profraw'
run: ./cpp_bindings_linux_tests --gtest_color=yes

- name: 'Merge profile and export lcov'
- name: 'Capture lcov'
working-directory: build
run: |
llvm-profdata-21 merge -o default.profdata default.profraw
llvm-cov-21 export -instr-profile=default.profdata \
./cpp_bindings_linux_tests \
-object=./libcpp_bindings_linux.so \
-format=lcov \
-ignore-filename-regex='.*/GTest.*' \
-ignore-filename-regex='.*/googletest.*' \
-ignore-filename-regex='.*/cpp_core.*' \
> lcov.info
GCOV_TOOL="$(command -v gcov-16)"
lcov --capture --gcov-tool "$GCOV_TOOL" --directory . --output-file lcov.info
lcov --remove lcov.info \
'/usr/*' \
'*/_deps/*' \
'*/googletest/*' \
'*/cpp_core/*' \
--output-file lcov.info

- name: 'Code Coverage Annotation'
uses: ggilder/codecoverage@v1
Expand Down
27 changes: 17 additions & 10 deletions .github/workflows/deno_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,32 @@ jobs:
matrix:
deno: ["2.6.0", "2.5.0"]

container:
image: denoland/deno:${{ matrix.deno }}

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Deno
uses: denoland/setup-deno@v2
with:
deno-version: ${{ matrix.deno }}

- name: Setup GCC
uses: egor-tensin/setup-gcc@v2
with:
version: '16'
platform: 'x64'

- name: Install build dependencies
run: |
apt-get update
apt-get install -y cmake ninja-build g++ socat git
sudo apt-get update
sudo apt-get install -y cmake ninja-build socat git

- name: Configure CMake
env:
CXX: g++
run: |
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=gcc-16 \
-DCMAKE_CXX_COMPILER=g++-16

- name: Build
run: |
Expand All @@ -49,5 +58,3 @@ jobs:
SERIAL_TEST_PORT: /tmp/ttyCI_A
run: |
deno task test


10 changes: 5 additions & 5 deletions .github/workflows/test_unit_cpp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@ jobs:
- name: 'Download artifact'
uses: actions/download-artifact@v4
with:
name: ${{ github.event.inputs.artifact-name }}
name: ${{ inputs.artifact-name }}
path: 'artifacts'

- name: 'Setup GCC'
uses: egor-tensin/setup-gcc@v2
with:
version: '14'
version: '16'
platform: 'x64'

- name: 'Setup CMake'
Expand All @@ -42,7 +42,9 @@ jobs:

- name: 'Configure CMake'
run: |
cmake --preset linux-gcc-release
cmake --preset linux-gcc-release \
-DCMAKE_C_COMPILER=gcc-16 \
-DCMAKE_CXX_COMPILER=g++-16

- name: 'Build'
id: 'build'
Expand Down Expand Up @@ -92,5 +94,3 @@ jobs:
transformers: '[{"searchValue": "${{ github.workspace }}", "replaceValue": ""}]'
check_title_template: '{{FILE_NAME}} | {{TEST_NAME}}'



35 changes: 15 additions & 20 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
cmake_minimum_required(VERSION 3.30)

# Export compile commands to root directory
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

include(cmake/CPM.cmake)
Expand All @@ -11,9 +10,7 @@ CPMAddPackage(
GIT_TAG v1.1.0
)

# Include cmake-git-versioning module
include(${cmake_git_versioning_SOURCE_DIR}/cmake/cmake-git-versioning.cmake)

get_git_version_info()

project(
Expand All @@ -23,29 +20,27 @@ project(
LANGUAGES CXX
)

include(CTest)

file(WRITE "${CMAKE_BINARY_DIR}/env.sh" "PACKAGE_VERSION=${GIT_DESCRIBE_NO_V}")
generate_git_version(
OUTPUT_DIR ${CMAKE_BINARY_DIR}/generated
OUTPUT_FILE version.hpp
)

# Set C++ standard
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD 26)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# Enable C++23 module support
set(CMAKE_CXX_MODULE_STD 23)
set(CMAKE_CXX_MODULE_STD 26)
set(CMAKE_CXX_MODULE_EXTENSIONS OFF)

CPMAddPackage(
NAME cpp_core
GITHUB_REPOSITORY Serial-IO/cpp-core
GIT_TAG main
GIT_TAG v2.0.0
OPTIONS
"CMAKE_EXPORT_COMPILE_COMMANDS OFF"
)

# Generate version information
generate_git_version(
OUTPUT_DIR ${CMAKE_BINARY_DIR}/generated
OUTPUT_FILE version.hpp
"CPP_CORE_ENABLE_AST_EXPORT ON"
)

CPMAddPackage(
Expand All @@ -57,7 +52,6 @@ CPMAddPackage(
"gtest_force_shared_crt ON"
)

# Library sources: src/*.cpp only, exclude *.test.cpp and test_helpers/
file(GLOB_RECURSE LIB_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
list(FILTER LIB_SOURCES EXCLUDE REGEX ".*\\.test\\.cpp$")
list(FILTER LIB_SOURCES EXCLUDE REGEX ".*/test_helpers/.*")
Expand Down Expand Up @@ -86,9 +80,8 @@ target_link_libraries(
cpp_core::cpp_core
)

target_compile_features(cpp_bindings_linux PUBLIC cxx_std_23)
target_compile_features(cpp_bindings_linux PUBLIC cxx_std_26)

# Test sources: src/*.test.cpp, tests/*.test.cpp, src/test_helpers/*.cpp (helpers excluded from lib)
file(GLOB SRC_UNIT_TESTS "${CMAKE_CURRENT_SOURCE_DIR}/src/*.test.cpp")
file(GLOB TESTS_INTEGRATION "${CMAKE_CURRENT_SOURCE_DIR}/tests/*.test.cpp")
file(GLOB TEST_HELPER_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/test_helpers/*.cpp")
Expand All @@ -114,7 +107,10 @@ if(TEST_SOURCES)
GTest::gmock
)

target_compile_features(cpp_bindings_linux_tests PRIVATE cxx_std_23)
target_compile_features(cpp_bindings_linux_tests PRIVATE cxx_std_26)

include(GoogleTest)
gtest_discover_tests(cpp_bindings_linux_tests)
endif()

include(GNUInstallDirs)
Expand All @@ -133,7 +129,6 @@ install(
FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp"
)

# Copy generated version header
install(
FILES ${CMAKE_BINARY_DIR}/generated/version.hpp
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
Expand Down
7 changes: 5 additions & 2 deletions jsr/scripts/binary_to_json.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,15 @@ BINARY_FILE_NAME=$(basename "$BINARY_FILE_PATH")

mkdir -p "$(dirname "$JSON_FILE_PATH")"

BASE64_DATA=$(base64 "$BINARY_FILE_PATH" | tr -d '\n')
BASE64_TMP=$(mktemp)
trap 'rm -f "$BASE64_TMP"' EXIT

base64 "$BINARY_FILE_PATH" | tr -d '\n' > "$BASE64_TMP"

jq -n \
--arg target "$TARGET" \
--arg filename "$BINARY_FILE_NAME" \
--arg data "$BASE64_DATA" \
--rawfile data "$BASE64_TMP" \
'{
target: $target,
filename: $filename,
Expand Down
Loading
Loading