Skip to content
Open
Show file tree
Hide file tree
Changes from 36 commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
40329f1
Add itf dependecy via bazel
TimofteBogdan1900 Jan 28, 2026
fdcc905
Add qnx compilation from dev containers
TimofteBogdan1900 Feb 5, 2026
f8de33b
Remove hardcoded username and local hacks in devcontainer.
TimofteBogdan1900 Feb 6, 2026
0df5e9b
Add QNX8 toolchain support with multi-architecture build configuration.
jorgecasal Jan 16, 2026
5affffc
initial state to get QNX8 build running using bazel_cpp_toolchains
mariuswbr Jan 30, 2026
b35d951
Align toolchains with the ones from baselibs
NEOatNHNG Feb 6, 2026
128cfb8
Update vsomeip version
NEOatNHNG Feb 9, 2026
4e75fd4
Fix vsomeip build for QNX8
NEOatNHNG Feb 9, 2026
bb70f92
Integrate score_toolchains_qnx with toolchains_qnx_ifs
TimofteBogdan1900 Feb 10, 2026
ebbdd65
Add qnx image creation wtih custom binaries
TimofteBogdan1900 Feb 10, 2026
db971ff
Add initial integr test and a small assert true test via ITF
TimofteBogdan1900 Feb 10, 2026
2915a07
Add networking to qemu image
TimofteBogdan1900 Feb 12, 2026
05f317e
Switch qemu user mode network to bridge
TimofteBogdan1900 Feb 16, 2026
ce061e2
Fix someip SD in vsomeip for qnx
TimofteBogdan1900 Feb 18, 2026
c12b49f
Update to itf latest
TimofteBogdan1900 Feb 19, 2026
4ef6e72
Fix the testscases due to wrong rebase
TimofteBogdan1900 Feb 20, 2026
a920ffe
Fix pipeline erorrs
TimofteBogdan1900 Feb 23, 2026
92e4730
Improve bridge qemux communication setup
TimofteBogdan1900 Feb 23, 2026
f815597
Fix copyright
TimofteBogdan1900 Feb 23, 2026
8fc1bfe
Fix pipleine eror formatter
TimofteBogdan1900 Feb 24, 2026
897f38b
Fix Starlark formatting
TimofteBogdan1900 Feb 24, 2026
73dc8e0
Fix bazel test //... --build_tests_only
TimofteBogdan1900 Feb 24, 2026
08ff0e4
Try qnx compilation fix pipeline
TimofteBogdan1900 Feb 24, 2026
8f4447f
Revert "Try qnx compilation fix pipeline"
TimofteBogdan1900 Feb 24, 2026
a8b5bb1
Fix Copyright and Bumpup score tooling to 1.1.2
AEK2HI Feb 27, 2026
0ffb175
Add docum. to run QNX test in devcontainers
TimofteBogdan1900 Feb 27, 2026
6613fad
Add scapy instead of tcpdump
TimofteBogdan1900 Mar 2, 2026
2cc5f03
Fix review comment unintended export of patches
TimofteBogdan1900 Mar 2, 2026
e377469
Remove uneeded tests and save .pcap files
TimofteBogdan1900 Mar 2, 2026
4589bac
Revert "Fix review comment unintended export of patches"
TimofteBogdan1900 Mar 2, 2026
4a6f50e
Fix review comments
TimofteBogdan1900 Mar 4, 2026
8bc16d4
Apply suggestion from @jorgecasal
TimofteBogdan1900 Mar 5, 2026
905fca8
Fix review comments
TimofteBogdan1900 Mar 5, 2026
2b8f18f
Merge branch 'main' into feature/96530_shared_story
TimofteBogdan1900 Mar 5, 2026
75f77df
Fix review comments
TimofteBogdan1900 Mar 6, 2026
83e3d3b
Add test for SOME IP event data
TimofteBogdan1900 Mar 9, 2026
8dd5f55
Remove deprecated score_toolchains_qnx
TimofteBogdan1900 Mar 11, 2026
d5ec295
Merge branch 'main' into feature/96530_shared_story
TimofteBogdan1900 Mar 11, 2026
4b31637
Enable pull_request_target event in QNX build workflow
TimofteBogdan1900 Mar 11, 2026
de9dedc
Fix the license issue on rebuild
TimofteBogdan1900 Mar 12, 2026
05ab324
Merge score/main
TimofteBogdan1900 Mar 12, 2026
d7a70fb
Beautification of someip integration test logs.
TimofteBogdan1900 Mar 13, 2026
fa911e5
Get logs from QNX for someipd and comclient
TimofteBogdan1900 Mar 17, 2026
8381329
Fix MT review comments
TimofteBogdan1900 Mar 19, 2026
fc18cc1
Merge remote-tracking branch 'score/main' into feature/96530_shared_s…
TimofteBogdan1900 Mar 20, 2026
44d60ec
Update missing score_itf
TimofteBogdan1900 Mar 20, 2026
61a08de
Copyright tool doesnt work properly
TimofteBogdan1900 Mar 20, 2026
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
12 changes: 10 additions & 2 deletions .bazelrc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# *******************************************************************************
# Copyright (c) 2025 Contributors to the Eclipse Foundation
# Copyright (c) 2026 Contributors to the Eclipse Foundation
#
# See the NOTICE file(s) distributed with this work for additional
# information regarding copyright ownership.
Expand All @@ -16,7 +16,6 @@ build --java_language_version=17
build --tool_java_language_version=17
build --java_runtime_version=remotejdk_17
build --tool_java_runtime_version=remotejdk_17

