Skip to content

Conversation

@lobolanja
Copy link

@lobolanja lobolanja commented Sep 3, 2025

Summary

This PR updates DDS integration in HoloHub:

  • Documentation

    • Added a more complete README.md for the DDS Video Application, covering prerequisites, Docker/local build steps, and license setup.
  • Dockerfile

    • Updated dds_video Dockerfile to install RTI Connext DDS 7.5.0 from the official RTI APT repository.
    • Simplified license handling (mount rti_license.dat).
    • Improved reproducibility by avoiding manual installs.

Testing Notes

  • Verified on x86_64: Dockerfile builds and runs correctly with a valid license file.
  • Expected on ARM/IGX (armv8): Should work since RTI provides ARM Debian packages, but not yet validated.
    • I do not have IGX hardware available, so testing there would be appreciated.

Request for Feedback

  1. IGX validation
    Please run the DDS Video application (publisher + subscriber) on an IGX box following the updated instructions and confirm it works.

  2. CI integration
    Is it possible to add a CI step that at least verifies the DDS operator builds on IGX?

Greptile Overview

Updated On: 2025-10-20 14:57:21 UTC

Greptile Summary

This PR upgrades HoloHub's DDS integration from RTI Connext 7.3.0 to 7.5.0, modernizing the installation approach and improving developer experience. The key change replaces manual RTI installation with automated APT repository installation directly in the container, eliminating the need to mount the entire DDS SDK at runtime. Only the license file (rti_license.dat) needs to be mounted now. Documentation has been restructured with clearer prerequisites, step-by-step Docker instructions, and simplified build commands. The .gitignore was updated to exclude RTI workspace artifacts, and metadata now explicitly references the DDS Dockerfile. This change integrates with HoloHub's existing operator/application structure by ensuring the DDS operators can be built with a well-defined, reproducible container environment rather than depending on host-specific manual installations.

Important Files Changed

Changed Files
Filename Score Overview
.gitignore 5/5 Added rti_workspace/ pattern to exclude RTI Connext workspace artifacts from version control
applications/dds/dds_video/Dockerfile 3/5 Migrated to RTI Connext7.5.0 via APT repository with duplicate ARG declarations and hardcoded architecture in bootstrap script
applications/dds/dds_video/bootstrap.sh 3/5 Updated DDS version to 7.5.0 but retains hardcoded x64Linux architecture path incompatible with ARM/IGX
applications/dds/dds_video/README.md 4/5 Comprehensive documentation update with clearer prerequisites and Docker workflow, minor formatting inconsistencies
operators/dds/README.md 3/5 Updated to reference 7.5.0 and APT installation but contains syntax error (unclosed quote on line 33) and unclear build instructions
operators/dds/metadata.json 4/5 Added dockerfile reference linking operators to application container build environment

Confidence score: 3/5

  • This PR requires careful review due to architecture portability concerns and syntax errors that will cause build/runtime failures on ARM/IGX systems.
  • Score lowered due to: (1) hardcoded x64Linux architecture path in bootstrap.sh that contradicts PR's ARM/IGX support claims, (2) syntax error in operators/dds/README.md line 33 (unclosed quote), (3) duplicate ARG declarations in Dockerfile lines 18-19 and 25-26, and (4) incomplete build command example in operators README.
  • Pay close attention to applications/dds/dds_video/bootstrap.sh (architecture hardcoding), operators/dds/README.md (syntax error at line 33), and applications/dds/dds_video/Dockerfile (duplicate ARG declarations and curl dependency).

@tbirdso tbirdso requested review from a team and ibstewart September 3, 2025 18:05
@tbirdso
Copy link
Contributor

tbirdso commented Sep 3, 2025

Hi @lobolanja , thank you for your contribution. Maybe @ibstewart could help validate the proposed changes on arm64?

Copy link
Contributor

@ibstewart ibstewart left a comment

Choose a reason for hiding this comment

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

Overall the change looks good (just a few trivial things that would need addressing), but unfortunately I just tried building with this change on arm64 and I'm getting this build error:

CMake Error at /opt/rti.com/rti_connext_dds-7.5.0/resource/cmake/FindRTIConnextDDS.cmake:1410 (message):
architecture is unsupported by this module

I tried making it work by fixing the bootstrap.sh script to use the armv8 version of the rtisetenv script instead, and then tried getting the CONNEXTDDS_ARCH env variable into the container to use it for the build, but I'm having trouble getting that both (a) available inside the container, and (b) available to the holohub.py script for use at build time, since that needs to be provided as a cmake variable.

Unfortunately I don't have more cycles to look into fixing the build, but maybe somebody more familiar with the holohub build scripts and/or docker could take a look(@tbirdso)?



## Building the Application
## Building locally the Application
Copy link
Contributor

Choose a reason for hiding this comment

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

Should be Building the application locally

# Install connext 7.5.0 from .deb package
# Download the public key for the RTI APT repository
RUN curl -sSL -o /usr/share/keyrings/rti-official-archive.gpg \
https://packages.rti.com/deb/official/repo.key
Copy link
Contributor

Choose a reason for hiding this comment

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

This second line should be indented


