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
135 changes: 135 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
---
name: CI
on:
pull_request:
push:
schedule:
- cron: '10 0 * * 0'
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
strategy:
fail-fast: false
matrix:
dds:
- opendds
runner:
- ubuntu-24.04

runs-on: ${{ matrix.runner }}

steps:
- name: 'Checkout dds-xtypes'
uses: actions/checkout@v4
- name: 'Checkout MPC'
uses: actions/checkout@v4
with:
repository: DOCGroup/MPC
path: MPC
fetch-depth: 1
- name: 'Checkout ACE_TAO'
uses: actions/checkout@v4
with:
repository: DOCGroup/ACE_TAO
ref: ace6tao2
path: ACE_TAO
fetch-depth: 1
- name: 'Checkout OpenDDS'
uses: actions/checkout@v4
with:
repository: OpenDDS/OpenDDS
path: OpenDDS
fetch-depth: 1
- name: 'Set environment variables (Linux / macOS)'
if: runner.os == 'Linux' || runner.os == 'macOS'
shell: bash
run: |-
echo "ACE_ROOT=$GITHUB_WORKSPACE/ACE_TAO/ACE" >> $GITHUB_ENV
echo "TAO_ROOT=$GITHUB_WORKSPACE/ACE_TAO/TAO" >> $GITHUB_ENV
echo "DDS_ROOT=$GITHUB_WORKSPACE/OpenDDS" >> $GITHUB_ENV
echo "MPC_ROOT=$GITHUB_WORKSPACE/MPC" >> $GITHUB_ENV
echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GITHUB_WORKSPACE/ACE_TAO/ACE/lib:$GITHUB_WORKSPACE/OpenDDS/lib" >> $GITHUB_ENV
export COMPILER_VERSION=$(c++ --version 2>&1 | head -n 1)
echo "COMPILER_VERSION=$COMPILER_VERSION" >> $GITHUB_ENV
echo "OBJ_EXT=\\.o" >> $GITHUB_ENV
TAR_EXE="tar"
MD5_EXE="md5sum"
if [ '${{ runner.os }}' == 'macOS' ]; then
TAR_EXE="gtar"
MD5_EXE="md5 -r"
fi
echo "TAR_EXE=$TAR_EXE" >> $GITHUB_ENV
echo "MD5_EXE=$MD5_EXE" >> $GITHUB_ENV
- name: 'Set environment variables (Common)'
shell: bash
run: |-
cd ACE_TAO
export ACE_COMMIT=$(git rev-parse HEAD)
echo "ACE_COMMIT=$ACE_COMMIT" >> $GITHUB_ENV
cd ../OpenDDS
export DDS_COMMIT=$(git rev-parse HEAD)
echo "DDS_COMMIT=$DDS_COMMIT" >> $GITHUB_ENV
export MATRIX_MD5=$(echo "${{ matrix }}" | ${{ env.MD5_EXE }} | cut -d ' ' -f 1)
echo "MATRIX_MD5=$MATRIX_MD5" >> $GITHUB_ENV
export COMPILER_MD5=$(echo "$COMPILER_VERSION" | ${{ env.MD5_EXE }} | cut -d ' ' -f 1)
echo "COMPILER_MD5=$COMPILER_MD5" >> $GITHUB_ENV
export CONFIG_MD5=$(echo "$CONFIG_OPTIONS" | ${{ env.MD5_EXE }} | cut -d ' ' -f 1)
echo "CONFIG_MD5=$CONFIG_MD5" >> $GITHUB_ENV
- name: 'Check Build Cache'
id: cache-build
uses: actions/cache@v4
with:
path: ${{ env.MATRIX_MD5 }}.tar.xz
key: c01_${{ env.MATRIX_MD5 }}_${{ env.COMPILER_MD5 }}_${{ env.ACE_COMMIT }}_${{ env.DDS_COMMIT }}_${{ env.CONFIG_MD5 }}
- name: 'Extract Build Cache'
if: steps.cache-build.outputs.cache-hit == 'true'
shell: bash
run: |
tar xvfJ ${{ env.MATRIX_MD5 }}.tar.xz
- name: 'Configure OpenDDS (Linux / macOS)'
if: steps.cache-build.outputs.cache-hit != 'true' && (runner.os == 'Linux' || runner.os == 'macOS')
shell: bash
run: |-
cd OpenDDS
./configure ${{ env.CONFIG_OPTIONS }}
tools/scripts/show_build_config.pl
- name: 'Build OpenDDS (Linux / macOS)'
if: steps.cache-build.outputs.cache-hit != 'true' && (runner.os == 'Linux' || runner.os == 'macOS')
shell: bash
run: |-
cd OpenDDS
. setenv.sh
make -j3
- name: 'Create Build Cache'
if: steps.cache-build.outputs.cache-hit != 'true'
shell: bash
run: |
cd ACE_TAO
find . -iname "*$OBJ_EXT" | xargs rm
git clean -xdfn | cut -d ' ' -f 3- | sed 's/^/ACE_TAO\//g' | tee ../ACE_TAO_files.txt
cd ..
$TAR_EXE cvf ${{ env.MATRIX_MD5 }}.tar ACE_TAO/ACE/ace/config.h
cat ACE_TAO_files.txt | xargs $TAR_EXE uvf ${{ env.MATRIX_MD5 }}.tar
cd OpenDDS
find . -iname "*$OBJ_EXT" | xargs rm
git clean -xdfn | cut -d ' ' -f 3- | sed 's/^/OpenDDS\//g' | tee ../OpenDDS_files.txt
cd ..
cat OpenDDS_files.txt | xargs $TAR_EXE uvf ${{ env.MATRIX_MD5 }}.tar
xz -3 ${{ env.MATRIX_MD5 }}.tar
- name: 'Set Up Problem Matcher (Linux / macOS)'
if: runner.os == 'Linux' || runner.os == 'macOS'
uses: ammaraskar/gcc-problem-matcher@0.3.0
- name: 'Build Application (Linux / macOS)'
if: runner.os == 'Linux' || runner.os == 'macOS'
shell: bash
run: |-
cd OpenDDS
. setenv.sh
cd ..
cmake -G Ninja -S srcCxx -B build
cmake --build build
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
60 changes: 60 additions & 0 deletions CLA/CLA_ObjectComputing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# OMG DDS INTEROPERABILITY REPOSITORY - CONTRIBUTOR LICENSE AGREEMENT

