This workspace integrates multiple Eclipse S-CORE modules (baselibs, communication, persistency, orchestrator, etc.) to validate cross-repository builds and detect integration issues early in the development cycle.
The reference integration workspace serves as a unified Bazel build environment for:
- Validating cross-module dependency graphs and boundary issues
- Testing toolchain and platform support (Linux x86_64, QNX x86_64, Elektrobit corbos Linux aarch64, Red Hat AutoSD)
- Running Feature Integration Tests (FIT) and Integration Test Framework (ITF) tests
- Preparing for release validation and integration workflows
For additional documentation covering repository workflows and platform-specific details, see the docs/ directory.
Install required system packages before building or running anything in this repository:
sudo apt-get update
sudo apt-get install -y protobuf-compiler libclang-dev lcov qemu-system-x86For Docker, follow the official Docker Engine install guide.
Simply run:
./score_starterYou will be guided interactively through available integrations, build options, and examples to run.
Use the interactive helper or Bazel to run showcase binaries. Examples:
# Interactive helper
./score_starter
# Run a CLI showcase (example target, may vary by workspace state)
bazel run //showcases/cli:cli -- --helpSee showcases/cli/README.md for CLI configuration and examples.
The images/qnx_aarch64 image packages all S-CORE showcases into a bootable QNX 8.0 IFS (Image File System) for AArch64 targets. It can be run in QEMU for local development and testing, or deployed to a Raspberry Pi 4/5 for real hardware validation.
- QNX SDP 8.0.0 — a licensed copy of the QNX Software Development Platform is required for cross-compilation. See the QNX SDP product page.
- For RPi hardware: a Raspberry Pi (4 or later), microSD card, and the QNX Raspberry Pi BSP — consult the BSP documentation for model-specific support and requirements.
Cross-compile all showcases and assemble the IFS image:
bazel build --config=qnx-aarch64 //images/qnx_aarch64:imageThe built IFS image is written to:
bazel-bin/images/qnx_aarch64/build/init
Before deploying to hardware, validate the image in QEMU:
bazel run --config=qnx-aarch64 //images/qnx_aarch64:runSSH into the running QEMU instance (no password required):
ssh -p 2222 root@localhostThe showcases CLI starts automatically on boot. You can also launch it manually:
/showcases/bin/cliNote
The default images/qnx_aarch64 image uses startup-virt, which is suitable for QEMU. Deploying to real RPi hardware requires replacing this with the board-specific startup binary from the QNX Raspberry Pi BSP. See the TODO comment in images/qnx_aarch64/build/init.build.
General steps to create a bootable QNX SD card for Raspberry Pi:
-
Obtain the QNX Raspberry Pi BSP from BlackBerry QNX and follow its Getting Started guide to install it under your QNX SDP.
-
Replace the startup binary in
images/qnx_aarch64/build/init.build: substitutestartup-virtwith the RPi-specific startup binary provided by the BSP (consult the BSP documentation for the correct binary name for your RPi model). -
Rebuild the image (see Build the QNX aarch64 image above).
-
Prepare the SD card following the QNX BSP instructions. This typically involves creating a boot partition and copying the QNX IFS image to it:
# Copy the IFS image to the SD card boot partition (exact path depends on your BSP layout) cp bazel-bin/images/qnx_aarch64/build/init /media/$USER/boot/qnx-image.ifs sync && umount /media/$USER/boot
-
Insert the SD card into the RPi and power it on. QNX boots and starts all services defined in
images/qnx_aarch64/configs/startup.sh.
Once QNX is running on the RPi:
-
Find the RPi IP address — the system acquires an address via DHCP on the
vtnet0interface at startup (configured inconfigs/network_setup_dhcp.sh). Check your router's DHCP table or connect a serial console to read the address from the boot log. -
SSH into the RPi (root, no password — see
configs/sshd_config):ssh root@<RPi_IP>
-
Showcases are pre-loaded in
/showcases/bin/. The interactive CLI is started automatically on boot (seeconfigs/startup.sh). Re-launch it at any time:/showcases/bin/cli
-
Run a specific showcase by following the CLI prompts, or invoke a binary directly. For example, to run the lifecycle management example (from
showcases/simple_lifecycle):/showcases/bin/launch_manager
-
View system logs:
slog2info
Run Feature Integration Tests (FIT) and Integration Test Framework (ITF) with Bazel. Common examples:
# Run all FIT tests (Rust + C++)
bazel test --config=linux-x86_64 //feature_integration_tests/test_cases:fit --test_output=streamed
# Run only Rust scenarios listing
bazel run //feature_integration_tests/test_scenarios/rust:rust_test_scenarios -- --list-scenarios
# Run ITF tests on Docker (Linux)
bazel test --config=linux-x86_64 //feature_integration_tests/itf --test_output=streamed
# Run ITF tests on QNX (uses the itf-qnx-x86_64 test config)
bazel test --config=itf-qnx-x86_64 //feature_integration_tests/itf --test_output=streamedNotes:
- Use
--config=<name>to select the correct toolchain/platform (supported configs for tests:linux-x86_64,qnx-x86_64). See.bazelrcfor all available configs. - For streaming test output and real-time logs, use
--test_output=streamedor--test_output=all.
Intention for each folder is described below.
Common Bazel configurations and macros used across the workspace:
- Toolchain setups (GCC, Rust, QNX)
- S-CORE module dependency versions
- Bazel extensions and bundling macros
Feature Integration Tests and test scenarios:
test_cases/: Python test orchestration and fixturestest_scenarios/: Rust and C++ scenario implementationsitf/: Integration Test Framework (QEMU/Docker-based platform tests)configs/: DLT, QEMU, and target-specific configurations
Eclipse S-CORE demonstration applications and examples:
cli/: Interactive CLI tool for running examples on deployed systemsstandalone/: Standalone example binaries (communication, persistence, etc.)orchestration_persistency/: Multi-module orchestration examplessimple_lifecycle/: Basic lifecycle management examples
Configuration for CLI autodiscovery is in name.score.json files; see showcases/cli/README.md for details.
Platform-specific target images bundling S-CORE artifacts and showcases:
linux_x86_64/: Linux x86_64 Docker imageqnx_x86_64/: QNX x86_64 QEMU imageqnx_aarch64/: QNX 8.0 aarch64 image — QEMU or Raspberry Pi 4/5 (see Build and deploy showcases on Raspberry Pi)ebclfsa_aarch64/: Elektrobit corbos Linux for Safety Applications (aarch64) (see images/ebclfsa_aarch64/README.md)autosd/: Red Hat AutoSD x86_64
Thin abstraction layers for Docker and QEMU execution:
- Centralized logic for spawning and interacting with target environments
- Reusable across multiple image definitions
For documentation covering repository workflows, testing frameworks, and platform-specific details, see the docs/ directory and these entry points:
- Feature Integration Tests — FIT and ITF test framework usage
- CLI Documentation — CLI tool configuration and usage
- Platform-Specific Guides:
To generate HTML documentation for all integrated modules:
bazel run //:docs_combo_experimentalIntegration and deployment platforms for S-CORE:
- QNX x86_64 — QNX RTOS integration (QEMU-based testing)
- QNX aarch64 (RPi) — QNX 8.0 on Raspberry Pi 4/5 or QEMU aarch64; see Build and deploy showcases on Raspberry Pi
- Elektrobit corbos Linux for Safety Applications (aarch64) — Safety-critical automotive Linux
- Red Hat AutoSD (x86_64) — Automotive system development
- Linux x86_64 — Standard Linux development and testing (Docker-based)
For cross-module development, you can obtain a complete S-CORE workspace—a local git checkout of all modules pinned in known_good.json on specific branches/commits—integrated into a single Bazel build.
This enables:
- Cross-module development and debugging
- Testing changes across multiple modules simultaneously
- Reproducible builds with pinned versions
Note
The S-CORE devcontainer integrated in this repository pre-installs workspace managers and generates required metadata.
Manual setup is also possible; see .devcontainer/prepare_workspace.sh for the setup script.
-
Switch to local path overrides:
Use the VS Code Task (
Terminal→Run Task...): "Switch Bazel modules tolocal_path_overrides"Command line:
python3 scripts/known_good/update_module_from_known_good.py --override-type local_path
To revert to git overrides:
python3 scripts/known_good/update_module_from_known_good.py --override-type git
-
Update workspace metadata from known good:
Use the VS Code Task: "Update workspace metadata from known good"
Command line:
python3 scripts/known_good/known_good_to_workspace_metadata.py
-
Clone all modules:
Use the VS Code Task: "Gita: Generate workspace"
Command line (using gita):
gita clone --preserve-path --from-file .gita-workspace.csv
Modules are cloned into subdirectories prefixed with score_ (e.g., score_persistency/, score_communication/).
When running Bazel, it will use these local working copies, and your changes will be immediately reflected in the next build.
For a comprehensive list of known issues, limitations, and troubleshooting guidance, see the docs/ directory.
Module: score/mw/com/requirements
Integration issues when building from external repository:
- Label inconsistency: Some
BUILDfiles use@//third_partyinstead of//third_party(repository-qualified vs. local labels). Should standardize on local labels. - Outdated path reference:
runtime_test.cpp:get_pathchecks for obsoletesafe_posix_platforminstead of the current module path structure.
To enable VS Code Rust analyzer support:
scripts/generate_rust_analyzer_support.shThis generates the necessary Rust analyzer configuration for the workspace.
Internal tooling scripts are currently under development to provide a unified interface for repository operations.
For detailed documentation, see scripts/tooling/README.md.