{"id":23168275,"url":"https://github.com/asorbini/rticonnextdds-docker-crosscompile","last_synced_at":"2026-05-05T07:31:32.407Z","repository":{"id":146825646,"uuid":"322129243","full_name":"asorbini/rticonnextdds-docker-crosscompile","owner":"asorbini","description":"Docker containers to cross-compile RTI Connext DDS applications.","archived":false,"fork":false,"pushed_at":"2020-12-17T11:47:31.000Z","size":34,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-04-04T22:24:47.313Z","etag":null,"topics":["armv7l","cross-compilation","docker","raspberry-pi","rti-connext-dds"],"latest_commit_sha":null,"homepage":"","language":"CMake","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/asorbini.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}},"created_at":"2020-12-16T23:42:03.000Z","updated_at":"2020-12-17T19:59:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"ea5d89e2-b3aa-4df1-ad47-d10a5c303c7c","html_url":"https://github.com/asorbini/rticonnextdds-docker-crosscompile","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/asorbini/rticonnextdds-docker-crosscompile","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asorbini%2Frticonnextdds-docker-crosscompile","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asorbini%2Frticonnextdds-docker-crosscompile/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asorbini%2Frticonnextdds-docker-crosscompile/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asorbini%2Frticonnextdds-docker-crosscompile/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/asorbini","download_url":"https://codeload.github.com/asorbini/rticonnextdds-docker-crosscompile/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asorbini%2Frticonnextdds-docker-crosscompile/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32640533,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"online","status_checked_at":"2026-05-05T02:00:06.033Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["armv7l","cross-compilation","docker","raspberry-pi","rti-connext-dds"],"created_at":"2024-12-18T02:40:46.843Z","updated_at":"2026-05-05T07:31:32.385Z","avatar_url":"https://github.com/asorbini.png","language":"CMake","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rticonnextdds-docker-crosscompile\n\nThis repository provides configuration files to generate Docker images for the\ncross-compilation of RTI Connext DDS applications.\n\n## Setup\n\nRunning Docker containers from a foreign architecture requires Qemu to be available\non the system.\n\nYou can usually install Qemu via your distro's package manager, e.g. on Ubuntu:\n\n```sh\nsudo apt-get install -y qemu\n```\n\nOnce Qemu is installed, you must enable hooks for it in the Docker daemon. This\ncan be achieved using container [hypriot/qemu-register](https://github.com/hypriot/qemu-register):\n\n```sh\ndocker run --rm --privileged hypriot/qemu-register\n```\n\n## Image Use\n\nThe repository contains the following images:\n\n| Image | Host Architecture | Supported RTI Connext DDS Targets |\n|-------|-------------------|-------------------------|\n|`rticonnextdds-builder-rpi3`|`armv7`|`armv7Linuxgcc7.3.0`|\n\nImages can be built using the `docker build` command, e.g.:\n\n```sh\ncd rticonnextdds-docker-crosscompile/\ndocker build -t rticonnextdds-builder-rpi3 \\\n             -f images/builder-rpi3 \\\n             .\n```\n\nAll images expect an RTI Connext DDS installation to be mounted via volume\n`/rti/ndds`. The target architecture can be specified via environment variable\n`CONNEXTDDS_ARCH` (passed via `-e CONNEXTDDS_ARCH=\u003carch\u003e`), or a default value\nfor the image will be used.\n\nYou can use the `--rm` option to automatically delete the container after\ncompletion, e.g.:\n\n```sh\n# Mount the current directory to build binaries for Raspberry Pi 3\ndocker run --rm -ti \\\n           -v ${NDDSHOME}:/rti/ndds \\\n           -v $(pwd):/work \\\n           rticonnextdds-builder-rpi3\n```\n\n**Please be aware that compilation in the emulated environments will be\nextremely slow (a few orders of magnitude slower than native builds).**\n\nBy default, the containers run commands as root, and generated files will have\nroot-level permissions in the host. If you want files to be generated with the\ncorrect permissions you should use variables `USER_ID` and `GROUP_ID` to\nspecify the user and group IDs to use inside the container.\n\nFor example, to match the current shell user and group (assumed to have the\nsame name as the user):\n\n```sh\ndocker run --rm -ti \\\n           -v ${NDDSHOME}:/rti/ndds \\\n           -v $(pwd):/work \\\n           -e USER_ID=$(id -u $(whoami)) \\\n           -e GROUP_ID=$(getent group $(whoami) | cut -d: -f3) \\\n           rticonnextdds-builder-rpi3\n```\n\nThis will spawn a shell for user `dsuser`, member of group `rti`, with home\ndirectory set to `/rti`. If you prefer to use different user, group, and/or home\ndirectory, you can specify custom values via variables `HOST_USER`, `HOST_GROUP`,\nand `HOME_DIR` respectively.\n\n### rticonnextdds-builder-rpi3\n\nThis image is based on [balenalib/raspberrypi3-debian:build](https://hub.docker.com/r/balenalib/raspberrypi3-debian).\nIt provides an `armv7` build environment running Raspbian Buster that can be\nused to build applications for Raspberry Pi 3.\n\nThe entry point script supports the specification of custom behavior via the\nfollowing environment variables:\n\n| Variable | Description |\n|----------|-------------|\n|`ENVRC`|Custom environment script that will be sourced on start up.|\n|`INIT`|Custom initialization script that will be run on start up (after `ENVRC`).|\n\nThe entry point script will copy a modified version of `FindRTIConnextDDS.cmake`\ninto the mounted `NDDSHOME`, replacing the stock version with one modified to\nsupport `armv7l` and `aarch64` architectures. The original file will be renamed\nand restored when the container exists.\n\nThe image also supports building `connextdds-py` by mounting volume\n`/rti/connextdds-py` with the contents of the `connextdds-py` git repository.\n\nIf `connextdds-py` is mounted, the container will temporarily modify `connextdds-py`'s\ndependencies, by downgrading CMake from version 3.18 to version 3.14.\nThe original configuration will be restored on exit.\n\nThe need for this change stems from [a problem with stock builds of CMake](https://gitlab.kitware.com/cmake/cmake/-/issues/20568)\nbetween versions 3.15 and 3.18 that prevents them from working under emulated arm\narchitectures.\nThe only solution is to rebuild CMake with `-D_FILE_OFFSET_BITS=64`, so a\nversion earlier than 3.15 is used instead to same time.\n\n## Usage Examples\n\n### Build connextdds-py for Raspberry Pi\n\nOn a system with RTI Connext DDS host `x64Linux`, and target `armv7Linuxgcc7.3.0`:\n\n```sh\n# Load RTI Connext DDS in environment\nsource /path/to/rti_connext_dds.6.0.1/resource/scripts/rtisetenv_armv7Linuxgcc7.3.0.bash\n\n# Clone connextdds-py\ngit clone --recurse-submodules https://github.com/rticommunity/connextdds-py.git\n\n# Start an ephemeral container to build connextdds-py for Raspberry Pi\ndocker run --rm -ti \\\n             -v ${NDDSHOME}:/rti/ndds \\\n             -v connextdds-py:/rti/connextdds-py \\\n             rticonnextdds-builder-rpi3\n\n# Inside the container, enter connextdds-py/, configure the project, and\n# build a wheel. This will likely take several hours. You can increase\n# the number of parallel jobs by passing -j\u003cn\u003e to configure.py, keeping\n# in mind that the compilation is memory-heavy and you might run out of memory\n# if too many jobs are spawned concurrently.\ncd /rti/connextdds-py\npython3 configure.py ${CONNEXTDDS_ARCH}\npip3 wheel .\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasorbini%2Frticonnextdds-docker-crosscompile","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fasorbini%2Frticonnextdds-docker-crosscompile","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasorbini%2Frticonnextdds-docker-crosscompile/lists"}