# ============================================================================
# Multi-Architecture Build Configuration
# ============================================================================
Expand Down Expand Up @@ -44,17 +43,26 @@ common:x86_64-linux --repo_env=TARGET_ARCH=x86_64
common:aarch64-linux --config=_toolchain_common
common:aarch64-linux --platforms=@score_bazel_platforms//:aarch64-linux-gcc_12.2.0-posix
common:aarch64-linux --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_aarch64_unknown_linux_gnu
common:aarch64-linux --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_x86_64_unknown_linux_gnu
common:aarch64-linux --repo_env=TARGET_ARCH=aarch64

common:x86_64-qnx --config=_toolchain_common
common:x86_64-qnx --platforms=@score_bazel_platforms//:x86_64-qnx-sdp_8.0.0-posix
common:x86_64-qnx --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_x86_64_pc_nto_qnx800
common:x86_64-qnx --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_x86_64_unknown_linux_gnu
common:x86_64-qnx --repo_env=TARGET_ARCH=x86_64
common:x86_64-qnx --sandbox_writable_path=/var
common:x86_64-qnx --action_env=QNX_TARGET_ARCH=x86_64
common:x86_64-qnx --spawn_strategy=local # Disable sandbox: bazel tests command need to be able to access the QEMU network
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add that strategy to those tests which need to be executed locally. At the very least it should be limited to the test command and not in common

Copy link
Copy Markdown
Contributor Author

@TimofteBogdan1900 TimofteBogdan1900 Mar 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated to test only form qnx arm anx x86_64


common:aarch64-qnx --config=_toolchain_common
common:aarch64-qnx --platforms=@score_bazel_platforms//:aarch64-qnx-sdp_8.0.0-posix
common:aarch64-qnx --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_aarch64_unknown_nto_qnx800
common:aarch64-qnx --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_x86_64_unknown_linux_gnu
common:aarch64-qnx --repo_env=TARGET_ARCH=aarch64
common:aarch64-qnx --sandbox_writable_path=/var/tmp
common:aarch64-qnx --action_env=QNX_TARGET_ARCH=aarch64le
common:aarch64-qnx --spawn_strategy=local # Disable sandbox: bazel tests command need to be able to access the QEMU network

