-
Notifications
You must be signed in to change notification settings - Fork 10
added QNX SPD CLI support #57
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 9 commits
b8c4053
2ed81fc
d5a3928
f9d294c
91d7eb3
e8c1697
015b163
c82f1ae
14c868f
00650f6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,49 @@ | ||
| # ******************************************************************************* | ||
| # Copyright (c) 2025 Contributors to the Eclipse Foundation | ||
| # | ||
| # See the NOTICE file(s) distributed with this work for additional | ||
| # information regarding copyright ownership. | ||
| # | ||
| # This program and the accompanying materials are made available under the | ||
| # terms of the Apache License Version 2.0 which is available at | ||
| # https://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # SPDX-License-Identifier: Apache-2.0 | ||
| # ******************************************************************************* | ||
|
|
||
| # QNX SDP Distribution Build | ||
|
|
||
| load(":qnx_sdp.bzl", "qnx_sdp_distribution") | ||
|
|
||
| # Create the QNX SDP distribution from the patchset file | ||
| qnx_sdp_distribution( | ||
| name = "qnx_sdp", | ||
| patchset = "patchset-qnx803-virtio.plist", | ||
| qnxsoftwarecenter_clt = ":qnxsoftwarecenter_clt", | ||
| visibility = ["//visibility:public"], | ||
| ) | ||
|
|
||
| # Package the SDP as a tarball for distribution (optional) | ||
| genrule( | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We don't need |
||
| name = "qnx_sdp_tar", | ||
| srcs = [":qnx_sdp"], | ||
| outs = ["qnx803-sdp.tar.gz"], | ||
| cmd = "tar -czf $@ -C $$(dirname $(location :qnx_sdp)) $$(basename $(location :qnx_sdp))", | ||
| visibility = ["//visibility:public"], | ||
| ) | ||
|
|
||
| # Create a filegroup that references the output directory | ||
| filegroup( | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Where is this used? |
||
| name = "qnx_sdp_files", | ||
| srcs = [":qnx_sdp"], | ||
| visibility = ["//visibility:public"], | ||
| ) | ||
|
|
||
| # Local stub for qnxsoftwarecenter_clt so the package can be built inside this | ||
| # repository for testing. Replace with the real installer binary when integrating | ||
| # into a consuming workspace that provides @qnx_software_center. | ||
| sh_binary( | ||
| name = "qnxsoftwarecenter_clt", | ||
| srcs = ["qnxsoftwarecenter_clt.sh"], | ||
| visibility = ["//visibility:private"], | ||
| ) | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,26 @@ | ||
| # ******************************************************************************* | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why did you create module here? As far as I can see, we don't need this. |
||
| # Copyright (c) 2025 Contributors to the Eclipse Foundation | ||
| # | ||
| # See the NOTICE file(s) distributed with this work for additional | ||
| # information regarding copyright ownership. | ||
| # | ||
| # This program and the accompanying materials are made available under the | ||
| # terms of the Apache License Version 2.0 which is available at | ||
| # https://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # SPDX-License-Identifier: Apache-2.0 | ||
| # ******************************************************************************* | ||
|
|
||
| """QNX SDP Installer Module""" | ||
|
|
||
| module( | ||
| name = "qnx_sdp_installer", | ||
| version = "1.0.0", | ||
| ) | ||
|
|
||
| # Dependencies | ||
| bazel_dep(name = "bazel_skylib", version = "1.8.2") | ||
|
|
||
| # Register the QNX repositories | ||
| qnx_repos = use_extension("//:extensions.bzl", "qnx_repositories") | ||
| use_repo(qnx_repos, "qnx_installer", "qnx_software_center") | ||
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| # ******************************************************************************* | ||
| # Copyright (c) 2025 Contributors to the Eclipse Foundation | ||
| # | ||
| # See the NOTICE file(s) distributed with this work for additional | ||
| # information regarding copyright ownership. | ||
| # | ||
| # This program and the accompanying materials are made available under the | ||
| # terms of the Apache License Version 2.0 which is available at | ||
| # https://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # SPDX-License-Identifier: Apache-2.0 | ||
| # ******************************************************************************* | ||
|
|
||
| """Bazel module extension for QNX repositories.""" | ||
|
|
||
| load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file") | ||
| load("//:qnx_install.bzl", "qnx_software_center_repository") | ||
|
|
||
| def _qnx_repositories_impl(module_ctx): | ||
| """Implementation of the QNX repositories extension.""" | ||
|
|
||
| # Download the QNX installer | ||
| http_file( | ||
| name = "qnx_installer", | ||
|
nradakovic marked this conversation as resolved.
|
||
| url = "https://www.qnx.com/download/download/79441/qnx-setup-2.0.4-202501021438-linux.run", | ||
| executable = True, | ||
| downloaded_file_path = "qnx-setup-2.0.4-202501021438-linux.run", | ||
| ) | ||
|
|
||
| # Create the QNX Software Center repository | ||
| qnx_software_center_repository( | ||
| name = "qnx_software_center", | ||
| installer = "@qnx_installer//file:qnx-setup-2.0.4-202501021438-linux.run", | ||
| ) | ||
|
|
||
| qnx_repositories = module_extension( | ||
| implementation = _qnx_repositories_impl, | ||
| ) | ||
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,80 @@ | ||
| # ******************************************************************************* | ||
| # Copyright (c) 2025 Contributors to the Eclipse Foundation | ||
| # | ||
| # See the NOTICE file(s) distributed with this work for additional | ||
| # information regarding copyright ownership. | ||
| # | ||
| # This program and the accompanying materials are made available under the | ||
| # terms of the Apache License Version 2.0 which is available at | ||
| # https://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # SPDX-License-Identifier: Apache-2.0 | ||
| # ******************************************************************************* | ||
|
|
||
| """Repository rule to install QNX Software Center.""" | ||
|
|
||
| def _qnx_software_center_repository_impl(repository_ctx): | ||
| """Implementation of the QNX Software Center repository rule.""" | ||
|
|
||
| installer_label = repository_ctx.attr.installer | ||
| install_dir = repository_ctx.path("qnx_software_center") | ||
|
|
||
| # Check if QNX Software Center is already installed | ||
| qnxsoftwarecenter_clt = repository_ctx.path("qnxsoftwarecenter/qnxsoftwarecenter_clt") | ||
|
|
||
| if not qnxsoftwarecenter_clt.exists: | ||
| # Download/symlink the installer file | ||
| installer_path = repository_ctx.path(installer_label) | ||
|
|
||
| # Make installer executable | ||
| repository_ctx.execute(["chmod", "+x", str(installer_path)]) | ||
|
|
||
| # Run the installer | ||
| result = repository_ctx.execute( | ||
| [ | ||
| str(installer_path), | ||
| "--nox11", | ||
| "force-override disable-auto-start agree-to-license-terms", | ||
| "disable-auto-start", | ||
| "agree-to-license-terms", | ||
| ".", | ||
| ], | ||
| timeout = 300, # 5 minutes timeout | ||
| quiet = False, | ||
| ) | ||
|
|
||
| if result.return_code != 0: | ||
| fail("Failed to extract QNX Software Center: %s\nStderr: %s" % (result.stdout, result.stderr)) | ||
|
|
||
| # Create a BUILD file that exports the qnxsoftwarecenter_clt binary | ||
| # Note: The installer extracts to ./qnxsoftwarecenter (not qnx_software_center/qnxsoftwarecenter) | ||
| repository_ctx.file("BUILD", """ | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would consider having BUILD file set as resource rather than writing it within the rule. |
||
| exports_files([ | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You do not need this. Filegroup already exposes tool. |
||
| "qnxsoftwarecenter/qnxsoftwarecenter_clt", | ||
| ]) | ||
|
|
||
| filegroup( | ||
| name = "qnxsoftwarecenter_clt", | ||
| srcs = ["qnxsoftwarecenter/qnxsoftwarecenter_clt"], | ||
| visibility = ["//visibility:public"], | ||
| ) | ||
|
|
||
| filegroup( | ||
| name = "all", | ||
| srcs = glob(["qnxsoftwarecenter/**"]), | ||
| visibility = ["//visibility:public"], | ||
| ) | ||
| """) | ||
|
|
||
| qnx_software_center_repository = repository_rule( | ||
| implementation = _qnx_software_center_repository_impl, | ||
| attrs = { | ||
| "installer": attr.label( | ||
| allow_single_file = True, | ||
| mandatory = True, | ||
| doc = "The QNX installer file", | ||
| ), | ||
| }, | ||
| local = False, | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. isn't this option by default set? |
||
| doc = "Downloads and installs QNX Software Center", | ||
| ) | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,109 @@ | ||
| # ******************************************************************************* | ||
| # Copyright (c) 2025 Contributors to the Eclipse Foundation | ||
| # | ||
| # See the NOTICE file(s) distributed with this work for additional | ||
| # information regarding copyright ownership. | ||
| # | ||
| # This program and the accompanying materials are made available under the | ||
| # terms of the Apache License Version 2.0 which is available at | ||
| # https://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # SPDX-License-Identifier: Apache-2.0 | ||
| # ******************************************************************************* | ||
|
|
||
| """Rule to create a QNX SDP distribution from a patchset file.""" | ||
|
|
||
| def _qnx_sdp_distribution_impl(ctx): | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. why we need to run the command over the script? Why not directly via
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I didn't see at start what is done here. The script that is here, I would set it as resource and just pull it into the rule as tool dependency. |
||
| """Implementation of the QNX SDP distribution rule.""" | ||
|
|
||
| patchset = ctx.file.patchset | ||
| qnxsoftwarecenter_clt = ctx.executable.qnxsoftwarecenter_clt | ||
|
|
||
| # Output directory for the SDP distribution | ||
| output_dir = ctx.actions.declare_directory(ctx.attr.name) | ||
|
|
||
| # Create a script to run the qnxsoftwarecenter_clt command | ||
| script = ctx.actions.declare_file(ctx.attr.name + "_install.sh") | ||
|
|
||
| script_content = """#!/bin/bash | ||
| set -e | ||
|
|
||
| # Set up variables | ||
| QNXSOFTWARECENTER_CLT="{qnxsoftwarecenter_clt}" | ||
| PKG_PATCHLIST="{patchset}" | ||
| INSTALL_DIR="{install_dir}" | ||
|
|
||
| echo "srini - Installing QNX SDP from patchset $PKG_PATCHLIST using $QNXSOFTWARECENTER_CLT" | ||
| echo "srini - Output directory: $INSTALL_DIR" | ||
|
|
||
| # Create output directory | ||
| mkdir -p "$INSTALL_DIR" | ||
|
|
||
| # get proxy | ||
| # Strip protocol | ||
| temp="${{http_proxy#*://}}" | ||
| # Strip authentication if present | ||
| temp="${{temp#*@}}" | ||
| # Strip port and path | ||
| PROXYHOST="${{temp%%:*}}" | ||
| # Extract port if present | ||
| PROXYPORT="${{http_proxy##*:}}" | ||
|
|
||
| # Run qnxsoftwarecenter_clt to install packages from patchset | ||
| "$QNXSOFTWARECENTER_CLT" \ | ||
| -proxy.host "$PROXYHOST" \ | ||
| -proxy.port "$PROXYPORT" \ | ||
| -myqnx.user "$SCORE_QNX_USER" \ | ||
| -myqnx.password "$SCORE_QNX_PASSWORD" \ | ||
| -importAndInstall "$PKG_PATCHLIST" \ | ||
| -destination "$INSTALL_DIR" | ||
|
|
||
| echo "QNX SDP distribution created successfully in $INSTALL_DIR" | ||
| """.format( | ||
| qnxsoftwarecenter_clt = qnxsoftwarecenter_clt.path, | ||
| patchset = patchset.path, | ||
| install_dir = output_dir.path, | ||
| ) | ||
|
|
||
| ctx.actions.write( | ||
| output = script, | ||
| content = script_content, | ||
| is_executable = True, | ||
| ) | ||
|
|
||
| # Run the installation script | ||
| ctx.actions.run( | ||
| inputs = [patchset, qnxsoftwarecenter_clt], | ||
| outputs = [output_dir], | ||
| executable = script, | ||
| mnemonic = "QnxSdpInstall", | ||
| progress_message = "Installing QNX SDP from patchset %s" % patchset.short_path, | ||
| use_default_shell_env = True, | ||
| execution_requirements = { | ||
| "no-sandbox": "1", # May need to run without sandbox for installer | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is very bad option. It will destroy hermeticity of the build. |
||
| }, | ||
| ) | ||
|
|
||
| return [ | ||
| DefaultInfo( | ||
| files = depset([output_dir]), | ||
| ), | ||
| ] | ||
|
|
||
| qnx_sdp_distribution = rule( | ||
| implementation = _qnx_sdp_distribution_impl, | ||
| attrs = { | ||
| "patchset": attr.label( | ||
| allow_single_file = [".plist"], | ||
| mandatory = True, | ||
| doc = "The patchset .plist file containing the package list", | ||
| ), | ||
| "qnxsoftwarecenter_clt": attr.label( | ||
| default = "@qnx_software_center//:qnxsoftwarecenter_clt", | ||
| executable = True, | ||
| cfg = "exec", | ||
| doc = "The qnxsoftwarecenter_clt binary", | ||
| ), | ||
| }, | ||
| doc = "Creates a QNX SDP distribution from a patchset file", | ||
| ) | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| #!/bin/bash | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. if you want to have some sanity testing in place, then create directory |
||
| # ******************************************************************************* | ||
| # Copyright (c) 2025 Contributors to the Eclipse Foundation | ||
| # | ||
| # See the NOTICE file(s) distributed with this work for additional | ||
| # information regarding copyright ownership. | ||
| # | ||
| # This program and the accompanying materials are made available under the | ||
| # terms of the Apache License Version 2.0 which is available at | ||
| # https://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # SPDX-License-Identifier: Apache-2.0 | ||
| # ******************************************************************************* | ||
| # Simple stub for qnxsoftwarecenter_clt used for local testing inside the repo. | ||
| # It looks for the -destination <dir> argument and creates that directory. | ||
| set -e | ||
| DEST="" | ||
| ARG_NEXT=0 | ||
| for a in "$@"; do | ||
| if [ "$ARG_NEXT" -eq 1 ]; then | ||
| DEST="$a" | ||
| ARG_NEXT=0 | ||
| continue | ||
| fi | ||
| case "$a" in | ||
| -destination) | ||
| ARG_NEXT=1 | ||
| ;; | ||
| esac | ||
| done | ||
| if [ -z "$DEST" ]; then | ||
| echo "qnxsoftwarecenter_clt stub: no -destination provided, nothing to do" >&2 | ||
| exit 0 | ||
| fi | ||
| mkdir -p "$DEST" | ||
| # Create a small marker to indicate stub run | ||
| echo "QNX SDP stub installed at $(date -u) by qnxsoftwarecenter_clt stub" > "$DEST/INSTALLED_BY_QNX_SOFTWARE_CENTER_STUB" | ||
| exit 0 | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
rename
SDPdirectory tosdp_install.