**This Contributor License Agreement ("Agreement") specifies the terms under which the individual or corporate entity specified in the signature block below (“You”) agree to make intellectual property contributions to the OMG DDS Interoperability Repository. BY SIGNING BELOW YOU ARE AGREEING TO BE BOUND BY THE TERMS OF THIS AGREEMENT. If You are signing this Agreement in Your capacity as an employee, THEN YOUR EMPLOYER AND YOU ARE BOTH BOUND BY THIS AGREEMENT.**

1. Definitions

1. "OMG DDS Interoperability Repository" (or “Repository”) means the Git repository [https://github.com/omg-dds/dds-rtps](https://github.com/omg-dds/dds-rtps).

2. "Moderator" means an entity or individual responsible for authorizing changes to the Repository.

3. "Submit" (or “Submitted”) means any submission, including source code, binaries, code, pull requests, issue reports, comments, etc., made to the Moderators for inclusion in the Repository either through the Git repository interface or through electronic file transfer.

4. A "Contribution" is any original work of authorship, including any modifications or additions to an existing work, that You Submit to the DDS Interoperability Repository.

5. A "User" is anyone who accesses the Repository.

2. Allowable Contribution Representations

1. You represent that You have the necessary rights to the Contribution(s) to meet the obligations of this Agreement. If You are employed, Your employer has authorized Contribution(s) under this Agreement.

2. You represent that you have no knowledge of third-party intellectual property rights that are likely to be infringed by the Contribution(s). You represent that you have no knowledge that such infringement or any allegation of misappropriation of intellectual property rights is likely to be claimed or has already been claimed.

3. License

You grant Moderators a perpetual, worldwide, non-exclusive, assignable, paid-up license to publish, display, and redistribute the Contribution as part of the Repository. You also license to Moderators under the same terms any other intellectual property rights required to publish, display, and redistribute the Contributions as part of the Repository. You further grant all Users of the Repository a license to the Contribution under the terms of the [OMG DDS Interoperability Testing License](../LICENSE.md) included in the Repository. Moderators are under no obligation to publish Contributions.

4. No Warranty, Consequential Damages. Limited Liability

Other than explicitly stated herein, You provide the Contribution(s) "as is" with no warranty nor claims of fitness to any purpose. Neither party shall be liable for consequential or special damages of any kind. Other than for breach of warranty or representations herein, the liability of either party to the other shall be limited to $1000.

5. General

1. If You are an agency of the United States Government, then this Agreement will be governed by the United States federal common law. Otherwise, this Agreement will be governed by the laws of the State of California except with regard to its choice of law rules.

2. A party may assign this Agreement to an entity acquiring essentially all of the party’s relevant business.

6. Electronic Signatures

"Electronic Signature" means any electronic sound, symbol, or process attached to or logically associated with a record and executed and adopted by a party with the intent to sign such record.

Each party agrees that the Electronic Signatures, whether digital or encrypted, of the parties included in this Agreement are intended to authenticate this writing and to have the same force and effect as manual signatures.


IN WITNESS WHEREOF, You, intending to be legally bound, have executed this Agreement or caused Your employer’s proper and duly authorized officer to execute and deliver this Agreement, for good and valuable consideration, the sufficiency of which is hereby acknowledged, as of the day and year first written below.

**For:**

Entity Name: Object Computing, Inc.

Address: 12140 Woodcrest Exec. Dr., Ste 300, St. Louis, MO 63141 USA

("**You**")

**By:**

Name: Adam Mitz

Title: Principal Software Engineer and Partner

Date: June 24, 2025
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ These tests can be used to validate compliance with **OMG DDS-XTYPES** each DDS

The test uses 25 different "versions" of a data-type. These variations are obtained by adding, removing or reordering different attributes. They are also obtained by declaring different extensibility kinds for the data type (Final, Extensible [the default], and Mutable). These types are declared in the *ShapeTypes.idl* file or the equivalent *ShapeTypes.xml* file. The 25 types defined there are:

Types with default extensibility | Types with final extensibility | Types with extensible extensibility | Types with mutable extensibility | Types with mutable extensibiity specifying explicit ID
------------- | ----------- | ---------------- | ------------- | ------------------------
Types with default extensibility | Types with final extensibility | Types with extensible extensibility | Types with mutable extensibility | Types with mutable extensibiity specifying explicit ID
------------- | ----------- | ---------------- | ------------- | ------------------------
Shape1Default | Shape1Final | Shape1Extensible | Shape1Mutable | Shape1MutableExplicitID
Shape2Default | Shape2Final | Shape2Extensible | Shape2Mutable | Shape2MutableExplicitID
Shape2Default | Shape2Final | Shape2Extensible | Shape2Mutable | Shape2MutableExplicitID
Shape3Default | Shape3Final | Shape3Extensible | Shape3Mutable | Shape3MutableExplicitID
Shape4Default | Shape4Final | Shape4Extensible | Shape4Mutable | Shape4MutableExplicitID
Shape5Default | Shape5Final | Shape5Extensible | Shape5Mutable | Shape5MutableExplicitID
Expand All @@ -27,7 +27,7 @@ The following is an example execution:

ON THE SUBSCRIBER COMPUTER:
```
dds-xtypes$ ./rti_connext_dds_5.2_linux -sub -domain 0 -type Shape2Extensible
dds-xtypes$ ./rti_connext_dds_5.2_linux -sub -domain 0 -type Shape2Extensible
Usage: ./rti_connext_dds_5.2_linux [-pub | -sub] [-domain <domainId>] [-type <typeName>]
Info: Starting subscribing application. Domain: 0, Type: Shape2Extensible

Expand Down
19 changes: 19 additions & 0 deletions srcCxx/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
cmake_minimum_required(VERSION 3.10)

project(shape_type_demo)

# This CMakeLists.txt is intended to be used with any DDS implementation that
# supports CMake. An example using OpenDDS is below, and other implementations
# can be added. In each case, if find_package() doesn't find the target
# implementation then processing should continue (REQUIRED is not used) to
# attempt to find other implementations.

find_package(OpenDDS)

if(${OpenDDS_FOUND})
add_executable(opendds_xtypes_test ShapeType_main.cxx)
opendds_target_sources(opendds_xtypes_test ShapeType.idl
OPENDDS_IDL_OPTIONS -Gxtypes-complete --no-default-nested)
target_link_libraries(opendds_xtypes_test OpenDDS::Rtps_Udp)
target_compile_definitions(opendds_xtypes_test PUBLIC OCI_OPENDDS)
endif()
13 changes: 12 additions & 1 deletion srcCxx/ShapeType.idl
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,17 @@ struct Shape4MutableExplicitID {
long y;
};

// Specific to OpenDDS
#ifdef __TAO_IDL_FEATURES
# include __TAO_IDL_FEATURES
# if defined TAO_IDL_HAS_STRUCT_INHERITANCE && TAO_IDL_HAS_STRUCT_INHERITANCE
# define STRUCT_INHERITANCE TAO_IDL_HAS_STRUCT_INHERITANCE
# endif
#else
# define STRUCT_INHERITANCE 1
#endif
#if STRUCT_INHERITANCE

/* -------------- Shape5 -----------------------------*/
struct Shape5Default : Shape1Default {
float angle;
Expand All @@ -202,4 +213,4 @@ struct Shape5MutableExplicitID : Shape1MutableExplicitID {
@id(40) float angle;
};


#endif
15 changes: 11 additions & 4 deletions srcCxx/ShapeType_main.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
* The possibilities are:
* RTI_CONNEXT_DDS
* TWINOAKS_COREDX
* OCI_OPENDDS
*/

#include <stdio.h>
Expand Down Expand Up @@ -52,16 +53,22 @@ void setup_signal_handler()

DomainParticipant *create_participant(int domain_id)
{
#ifdef OCI_OPENDDS
setup_rtps();
/* OpenDDS::DCPS::set_DCPS_debug_level(10); */
/* OpenDDS::DCPS::Transport_debug_level = 6; */
#endif

DomainParticipantQos pQos;
DomainParticipantFactory::get_instance()->get_default_participant_qos(pQos);
get_domain_participant_factory()->get_default_participant_qos(pQos);

#if defined(RTI_CONNEXT_DDS)
pQos.discovery_config.participant_message_reader_reliability_kind = DDS_RELIABLE_RELIABILITY_QOS;
#endif

DomainParticipant *participant = DomainParticipantFactory::get_instance()->create_participant(
DomainParticipant *participant = get_domain_participant_factory()->create_participant(
domain_id, pQos,
NULL /* listener */, DDS_STATUS_MASK_NONE);
NULL /* listener */, STATUS_MASK_NONE);

return participant;
}
Expand Down Expand Up @@ -177,7 +184,7 @@ ExitStatus run(int domain_id, const char *topic_name, const char *type_name, boo

/* Delete all entities */
participant->delete_contained_entities();
DomainParticipantFactory::get_instance()->delete_participant(participant);
get_domain_participant_factory()->delete_participant(participant);

return exit_status;
}
Expand Down
Loading