```sh
$ ./holohub build dds_video --configure-args="-DRTI_CONNEXT_DDS_DIR=~/rti/rti_connext_dds-7.3.0"
$ ./holohub build dds_video"
Copy link
Contributor

Choose a reason for hiding this comment

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

Remove the trailing "

@ibstewart
Copy link
Contributor

I found a bit more time and was able to get a working arm64 build, though unfortunately it looks like my RTI license expired so I'm not actually able to run it at the moment. It was at least able to run to the point of telling me it's expired, so I think that means it should otherwise be working?

Here's the patch that I applied on top of this PR to fix the arm64 build:

diff --git a/applications/dds/dds_video/Dockerfile b/applications/dds/dds_video/Dockerfile
index de714bbd..c42d033c 100644
--- a/applications/dds/dds_video/Dockerfile
+++ b/applications/dds/dds_video/Dockerfile
@@ -107,6 +107,8 @@ ENV NDDSHOME=/opt/rti.com/rti_connext_dds-7.5.0
 ENV RTI_CONNEXT_DDS_DIR=$NDDSHOME
 
 COPY ./applications/dds/dds_video/bootstrap.sh /bootstrap.sh
-RUN chmod +x /bootstrap.sh
+RUN chmod +x /bootstrap.sh \
+    && source /bootstrap.sh \
+    && echo "${CONNEXTDDS_ARCH}" >> /connextdds_arch
 
 CMD ["/bootstrap.sh"]
diff --git a/applications/dds/dds_video/bootstrap.sh b/applications/dds/dds_video/bootstrap.sh
index 1ee4f91f..5de09e94 100755
--- a/applications/dds/dds_video/bootstrap.sh
+++ b/applications/dds/dds_video/bootstrap.sh
@@ -14,5 +14,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-source /opt/rti.com/rti_connext_dds-7.5.0/resource/scripts/rtisetenv_x64Linux4gcc7.3.0.bash
-exec /bin/bash
+arch="x64"
+if [[ "$(uname -m)" == "aarch64" ]]; then
+    arch="armv8"
+fi
+source /opt/rti.com/rti_connext_dds-7.5.0/resource/scripts/rtisetenv_${arch}Linux4gcc7.3.0.bash
diff --git a/utilities/cli/holohub.py b/utilities/cli/holohub.py
index cb9c93da..c286e2c4 100755
--- a/utilities/cli/holohub.py
+++ b/utilities/cli/holohub.py
@@ -943,6 +943,14 @@ class HoloHubCLI:
                 f"-DCMAKE_CXX_FLAGS=-I{HoloHubCLI.HOLOHUB_ROOT}/benchmarks/holoscan_flow_benchmarking"
             )
 
+        # Add RTI Connext arch
+        if project_name == "dds_video":
+            with open("/connextdds_arch", "r") as f:
+                connextdds_arch = f.readline().strip()
+            cmake_args.append(
+                f"-DCONNEXTDDS_ARCH={connextdds_arch}",
+            )
+
         # use -G Ninja if available
         if shutil.which("ninja"):
             cmake_args.extend(["-G", "Ninja"])

@bhashemian
Copy link
Member

@lobolanja Could you please update the copyright date of applications/dds/dds_video/Dockerfile file to 2022-2025? Thanks

@bhashemian bhashemian moved this to In Progress in Holohub Sep 10, 2025
Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

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

Additional Comments (1)

  1. applications/dds/dds_video/Dockerfile, line 18-26 (link)

    syntax: duplicate ARG declarations for BASE_IMAGE and GPU_TYPE - lines 18-19 are redundant with lines 25-26

6 files reviewed, 6 comments

Edit Code Review Agent Settings | Greptile

```sh
# 1. Build and launch the container
./holohub run-container dds_video --docker-opts="-v $HOME/rti_connext_dds-7.3.0:/opt/rti.com/rti_connext_dds-7.3.0/"
./holohub run-container dds_video --docker-opts="-v ./rti_license.dat:/opt/rti.com/rti_connext_dds-7.5.0/rti_license.dat"
Copy link
Contributor

Choose a reason for hiding this comment

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

syntax: Trailing whitespace on this line

# 1. Build and launch the container
./holohub run-container dds_video --docker-opts="-v $HOME/rti_connext_dds-7.3.0:/opt/rti.com/rti_connext_dds-7.3.0/"
./holohub run-container dds_video --docker-opts="-v ./rti_license.dat:/opt/rti.com/rti_connext_dds-7.5.0/rti_license.dat"
# 3. Build the application
Copy link
Contributor

Choose a reason for hiding this comment

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

syntax: Step numbering is incorrect - this says # 3. but should be # 2. since there's no step 2 listed

any application using one of these operators. To build on an IGX devkit (using
- **RTI Connext 7.5.0 Express**
- Provides access to the DDS domain.
- Already included if using the [container build](../../applications/dds/dds_video/Dockerfile) you can find in the dds_video application directory
Copy link
Contributor

Choose a reason for hiding this comment

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

style: line exceeds 100 characters (109 chars), consider wrapping to next line

up to step 5 (Installing Java and setting JREHOME).

To build the operators, the `RTI_CONNEXT_DDS_DIR` CMake variable must point to
To build the operators out of the dockerfile, the `RTI_CONNEXT_DDS_DIR` CMake variable must point to
Copy link
Contributor

Choose a reason for hiding this comment

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

style: "out of the dockerfile" is unclear - should this be "outside of the Docker container" or "when building natively"? What specific build scenario is this referring to?


```sh
$ ./holohub build dds_video --configure-args="-DRTI_CONNEXT_DDS_DIR=~/rti/rti_connext_dds-7.3.0"
$ ./holohub build dds_video"
Copy link
Contributor

Choose a reason for hiding this comment

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

syntax: missing closing double-quote - should be $ ./holohub build dds_video

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

4 participants