Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ tmp/
.viminfo
.lesshst

# RTI Workspace
rti_workspace/

# Licenses
rti_license.dat

Expand Down
25 changes: 23 additions & 2 deletions applications/dds/dds_video/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,24 @@ RUN if ! grep -q "VERSION_ID=\"22.04\"" /etc/os-release; then \
COPY benchmarks/holoscan_flow_benchmarking/requirements.txt /tmp/benchmarking_requirements.txt
RUN pip install -r /tmp/benchmarking_requirements.txt


# 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


# Add the RTI APT repository to the sources list
RUN printf -- "deb [arch=%s signed-by=%s] %s %s main\n" \
$(dpkg --print-architecture) \
/usr/share/keyrings/rti-official-archive.gpg \
https://packages.rti.com/deb/official \
$(. /etc/os-release && echo ${VERSION_CODENAME}) \
| tee /etc/apt/sources.list.d/rti.list >/dev/null

# Set environment variable to accept the RTI License Agreement
RUN export RTI_LICENSE_AGREEMENT_ACCEPTED=accepted && apt update \
&& apt install -y rti-connext-dds-7.5.0

# For RTI Connext DDS
RUN apt update \
&& apt install --no-install-recommends -y \
Expand All @@ -85,7 +103,10 @@ RUN echo 'export JREHOME=$(readlink /etc/alternatives/java | sed -e "s/\/bin\/ja
# Set default Holohub data directory
ENV HOLOSCAN_INPUT_PATH=/workspace/holohub/data

ENV NDDSHOME=/opt/rti.com/rti_connext_dds-7.3.0
ENV NDDSHOME=/opt/rti.com/rti_connext_dds-7.5.0
ENV RTI_CONNEXT_DDS_DIR=$NDDSHOME

CMD ["/bin/bash", "-c", "source $NDDSHOME/resource/scripts/rtisetenv_x64Linux4gcc7.3.0.bash && exec /bin/bash"]
COPY ./applications/dds/dds_video/bootstrap.sh /bootstrap.sh
RUN chmod +x /bootstrap.sh

CMD ["/bootstrap.sh"]
48 changes: 25 additions & 23 deletions applications/dds/dds_video/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,28 +23,37 @@ Holoviz output.

## Prerequisites