common --credential_helper=*.qnx.com=%workspace%/.github/tools/qnx_credential_helper.py

Expand Down
8 changes: 6 additions & 2 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
"dockerfile": "Dockerfile"
},
"runArgs": [
"--privileged"
"--privileged",
"--add-host=host.docker.internal:host-gateway",
"--device=/dev/kvm"
],
"mounts": [
{
Expand All @@ -31,5 +33,7 @@
"streetsidesoftware.code-spell-checker"
]
}
}
},
"postCreateCommand": "sudo apt-get update && sudo apt-get install -y software-properties-common && sudo add-apt-repository -y universe && sudo apt-get update && sudo apt-get install -y qemu-system-x86 iputils-ping tcpdump iptables",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we add that to the Dockerfile instead? Then it would be one step.
Otherwise the Docker image will be generated and then afterwards this additional stuff is installed.

Also we are installing way too much stuff (icon themes etc.). I guess you should add --no-install-recommends

Suggested change
"postCreateCommand": "sudo apt-get update && sudo apt-get install -y software-properties-common && sudo add-apt-repository -y universe && sudo apt-get update && sudo apt-get install -y qemu-system-x86 iputils-ping tcpdump iptables",
"postCreateCommand": "sudo apt-get update && sudo apt-get install -y --no-install-recommends software-properties-common && sudo add-apt-repository -y universe && sudo apt-get update && sudo apt-get install -y --no-install-recommends qemu-system-x86 iputils-ping tcpdump iptables",

Copy link
Copy Markdown
Contributor Author

@TimofteBogdan1900 TimofteBogdan1900 Mar 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated

"postStartCommand": "sudo chmod 666 /dev/kvm"
}
54 changes: 54 additions & 0 deletions .github/workflows/build_and_test_qnx.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,57 @@ jobs:
score-qnx-license: ${{ secrets.SCORE_QNX_LICENSE }}
score-qnx-user: ${{ secrets.SCORE_QNX_USER }}
score-qnx-password: ${{ secrets.SCORE_QNX_PASSWORD }}

# QEMU integration tests - runs built QNX binaries in QEMU
# Bridge networking required for x86_64-qnx SOME/IP communication between QEMU instances
qemu_integration_tests:
strategy:
fail-fast: false
matrix:
bazel-config: ["x86_64-qnx", "aarch64-qnx"]
runs-on: ubuntu-24.04
needs: build_and_test_qnx
permissions:
contents: read
pull-requests: read
env:
SCORE_QNX_USER: ${{ secrets.SCORE_QNX_USER }}
SCORE_QNX_PASSWORD: ${{ secrets.SCORE_QNX_PASSWORD }}
SCORE_QNX_LICENSE: ${{ secrets.SCORE_QNX_LICENSE }}
steps:
- uses: eclipse-score/more-disk-space@v1
- name: Checkout repository
uses: actions/checkout@v4.2.2
- name: Create Bazel output base directory
run: |
sudo mkdir -p /mnt/.bazel
sudo chown -R $USER:$USER /mnt/.bazel
- name: Setup Bazel
uses: bazel-contrib/setup-bazel@0.18.0
with:
output-base: /mnt/.bazel
bazelisk-cache: true
disk-cache: ${{ github.workflow }}-${{ matrix.bazel-config }}-tests
repository-cache: true
external-cache: true
- name: Allow linux-sandbox
uses: ./.github/actions/unblock_user_namespace_for_linux_sandbox
- name: Install QEMU bridge prerequisites
if: matrix.bazel-config == 'x86_64-qnx'
run: |
sudo apt-get update
sudo apt-get install -y bridge-utils qemu-system-x86 iproute2 tcpdump libcap2-bin
- name: Enable KVM access
if: matrix.bazel-config == 'x86_64-qnx'
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
ls -la /dev/kvm
- name: Setup QEMU bridge network
if: matrix.bazel-config == 'x86_64-qnx'
run: |
sudo ./deployment/qemu/setup_bridge.sh setup
- name: Bazel test
run: |
bazel test --config ${{ matrix.bazel-config }} --test_output=all //tests/...
48 changes: 46 additions & 2 deletions MODULE.bazel
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# *******************************************************************************
# Copyright (c) 2025 Contributors to the Eclipse Foundation
# Copyright (c) 2026 Contributors to the Eclipse Foundation
#
# See the NOTICE file(s) distributed with this work for additional
# information regarding copyright ownership.
Expand Down Expand Up @@ -62,13 +62,26 @@ use_repo(pip, "someip_pip")
bazel_dep(name = "googletest", version = "1.17.0", dev_dependency = True)
bazel_dep(name = "google_benchmark", version = "1.9.4", dev_dependency = True)

