{"id":47795058,"url":"https://github.com/eclipse-score/ferrocene_toolchain_builder","last_synced_at":"2026-04-03T16:13:56.943Z","repository":{"id":329143958,"uuid":"1116925382","full_name":"eclipse-score/ferrocene_toolchain_builder","owner":"eclipse-score","description":"Builder for Ferrocene artifacts","archived":false,"fork":false,"pushed_at":"2026-03-12T15:11:20.000Z","size":1182,"stargazers_count":0,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-12T21:21:39.980Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eclipse-score.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-15T15:20:14.000Z","updated_at":"2026-03-12T15:11:24.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/eclipse-score/ferrocene_toolchain_builder","commit_stats":null,"previous_names":["eclipse-score/ferrocene_toolchain_builder"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/eclipse-score/ferrocene_toolchain_builder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-score%2Fferrocene_toolchain_builder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-score%2Fferrocene_toolchain_builder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-score%2Fferrocene_toolchain_builder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-score%2Fferrocene_toolchain_builder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eclipse-score","download_url":"https://codeload.github.com/eclipse-score/ferrocene_toolchain_builder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-score%2Fferrocene_toolchain_builder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31362716,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T15:19:21.178Z","status":"ssl_error","status_checked_at":"2026-04-03T15:19:20.670Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-03T16:13:55.813Z","updated_at":"2026-04-03T16:13:56.934Z","avatar_url":"https://github.com/eclipse-score.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# score_ferrocene_builder\n\nThis repository builds the [ferrocene](https://github.com/ferrocene/ferrocene) compiler from a specific commit and packages the resulting install tree as a tarball (suitable for use as a pinned toolchain archive in other build systems).\n\n## Prerequisites\n- `git`, `python3`, and [`uv`](https://github.com/astral-sh/uv) on `PATH` (Ferrocene bootstrap requires it).\n- A toolchain capable of building Ferrocene/Rust (LLVM + common C/C++ build deps).\n- Network access to `https://github.com/ferrocene/ferrocene.git` (or a mirror you provide).\n- If building QNX targets: a working QNX SDP + license and `source /path/to/qnxsdp-env.sh`.\n- If building `aarch64-unknown-linux-gnu`: `aarch64-linux-gnu-gcc` (Debian/Ubuntu: `gcc-aarch64-linux-gnu g++-aarch64-linux-gnu`).\n\n## Build and Package Ferrocene\n```bash\n./scripts/build_ferrocene.sh --sha \u003ccommit\u003e \\\n  --target x86_64-unknown-linux-gnu \\\n  --exec x86_64-unknown-linux-gnu\n```\n\nOutputs are written to `out/ferrocene/ferrocene-\u003csha\u003e-\u003ctarget\u003e.tar.gz` with a matching `.sha256` file. Host/exec and target triples can be customized, as can the repo URL via environment or flags (see `--help`).\n\nThe script auto-generates `\u003csrc\u003e/bootstrap.toml` (override with `--bootstrap` or `FERROCENE_BOOTSTRAP_TOML`) with:\n- `change-id = \"ignore\"`\n- `profile = \"dist\"`\n- `[llvm] download-ci-llvm = false`\n- `[gcc] download-ci-gcc = false`\n- `[rust] download-rustc = false`\n\nThis avoids Ferrocene’s CI S3 downloads (which require AWS credentials/CLI). If you prefer CI artifacts, remove or adjust those settings and ensure `aws` is available and configured.\n\nBy default the core toolchain packages plus `miri` are built/installed (dist: `rustc rust-std cargo rustfmt clippy miri`; install: `rustc library/std cargo rustfmt clippy miri`) to skip doc builds that can fail on missing mdbook preprocessors or path issues. Override with `--dist-packages \"\u003cspace-separated list\u003e\"` / `FERROCENE_DIST_PACKAGES` and `--install-packages \"\u003cspace-separated list\u003e\"` / `FERROCENE_INSTALL_PACKAGES`.\n\nGit checkout uses a shallow clone by default (`--git-depth 1` / `FERROCENE_GIT_DEPTH=1`). Set `--full` or `--git-depth 0` if you need full history.\n\nInstall step note: the script sets `DESTDIR=out/ferrocene/install` when running `x.py install` so no privileged paths are touched; the installed tree under that DESTDIR is what gets tarred.\n\n## Build environment and coverage\n- Toolchains are rebuilt on Ferrocene’s Ubuntu 20.04 CI image (baseline glibc); see `ferrocene/ci/docker-images/ubuntu-20/Dockerfile` in the upstream Ferrocene repo.\n- Profiling is enabled via `config.profiler.toml` to include `libprofiler_builtins` in the sysroot.\n- QNX targets are currently built without profiling due to compiler-rt profiler runtime issues; use `config.toml` for QNX until that is fixed.\n- Coverage helpers (`symbol-report`, `blanket`) are built via `scripts/build_coverage_tools.sh`; a runnable demo is in `examples/coverage-demo/`.\n- Note: `blanket` is a bootstrap tool and is only built in stage1; when using `--stage 2` to match `symbol-report` with the stage2 toolchain, the script will fall back to the stage1 `blanket`.\n\n### Build commands (per-target archives)\nBuild Linux + Ferrocene subset targets with profiling enabled (produces one tarball per target under `out/ferrocene-ubuntu20-prof/`):\n```bash\ndocker run --rm -it \\\n  -e SHA=\"779fbed05ae9e9fe2a04137929d99cc9b3d516fd\" \\\n  -v \"/home/dcalavrezo/sources/ferrocene_builder:/work\" -w /work \\\n  ferrocene-ubuntu20 bash -lc '\n    set -euo pipefail\n    sudo apt-get update\n    sudo apt-get install -y --no-install-recommends pkg-config\n\n    export FERROCENE_BOOTSTRAP_TOML=./config.profiler.toml\n    export FERROCENE_SRC_DIR=/work/.cache/ferrocene-src-ubuntu20-prof\n    export FERROCENE_OUT_DIR=/work/out/ferrocene-ubuntu20-prof\n\n    for target in \\\n      aarch64-unknown-linux-gnu \\\n      x86_64-unknown-linux-gnu \\\n      aarch64-unknown-ferrocene.subset \\\n      x86_64-unknown-ferrocene.subset\n    do\n      ./scripts/build_ferrocene.sh --sha \"$SHA\" --target \"$target\" --exec x86_64-unknown-linux-gnu\n    done\n\n    # Host tools only need to be built once\n    ./scripts/build_coverage_tools.sh --sha \"$SHA\" --host x86_64-unknown-linux-gnu --build-dir /work/.cache/ferrocene-src-ubuntu20-prof/build\n  '\n```\n\nThat will emit four separate archives under `out/ferrocene-ubuntu20-prof/`, each named `ferrocene-\u003csha\u003e-\u003ctarget\u003e.tar.gz`.\n\n### Ubuntu 24 variant\nFerrocene also ships `ferrocene/ci/docker-images/ubuntu-24/Dockerfile`. Unlike the Ubuntu 20 image, the upstream Ubuntu 24 image does not install the AArch64 GNU cross toolchain, so Linux + subset builds that include `aarch64-*` targets need a few extra packages in the container.\n\nBuild the local image from the cached Ferrocene checkout:\n```bash\ndocker build --tag ferrocene-ubuntu24 \\\n  --file .cache/ferrocene-src-ubuntu20-prof/ferrocene/ci/docker-images/ubuntu-24/Dockerfile \\\n  .cache/ferrocene-src-ubuntu20-prof\n```\n\nThen run the Linux + Ferrocene subset build with a separate Ubuntu 24 cache/output tree:\n```bash\ndocker run --rm -it \\\n  -e SHA=\"779fbed05ae9e9fe2a04137929d99cc9b3d516fd\" \\\n  -v \"/home/dcalavrezo/sources/ferrocene_builder:/work\" -w /work \\\n  ferrocene-ubuntu24 bash -lc '\n    set -euo pipefail\n    sudo apt-get update\n    sudo apt-get install -y --no-install-recommends \\\n      pkg-config \\\n      gcc-aarch64-linux-gnu \\\n      g++-aarch64-linux-gnu \\\n      binutils-aarch64-linux-gnu \\\n      libc6-dev-arm64-cross\n\n    export FERROCENE_BOOTSTRAP_TOML=./config.profiler.toml\n    export FERROCENE_SRC_DIR=/work/.cache/ferrocene-src-ubuntu24-prof\n    export FERROCENE_OUT_DIR=/work/out/ferrocene-ubuntu24-prof\n\n    for target in \\\n      aarch64-unknown-linux-gnu \\\n      x86_64-unknown-linux-gnu \\\n      aarch64-unknown-ferrocene.subset \\\n      x86_64-unknown-ferrocene.subset\n    do\n      ./scripts/build_ferrocene.sh --sha \"$SHA\" --target \"$target\" --exec x86_64-unknown-linux-gnu\n    done\n  '\n```\n\nIf you only need x86_64 outputs, drop the `aarch64-*` targets and the extra AArch64 cross packages. Coverage tools and `rust-src` can be rebuilt the same way as above, just switching to `ferrocene-ubuntu24` and the `ubuntu24` cache/output directories. For QNX, reuse the QNX recipe below with `ferrocene-ubuntu24`, `FERROCENE_SRC_DIR=/work/.cache/ferrocene-src-ubuntu24-qnx`, `FERROCENE_OUT_DIR=/work/out/ferrocene-ubuntu24-qnx`, and `pkg-config`; the Ubuntu 24 image already includes `libssl-dev`.\n\nIf you want `symbol-report` to match the stage2 toolchain, build the coverage tools at stage2 (the script will reuse the stage1 `blanket`):\n```bash\ndocker run --rm -it \\\n  -e SHA=\"779fbed05ae9e9fe2a04137929d99cc9b3d516fd\" \\\n  -v \"/home/dcalavrezo/sources/ferrocene_builder:/work\" -w /work \\\n  ferrocene-ubuntu20 bash -lc '\n    set -euo pipefail\n    sudo apt-get update\n    sudo apt-get install -y --no-install-recommends pkg-config\n\n    export FERROCENE_BOOTSTRAP_TOML=./config.profiler.toml\n    export FERROCENE_SRC_DIR=/work/.cache/ferrocene-src-ubuntu20-prof\n    export FERROCENE_OUT_DIR=/work/out/ferrocene-ubuntu20-prof\n\n    for target in \\\n      aarch64-unknown-linux-gnu \\\n      x86_64-unknown-linux-gnu \\\n      aarch64-unknown-ferrocene.subset \\\n      x86_64-unknown-ferrocene.subset\n    do\n      ./scripts/build_ferrocene.sh --sha \"$SHA\" --target \"$target\" --exec x86_64-unknown-linux-gnu\n    done\n\n    # Host tools only need to be built once\n    ./scripts/build_coverage_tools.sh --sha \"$SHA\" --host x86_64-unknown-linux-gnu \\\n      --build-dir /work/.cache/ferrocene-src-ubuntu20-prof/build --stage 2\n  '\n```\n\nBuild QNX targets without profiling (per-target archives under `out/ferrocene-ubuntu20-qnx/`):\n```bash\nmkdir -p .qnx-config\nexport QNX_SDP=\"$HOME/qnx800\"\nexport QNX_LICENSE=\"$HOME/.qnx/license/licenses\"\n\ndocker run --rm -it \\\n  -e SHA=\"779fbed05ae9e9fe2a04137929d99cc9b3d516fd\" \\\n  -v \"$PWD:/work\" -w /work \\\n  -v \"$QNX_SDP:/opt/qnx:ro\" \\\n  -v \"$QNX_LICENSE:/opt/qnx-license/licenses:ro\" \\\n  -v \"$PWD/.qnx-config:/qnx-config\" \\\n  ferrocene-ubuntu20 bash -lc '\n    set -euo pipefail\n    sudo apt-get update\n    sudo apt-get install -y --no-install-recommends pkg-config libssl-dev\n\n    export QNX_HOST=/opt/qnx/host/linux/x86_64\n    export QNX_TARGET=/opt/qnx/target/qnx\n    export QNX_CONFIGURATION_EXCLUSIVE=/qnx-config\n    export QNX_SHARED_LICENSE_FILE=/opt/qnx-license/licenses\n    export PATH=\"$QNX_HOST/usr/bin:$PATH\"\n\n    export FERROCENE_BOOTSTRAP_TOML=./config.toml\n    export FERROCENE_SRC_DIR=/work/.cache/ferrocene-src-ubuntu20-qnx\n    export FERROCENE_OUT_DIR=/work/out/ferrocene-ubuntu20-qnx\n\n    for target in aarch64-unknown-nto-qnx800 x86_64-pc-nto-qnx800; do\n      ./scripts/build_ferrocene.sh --sha \"$SHA\" --target \"$target\" --exec x86_64-unknown-linux-gnu\n    done\n  '\n```\n\nWhen you’re ready to build QNX without profiling (same image), do the same pattern but with QNX env and `config.toml`:\n```bash\nmkdir -p .qnx-config\nexport QNX_SDP=\"$HOME/qnx800\"\nexport QNX_LICENSE=\"$HOME/.qnx/license/licenses\"\n\ndocker run --rm -it \\\n  -e SHA=\"779fbed05ae9e9fe2a04137929d99cc9b3d516fd\" \\\n  -v \"$PWD:/work\" -w /work \\\n  -v \"$QNX_SDP:/opt/qnx:ro\" \\\n  -v \"$QNX_LICENSE:/opt/qnx-license/licenses:ro\" \\\n  -v \"$PWD/.qnx-config:/qnx-config\" \\\n  ferrocene-ubuntu20 bash -lc '\n    set -euo pipefail\n    sudo apt-get update\n    sudo apt-get install -y --no-install-recommends pkg-config libssl-dev\n\n    export QNX_HOST=/opt/qnx/host/linux/x86_64\n    export QNX_TARGET=/opt/qnx/target/qnx\n    export QNX_CONFIGURATION_EXCLUSIVE=/qnx-config\n    export QNX_SHARED_LICENSE_FILE=/opt/qnx-license/licenses\n    export PATH=\"$QNX_HOST/usr/bin:$PATH\"\n\n    export FERROCENE_BOOTSTRAP_TOML=./config.toml\n    export FERROCENE_SRC_DIR=/work/.cache/ferrocene-src-ubuntu20-qnx\n    export FERROCENE_OUT_DIR=/work/out/ferrocene-ubuntu20-qnx\n\n    for target in aarch64-unknown-nto-qnx800 x86_64-pc-nto-qnx800; do\n      ./scripts/build_ferrocene.sh --sha \"$SHA\" --target \"$target\" --exec x86_64-unknown-linux-gnu\n    done\n  '\n```\n\n### Standalone `rust-src` for Miri / Bazel\n`miri` and `cargo-miri` are packaged into the host toolchain archives, but `cargo miri setup` also needs the Rust library sources. Those sources are target-independent, so publish them once as a separate asset instead of copying them into every target archive.\n\nTo build a standalone `rust-src-\u003csha\u003e.tar.gz` while reusing the existing Linux profiling checkout cache:\n```bash\nFERROCENE_SRC_DIR=./.cache/ferrocene-src-ubuntu20-prof \\\nFERROCENE_OUT_DIR=./out/ferrocene \\\n  ./scripts/build_rust_src.sh --sha 779fbed05ae9e9fe2a04137929d99cc9b3d516fd\n```\n\nThat emits:\n- `out/ferrocene/rust-src-\u003csha\u003e.tar.gz`\n- `out/ferrocene/rust-src-\u003csha\u003e.tar.gz.sha256`\n\nThe archive unpacks to a source tree root containing:\n- `library/`\n- `src/llvm-project/libunwind/`\n- `ferrocene/library/libc/`\n- `ferrocene/library/backtrace-rs/`\n\nFor Bazel, consume the host toolchain archive and the standalone `rust-src` archive together. In the Miri action:\n- expose both archives as inputs\n- set `MIRI_LIB_SRC` to the extracted `rust-src` `library` directory\n- set `MIRI_SYSROOT` to a writable scratch directory\n\nExample environment for a Bazel action:\n```bash\nexport PATH=\"${TOOLCHAIN_ROOT}/bin:$PATH\"\nexport LD_LIBRARY_PATH=\"${TOOLCHAIN_ROOT}/lib\"\nexport MIRI_LIB_SRC=\"${RUST_SRC_ROOT}/library\"\nexport MIRI_SYSROOT=\"${TMPDIR}/miri-sysroot\"\n\ncargo miri setup --target x86_64-unknown-linux-gnu\ncargo miri test --target x86_64-unknown-linux-gnu\n```\n\n`cargo-miri` validates that `MIRI_LIB_SRC` ends in `library`, so point it at the extracted `library/` directory, not the archive root.\n\n### Prebuilt Miri sysroots\nFor the direct `miri` driver and Bazel integration, it is better to prebuild the Miri sysroot once and ship it as a release artifact instead of running `cargo-miri setup` inside Bazel fetches or actions.\n\nBuild the supported Ubuntu 24.04 sysroots from the released host toolchain and standalone `rust-src` asset:\n```bash\n./scripts/build_miri_sysroots.sh --sha 779fbed05ae9e9fe2a04137929d99cc9b3d516fd --offline\n```\n\nDefault supported targets:\n- `x86_64-unknown-linux-gnu`\n- `aarch64-unknown-linux-gnu`\n- `x86_64-pc-nto-qnx800`\n- `aarch64-unknown-nto-qnx800`\n\nCurrent limitation:\n- `x86_64-unknown-ferrocene.subset` and `aarch64-unknown-ferrocene.subset` are not packaged because the std/sysroot build currently fails for those targets.\n\nPackage the successful sysroots as release assets:\n```bash\n./scripts/package_miri_sysroots.sh --sha 779fbed05ae9e9fe2a04137929d99cc9b3d516fd\n```\n\nThat emits one archive and one checksum file per successful target under `out/ferrocene-ubuntu24-prof/`:\n- `miri-sysroot-\u003csha\u003e-\u003ctarget\u003e.tar.gz`\n- `miri-sysroot-\u003csha\u003e-\u003ctarget\u003e.tar.gz.sha256`\n\nEach archive contains the prebuilt sysroot root for exactly one target:\n- `lib/rustlib/\u003ctarget\u003e/...`\n- `BUILD-INFO.txt`\n\nThese archives are target-specific, unlike `rust-src`.\n\n## Multi-target (Linux + QNX) build\nWhen passing a comma-separated target list, the script builds a single install tree containing the host tools and all requested target stdlibs, then emits one archive:\n- `out/ferrocene/ferrocene-\u003csha\u003e-\u003cexec\u003e-multi-\u003chash\u003e.tar.gz`\n- `out/ferrocene/ferrocene-\u003csha\u003e-\u003cexec\u003e-multi-\u003chash\u003e.targets.txt` (records the exact target list)\n\nFor QNX targets, make sure your environment is set up first:\n```bash\nsource /path/to/qnxsdp-env.sh\n```\n\nThen run the build with `config.toml` (generic bootstrap settings). `scripts/build_ferrocene.sh` will\nauto-configure QNX builds by exporting per-target `CC_*`, `CFLAGS_*` (the `-V...` selector), and `AR_*`\nso `qcc` is invoked in the correct architecture mode:\n```bash\nSHA=779fbed05ae9e9fe2a04137929d99cc9b3d516fd\nTARGETS=\"x86_64-unknown-linux-gnu,aarch64-unknown-linux-gnu,x86_64-pc-nto-qnx800,aarch64-unknown-nto-qnx800,x86_64-unknown-ferrocene.subset\"\n\n## Multi-target (Linux + QNX) build\nWhen passing a comma-separated target list, the script builds a single install tree containing the host tools and all requested target stdlibs, then emits one archive:\n- `out/ferrocene/ferrocene-\u003csha\u003e-\u003cexec\u003e-multi-\u003chash\u003e.tar.gz`\n- `out/ferrocene/ferrocene-\u003csha\u003e-\u003cexec\u003e-multi-\u003chash\u003e.targets.txt` (records the exact target list)\n\nFor QNX targets, make sure your environment is set up first:\n```bash\nsource /path/to/qnxsdp-env.sh\n```\n\nThen run the build with `config.toml` (generic bootstrap settings). `scripts/build_ferrocene.sh` will\nauto-configure QNX builds by exporting per-target `CC_*`, `CFLAGS_*` (the `-V...` selector), and `AR_*`\nso `qcc` is invoked in the correct architecture mode:\n```bash\nSHA=779fbed05ae9e9fe2a04137929d99cc9b3d516fd\nTARGETS=\"x86_64-unknown-linux-gnu,aarch64-unknown-linux-gnu,x86_64-pc-nto-qnx800,aarch64-unknown-nto-qnx800,x86_64-unknown-ferrocene.subset\"\n\nFERROCENE_BOOTSTRAP_TOML=./config.toml \\\n  ./scripts/build_ferrocene.sh \\\n    --sha \"$SHA\" \\\n    --target \"$TARGETS\" \\\n    --exec x86_64-unknown-linux-gnu \\\n    --jobs \"$(nproc)\"\n```\n\n## QNX SDP Download Without Bazel\nIf you need QNX in CI without Bazel:\n- Option A: use the Python downloader (handles cookies/redirects):\n  ```bash\n  ./scripts/fetch_qnx_sdp.py https://www.qnx.com/download/download/79858/installation.tgz /tmp/installation.tgz\n  tar -C /opt -xzf /tmp/installation.tgz  # adjust path\n  ```\n- Option B: get the cookie headers and use curl (if redirects loop, prefer Option A):\n  ```bash\n  python3 scripts/qnx_credentials_helper.py \u003c\u003c\u003c'{\"uri\":\"https://www.qnx.com/download/download/79858/installation.tgz\"}' \u003e /tmp/qnx-headers.json\n  curl -L --fail -o /tmp/installation.tgz \\\n    -H \"Cookie: $(jq -r '.headers.Cookie[0]' /tmp/qnx-headers.json)\" \\\n    https://www.qnx.com/download/download/79858/installation.tgz\n  tar -C /opt -xzf /tmp/installation.tgz  # adjust path\n  ```\n- Set the license and env:\n  ```bash\n  mkdir -p /opt/score_qnx/license\n  echo \"$SCORE_QNX_LICENSE\" | base64 --decode \u003e /opt/score_qnx/license/licenses\n  export QNX_HOST=/opt/installation/host/linux/x86_64\n  export QNX_TARGET=/opt/installation/target/qnx\n  export QNX_CONFIGURATION_EXCLUSIVE=/var/tmp/.qnx\n  export QNX_SHARED_LICENSE_FILE=/opt/score_qnx/license/licenses\n  export PATH=\"$QNX_HOST/usr/bin:$PATH\"\n  ```\n- Provide a `config.toml` with all desired targets (Linux + QNX + subsets) and run `scripts/build_ferrocene.sh` with `FERROCENE_BOOTSTRAP_TOML=./config.toml`. The script will use the existing config file without overwriting it.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feclipse-score%2Fferrocene_toolchain_builder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feclipse-score%2Fferrocene_toolchain_builder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feclipse-score%2Fferrocene_toolchain_builder/lists"}