You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/explanation/03-build-infrastructure.md
+65Lines changed: 65 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -208,6 +208,71 @@ Rust already shows the same separation more explicitly. [eclipse-score/toolchain
208
208
- Shared toolchains need visible ownership and an upgrade cadence or repositories will drift again.
209
209
-**Biggest gap**: no cross-repository process clearly defines who owns toolchain baselines and how changes propagate.
210
210
211
+
### 3.3.5 QNX SDP Provisioning
212
+
213
+
*How the QNX Software Development Platform is obtained and made available to Bazel C++ builds.*
214
+
215
+
The QNX SDP — the compiler, headers, and libraries required for QNX cross-compilation — is a commercial artifact distributed separately from the toolchain configuration. Its provisioning path is distinct from the Bazel toolchain registration in `bazel_cpp_toolchains` and determines how reliably builds can acquire the SDP in CI and in local developer environments.
216
+
217
+
License on CI: A separate [`setup-qnx-sdp`](https://github.com/eclipse-score/cicd-actions) composite action handles license activation only; it does not fetch or unpack the SDP
218
+
219
+
License locally: License credentials are injected through environment variables.
220
+
221
+
#### Today
222
+
223
+
The SDP is downloaded as a tar archive from QNX.com via a hardcoded dependency URL in Bazel. Forks may overwrite this dependency.
224
+
225
+
```{mermaid}
226
+
flowchart LR
227
+
qnxcom(["QNX.com"])
228
+
sdp_tar["`QNX SDP
229
+
〈artefact: tar〉`"]
230
+
env_cfg(["Local Environment variables"])
231
+
license(["License"])
232
+
action_setup["`setup-qnx-sdp
233
+
(license only)`"]
234
+
bazel["Bazel build C++"]
235
+
236
+
qnxcom --> sdp_tar
237
+
sdp_tar -->|"hardcoded dependency URL"| bazel
238
+
action_setup --> license
239
+
env_cfg --> license
240
+
241
+
license -->|"activates license only"| bazel
242
+
```
243
+
244
+
The license and the SDP fetch are deliberately separate.
245
+
246
+
#### Soon (planned)
247
+
248
+
The target model does not rely on QMX.com, but rather uses the QNX CLI distributed with QNX Software Center to produce a local SDP. That SDP is then stored in bazel cache, on your local computer, in ci cache, on protected eclipse artefact storage, or on company-internal artefact storage — and Bazel receives a user-defined flag that tells it where to find the SDP. For local developer environments the intended invocation is:
249
+
250
+
```text
251
+
bazel run //:local_qnx_sdp -- --path=/opt/qnx_sdp
252
+
# or
253
+
local_qnx_sdp.sh --path=/opt/qnx_sdp
254
+
```
255
+
256
+
```{mermaid}
257
+
flowchart TD
258
+
qnx_sc(["QNX Software Center"])
259
+
qnx_cli["`QNX CLI
260
+
〈tool〉`"]
261
+
sdp_dir["`QNX SDP
262
+
〈artefact: directory tree〉`"]
263
+
art_store[("Artefact storage
264
+
eclipse · company-internal · local")]
265
+
bazel["Bazel build C++"]
266
+
267
+
qnx_sc -.-> qnx_cli
268
+
qnx_cli -.-> sdp_dir
269
+
sdp_dir -.-> art_store
270
+
art_store -.->|"user-defined flag"| bazel
271
+
```
272
+
273
+
The central unsolved problem in this model is how we can provide this SDP as a true bazel dependency to qnx-related builds, as it has a **non-deterministic SDP output**. So building the SDP on the fly produces a different archive hash on every invocation. Bazel treats a changed hash as a changed dependency, which invalidates the **entire** C++ build cache and forces a full recompilation of all downstream targets on every run. Until the SDP can be built deterministically using it as a bazel dependency is not practical.
274
+
275
+
211
276
## 3.4 Build Reproducibility & Evidence ⚪
212
277
213
278
*Ensuring builds are deterministic and produce trustworthy evidence from the same inputs.*
0 commit comments