# Opened problem report at: https://github.com/eclipse-score/itf/issues/60
bazel_dep(name = "score_itf", version = "0.1.0")
git_override(
module_name = "score_itf",
commit = "e994cb6", # Main branch with simplified QEMU plugin
patch_strip = 1,
patches = ["//third_party:score_itf_oci_conflict.patch"],
remote = "https://github.com/eclipse-score/itf.git",
)

# ============================================================================
# Build System Rules
# ============================================================================
bazel_dep(name = "rules_cc", version = "0.2.14")
bazel_dep(name = "rules_rust", version = "0.63.0")
bazel_dep(name = "rules_pkg", version = "1.1.0")

# Required by score_toolchains_qnx qnx_ifs rule for tar extraction
bazel_dep(name = "tar.bzl", version = "0.7.0")

# Platforms: Standard constraint values and platform definitions
# Required for select() expressions that use @platforms//cpu:* and @platforms//os:*
bazel_dep(name = "platforms", version = "1.0.0")
Expand Down Expand Up @@ -140,8 +153,30 @@ register_toolchains(
"@score_gcc_aarch64_toolchain//:all",
"@score_qcc_x86_64_toolchain//:all",
"@score_qcc_aarch64_toolchain//:all",
"@toolchains_qnx_ifs//:all",
dev_dependency = True,
)

# ============================================================================
# QNX IFS Image Toolchain (for building QEMU filesystem images via mkifs)
# ============================================================================
bazel_dep(name = "score_toolchains_qnx", version = "0.0.7", dev_dependency = True)

toolchains_qnx = use_extension(
"@score_toolchains_qnx//:extensions.bzl",
"toolchains_qnx",
dev_dependency = True,
)
toolchains_qnx.sdp(
sha256 = "f2e0cb21c6baddbcb65f6a70610ce498e7685de8ea2e0f1648f01b327f6bac63",
strip_prefix = "installation",
url = "https://www.qnx.com/download/download/79858/installation.tgz",
)
use_repo(toolchains_qnx, "toolchains_qnx_ifs")
# register_toolchains(
# "@toolchains_qnx_ifs//:ifs_x86_64",
# dev_dependency = True,
# )