- This application requires an installation of [RTI Connext Express](https://content.rti.com/l/983311/2025-07-08/q5x1n8) to provide access to the DDS domain.
To obtain a license/activation key, please [click here](https://content.rti.com/l/983311/2025-07-25/q6729c). Please see the [usage rules](https://www.rti.com/products/connext-express) for Connext Express.
- V4L2 capable device
- **RTI Connext 7.5.0 Express**
- Provides access to the DDS domain.
- Already included if using the container build.
- Otherwise, install via [RTI APT instructions](https://content.rti.com/l/983311/2025-07-08/q5x1n8).

> [!NOTE]
> Instructions below are based on the `.run' installer from RTI Connext. Refer to the
> [Linux installation](https://community.rti.com/static/documentation/developers/get-started/full-install.html)
> for details.
- **RTI Activation Key**
- [Request a license/activation key](https://content.rti.com/l/983311/2025-07-25/q6729c).
- See the [usage rules](https://www.rti.com/products/connext-express).
- For Holoscan usage, download the key, copy it into the `holohub` repository, and rename it to `rti_license.dat`.

- **V4L2-capable video device**
- Required for video capture when running as a publisher.

## Quick Start (Docker)

## Quick Start
This guide shows how to run the DDS Video application using the Docker build environment.

1. Obtain an **RTI Activation Key** (see [Prerequisites](#prerequisites)).
2. Place the license in the `holohub` directory as `rti_license.dat`.
3. Open **two terminal windows** and run:

```bash
# Start the publisher
./holohub run dds_video --docker-opts="-v $HOME/rti_connext_dds-7.3.0:/opt/rti.com/rti_connext_dds-7.3.0/" --run-args="-p"
./holohub run dds_video --docker-opts="-v ./rti_license.dat:/opt/rti.com/rti_connext_dds-7.5.0/rti_license.dat" --run-args="-p"

# Start the subscriber
./holohub run dds_video --docker-opts="-v $HOME/rti_connext_dds-7.3.0:/opt/rti.com/rti_connext_dds-7.3.0/" --run-args="-s"
./holohub run dds_video --docker-opts="-v ./rti_license.dat:/opt/rti.com/rti_connext_dds-7.5.0/rti_license.dat" --run-args="-s"
```


## 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

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Adjust section title wording.

"Building locally the Application" is awkward. Prefer "Building the Application Locally."

🤖 Prompt for AI Agents
In applications/dds/dds_video/README.md around line 56, the section title
"Building locally the Application" is awkward; rename it to "Building the
Application Locally" by updating the heading text to that exact phrasing so the
wording is natural and follows conventional capitalization.


To build on an IGX devkit (using the `armv8` architecture), follow the
[instructions to build Connext DDS applications for embedded Arm targets](https://community.rti.com/kb/how-do-i-create-connext-dds-application-rti-code-generator-and-build-it-my-embedded-target-arm)
Expand All @@ -56,29 +65,22 @@ the `NDDSHOME` environment variable to the RTI Connext installation directory
(such as when using the RTI `setenv` scripts), or manually at build time, e.g.:

```sh
./holohub build --local dds_video --configure-args="-DRTI_CONNEXT_DDS_DIR=~/rti/rti_connext_dds-7.3.0"
./holohub build --local dds_video --configure-args="-DRTI_CONNEXT_DDS_DIR=~/opt/rti.com/rti_connext_dds-7.5.0"
```

### Building with a Container
### Building with the Container

Due to the license requirements of RTI Connext it is not currently supported to
install RTI Connext into a development container. Instead, Connext should be
installed onto the host as above and then the development container can be
launched with the RTI Connext folder mounted at runtime. To do so, ensure that
the `NDDSHOME` and `CONNEXTDDS_ARCH` environment variables are set (which can be
done using the RTI `setenv` script) and use the following:

```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

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Remove trailing whitespace.

Trailing whitespace at the end of the docker-opts line.

🤖 Prompt for AI Agents
In applications/dds/dds_video/README.md around line 76, the docker-opts command
contains trailing whitespace at the end of the line; remove the trailing
space(s) after the closing quote so the line ends exactly with the command (no
extra spaces or tabs), then save the file.

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 at end of line

# 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

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 says # 3. but should be # 2. (no step 2 exists)

Suggested change
# 3. Build the application
# 2. Build the application

./holohub build dds_video
# Continue to the next section to run the application with the publisher.
# Open a new terminal to repeat step #2 and launch a new container for the subscriber.
```



## Running the Application

Both a publisher and subscriber process must be launched to see the result of
Expand All @@ -98,8 +100,8 @@ $ ./holohub run --no-local-build dds_video --run-args="-s"

If running the application generates an error about `RTI Connext DDS No Source
for License information`, ensure that the RTI Connext license has either been
installed system-wide or the `NDDSHOME` environment variable has been set to
point to your user's RTI Connext installation path.
installed system-wide or the `RTI_LICENSE_FILE` environment variable has been set to
point to the license file path.

Note that these processes can be run on the same or different systems, so long as they
are both discoverable by the other via RTI Connext. If the processes are run on
Expand Down
2 changes: 1 addition & 1 deletion applications/dds/dds_video/bootstrap.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@
# See the License for the specific language governing permissions and
# limitations under the License.

source /opt/rti.com/rti_connext_dds-7.3.0/resource/scripts/rtisetenv_x64Linux4gcc7.3.0.bash
source /opt/rti.com/rti_connext_dds-7.5.0/resource/scripts/rtisetenv_x64Linux4gcc7.3.0.bash
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Hardcoded x64 architecture will fail on ARM platforms.

The path uses a hardcoded x64Linux architecture, which will not work on armv8/IGX platforms. Per the PR review feedback, runtime architecture detection is required to support ARM builds.

Apply this diff to detect architecture at runtime:

-source /opt/rti.com/rti_connext_dds-7.5.0/resource/scripts/rtisetenv_x64Linux4gcc7.3.0.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
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
source /opt/rti.com/rti_connext_dds-7.5.0/resource/scripts/rtisetenv_x64Linux4gcc7.3.0.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
🤖 Prompt for AI Agents
In applications/dds/dds_video/bootstrap.sh around line 17, the script currently
hardcodes the x64Linux architecture in the rtisetenv path which will break on
ARM; change it to detect the runtime architecture (e.g. use uname -m), map
common values (x86_64 -> x64Linux4gcc7.3.0, aarch64 -> armv8Linux... or the
correct RTI directory name for your ARM build), construct the full path using
that mapped directory name and then source that path, and add a clear
error/fallback if the detected architecture is unsupported.

Copy link
Contributor

Choose a reason for hiding this comment

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

logic: hardcodes x64Linux4gcc7.3.0 but PR claims ARM/IGX support - will fail on aarch64 systems

Suggested change
source /opt/rti.com/rti_connext_dds-7.5.0/resource/scripts/rtisetenv_x64Linux4gcc7.3.0.bash
# Detect architecture and source appropriate script
ARCH=$(uname -m)
if [ "$ARCH" = "x86_64" ]; then
source /opt/rti.com/rti_connext_dds-7.5.0/resource/scripts/rtisetenv_x64Linux4gcc7.3.0.bash
elif [ "$ARCH" = "aarch64" ]; then
source /opt/rti.com/rti_connext_dds-7.5.0/resource/scripts/rtisetenv_armv8Linux4gcc7.3.0.bash
else
echo "Unsupported architecture: $ARCH"
exit 1
fi

exec /bin/bash
32 changes: 15 additions & 17 deletions operators/dds/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,32 +9,30 @@ a wide array of external applications and platforms.

## Requirements

[RTI Connext](https://content.rti.com/l/983311/2024-04-30/pz1wms) must be
installed on the system and a valid RTI Connext license must be installed to run
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

- Otherwise, install via [RTI APT instructions](https://content.rti.com/l/983311/2025-07-08/q5x1n8).

- **RTI Activation Key**
- [Download the RTI license/activation key](https://content.rti.com/l/983311/2025-07-25/q6729c).
- See the [usage rules](https://www.rti.com/products/connext-express).
- For Holoscan usage, download the key, copy it into the `holohub` root directory, and rename it to `rti_license.dat`.

To build on an IGX devkit (using
the `armv8` architecture), follow the
[instructions to build Connext DDS applications for embedded Arm targets](https://community.rti.com/kb/how-do-i-create-connext-dds-application-rti-code-generator-and-build-it-my-embedded-target-arm)
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?

the installation path for RTI Connext. This can be done automatically by setting
the `NDDSHOME` environment variable to the RTI Connext installation directory
(such as when using the RTI `setenv` scripts), or manually at build time, e.g.:

```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 "

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

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

Suggested change
$ ./holohub build dds_video"
$ ./holohub build dds_video

```

## Using a Development Container

Due to the license requirements of RTI Connext it is not currently supported to
install RTI Connext into a development container. Instead, if a development
container is to be used, Connext should be installed onto the host as above and
then the container can be launched with the RTI Connext folder mounted at
runtime. To do so, ensure that the `NDDSHOME` and `CONNEXTDDS_ARCH` environment
variables are set (which can be done using the RTI `setenv` script) and use the
following:
## Example Application

```sh
./holohub run --docker-opts "-v $NDDSHOME:/opt/dds -e NDDSHOME=/opt/dds -e CONNEXTDDS_ARCH=$CONNEXTDDS_ARCH"
```
See the [DDS Video Application documentation](../../applications/dds/dds_video/README.md) for an example of how to use these operators in a Holoscan application.
1 change: 1 addition & 0 deletions operators/dds/metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
"2.0.0"
]
},
"dockerfile": "../../applications/dds/dds_video/Dockerfile",
"platforms": ["x86_64", "aarch64"],
"tags": ["Networking and Distributed Computing", "DDS", "RTI Connext"],
"ranking": 2,
Expand Down