# ============================================================================
# LLVM C/C++ Toolchain Configuration
Expand Down Expand Up @@ -172,7 +207,7 @@ register_toolchains(
# ============================================================================
# Tooling & Development
# ============================================================================
bazel_dep(name = "score_tooling", version = "1.0.4", dev_dependency = True)
bazel_dep(name = "score_tooling", version = "1.1.2", dev_dependency = True)
bazel_dep(name = "aspect_rules_lint", version = "1.10.2", dev_dependency = True)
bazel_dep(name = "buildifier_prebuilt", version = "8.2.0.2", dev_dependency = True)

Expand All @@ -186,6 +221,15 @@ bazel_dep(name = "score_docs_as_code", version = "2.3.0", dev_dependency = True)
# ============================================================================
bazel_dep(name = "score_communication", version = "0.1.2")

# On aarch64 (ARM), C's char is unsigned (u8)
# Fixed upstream on main by commit b9efce9702d108fd63be806738db50c14d354302
# Opened problem report at: https://github.com/eclipse-score/communication/issues/172
single_version_override(
module_name = "score_communication",
patch_strip = 1,
patches = ["//:third_party/score_communication-cchar.patch"],
)

# ============================================================================
# Base Libraries
# ============================================================================
Expand Down
32 changes: 13 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

# SOME/IP Gateway

The gateway is divided into a gateway daemon (gatewayd) which contains the network-independent logic (payload serialization, etc.) and the SOME/IP daemon (someipd) which binds to the concrete SOME/IP stack.
Expand Down Expand Up @@ -41,42 +40,37 @@ bazel run //examples/car_window_sim:car_window_controller
If you type `open` or `close` the command will be sent via network.


### Dockerized integration test POC
### QEMU x86_64 - based integration test and unit tests

For integration tests where the communication between two QEMU instances is required, a custom implementation is used to start and manage the QEMU instances within the test logic. This is because ITF does not support starting multiple QEMU instances in parallel yet.

For integration tests, a docker based approach was taken.
As a proof of concept `docker compose` can be used to build, setup and run the containers.
In the future a pytest based setup can be implemented to orchestrate the containers.
For the QEMU QNX x864 image to run on host please run the script deployment/qemu/setup_bridge.sh with sudo privileges to setup the required network bridge and tap interfaces.
It is stronly recommended to run all tests with `--nocache_test_results` which is the best way on development cycles to ensure you are always running the latest version of the tests and not accidentally running cached results.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
It is stronly recommended to run all tests with `--nocache_test_results` which is the best way on development cycles to ensure you are always running the latest version of the tests and not accidentally running cached results.
It is recommended to run all tests with `--nocache_test_results` to ensure you are always running the latest version of the tests and not accidentally seeing cached results.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated


Build the docker containers:
Tu run all tests (will take around 2 minutes)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Tu run all tests (will take around 2 minutes)
To run all tests (will take around 2 minutes):

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated


```sh
docker compose --project-directory tests/integration/docker_setup/ build
bazel test //tests/... --test_output=all --nocache_test_results --config=x86_64-qnx
```

Start up the containers:
For Integration SOMEIP Service Discovery tests:

```sh
docker compose --project-directory tests/integration/docker_setup/ up
bazel test //tests/integration/... --test_output=all --config=x86_64-qnx
```

Those containers are pre-configured (IP adresses, multicast route, ...).
The someipd-1 container already starts up the `gatewayd` and the `someipd`.

In Wireshark the network traffic can be seen by capturing on `any` with `ip.addr== 192.168.87.2 || ip.addr ==192.168.87.3`.

On the client side, start up the `sample_client` in another shell:
Run a specific integration test `test_negative_only_qemu1_with_services` for SOMEIP Service Discovery test suite:

```sh
docker exec -it --env VSOMEIP_CONFIGURATION=/home/source/tests/integration/sample_client/vsomeip.json docker_setup-client-1 /home/source/bazel-bin/tests/integration/sample_client/sample_client
bazel test //tests/integration:test_someip_sd --test_output=all --config=x86_64-qnx --test_arg='-k' --test_arg='test_negative_only_qemu1_with_services'
```

Finally start the benchmark on the someipd-1 container in a third shell:
To run the QNX tests using dev containers please execute the shell command:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is only needed in devcontainer or also when running locally?
And why don't we add it to the devcontainer file so that it gets executed automatically? Is there a negative impact?

Copy link
Copy Markdown
Contributor Author

@TimofteBogdan1900 TimofteBogdan1900 Mar 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

First question : is needed independent if its host or docker containers .
Second question:
Done


```sh
docker exec -it docker_setup-someipd-1 /home/source/bazel-bin/tests/performance_benchmarks/ipc_benchmarks
sudo deployment/qemu/setup_bridge.sh
```


## 📝 Configuration

### Gatewayd Config Schema Validation
Expand Down
Loading
Loading