From 85eb9530b7a5540687183c07496d5460b8170408 Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Mon, 4 May 2026 07:52:08 +0200 Subject: [PATCH 01/19] SBSA support --- .github/workflows/documentation.yml | 2 +- .github/workflows/macos.yml | 20 +++--- .github/workflows/style.yml | 4 +- .github/workflows/ubuntu-cuda.yml | 2 +- .github/workflows/ubuntu-openblas.yml | 4 +- .github/workflows/ubuntu-sycl.yml | 2 +- .github/workflows/ubuntu-wheel.yml | 90 +++++++++++++++++++++++++-- .github/workflows/ubuntu.yml | 2 +- .github/workflows/vtk_packages.yml | 6 +- .github/workflows/webrtc.yml | 8 +-- .github/workflows/windows.yml | 24 +++---- docker/Dockerfile.wheel | 2 +- docker/README.md | 2 +- docker/docker_build.sh | 30 ++++++++- docker/docker_test.sh | 6 ++ util/ci_utils.sh | 6 +- util/install_deps_ubuntu.sh | 5 ++ 17 files changed, 165 insertions(+), 50 deletions(-) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index e6ddcc54fef..8461e857d13 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -27,7 +27,7 @@ jobs: DEVELOPER_BUILD: ${{ github.event.inputs.developer_build || 'ON' }} steps: - name: Checkout Open3D source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Maximize build space run: | diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index f8ba7dbd484..9c19abac9b3 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -41,9 +41,9 @@ jobs: BUILD_PYTORCH_OPS: 'ON' steps: - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup cache - uses: actions/cache@v4 + uses: actions/cache@v5 with: # Ref: https://github.com/apache/incubator-mxnet/pull/18459/files path: ~/.ccache @@ -57,7 +57,7 @@ jobs: ${{ runner.os }}-${{ runner.arch }}-ccache - name: Set up Python version - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.12' @@ -148,17 +148,17 @@ jobs: OPEN3D_ML_ROOT: ${{ github.workspace }}/Open3D-ML steps: - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Checkout Open3D-ML source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: isl-org/Open3D-ML ref: main path: ${{ env.OPEN3D_ML_ROOT }} - name: Setup cache - uses: actions/cache@v4 + uses: actions/cache@v5 with: # Ref: https://github.com/apache/incubator-mxnet/pull/18459/files path: ~/.ccache @@ -172,7 +172,7 @@ jobs: ${{ runner.os }}-${{ runner.arch }}-ccache - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python_version }} @@ -251,10 +251,10 @@ jobs: OPEN3D_ML_ROOT: ${{ github.workspace }}/Open3D-ML steps: - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Checkout Open3D-ML source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: isl-org/Open3D-ML ref: main @@ -267,7 +267,7 @@ jobs: merge-multiple: true - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python_version }} diff --git a/.github/workflows/style.yml b/.github/workflows/style.yml index 686a73419a6..251cc3711ba 100644 --- a/.github/workflows/style.yml +++ b/.github/workflows/style.yml @@ -19,13 +19,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }} ref: ${{ github.event.pull_request.head.ref || github.ref }} token: ${{ secrets.GITHUB_TOKEN }} - name: Set up Python version - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.12' - name: Install dependencies diff --git a/.github/workflows/ubuntu-cuda.yml b/.github/workflows/ubuntu-cuda.yml index cfd9d62945e..6ae63ea295f 100644 --- a/.github/workflows/ubuntu-cuda.yml +++ b/.github/workflows/ubuntu-cuda.yml @@ -67,7 +67,7 @@ jobs: CCACHE_TAR_NAME : open3d-ci-${{ matrix.CI_CONFIG }} steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: submodules: 'false' - name: Package code diff --git a/.github/workflows/ubuntu-openblas.yml b/.github/workflows/ubuntu-openblas.yml index dc625dd4c9e..25081949a74 100644 --- a/.github/workflows/ubuntu-openblas.yml +++ b/.github/workflows/ubuntu-openblas.yml @@ -22,7 +22,7 @@ jobs: fail-fast: false steps: - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Maximize build space run: | source util/ci_utils.sh @@ -59,7 +59,7 @@ jobs: OPEN3D_CPU_RENDERING: true steps: - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Maximize build space run: | source util/ci_utils.sh diff --git a/.github/workflows/ubuntu-sycl.yml b/.github/workflows/ubuntu-sycl.yml index 3f9ca4edf71..27f61dec615 100644 --- a/.github/workflows/ubuntu-sycl.yml +++ b/.github/workflows/ubuntu-sycl.yml @@ -33,7 +33,7 @@ jobs: BUILD_SHARED_LIBS: [ON, OFF] steps: - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Maximize build space run: | source util/ci_utils.sh diff --git a/.github/workflows/ubuntu-wheel.yml b/.github/workflows/ubuntu-wheel.yml index e8a340e5d8f..2653d245f3b 100644 --- a/.github/workflows/ubuntu-wheel.yml +++ b/.github/workflows/ubuntu-wheel.yml @@ -53,7 +53,7 @@ jobs: BUILD_TENSORFLOW_OPS: ${{ matrix.python_version >= '3.14' && 'OFF' || 'ON' }} steps: - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Maximize build space run: | source util/ci_utils.sh @@ -120,6 +120,86 @@ jobs: run: | gsutil cp ${GITHUB_WORKSPACE}/${{ env.CCACHE_TAR_NAME }}.tar.xz gs://open3d-ci-cache/ + build-wheel-sbsa: + permissions: + contents: write # Release upload + name: Build wheel SBSA + runs-on: ubuntu-24.04-arm + strategy: + fail-fast: false + matrix: + python_version: ['3.10', '3.11', '3.12', '3.13', '3.14'] + is_main: + - ${{ github.ref == 'refs/heads/main' }} + exclude: + - is_main: false + python_version: '3.10' + - is_main: false + python_version: '3.11' + - is_main: false + python_version: '3.12' + - is_main: false + python_version: '3.13' + env: + DEVELOPER_BUILD: ${{ github.event.inputs.developer_build || 'ON' }} + PYTHON_VERSION: ${{ matrix.python_version }} + CCACHE_TAR_NAME: open3d-ubuntu-2204-cuda-sbsa-ci-ccache + OPEN3D_CPU_RENDERING: true + BUILD_PYTORCH_OPS: 'ON' + # TensorFlow v2.20 only supports python 3.9-3.13 + BUILD_TENSORFLOW_OPS: ${{ matrix.python_version >= '3.14' && 'OFF' || 'ON' }} + steps: + - name: Checkout source code + uses: actions/checkout@v6 + - name: Maximize build space + run: | + source util/ci_utils.sh + maximize_ubuntu_github_actions_build_space + - name: Docker build + run: | + PY_NO_DOT="${PYTHON_VERSION//./}" + DEV_SUFFIX="" + if [ "${DEVELOPER_BUILD}" = "ON" ]; then + DEV_SUFFIX="_dev" + fi + docker/docker_build.sh "cuda_wheel_py${PY_NO_DOT}${DEV_SUFFIX}" + shopt -s failglob + PIP_PKG_NAME="$(basename ${GITHUB_WORKSPACE}/open3d-[0-9]*.whl)" + PIP_CPU_PKG_NAME="$(basename ${GITHUB_WORKSPACE}/open3d_cpu*.whl)" + echo "PIP_PKG_NAME=$PIP_PKG_NAME" >> $GITHUB_ENV + echo "PIP_CPU_PKG_NAME=$PIP_CPU_PKG_NAME" >> $GITHUB_ENV + - name: Upload wheel to GitHub artifacts + uses: actions/upload-artifact@v4 + with: + name: ${{ env.PIP_PKG_NAME }} + path: | + ${{ env.PIP_PKG_NAME }} + ${{ env.PIP_CPU_PKG_NAME }} + if-no-files-found: error + - name: Update devel release + if: ${{ github.ref == 'refs/heads/main' }} + env: + GH_TOKEN: ${{ github.token }} + run: | + .github/workflows/update_release.sh ${GITHUB_WORKSPACE}/${{ env.PIP_PKG_NAME }} \ + ${GITHUB_WORKSPACE}/${{ env.PIP_CPU_PKG_NAME }} + - name: GCloud CLI auth + if: ${{ github.ref == 'refs/heads/main' }} + uses: 'google-github-actions/auth@v2' + with: + project_id: ${{ secrets.GCE_PROJECT }} + credentials_json: '${{ secrets.GCE_SA_KEY_GPU_CI }}' + - name: GCloud CLI setup + if: ${{ github.ref == 'refs/heads/main' }} + uses: google-github-actions/setup-gcloud@v2 + with: + version: ${{ env.GCE_CLI_GHA_VERSION }} + project_id: ${{ secrets.GCE_PROJECT }} + - name: Upload ccache to GCS + if: ${{ github.ref == 'refs/heads/main' }} + run: | + gsutil cp ${GITHUB_WORKSPACE}/${{ env.CCACHE_TAR_NAME }}.tar.xz gs://open3d-ci-cache/ + test-wheel-cpu: name: Test wheel CPU permissions: @@ -148,13 +228,13 @@ jobs: BUILD_TENSORFLOW_OPS: ${{ matrix.python_version >= '3.14' && 'OFF' || 'ON' }} steps: - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Maximize build space run: | source util/ci_utils.sh maximize_ubuntu_github_actions_build_space - name: Checkout Open3D-ML source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: isl-org/Open3D-ML ref: main @@ -162,10 +242,10 @@ jobs: - name: Download wheels uses: actions/download-artifact@v4 with: - pattern: open3d*-manylinux*.whl + pattern: open3d*-manylinux*x86_64*.whl merge-multiple: true - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python_version }} - name: Test Python package diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index e7e27444ca2..e1831af236f 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -35,7 +35,7 @@ jobs: OPEN3D_CPU_RENDERING: true steps: - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Maximize build space run: | source util/ci_utils.sh diff --git a/.github/workflows/vtk_packages.yml b/.github/workflows/vtk_packages.yml index f447193a5bd..9be02472ac3 100644 --- a/.github/workflows/vtk_packages.yml +++ b/.github/workflows/vtk_packages.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-20.04 steps: - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: CMake configure run: | mkdir build @@ -56,7 +56,7 @@ jobs: - name: Disk space used run: Get-PSDrive - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Config # Move build directory to C: https://github.com/actions/virtual-environments/issues/1341 run: | @@ -95,7 +95,7 @@ jobs: steps: - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: CMake configure run: | mkdir build diff --git a/.github/workflows/webrtc.yml b/.github/workflows/webrtc.yml index 45b27363ebc..1f192cbfff4 100644 --- a/.github/workflows/webrtc.yml +++ b/.github/workflows/webrtc.yml @@ -34,10 +34,10 @@ jobs: steps: - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set up Python version - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: 3.10 @@ -80,10 +80,10 @@ jobs: steps: - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set up Python version - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.10' diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index a375bea818b..73f9d30dfba 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -27,8 +27,8 @@ concurrency: cancel-in-progress: true env: - PIP_VER: "24.3.1" - CUDA_VERSION: "12.6.0" + PIP_VER: "26.1" + CUDA_VERSION: "13.2.2" SRC_DIR: "D:\\a\\open3d\\open3d" BUILD_DIR: "C:\\Open3D\\build" NPROC: 6 @@ -93,15 +93,15 @@ jobs: echo "$CUDA_PATH\bin" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set up Python version - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.12' - name: Checkout Open3D-ML - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: isl-org/Open3D-ML ref: main @@ -111,7 +111,7 @@ jobs: run: | if ( '${{ matrix.BUILD_CUDA_MODULE }}' -eq 'ON' ) { # python -m pip install -r open3d_ml/requirements-torch-cuda.txt - python -m pip install torch torchvision --index-url https://download.pytorch.org/whl/cu126 + python -m pip install torch==2.12.0 torchvision==0.27.0 --index-url https://download.pytorch.org/whl/cu132 } else { python -m pip install -r open3d_ml/requirements-torch.txt } @@ -277,17 +277,17 @@ jobs: steps: - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Checkout Open3D-ML - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: isl-org/Open3D-ML ref: main path: open3d_ml - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python_version }} @@ -377,10 +377,10 @@ jobs: BUILD_PYTORCH_OPS: 'ON' steps: - name: Checkout source code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Checkout Open3D-ML - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: isl-org/Open3D-ML ref: main @@ -393,7 +393,7 @@ jobs: merge-multiple: true - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python_version }} diff --git a/docker/Dockerfile.wheel b/docker/Dockerfile.wheel index afbc45be5cb..a14e047a663 100644 --- a/docker/Dockerfile.wheel +++ b/docker/Dockerfile.wheel @@ -1,5 +1,5 @@ # FROM must be called before other ARGS except for ARG BASE_IMAGE -ARG BASE_IMAGE=nvidia/cuda:12.6.3-cudnn-devel-ubuntu22.04 +ARG BASE_IMAGE=nvidia/cuda:13.2.2-cudnn-devel-ubuntu22.04 FROM ${BASE_IMAGE} # Customizable build arguments from cuda.yml diff --git a/docker/README.md b/docker/README.md index 8ba3617f73b..dc608cccc8a 100644 --- a/docker/README.md +++ b/docker/README.md @@ -29,7 +29,7 @@ to install Nvidia Docker to run the CUDA container. To verify that the Nvidia Docker is working, run: ```bash -docker run --rm --gpus all nvidia/cuda:12.1-base nvidia-smi +docker run --rm --gpus all nvidia/cuda:13.2.1-cudnn-devel-ubuntu22.04 nvidia-smi ``` ### ARM64 Docker diff --git a/docker/docker_build.sh b/docker/docker_build.sh index 3eb2c188c3a..bec3f7e651d 100755 --- a/docker/docker_build.sh +++ b/docker/docker_build.sh @@ -61,6 +61,7 @@ OPTION: 3-ml-shared-jammy-release : CUDA CI, 3-ml-shared-jammy (cxx11_abi), release mode 3-ml-shared-jammy : CUDA CI, 3-ml-shared-jammy (cxx11_abi), developer mode 5-ml-noble : CUDA CI, 5-ml-noble, developer mode + 5-ml-noble-sbsa : CUDA SBSA CI, 5-ml-noble-sbsa, developer mode # CUDA wheels (Dockerfile.wheel) cuda_wheel_py310_dev : CUDA Python 3.10 wheel, developer mode @@ -81,8 +82,8 @@ HOST_OPEN3D_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. >/dev/null 2>&1 && pw AARCH="$(uname -m)" # do cmake pending on the architecture CMAKE_VERSION=cmake-3.31.8-linux-${AARCH} -CUDA_VERSION=12.6.3-cudnn -CUDA_VERSION_LATEST=12.6.3-cudnn +CUDA_VERSION=13.2.2-cudnn +CUDA_VERSION_LATEST=13.2.2-cudnn print_usage_and_exit_docker_build() { echo "$__usage_docker_build" @@ -176,7 +177,11 @@ openblas_build() { cuda_wheel_build() { BASE_IMAGE=nvidia/cuda:${CUDA_VERSION}-devel-ubuntu22.04 - CCACHE_TAR_NAME=open3d-ubuntu-2204-cuda-ci-ccache + if [[ "${AARCH}" == "aarch64" || "${AARCH}" == "arm64" ]]; then + CCACHE_TAR_NAME=open3d-ubuntu-2204-cuda-sbsa-ci-ccache + else + CCACHE_TAR_NAME=open3d-ubuntu-2204-cuda-ci-ccache + fi options="$(echo "$@" | tr ' ' '|')" echo "[cuda_wheel_build()] options: ${options}" @@ -323,6 +328,21 @@ ci_build() { export BUILD_SYCL_MODULE=OFF } +5-ml-noble-sbsa_export_env() { + export DOCKER_TAG=open3d-ci:5-ml-noble-sbsa + + export BASE_IMAGE=nvidia/cuda:${CUDA_VERSION_LATEST}-devel-ubuntu22.04 + export DEVELOPER_BUILD=ON + export CCACHE_TAR_NAME=open3d-ci-5-ml-noble-sbsa + export PYTHON_VERSION=3.12 + export BUILD_SHARED_LIBS=OFF + export BUILD_CUDA_MODULE=ON + export BUILD_TENSORFLOW_OPS=ON + export BUILD_PYTORCH_OPS=ON + export PACKAGE=OFF + export BUILD_SYCL_MODULE=OFF +} + cpu-static_export_env() { export DOCKER_TAG=open3d-ci:cpu-static @@ -593,6 +613,10 @@ function main() { 5-ml-noble_export_env ci_build ;; + 5-ml-noble-sbsa) + 5-ml-noble-sbsa_export_env + ci_build + ;; *) echo "Error: invalid argument: ${1}." >&2 print_usage_and_exit_docker_build diff --git a/docker/docker_test.sh b/docker/docker_test.sh index c454f9a96c7..75f6d66d86e 100755 --- a/docker/docker_test.sh +++ b/docker/docker_test.sh @@ -54,6 +54,7 @@ OPTION: 3-ml-shared-jammy-release : CUDA CI, 3-ml-shared-jammy (cxx11_abi), release mode 3-ml-shared-jammy : CUDA CI, 3-ml-shared-jammy (cxx11_abi), developer mode 5-ml-noble : CUDA CI, 5-ml-noble, developer mode + 5-ml-noble-sbsa : CUDA SBSA CI, 5-ml-noble-sbsa, developer mode " HOST_OPEN3D_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. >/dev/null 2>&1 && pwd)" @@ -368,6 +369,11 @@ sycl-static) ci_print_env cpp_python_linking_uninstall_test ;; +5-ml-noble-sbsa) + 5-ml-noble-sbsa_export_env + ci_print_env + cpp_python_linking_uninstall_test + ;; *) echo "Error: invalid argument: ${1}." >&2 print_usage_and_exit_docker_test diff --git a/util/ci_utils.sh b/util/ci_utils.sh index 092ae3e103a..2366bfc3e95 100644 --- a/util/ci_utils.sh +++ b/util/ci_utils.sh @@ -27,11 +27,11 @@ BUILD_SYCL_MODULE=${BUILD_SYCL_MODULE:-OFF} # Dependency versions: # CUDA: see docker/docker_build.sh # ML -TENSORFLOW_VER="2.20.0" -TORCH_VER="2.10" +TENSORFLOW_VER="2.21.0" +TORCH_VER="2.12" TORCH_REPO_URL="https://download.pytorch.org/whl/torch/" # Python -PIP_VER="25.3" +PIP_VER="26.1" PROTOBUF_VER="6.31.1" OPEN3D_INSTALL_DIR=~/open3d_install diff --git a/util/install_deps_ubuntu.sh b/util/install_deps_ubuntu.sh index 53ca2befb7c..e02e6523602 100755 --- a/util/install_deps_ubuntu.sh +++ b/util/install_deps_ubuntu.sh @@ -66,6 +66,11 @@ if [ "$DISTRIB_ID" == "Ubuntu" -a "$DISTRIB_RELEASE" == "24.04" ]; then deps=("${deps[@]/libc++-dev/libc++-14-dev}") deps=("${deps[@]/libc++abi-dev/libc++abi-14-dev}") fi +if [ "$DISTRIB_ID" == "Ubuntu" -a "$DISTRIB_RELEASE" == "26.04" ]; then + deps=("${deps[@]/clang/clang-15}") + deps=("${deps[@]/libc++-dev/libc++-15-dev}") + deps=("${deps[@]/libc++abi-dev/libc++abi-15-dev}") +fi # Special case for ARM64 if [ "$(uname -m)" == "aarch64" ]; then From 870a69a134887882507c5632114b18a23930d40b Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Mon, 4 May 2026 07:54:44 +0200 Subject: [PATCH 02/19] SBSA support --- .github/workflows/windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 73f9d30dfba..9e619ec7de2 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -111,7 +111,7 @@ jobs: run: | if ( '${{ matrix.BUILD_CUDA_MODULE }}' -eq 'ON' ) { # python -m pip install -r open3d_ml/requirements-torch-cuda.txt - python -m pip install torch==2.12.0 torchvision==0.27.0 --index-url https://download.pytorch.org/whl/cu132 + python -m pip install torch torchvision --index-url https://download.pytorch.org/whl/cu132 } else { python -m pip install -r open3d_ml/requirements-torch.txt } From b54de5889712ce5850f2d015e51bad8fcb686a5c Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Mon, 4 May 2026 08:03:26 +0200 Subject: [PATCH 03/19] SBSA support --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cdf555b0d11..5802a31707d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ ## Main +- Upgrade CUDA CI to 13.2.2 and add CUDA SBSA Docker and wheel builds on Ubuntu ARM runners. - Upgrade stdgpu third-party library to commit d7c07d0. - Fix performance for non-contiguous NumPy array conversion in pybind vector converters. This change removes restrictive `py::array::c_style` flags and adds a runtime contiguity check, improving Pandas-to-Open3D conversion speed by up to ~50×. (issue #5250)(PR #7343). - Corrected documentation for Link Open3D in C++ projects (broken links). From 60c95fa95797123142aaf999cfcc51bda825cdd8 Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Mon, 4 May 2026 08:51:40 +0200 Subject: [PATCH 04/19] SBSA support --- .github/workflows/update_release.sh | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/update_release.sh b/.github/workflows/update_release.sh index dc55afc70d7..3ad49e8ce24 100755 --- a/.github/workflows/update_release.sh +++ b/.github/workflows/update_release.sh @@ -1,6 +1,11 @@ #!/bin/bash set -euo pipefail +repo_args=() +if [[ -n "${GITHUB_REPOSITORY:-}" ]]; then + repo_args=(--repo "$GITHUB_REPOSITORY") +fi + for artifact in "$@"; do # extract filename supporting both POSIX and Windows-style paths # normalize backslashes to forward slashes for safe filename extraction @@ -10,18 +15,18 @@ for artifact in "$@"; do echo "Uploading $filename (pattern: $pattern)" # use normalized path for upload so single backslashes in Windows paths work - gh release upload main-devel "$norm_path" --clobber + gh release upload "${repo_args[@]}" main-devel "$norm_path" --clobber - for old_asset in $(gh release view main-devel --json assets --jq '.assets[] | .name' || echo ""); do + for old_asset in $(gh release view "${repo_args[@]}" main-devel --json assets --jq '.assets[] | .name' || echo ""); do # shellcheck disable=SC2254 case "$old_asset" in $pattern) if [[ "$old_asset" != "$filename" ]]; then echo "Deleting old asset: $old_asset" - gh release delete-asset main-devel "$old_asset" -y || true + gh release delete-asset "${repo_args[@]}" main-devel "$old_asset" -y || true fi ;; esac done done -gh release view main-devel +gh release view "${repo_args[@]}" main-devel From 58985ea75710b26593c778f59a2cb9973d5d4338 Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Mon, 4 May 2026 09:00:38 +0200 Subject: [PATCH 05/19] downgrade to 13.2.1 (waiting for cuda 13.2.2) --- .github/workflows/windows.yml | 2 +- CHANGELOG.md | 2 +- docker/Dockerfile.wheel | 2 +- docker/docker_build.sh | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 9e619ec7de2..259b47cb4aa 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -28,7 +28,7 @@ concurrency: env: PIP_VER: "26.1" - CUDA_VERSION: "13.2.2" + CUDA_VERSION: "13.2.1" SRC_DIR: "D:\\a\\open3d\\open3d" BUILD_DIR: "C:\\Open3D\\build" NPROC: 6 diff --git a/CHANGELOG.md b/CHANGELOG.md index 5802a31707d..95caf64487c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ ## Main -- Upgrade CUDA CI to 13.2.2 and add CUDA SBSA Docker and wheel builds on Ubuntu ARM runners. +- Upgrade CUDA CI to 13.2.1 and add CUDA SBSA Docker and wheel builds on Ubuntu ARM runners. - Upgrade stdgpu third-party library to commit d7c07d0. - Fix performance for non-contiguous NumPy array conversion in pybind vector converters. This change removes restrictive `py::array::c_style` flags and adds a runtime contiguity check, improving Pandas-to-Open3D conversion speed by up to ~50×. (issue #5250)(PR #7343). - Corrected documentation for Link Open3D in C++ projects (broken links). diff --git a/docker/Dockerfile.wheel b/docker/Dockerfile.wheel index a14e047a663..dbd2ad912b2 100644 --- a/docker/Dockerfile.wheel +++ b/docker/Dockerfile.wheel @@ -1,5 +1,5 @@ # FROM must be called before other ARGS except for ARG BASE_IMAGE -ARG BASE_IMAGE=nvidia/cuda:13.2.2-cudnn-devel-ubuntu22.04 +ARG BASE_IMAGE=nvidia/cuda:13.2.1-cudnn-devel-ubuntu22.04 FROM ${BASE_IMAGE} # Customizable build arguments from cuda.yml diff --git a/docker/docker_build.sh b/docker/docker_build.sh index bec3f7e651d..bb41ab46df5 100755 --- a/docker/docker_build.sh +++ b/docker/docker_build.sh @@ -82,8 +82,8 @@ HOST_OPEN3D_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. >/dev/null 2>&1 && pw AARCH="$(uname -m)" # do cmake pending on the architecture CMAKE_VERSION=cmake-3.31.8-linux-${AARCH} -CUDA_VERSION=13.2.2-cudnn -CUDA_VERSION_LATEST=13.2.2-cudnn +CUDA_VERSION=13.2.1-cudnn +CUDA_VERSION_LATEST=13.2.1-cudnn print_usage_and_exit_docker_build() { echo "$__usage_docker_build" From 29c116b199f7605a0b53142f28ee7324a1f95619 Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Mon, 4 May 2026 09:13:59 +0200 Subject: [PATCH 06/19] test --- .github/workflows/windows.yml | 2 +- util/ci_utils.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 259b47cb4aa..4a1672e2523 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -111,7 +111,7 @@ jobs: run: | if ( '${{ matrix.BUILD_CUDA_MODULE }}' -eq 'ON' ) { # python -m pip install -r open3d_ml/requirements-torch-cuda.txt - python -m pip install torch torchvision --index-url https://download.pytorch.org/whl/cu132 + python -m pip install torch torchvision --index-url https://download.pytorch.org/whl/test/cu132 } else { python -m pip install -r open3d_ml/requirements-torch.txt } diff --git a/util/ci_utils.sh b/util/ci_utils.sh index 2366bfc3e95..e0bc08ecd7c 100644 --- a/util/ci_utils.sh +++ b/util/ci_utils.sh @@ -29,7 +29,7 @@ BUILD_SYCL_MODULE=${BUILD_SYCL_MODULE:-OFF} # ML TENSORFLOW_VER="2.21.0" TORCH_VER="2.12" -TORCH_REPO_URL="https://download.pytorch.org/whl/torch/" +TORCH_REPO_URL="https://download.pytorch.org/whl/test/" # Python PIP_VER="26.1" PROTOBUF_VER="6.31.1" From 3d1703b488b401e9716228ba63384dd8b0a547f2 Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Mon, 4 May 2026 09:23:33 +0200 Subject: [PATCH 07/19] test --- util/ci_utils.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/ci_utils.sh b/util/ci_utils.sh index e0bc08ecd7c..3ea48c4517c 100644 --- a/util/ci_utils.sh +++ b/util/ci_utils.sh @@ -29,7 +29,7 @@ BUILD_SYCL_MODULE=${BUILD_SYCL_MODULE:-OFF} # ML TENSORFLOW_VER="2.21.0" TORCH_VER="2.12" -TORCH_REPO_URL="https://download.pytorch.org/whl/test/" +TORCH_REPO_URL="https://download.pytorch.org/whl/test/torch/" # Python PIP_VER="26.1" PROTOBUF_VER="6.31.1" From 0e5d71f982d1c8b10d08a85506c068d904c40366 Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Mon, 4 May 2026 09:55:42 +0200 Subject: [PATCH 08/19] fix webrtc --- .github/workflows/documentation.yml | 2 +- .github/workflows/macos.yml | 6 ++-- .github/workflows/ubuntu-cuda.yml | 2 +- .github/workflows/ubuntu-openblas.yml | 2 +- .github/workflows/ubuntu-sycl.yml | 2 +- .github/workflows/ubuntu-wheel.yml | 4 +-- .github/workflows/ubuntu.yml | 4 +-- .github/workflows/vtk_packages.yml | 6 ++-- .github/workflows/webrtc.yml | 12 +++---- .github/workflows/windows.yml | 6 ++-- 3rdparty/webrtc/Dockerfile.webrtc | 10 ++++-- 3rdparty/webrtc/README.md | 5 +-- 3rdparty/webrtc/webrtc_build.sh | 50 +++++++++++++++++---------- 3rdparty/webrtc/webrtc_common.cmake | 20 +++++++---- 3rdparty/webrtc/webrtc_download.cmake | 4 +++ CMakeLists.txt | 3 -- docker/Dockerfile.wheel | 3 +- util/ci_utils.sh | 11 ++++-- 18 files changed, 93 insertions(+), 59 deletions(-) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 8461e857d13..7d4a71401a4 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -50,7 +50,7 @@ jobs: mv open3d-*-docs.tar.gz open3d-${GITHUB_SHA}-docs.tar.gz - name: Upload docs - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: open3d-${{ github.sha }}-docs path: open3d-${{ github.sha }}-docs.tar.gz diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 9c19abac9b3..0ff118fa281 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -92,14 +92,14 @@ jobs: - name: Upload package if: ${{ env.BUILD_SHARED_LIBS == 'ON' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: ${{ env.DEVEL_PKG_NAME }} path: build/package/${{ env.DEVEL_PKG_NAME }} if-no-files-found: error - name: Upload Open3D viewer app - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 if: ${{ env.BUILD_SHARED_LIBS == 'OFF' }} with: name: open3d-app-macosx-10_15-${{ runner.arch}} @@ -206,7 +206,7 @@ jobs: echo "PIP_PKG_NAME=$PIP_PKG_NAME" >> $GITHUB_ENV - name: Upload wheel - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: ${{ env.PIP_PKG_NAME }} path: build/lib/python_package/pip_package/${{ env.PIP_PKG_NAME }} diff --git a/.github/workflows/ubuntu-cuda.yml b/.github/workflows/ubuntu-cuda.yml index 6ae63ea295f..83de00636eb 100644 --- a/.github/workflows/ubuntu-cuda.yml +++ b/.github/workflows/ubuntu-cuda.yml @@ -153,7 +153,7 @@ jobs: - name: Upload package if: ${{ env.BUILD_PACKAGE == 'true' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: open3d-devel-linux-x86_64-cuda-${{ matrix.CI_CONFIG }} path: open3d-devel-linux*.tar.xz diff --git a/.github/workflows/ubuntu-openblas.yml b/.github/workflows/ubuntu-openblas.yml index 25081949a74..a4f294f9a2d 100644 --- a/.github/workflows/ubuntu-openblas.yml +++ b/.github/workflows/ubuntu-openblas.yml @@ -84,7 +84,7 @@ jobs: run: docker/docker_test.sh "${DOCKER_TAG}" - name: Upload wheel to GitHub artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: path: ${{ env.PIP_PKG_NAME }} name: ${{ env.PIP_PKG_NAME }} diff --git a/.github/workflows/ubuntu-sycl.yml b/.github/workflows/ubuntu-sycl.yml index 27f61dec615..96f0467bac0 100644 --- a/.github/workflows/ubuntu-sycl.yml +++ b/.github/workflows/ubuntu-sycl.yml @@ -56,7 +56,7 @@ jobs: - name: Upload Python wheel and C++ binary package to GitHub artifacts if: ${{ matrix.BUILD_SHARED_LIBS == 'ON' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: open3d-sycl-linux-wheel-and-binary path: | diff --git a/.github/workflows/ubuntu-wheel.yml b/.github/workflows/ubuntu-wheel.yml index 2653d245f3b..bbc0fcfa463 100644 --- a/.github/workflows/ubuntu-wheel.yml +++ b/.github/workflows/ubuntu-wheel.yml @@ -89,7 +89,7 @@ jobs: echo "PIP_PKG_NAME=$PIP_PKG_NAME" >> $GITHUB_ENV echo "PIP_CPU_PKG_NAME=$PIP_CPU_PKG_NAME" >> $GITHUB_ENV - name: Upload wheel to GitHub artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: ${{ env.PIP_PKG_NAME }} path: | @@ -169,7 +169,7 @@ jobs: echo "PIP_PKG_NAME=$PIP_PKG_NAME" >> $GITHUB_ENV echo "PIP_CPU_PKG_NAME=$PIP_CPU_PKG_NAME" >> $GITHUB_ENV - name: Upload wheel to GitHub artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: ${{ env.PIP_PKG_NAME }} path: | diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index e1831af236f..a871cf962d0 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -64,14 +64,14 @@ jobs: fi - name: Upload package to GitHub artifacts if: ${{ env.BUILD_SHARED_LIBS == 'ON' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: open3d-devel-linux-x86_64 path: open3d-devel-*.tar.xz if-no-files-found: error - name: Upload viewer to GitHub artifacts if: ${{ env.BUILD_SHARED_LIBS == 'OFF' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: open3d-viewer-Linux path: open3d-viewer-*-Linux.deb diff --git a/.github/workflows/vtk_packages.yml b/.github/workflows/vtk_packages.yml index 9be02472ac3..9f0902d1bca 100644 --- a/.github/workflows/vtk_packages.yml +++ b/.github/workflows/vtk_packages.yml @@ -26,7 +26,7 @@ jobs: make -j$(nproc) cmake -E sha256sum vtk*.tar.gz > checksum_linux.txt - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: vtk_linux path: | @@ -78,7 +78,7 @@ jobs: ls cmake -E sha256sum (get-item vtk*.tar.gz).Name > checksum_win_${{matrix.configuration}}.txt - name: Upload package - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: vtk_windows_${{matrix.configuration}} path: | @@ -107,7 +107,7 @@ jobs: make -j2 cmake -E sha256sum vtk*.tar.gz > checksum_macos.txt - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: vtk_macos path: | diff --git a/.github/workflows/webrtc.yml b/.github/workflows/webrtc.yml index 1f192cbfff4..831bb138f8a 100644 --- a/.github/workflows/webrtc.yml +++ b/.github/workflows/webrtc.yml @@ -7,11 +7,11 @@ on: webrtc_commit: description: 'Specify WebRTC commit to build.' required: false - default: '60e674842ebae283cc6b2627f4b6f2f8186f3317' # Date: Wed Apr 7 19:12:13 2021 +0200 + default: 'ffb74219ec3edff87b8bb9a88c1710dc7d2df97e' # Upstream HEAD on 2026-05-04 depot_tools_commit: description: 'Specify Depot Tools commit to to use for the build.' required: false - default: 'e1a98941d3ab10549be6d82d0686bb0fb91ec903' # Date: Wed Apr 7 21:35:29 2021 +0000 + default: 'ff41874736c800b2f79aa8cf9596c7919066eb02' # Upstream HEAD on 2026-05-04 concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} @@ -30,7 +30,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-22.04, macos-13] + os: [ubuntu-24.04, ubuntu-24.04-arm, macos-14] steps: - name: Checkout source code @@ -42,7 +42,7 @@ jobs: python-version: 3.10 - name: Install dependencies - if: ${{ matrix.os == 'ubuntu-22.04' }} + if: ${{ startsWith(matrix.os, 'ubuntu-24.04') }} run: | source 3rdparty/webrtc/webrtc_build.sh install_dependencies_ubuntu @@ -58,7 +58,7 @@ jobs: build_webrtc - name: Upload WebRTC - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: webrtc_release_${{ matrix.os }} path: | @@ -166,7 +166,7 @@ jobs: cmake -E sha256sum webrtc_${env:WEBRTC_COMMIT_SHORT}_win.zip | Tee-Object -FilePath checksum_win.txt - name: Upload WebRTC - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: webrtc_release_windows path: | diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 4a1672e2523..3508b7718eb 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -166,7 +166,7 @@ jobs: - name: Upload Package if: ${{ matrix.BUILD_SHARED_LIBS == 'ON' && matrix.BUILD_CUDA_MODULE == 'OFF' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: ${{ env.DEVEL_PKG_NAME }} path: ${{ env.BUILD_DIR }}/package/${{ env.DEVEL_PKG_NAME }} @@ -193,7 +193,7 @@ jobs: - name: Upload Viewer if: ${{ matrix.BUILD_SHARED_LIBS == 'OFF' && matrix.STATIC_RUNTIME == 'ON' && matrix.BUILD_CUDA_MODULE == 'OFF' && matrix.CONFIG == 'Release' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: open3d-app-windows-amd64 path: C:\Program Files\Open3D\bin\Open3D @@ -337,7 +337,7 @@ jobs: echo "PIP_PKG_NAME=$PIP_PKG_NAME" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - name: Upload wheel - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: ${{ env.PIP_PKG_NAME }} path: ${{ env.BUILD_DIR }}/lib/python_package/pip_package/${{ env.PIP_PKG_NAME }} diff --git a/3rdparty/webrtc/Dockerfile.webrtc b/3rdparty/webrtc/Dockerfile.webrtc index 8c127c97b6d..16770438f48 100644 --- a/3rdparty/webrtc/Dockerfile.webrtc +++ b/3rdparty/webrtc/Dockerfile.webrtc @@ -6,16 +6,22 @@ # - docker build --build-arg GLIBCXX_USE_CXX11_ABI=0 -t open3d-webrtc:abi0 \ # -f 3rdparty/webrtc/Dockerfile.webrtc . # - docker run --rm --entrypoint cat open3d-webrtc:abi0 \ -# webrtc_60e6748_cxx-abi-0.tar.gz > webrtc_60e6748_cxx-abi-0.tar.gz +# 'webrtc_*_cxx-abi-0.tar.gz' > webrtc_cxx-abi-0.tar.gz # > GLIBCXX_USE_CXX11_ABI=1 # - docker build --build-arg GLIBCXX_USE_CXX11_ABI=1 -t open3d-webrtc:abi1 \ # -f 3rdparty/webrtc/Dockerfile.webrtc . # - docker run --rm --entrypoint cat open3d-webrtc:abi1 \ -# webrtc_60e6748_cxx-abi-1.tar.gz > webrtc_60e6748_cxx-abi-1.tar.gz +# 'webrtc_*_cxx-abi-1.tar.gz' > webrtc_cxx-abi-1.tar.gz FROM ubuntu:22.04 ARG SUDO=command +ARG GLIBCXX_USE_CXX11_ABI=1 +ARG WEBRTC_COMMIT +ARG DEPOT_TOOLS_COMMIT +ENV GLIBCXX_USE_CXX11_ABI=${GLIBCXX_USE_CXX11_ABI} +ENV WEBRTC_COMMIT=${WEBRTC_COMMIT} +ENV DEPOT_TOOLS_COMMIT=${DEPOT_TOOLS_COMMIT} COPY 3rdparty/webrtc 3rdparty/webrtc RUN bash -c "source 3rdparty/webrtc/webrtc_build.sh && install_dependencies_ubuntu purge-cache" RUN bash -c "source 3rdparty/webrtc/webrtc_build.sh && download_webrtc_sources" diff --git a/3rdparty/webrtc/README.md b/3rdparty/webrtc/README.md index eb54b078089..460675e2522 100644 --- a/3rdparty/webrtc/README.md +++ b/3rdparty/webrtc/README.md @@ -13,7 +13,7 @@ webrtc_download.cmake # Used by Open3D CMake. Consume pre-compiled WebRTC. (Meth webrtc_build.cmake # Used by Open3D CMake. Build and consume WebRTC. (Method 2) # Other files -0001-xxx.patch x3 # Git patch for -DBUILD_WEBRTC_FROM_SOURCE=ON. (Method 1 Prepare-Phase & Method 2) +0001-xxx.patch x3 # Git patch for old-ABI WebRTC source builds. (Method 1 Prepare-Phase & Method 2) CMakeLists.txt # Used by `webrtc_build.sh` to compile WebRTC. (Method 1 Prepare-Phase) Dockerfile.webrtc # Calls `webrtc_build.sh` to compile WebRTC. (Method 1 Prepare-Phase) webrtc_build.sh # Used by `Dockerfile.webrtc`. (Method 1 Prepare-Phase) @@ -53,7 +53,8 @@ need to build WebRTC manually. how to do that. 2. `depot_tools` and `webrtc` need to be compatible, see: https://chromium.googlesource.com/chromium/src/+/master/docs/building_old_revisions.md -3. Apply the following patch to enable GLIBCXX_USE_CXX11_ABI selection: +3. For old-ABI builds (`GLIBCXX_USE_CXX11_ABI=0`), apply the following patches + to enable GLIBCXX_USE_CXX11_ABI selection: ``` 0001-build-enable-rtc_use_cxx11_abi-option.patch # apply to webrtc/src 0001-src-enable-rtc_use_cxx11_abi-option.patch # apply to webrtc/src/build diff --git a/3rdparty/webrtc/webrtc_build.sh b/3rdparty/webrtc/webrtc_build.sh index b4e48f126b2..d4ad07a7287 100755 --- a/3rdparty/webrtc/webrtc_build.sh +++ b/3rdparty/webrtc/webrtc_build.sh @@ -27,19 +27,20 @@ set -euox pipefail # 2) depot_tools and webrtc have compatible versions, see: # https://chromium.googlesource.com/chromium/src/+/master/docs/building_old_revisions.md # -# 3) Apply the following patch to enable GLIBCXX_USE_CXX11_ABI selection: +# 3) For old-ABI builds, apply the following patches to enable +# GLIBCXX_USE_CXX11_ABI selection: # - 0001-build-enable-rtc_use_cxx11_abi-option.patch # apply to webrtc/src # - 0001-src-enable-rtc_use_cxx11_abi-option.patch # apply to webrtc/src/build # - 0001-third_party-enable-rtc_use_cxx11_abi-option.patch # apply to webrtc/src/third_party # Note that these patches may or may not be compatible with your custom # WebRTC commits. You may have to patch them manually. -# Date: Wed Apr 7 19:12:13 2021 +0200 -WEBRTC_COMMIT=${WEBRTC_COMMIT:-60e674842ebae283cc6b2627f4b6f2f8186f3317} -# Date: Wed Apr 7 21:35:29 2021 +0000 -DEPOT_TOOLS_COMMIT=${DEPOT_TOOLS_COMMIT:-e1a98941d3ab10549be6d82d0686bb0fb91ec903} +# Upstream HEAD on 2026-05-04 +WEBRTC_COMMIT=${WEBRTC_COMMIT:-ffb74219ec3edff87b8bb9a88c1710dc7d2df97e} +# Upstream HEAD on 2026-05-04 +DEPOT_TOOLS_COMMIT=${DEPOT_TOOLS_COMMIT:-ff41874736c800b2f79aa8cf9596c7919066eb02} -GLIBCXX_USE_CXX11_ABI=${GLIBCXX_USE_CXX11_ABI:-0} +GLIBCXX_USE_CXX11_ABI=${GLIBCXX_USE_CXX11_ABI:-1} NPROC=${NPROC:-$(getconf _NPROCESSORS_ONLN)} # POSIX: MacOS + Linux SUDO=${SUDO:-sudo} # Set to command if running inside docker export PATH="$PWD/../depot_tools":${PATH} # $(basename $PWD) == Open3D @@ -48,7 +49,7 @@ export DEPOT_TOOLS_UPDATE=0 install_dependencies_ubuntu() { options="$(echo "$@" | tr ' ' '|')" # Dependencies - # python* : resolve ImportError: No module named pkg_resources + # python3* : resolve ImportError: No module named pkg_resources # libglib2.0-dev: resolve pkg_config("glib") $SUDO apt-get update $SUDO apt-get install -y \ @@ -58,10 +59,11 @@ install_dependencies_ubuntu() { git \ gnupg \ libglib2.0-dev \ - python \ - python-pip \ - python-setuptools \ - python-wheel \ + python-is-python3 \ + python3 \ + python3-pip \ + python3-setuptools \ + python3-wheel \ software-properties-common \ tree \ curl @@ -107,14 +109,18 @@ download_webrtc_sources() { build_webrtc() { # PWD=Open3D OPEN3D_DIR="$PWD" - echo Apply patches cp 3rdparty/webrtc/{CMakeLists.txt,webrtc_common.cmake} ../webrtc - git -C ../webrtc/src apply \ - "$OPEN3D_DIR"/3rdparty/webrtc/0001-src-enable-rtc_use_cxx11_abi-option.patch - git -C ../webrtc/src/build apply \ - "$OPEN3D_DIR"/3rdparty/webrtc/0001-build-enable-rtc_use_cxx11_abi-option.patch - git -C ../webrtc/src/third_party apply \ - "$OPEN3D_DIR"/3rdparty/webrtc/0001-third_party-enable-rtc_use_cxx11_abi-option.patch + if [[ "${GLIBCXX_USE_CXX11_ABI}" == "0" ]]; then + echo Apply old-ABI patches + git -C ../webrtc/src apply \ + "$OPEN3D_DIR"/3rdparty/webrtc/0001-src-enable-rtc_use_cxx11_abi-option.patch + git -C ../webrtc/src/build apply \ + "$OPEN3D_DIR"/3rdparty/webrtc/0001-build-enable-rtc_use_cxx11_abi-option.patch + git -C ../webrtc/src/third_party apply \ + "$OPEN3D_DIR"/3rdparty/webrtc/0001-third_party-enable-rtc_use_cxx11_abi-option.patch + else + echo Skip old-ABI patches + fi WEBRTC_COMMIT_SHORT=$(git -C ../webrtc/src rev-parse --short=7 HEAD) echo Build WebRTC @@ -131,8 +137,14 @@ build_webrtc() { echo Package WebRTC if [[ $(uname -s) == 'Linux' ]]; then + WEBRTC_ARCH=$(uname -m) + if [[ "${WEBRTC_ARCH}" == "aarch64" || "${WEBRTC_ARCH}" == "arm64" ]]; then + WEBRTC_PLATFORM="linux_arm64" + else + WEBRTC_PLATFORM="linux" + fi tar -czf \ - "$OPEN3D_DIR/webrtc_${WEBRTC_COMMIT_SHORT}_linux_cxx-abi-${GLIBCXX_USE_CXX11_ABI}.tar.gz" \ + "$OPEN3D_DIR/webrtc_${WEBRTC_COMMIT_SHORT}_${WEBRTC_PLATFORM}_cxx-abi-${GLIBCXX_USE_CXX11_ABI}.tar.gz" \ webrtc_release elif [[ $(uname -s) == 'Darwin' ]]; then tar -czf \ diff --git a/3rdparty/webrtc/webrtc_common.cmake b/3rdparty/webrtc/webrtc_common.cmake index 98c19336c6a..1688eda2c69 100644 --- a/3rdparty/webrtc/webrtc_common.cmake +++ b/3rdparty/webrtc/webrtc_common.cmake @@ -9,23 +9,29 @@ function(get_webrtc_args WEBRTC_ARGS) set(WEBRTC_ARGS "") - if(NOT MSVC) - # ABI selection - if(GLIBCXX_USE_CXX11_ABI) - set(WEBRTC_ARGS rtc_use_cxx11_abi=true\n${WEBRTC_ARGS}) - else() - set(WEBRTC_ARGS rtc_use_cxx11_abi=false\n${WEBRTC_ARGS}) - endif() + if(NOT MSVC AND NOT GLIBCXX_USE_CXX11_ABI) + # ABI selection. Upstream WebRTC does not declare this arg; the + # companion patches add it for old-ABI compatibility builds only. + set(WEBRTC_ARGS rtc_use_cxx11_abi=false\n${WEBRTC_ARGS}) endif() if (APPLE) # WebRTC default set(WEBRTC_ARGS is_clang=true\n${WEBRTC_ARGS}) + elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)$") + # ARM64 Linux builds need Clang for WebRTC's NEON-enabled sources. + set(WEBRTC_ARGS is_clang=true\n${WEBRTC_ARGS}) else() # Do not use Google clang for compilation due to LTO error when Open3D # is built with gcc on Ubuntu 20.04. set(WEBRTC_ARGS is_clang=false\n${WEBRTC_ARGS}) endif() + # Architecture + if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)$") + set(WEBRTC_ARGS target_os="linux"\n${WEBRTC_ARGS}) + set(WEBRTC_ARGS target_cpu="arm64"\n${WEBRTC_ARGS}) + endif() + # Don't use libc++ (Clang), use libstdc++ (GNU) # https://stackoverflow.com/a/47384787/1255535 set(WEBRTC_ARGS use_custom_libcxx=false\n${WEBRTC_ARGS}) diff --git a/3rdparty/webrtc/webrtc_download.cmake b/3rdparty/webrtc/webrtc_download.cmake index 8ac5a0b6ef7..95502eeb16f 100644 --- a/3rdparty/webrtc/webrtc_download.cmake +++ b/3rdparty/webrtc/webrtc_download.cmake @@ -23,6 +23,10 @@ elseif (WIN32) ) set(WEBRTC_SHA256 f4686d0028ef5c36c5d7158a638fa834b63183b522f0b63932f7f70ebffeea22) else() # Linux + if(LINUX_AARCH64) + message(FATAL_ERROR "Pre-built WebRTC binaries are not available for " + "Linux ARM64. Please use BUILD_WEBRTC_FROM_SOURCE=ON.") + endif() if(GLIBCXX_USE_CXX11_ABI) set(WEBRTC_URL https://github.com/isl-org/open3d_downloads/releases/download/webrtc-v3/webrtc_${WEBRTC_VER}_cxx-abi-1.tar.gz diff --git a/CMakeLists.txt b/CMakeLists.txt index c9a87bc4c4a..3a4761858f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -231,9 +231,6 @@ endif() if(BUNDLE_OPEN3D_ML AND NOT (BUILD_TENSORFLOW_OPS OR BUILD_PYTORCH_OPS)) message(SEND_ERROR "3DML depends on TensorFlow or PyTorch Ops. Enable them with -DBUILD_TENSORFLOW_OPS=ON or -DBUILD_PYTORCH_OPS=ON") endif() -if(BUILD_WEBRTC AND LINUX_AARCH64) - message(FATAL_ERROR "BUILD_WEBRTC=ON is not yet supported on ARM Linux") -endif() if(BUILD_WEBRTC AND NOT BUILD_GUI) message(FATAL_ERROR "BUILD_WEBRTC=ON requires BUILD_GUI=ON") endif() diff --git a/docker/Dockerfile.wheel b/docker/Dockerfile.wheel index dbd2ad912b2..e6634954584 100644 --- a/docker/Dockerfile.wheel +++ b/docker/Dockerfile.wheel @@ -76,7 +76,8 @@ RUN ccache --version \ && mkdir -p ${CCACHE_DIR_PARENT} \ && cd ${CCACHE_DIR_PARENT} \ && (wget -nv https://storage.googleapis.com/open3d-ci-cache/${CCACHE_TAR_NAME}.tar.xz https://storage.googleapis.com/open3d-ci-cache/${CCACHE_TAR_NAME}.tar.gz || true) \ - && { tar -xf ${CCACHE_TAR_NAME}.tar.?z || true; } + && { tar -xf ${CCACHE_TAR_NAME}.tar.?z || true; } \ + && mkdir -p ${CCACHE_DIR} # We need to set ccache size explicitly with -M, otherwise the default size is # *not* determined by ccache's default, but the downloaded ccache file's config. RUN ccache -M 4G \ diff --git a/util/ci_utils.sh b/util/ci_utils.sh index 3ea48c4517c..5b9aa8f79ac 100644 --- a/util/ci_utils.sh +++ b/util/ci_utils.sh @@ -172,10 +172,16 @@ build_pip_package() { if [[ "build_jupyter" =~ ^($options)$ ]]; then echo "Building Jupyter extension in Python wheel." BUILD_JUPYTER_EXTENSION=ON - BUILD_WEBRTC_FROM_SOURCE=ON + BUILD_WEBRTC=ON + if [[ "$AARCH" == "aarch64" ]]; then + BUILD_WEBRTC_FROM_SOURCE=ON + else + BUILD_WEBRTC_FROM_SOURCE=OFF + fi else echo "Jupyter extension disabled in Python wheel." BUILD_JUPYTER_EXTENSION=OFF + BUILD_WEBRTC=OFF BUILD_WEBRTC_FROM_SOURCE=OFF fi set -u @@ -193,7 +199,8 @@ build_pip_package() { "-DBUILD_PYTORCH_OPS=$BUILD_PYTORCH_OPS" "-DBUILD_FILAMENT_FROM_SOURCE=$BUILD_FILAMENT_FROM_SOURCE" "-DBUILD_JUPYTER_EXTENSION=$BUILD_JUPYTER_EXTENSION" - "-DBUILD_WEBRTC=$BUILD_WEBRTC_FROM_SOURCE" + "-DBUILD_WEBRTC=$BUILD_WEBRTC" + "-DBUILD_WEBRTC_FROM_SOURCE=$BUILD_WEBRTC_FROM_SOURCE" "-DCMAKE_INSTALL_PREFIX=$OPEN3D_INSTALL_DIR" "-DCMAKE_BUILD_TYPE=Release" "-DBUILD_UNIT_TESTS=OFF" From a4b2347afe5bd093fcb3b8b5704893a243a5b28c Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Mon, 4 May 2026 10:14:53 +0200 Subject: [PATCH 09/19] fix webrtc --- 3rdparty/webrtc/webrtc_build.cmake | 25 ++++++++++++++++++++----- docker/Dockerfile.wheel | 6 +++++- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/3rdparty/webrtc/webrtc_build.cmake b/3rdparty/webrtc/webrtc_build.cmake index 6945db48dcd..500d40c34f6 100644 --- a/3rdparty/webrtc/webrtc_build.cmake +++ b/3rdparty/webrtc/webrtc_build.cmake @@ -12,9 +12,24 @@ cmake_dependent_option(WEBRTC_IS_DEBUG "WebRTC Debug build. Use ON for Win32 Open3D Debug." OFF "NOT CMAKE_BUILD_TYPE STREQUAL Debug OR NOT WIN32" ON) -# Set paths -set(WEBRTC_ROOT ${CMAKE_BINARY_DIR}/webrtc/src/ext_webrtc) -set(DEPOT_TOOLS_ROOT ${PROJECT_SOURCE_DIR}/../depot_tools) +# Set paths. WebRTC source builds intentionally consume an existing checkout +# prepared by webrtc_build.sh or the WebRTC workflow; CMake does not fetch it. +set(WEBRTC_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../webrtc" CACHE PATH + "Path to the WebRTC checkout containing src/.") +set(DEPOT_TOOLS_ROOT "${PROJECT_SOURCE_DIR}/../depot_tools" CACHE PATH + "Path to depot_tools.") +set(WEBRTC_ROOT ${WEBRTC_SOURCE_DIR}) + +if(NOT EXISTS ${WEBRTC_ROOT}/src) + message(FATAL_ERROR "Cannot find ${WEBRTC_ROOT}/src. Please run " + "3rdparty/webrtc/webrtc_build.sh::download_webrtc_sources() first, " + "or set WEBRTC_SOURCE_DIR to an existing WebRTC checkout.") +endif() +if(NOT EXISTS ${DEPOT_TOOLS_ROOT}/gn) + message(FATAL_ERROR "Cannot find ${DEPOT_TOOLS_ROOT}/gn. Please run " + "3rdparty/webrtc/webrtc_build.sh::download_webrtc_sources() first, " + "or set DEPOT_TOOLS_ROOT to an existing depot_tools checkout.") +endif() # Set WebRTC build type path if(WEBRTC_IS_DEBUG) @@ -37,8 +52,8 @@ endif() ExternalProject_Add( ext_webrtc PREFIX webrtc - DOWNLOAD_COMMAND ${CMAKE_COMMAND} -E rm -rf ext_webrtc - COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/../webrtc ext_webrtc + SOURCE_DIR ${WEBRTC_ROOT} + DOWNLOAD_COMMAND "" UPDATE_COMMAND "" CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/args.gn ${WEBRTC_NINJA_ROOT}/args.gn diff --git a/docker/Dockerfile.wheel b/docker/Dockerfile.wheel index e6634954584..73fa43ae984 100644 --- a/docker/Dockerfile.wheel +++ b/docker/Dockerfile.wheel @@ -141,7 +141,11 @@ WORKDIR /root/Open3D RUN export NPROC=$(($(nproc)+2)) \ && export BUILD_SHARED_LIBS=OFF \ && source /root/Open3D/util/ci_utils.sh \ - && build_pip_package build_azure_kinect build_jupyter \ + && if [ "$(uname -m)" = "aarch64" ]; then \ + build_pip_package build_azure_kinect; \ + else \ + build_pip_package build_azure_kinect build_jupyter; \ + fi \ && if [ ${CI:-}a != a ]; then find /root/Open3D/build -mindepth 1 -maxdepth 1 ! -name 'lib' -exec rm -rf {} + ; fi # remove build folder (except lib) to save CI space on Github From f81ef0a36c0b6d2eeefea4269b1f7f4b28168c21 Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Mon, 4 May 2026 10:25:18 +0200 Subject: [PATCH 10/19] fix webrtc --- docker/Dockerfile.ci | 10 +++++++--- docker/Dockerfile.wheel | 14 ++++++++++---- docker/docker_build.sh | 7 ++++++- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/docker/Dockerfile.ci b/docker/Dockerfile.ci index 5c1701396b0..93424caade0 100755 --- a/docker/Dockerfile.ci +++ b/docker/Dockerfile.ci @@ -1,3 +1,4 @@ +# syntax=docker/dockerfile:1.7 # FROM must be called before other ARGS except for ARG BASE_IMAGE ARG BASE_IMAGE FROM ${BASE_IMAGE} @@ -57,6 +58,7 @@ ENV BUILD_SYCL_MODULE=${BUILD_SYCL_MODULE} ENV DEBIAN_FRONTEND=noninteractive ENV TZ=America/Los_Angeles ENV SUDO=command +ENV CCACHE_DIR=/root/.cache/ccache # The base image already contains the oneAPI packages. # Having this in the list can cause checksum errors when apt-get update. @@ -122,7 +124,8 @@ RUN CMAKE_VERSION_NUMBERS=$(echo "${CMAKE_VERSION}" | cut -d"-" -f2) \ # - CCACHE_DIR_PARENT = ~/.cache # We need to set ccache size explicitly with -M, otherwise the defualt size is # *not* determined by ccache's default, but the downloaded ccache file's config. -RUN ccache --version \ +RUN --mount=type=cache,target=/root/.cache/ccache,sharing=locked \ + ccache --version \ && CCACHE_DIR=$(ccache -p | grep cache_dir | grep -oE "[^ ]+$") \ && CCACHE_DIR_NAME=$(basename ${CCACHE_DIR}) \ && CCACHE_DIR_PARENT=$(dirname ${CCACHE_DIR}) \ @@ -170,7 +173,7 @@ RUN mkdir -p /etc/apt/keyrings \ && yarn --version # Build all -RUN \ +RUN --mount=type=cache,target=/root/.cache/ccache,sharing=locked \ if [ "${BUILD_SYCL_MODULE}" = "ON" ]; then \ export CMAKE_CXX_COMPILER=icpx; \ export CMAKE_C_COMPILER=icx; \ @@ -211,7 +214,8 @@ RUN \ # If CI is not null or unset, remove all large build folders to save disk space # Compress ccache folder, move to / directory -RUN ccache -s \ +RUN --mount=type=cache,target=/root/.cache/ccache,sharing=locked \ + ccache -s \ && CCACHE_DIR=$(ccache -p | grep cache_dir | grep -oE "[^ ]+$") \ && CCACHE_DIR_NAME=$(basename ${CCACHE_DIR}) \ && CCACHE_DIR_PARENT=$(dirname ${CCACHE_DIR}) \ diff --git a/docker/Dockerfile.wheel b/docker/Dockerfile.wheel index 73fa43ae984..d52584a3501 100644 --- a/docker/Dockerfile.wheel +++ b/docker/Dockerfile.wheel @@ -1,3 +1,4 @@ +# syntax=docker/dockerfile:1.7 # FROM must be called before other ARGS except for ARG BASE_IMAGE ARG BASE_IMAGE=nvidia/cuda:13.2.1-cudnn-devel-ubuntu22.04 FROM ${BASE_IMAGE} @@ -24,6 +25,7 @@ ENV BUILD_TENSORFLOW_OPS=${BUILD_TENSORFLOW_OPS} ENV DEBIAN_FRONTEND=noninteractive ENV TZ=America/Los_Angeles ENV SUDO=command +ENV CCACHE_DIR=/root/.cache/ccache SHELL ["/bin/bash", "-c"] @@ -69,7 +71,8 @@ ENV PATH=${HOME}/${CMAKE_VERSION}/bin:${PATH} # CCACHE_DIR = ~/.cache/ccache # CCACHE_DIR_NAME = ccache # CCACHE_DIR_PARENT = ~/.cache -RUN ccache --version \ +RUN --mount=type=cache,target=/root/.cache/ccache,sharing=locked \ + ccache --version \ && CCACHE_DIR=$(ccache -p | grep cache_dir | grep -oE "[^ ]+$") \ && CCACHE_DIR_NAME=$(basename ${CCACHE_DIR}) \ && CCACHE_DIR_PARENT=$(dirname ${CCACHE_DIR}) \ @@ -80,7 +83,8 @@ RUN ccache --version \ && mkdir -p ${CCACHE_DIR} # We need to set ccache size explicitly with -M, otherwise the default size is # *not* determined by ccache's default, but the downloaded ccache file's config. -RUN ccache -M 4G \ +RUN --mount=type=cache,target=/root/.cache/ccache,sharing=locked \ + ccache -M 4G \ && ccache -s # pyenv @@ -138,7 +142,8 @@ COPY . /root/Open3D WORKDIR /root/Open3D # Build python wheel -RUN export NPROC=$(($(nproc)+2)) \ +RUN --mount=type=cache,target=/root/.cache/ccache,sharing=locked \ + export NPROC=$(($(nproc)+2)) \ && export BUILD_SHARED_LIBS=OFF \ && source /root/Open3D/util/ci_utils.sh \ && if [ "$(uname -m)" = "aarch64" ]; then \ @@ -150,7 +155,8 @@ RUN export NPROC=$(($(nproc)+2)) \ # remove build folder (except lib) to save CI space on Github # Compress ccache folder, move to / directory -RUN ccache -s \ +RUN --mount=type=cache,target=/root/.cache/ccache,sharing=locked \ + ccache -s \ && CCACHE_DIR=$(ccache -p | grep cache_dir | grep -oE "[^ ]+$") \ && CCACHE_DIR_NAME=$(basename ${CCACHE_DIR}) \ && CCACHE_DIR_PARENT=$(dirname ${CCACHE_DIR}) \ diff --git a/docker/docker_build.sh b/docker/docker_build.sh index bb41ab46df5..96b823a9f3c 100755 --- a/docker/docker_build.sh +++ b/docker/docker_build.sh @@ -16,6 +16,7 @@ # This make the Docker image reproducible across different machines. set -euo pipefail +export DOCKER_BUILDKIT=1 export BUILDKIT_PROGRESS=plain __usage_docker_build="USAGE: @@ -80,8 +81,12 @@ HOST_OPEN3D_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. >/dev/null 2>&1 && pw # Shared variables AARCH="$(uname -m)" +CMAKE_AARCH=${AARCH} +if [[ "${CMAKE_AARCH}" == "arm64" ]]; then + CMAKE_AARCH=aarch64 +fi # do cmake pending on the architecture -CMAKE_VERSION=cmake-3.31.8-linux-${AARCH} +CMAKE_VERSION=cmake-3.31.8-linux-${CMAKE_AARCH} CUDA_VERSION=13.2.1-cudnn CUDA_VERSION_LATEST=13.2.1-cudnn From d2c8edde4648a5e465bbeb2fc87816fef2183b2c Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Mon, 4 May 2026 10:55:02 +0200 Subject: [PATCH 11/19] fix windows --- .github/workflows/clean-gcloud-profiles.yml | 2 +- .github/workflows/ubuntu-cuda.yml | 2 +- .github/workflows/ubuntu-sycl.yml | 2 +- .github/workflows/ubuntu-wheel.yml | 4 ++-- .github/workflows/windows.yml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/clean-gcloud-profiles.yml b/.github/workflows/clean-gcloud-profiles.yml index 2521b1de160..37702f8fe3b 100644 --- a/.github/workflows/clean-gcloud-profiles.yml +++ b/.github/workflows/clean-gcloud-profiles.yml @@ -33,7 +33,7 @@ jobs: fail-fast: false steps: - name: GCloud CLI auth - uses: 'google-github-actions/auth@v2' + uses: 'google-github-actions/auth@v3' with: project_id: ${{ secrets.GCE_PROJECT }} credentials_json: '${{ secrets.GCE_SA_KEY_GPU_CI }}' diff --git a/.github/workflows/ubuntu-cuda.yml b/.github/workflows/ubuntu-cuda.yml index 83de00636eb..1174dcfce35 100644 --- a/.github/workflows/ubuntu-cuda.yml +++ b/.github/workflows/ubuntu-cuda.yml @@ -77,7 +77,7 @@ jobs: tar -czvf Open3D.tar.gz Open3D ls -alh - name: GCloud CLI auth - uses: 'google-github-actions/auth@v2' + uses: 'google-github-actions/auth@v3' with: project_id: ${{ secrets.GCE_PROJECT }} credentials_json: '${{ secrets.GCE_SA_KEY_GPU_CI }}' diff --git a/.github/workflows/ubuntu-sycl.yml b/.github/workflows/ubuntu-sycl.yml index 96f0467bac0..79a33cdf699 100644 --- a/.github/workflows/ubuntu-sycl.yml +++ b/.github/workflows/ubuntu-sycl.yml @@ -72,7 +72,7 @@ jobs: - name: GCloud CLI auth if: ${{ github.ref == 'refs/heads/main' }} - uses: 'google-github-actions/auth@v2' + uses: 'google-github-actions/auth@v3' with: project_id: ${{ secrets.GCE_PROJECT }} credentials_json: '${{ secrets.GCE_SA_KEY_GPU_CI }}' diff --git a/.github/workflows/ubuntu-wheel.yml b/.github/workflows/ubuntu-wheel.yml index bbc0fcfa463..c2026cd8b9c 100644 --- a/.github/workflows/ubuntu-wheel.yml +++ b/.github/workflows/ubuntu-wheel.yml @@ -105,7 +105,7 @@ jobs: ${GITHUB_WORKSPACE}/${{ env.PIP_CPU_PKG_NAME }} - name: GCloud CLI auth if: ${{ github.ref == 'refs/heads/main' }} - uses: 'google-github-actions/auth@v2' + uses: 'google-github-actions/auth@v3' with: project_id: ${{ secrets.GCE_PROJECT }} credentials_json: '${{ secrets.GCE_SA_KEY_GPU_CI }}' @@ -185,7 +185,7 @@ jobs: ${GITHUB_WORKSPACE}/${{ env.PIP_CPU_PKG_NAME }} - name: GCloud CLI auth if: ${{ github.ref == 'refs/heads/main' }} - uses: 'google-github-actions/auth@v2' + uses: 'google-github-actions/auth@v3' with: project_id: ${{ secrets.GCE_PROJECT }} credentials_json: '${{ secrets.GCE_SA_KEY_GPU_CI }}' diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 3508b7718eb..bda6de0797e 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -76,7 +76,7 @@ jobs: # Installer arguments $CUDA_INSTALL_ARGS = "-s" # Required packages - $CUDA_PACKAGES = "nvcc", "visual_studio_integration", "cublas", "cublas_dev", "cudart", "cusolver", "cusolver_dev", "cusparse", "cusparse_dev", "npp", "npp_dev", "nvtx", "thrust" + $CUDA_PACKAGES = "nvcc", "visual_studio_integration", "crt", "cublas", "cublas_dev", "cudart", "cusolver", "cusolver_dev", "cusparse", "cusparse_dev", "npp", "npp_dev", "nvtx", "thrust" $CUDA_PACKAGES.ForEach({ $CUDA_INSTALL_ARGS += " $($_)_$($CUDA_VER)" }) # Download and install CUDA echo "Downloading CUDA installer from $CUDA_URL" From b6737ab7cf57b3a319a34d35729bd4d4388e7572 Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Mon, 4 May 2026 10:56:44 +0200 Subject: [PATCH 12/19] fix sbsa --- python/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/setup.py b/python/setup.py index 5dbce75297d..00ecfd941ba 100644 --- a/python/setup.py +++ b/python/setup.py @@ -155,7 +155,7 @@ def finalize_options(self): if "@BUILD_CUDA_MODULE@" == "ON": classifiers.append("Environment :: GPU :: NVIDIA CUDA") elif (sys.platform.startswith("linux") and - platform.machine() in ("i386", "x86_64", "AMD64") and + platform.machine() in ("i386", "x86_64", "AMD64", "aarch64") and "@BUILD_SYCL_MODULE@" == "OFF"): name += "-cpu" long_description += ("\n\nThis wheel only contains CPU functionality. " From 4282d202d1cba20c1bcfbeb07da80d241262f198 Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Mon, 4 May 2026 11:22:04 +0200 Subject: [PATCH 13/19] fix windows --- .github/workflows/windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index bda6de0797e..0f8541d7284 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -76,7 +76,7 @@ jobs: # Installer arguments $CUDA_INSTALL_ARGS = "-s" # Required packages - $CUDA_PACKAGES = "nvcc", "visual_studio_integration", "crt", "cublas", "cublas_dev", "cudart", "cusolver", "cusolver_dev", "cusparse", "cusparse_dev", "npp", "npp_dev", "nvtx", "thrust" + $CUDA_PACKAGES = "nvcc", "nvvm", "visual_studio_integration", "crt", "cublas", "cublas_dev", "cudart", "cusolver", "cusolver_dev", "cusparse", "cusparse_dev", "npp", "npp_dev", "nvtx", "thrust" $CUDA_PACKAGES.ForEach({ $CUDA_INSTALL_ARGS += " $($_)_$($CUDA_VER)" }) # Download and install CUDA echo "Downloading CUDA installer from $CUDA_URL" From 058a24bc42ac4d11de0721e04ff080499b127c47 Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Mon, 4 May 2026 12:07:37 +0200 Subject: [PATCH 14/19] fix open3d to open3d_cpu --- .github/workflows/ubuntu-openblas.yml | 8 ++++++-- docker/Dockerfile.openblas | 13 +++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ubuntu-openblas.yml b/.github/workflows/ubuntu-openblas.yml index a4f294f9a2d..af2fe8bb94b 100644 --- a/.github/workflows/ubuntu-openblas.yml +++ b/.github/workflows/ubuntu-openblas.yml @@ -70,14 +70,18 @@ jobs: # Strip the dot: 3.12 ➜ 312, 3.14 ➜ 314 … PY_NO_DOT="${PYTHON_VERSION//./}" # Add “-dev” only when requested - DEV_SUFFIX=$([ "${DEVELOPER_BUILD}" = "ON" ] && echo "-dev") + DEV_SUFFIX="" + if [ "${DEVELOPER_BUILD}" = "ON" ]; then + DEV_SUFFIX="-dev" + fi echo "DOCKER_TAG=openblas-arm64-py${PY_NO_DOT}${DEV_SUFFIX}" >> $GITHUB_ENV - name: Docker build run: | docker/docker_build.sh "${DOCKER_TAG}" shopt -s failglob - PIP_PKG_NAME="$(basename ${GITHUB_WORKSPACE}/open3d-[0-9]*.whl)" + wheels=("${GITHUB_WORKSPACE}"/open3d*.whl) + PIP_PKG_NAME="$(basename "${wheels[0]}")" echo "PIP_PKG_NAME=$PIP_PKG_NAME" >> $GITHUB_ENV - name: Docker test diff --git a/docker/Dockerfile.openblas b/docker/Dockerfile.openblas index 2689b3e14da..f7d68e79d2c 100644 --- a/docker/Dockerfile.openblas +++ b/docker/Dockerfile.openblas @@ -1,3 +1,4 @@ +# syntax=docker/dockerfile:1.7 # FROM must be called before other ARGS except for ARG BASE_IMAGE ARG BASE_IMAGE FROM ${BASE_IMAGE} @@ -19,6 +20,7 @@ RUN if [ -z "${CONDA_SUFFIX}" ]; then echo "Error: ARG CONDA_SUFFIX not sp ENV DEBIAN_FRONTEND=noninteractive ENV TZ=America/Los_Angeles ENV SUDO=command +ENV CCACHE_DIR=/root/.cache/ccache # Minimal dependencies for running Docker # wget : for downloading @@ -33,6 +35,7 @@ RUN apt-get update && apt-get install -y \ # Minimal dependencies for building python RUN apt-get update && apt-get install -y \ build-essential \ + ccache \ libssl-dev \ zlib1g-dev \ libbz2-dev \ @@ -49,6 +52,10 @@ RUN apt-get update && apt-get install -y \ liblzma-dev \ && rm -rf /var/lib/apt/lists/* +RUN --mount=type=cache,target=/root/.cache/ccache,sharing=locked \ + ccache -M 4G \ + && ccache -s + # pyenv # The pyenv python paths are used during docker run, in this way docker run # does not need to activate the environment again. @@ -98,7 +105,8 @@ COPY . /root/Open3D WORKDIR /root/Open3D # Build -RUN mkdir build \ +RUN --mount=type=cache,target=/root/.cache/ccache,sharing=locked \ + mkdir build \ && cd build \ && cmake \ -DBUILD_UNIT_TESTS=ON \ @@ -109,5 +117,6 @@ RUN mkdir build \ && export NPROC=$(($(nproc)+2)) \ && make -j$NPROC \ && make install-pip-package -j$NPROC \ - && make install -j$NPROC + && make install -j$NPROC \ + && ccache -s RUN cp build/lib/python_package/pip_package/*.whl / From 002a3cdf63d4cc4ce4dfcd282c7311d433d4caa5 Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Mon, 4 May 2026 12:11:04 +0200 Subject: [PATCH 15/19] fix open3d to open3d_cpu --- docker/Dockerfile.ci | 2 +- docker/Dockerfile.wheel | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile.ci b/docker/Dockerfile.ci index 93424caade0..ab611f39161 100755 --- a/docker/Dockerfile.ci +++ b/docker/Dockerfile.ci @@ -132,7 +132,7 @@ RUN --mount=type=cache,target=/root/.cache/ccache,sharing=locked \ && mkdir -p ${CCACHE_DIR_PARENT} \ && cd ${CCACHE_DIR_PARENT} \ && (wget -nv https://storage.googleapis.com/open3d-ci-cache/${CCACHE_TAR_NAME}.tar.xz https://storage.googleapis.com/open3d-ci-cache/${CCACHE_TAR_NAME}.tar.gz || true) \ - && { tar -xf ${CCACHE_TAR_NAME}.tar.?z || true; } \ + && if compgen -G "${CCACHE_TAR_NAME}.tar.?z" > /dev/null; then tar -xf ${CCACHE_TAR_NAME}.tar.?z; fi \ && mkdir -p ${CCACHE_DIR} \ && ccache -M 4G \ && ccache -s diff --git a/docker/Dockerfile.wheel b/docker/Dockerfile.wheel index d52584a3501..792de2c1cfe 100644 --- a/docker/Dockerfile.wheel +++ b/docker/Dockerfile.wheel @@ -79,7 +79,7 @@ RUN --mount=type=cache,target=/root/.cache/ccache,sharing=locked \ && mkdir -p ${CCACHE_DIR_PARENT} \ && cd ${CCACHE_DIR_PARENT} \ && (wget -nv https://storage.googleapis.com/open3d-ci-cache/${CCACHE_TAR_NAME}.tar.xz https://storage.googleapis.com/open3d-ci-cache/${CCACHE_TAR_NAME}.tar.gz || true) \ - && { tar -xf ${CCACHE_TAR_NAME}.tar.?z || true; } \ + && if compgen -G "${CCACHE_TAR_NAME}.tar.?z" > /dev/null; then tar -xf ${CCACHE_TAR_NAME}.tar.?z; fi \ && mkdir -p ${CCACHE_DIR} # We need to set ccache size explicitly with -M, otherwise the default size is # *not* determined by ccache's default, but the downloaded ccache file's config. From 9c7f6757d6080e4aaa2ef5a4bd457b3022c0dbef Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Mon, 4 May 2026 16:21:58 +0200 Subject: [PATCH 16/19] webrtc building again in all plattforms --- .github/workflows/macos.yml | 4 +- .github/workflows/ubuntu-wheel.yml | 8 +- .github/workflows/windows.yml | 2 +- .../fix-thrust-is-proxy-reference.patch | 25 ------ 3rdparty/stdgpu/stdgpu.cmake | 29 +++--- 3rdparty/webrtc/Dockerfile.webrtc | 10 ++- 3rdparty/webrtc/webrtc_build.sh | 90 ++++++++++++++++--- 3rdparty/webrtc/webrtc_common.cmake | 24 ++--- CHANGELOG.md | 2 +- CMakeLists.txt | 2 + docker/Dockerfile.wheel | 11 ++- util/ci_utils.sh | 2 +- 12 files changed, 134 insertions(+), 75 deletions(-) delete mode 100644 3rdparty/stdgpu/fix-thrust-is-proxy-reference.patch diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 0ff118fa281..08e83dfcdce 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -141,7 +141,7 @@ jobs: python_version: '3.13' env: - # TensorFlow v2.20 only supports macOS-14 (Apple Silicon) and python 3.9-3.13 + # TensorFlow v2.21 only supports macOS-14 (Apple Silicon) and python 3.9-3.13 BUILD_TENSORFLOW_OPS: ${{ matrix.python_version >= '3.14' && 'OFF' || 'ON' }} # PyTorch 2.10 only supports macOS-14 (Apple Silicon) and python 3.10-3.14 BUILD_PYTORCH_OPS: 'ON' @@ -244,7 +244,7 @@ jobs: python_version: '3.13' env: - # TensorFlow v2.20 only supports macOS-14 (Apple Silicon) and python 3.9-3.13 + # TensorFlow v2.21 only supports macOS-14 (Apple Silicon) and python 3.9-3.13 BUILD_TENSORFLOW_OPS: ${{ matrix.python_version >= '3.14' && 'OFF' || 'ON' }} # PyTorch 2.10 only supports macOS-14 (Apple Silicon) and python 3.10-3.14 BUILD_PYTORCH_OPS: 'ON' diff --git a/.github/workflows/ubuntu-wheel.yml b/.github/workflows/ubuntu-wheel.yml index c2026cd8b9c..86c148d866d 100644 --- a/.github/workflows/ubuntu-wheel.yml +++ b/.github/workflows/ubuntu-wheel.yml @@ -49,7 +49,7 @@ jobs: CCACHE_TAR_NAME: open3d-ubuntu-2204-cuda-ci-ccache OPEN3D_CPU_RENDERING: true BUILD_PYTORCH_OPS: 'ON' - # TensorFlow v2.20 only supports python 3.9-3.13 + # TensorFlow v2.21 only supports python 3.9-3.13 BUILD_TENSORFLOW_OPS: ${{ matrix.python_version >= '3.14' && 'OFF' || 'ON' }} steps: - name: Checkout source code @@ -84,6 +84,7 @@ jobs: docker/docker_build.sh cuda_wheel_py314 fi shopt -s failglob + ls -al ${GITHUB_WORKSPACE}/open3d*.whl PIP_PKG_NAME="$(basename ${GITHUB_WORKSPACE}/open3d-[0-9]*.whl)" PIP_CPU_PKG_NAME="$(basename ${GITHUB_WORKSPACE}/open3d_cpu*.whl)" echo "PIP_PKG_NAME=$PIP_PKG_NAME" >> $GITHUB_ENV @@ -146,7 +147,7 @@ jobs: CCACHE_TAR_NAME: open3d-ubuntu-2204-cuda-sbsa-ci-ccache OPEN3D_CPU_RENDERING: true BUILD_PYTORCH_OPS: 'ON' - # TensorFlow v2.20 only supports python 3.9-3.13 + # TensorFlow v2.21 only supports python 3.9-3.13 BUILD_TENSORFLOW_OPS: ${{ matrix.python_version >= '3.14' && 'OFF' || 'ON' }} steps: - name: Checkout source code @@ -164,6 +165,7 @@ jobs: fi docker/docker_build.sh "cuda_wheel_py${PY_NO_DOT}${DEV_SUFFIX}" shopt -s failglob + ls -al ${GITHUB_WORKSPACE}/open3d*.whl PIP_PKG_NAME="$(basename ${GITHUB_WORKSPACE}/open3d-[0-9]*.whl)" PIP_CPU_PKG_NAME="$(basename ${GITHUB_WORKSPACE}/open3d_cpu*.whl)" echo "PIP_PKG_NAME=$PIP_PKG_NAME" >> $GITHUB_ENV @@ -224,7 +226,7 @@ jobs: env: OPEN3D_ML_ROOT: ${{ github.workspace }}/Open3D-ML BUILD_PYTORCH_OPS: 'ON' - # TensorFlow v2.20 only supports python 3.9-3.13 + # TensorFlow v2.21 only supports python 3.9-3.13 BUILD_TENSORFLOW_OPS: ${{ matrix.python_version >= '3.14' && 'OFF' || 'ON' }} steps: - name: Checkout source code diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 0f8541d7284..b14e208628d 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -111,7 +111,7 @@ jobs: run: | if ( '${{ matrix.BUILD_CUDA_MODULE }}' -eq 'ON' ) { # python -m pip install -r open3d_ml/requirements-torch-cuda.txt - python -m pip install torch torchvision --index-url https://download.pytorch.org/whl/test/cu132 + python -m pip install torch torchvision --index-url https://download.pytorch.org/whl/cu132 } else { python -m pip install -r open3d_ml/requirements-torch.txt } diff --git a/3rdparty/stdgpu/fix-thrust-is-proxy-reference.patch b/3rdparty/stdgpu/fix-thrust-is-proxy-reference.patch deleted file mode 100644 index 88c4101c28b..00000000000 --- a/3rdparty/stdgpu/fix-thrust-is-proxy-reference.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/src/stdgpu/impl/iterator_detail.h b/src/stdgpu/impl/iterator_detail.h -index 0000000..1111111 100644 ---- a/src/stdgpu/impl/iterator_detail.h -+++ b/src/stdgpu/impl/iterator_detail.h -@@ -393,15 +393,15 @@ THRUST_NAMESPACE_BEGIN - { - - template --struct is_proxy_reference> : public thrust::detail::true_type -+struct is_wrapped_reference> : public thrust::detail::true_type - { - }; - - template --struct is_proxy_reference> : public thrust::detail::true_type -+struct is_wrapped_reference> : public thrust::detail::true_type - { - }; - - template --struct is_proxy_reference> : public thrust::detail::true_type -+struct is_wrapped_reference> : public thrust::detail::true_type - { - }; - diff --git a/3rdparty/stdgpu/stdgpu.cmake b/3rdparty/stdgpu/stdgpu.cmake index ed78d5c9cb9..c11f0a10c99 100644 --- a/3rdparty/stdgpu/stdgpu.cmake +++ b/3rdparty/stdgpu/stdgpu.cmake @@ -4,32 +4,34 @@ include(ExternalProject) -find_package(Git QUIET REQUIRED) - # In CUDA 13.0+, Thrust moved from include/thrust/ to include/cccl/thrust/ # Set the appropriate include directory based on CUDA version if(CUDAToolkit_VERSION VERSION_GREATER_EQUAL "13.0") set(THRUST_INCLUDE_DIR_PATH "${CUDAToolkit_LIBRARY_ROOT}/include/cccl") - # In CUDA 13.0+, Thrust renamed is_proxy_reference to is_wrapped_reference - # Initialize git repository and apply patch for Thrust API compatibility - set(STDGPU_PATCH_COMMAND - COMMAND ${CMAKE_COMMAND} -E chdir ${GIT_EXECUTABLE} init - COMMAND ${CMAKE_COMMAND} -E chdir ${GIT_EXECUTABLE} add -A - COMMAND ${CMAKE_COMMAND} -E chdir ${GIT_EXECUTABLE} apply --ignore-space-change --ignore-whitespace ${CMAKE_CURRENT_LIST_DIR}/fix-thrust-is-proxy-reference.patch - ) else() set(THRUST_INCLUDE_DIR_PATH "${CUDAToolkit_LIBRARY_ROOT}/include") - set(STDGPU_PATCH_COMMAND "") +endif() + +set(STDGPU_CMAKE_ARGS "") +if(MSVC AND CUDAToolkit_VERSION VERSION_GREATER_EQUAL "13.2") + # CUDA 13.2 CCCL headers require MSVC's standard-conforming preprocessor. + list(APPEND STDGPU_CMAKE_ARGS + "-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS} /Zc:preprocessor" + "-DCMAKE_CXX_FLAGS_DEBUG:STRING=${CMAKE_CXX_FLAGS_DEBUG} /Zc:preprocessor" + "-DCMAKE_CXX_FLAGS_RELEASE:STRING=${CMAKE_CXX_FLAGS_RELEASE} /Zc:preprocessor" + "-DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Zc:preprocessor" + "-DCMAKE_CXX_FLAGS_MINSIZEREL:STRING=${CMAKE_CXX_FLAGS_MINSIZEREL} /Zc:preprocessor" + ) endif() ExternalProject_Add( ext_stdgpu PREFIX stdgpu - URL https://github.com/stotko/stdgpu/archive/d7c07d056a654454c3f2d7cf928e6cec6e0ce28e.tar.gz - URL_HASH SHA256=85b38dc3807ac24b5afe8d06a674dbff8e66579dfd67cbb33189783b0a84a0aa + URL https://github.com/stotko/stdgpu/archive/0bebd1f51e686cb634461ab3a5271fb3c04560c4.tar.gz + URL_HASH SHA256=7c3b80cdc1715adbcb6d5f5af29beb5953730cb8357fe15b79281ec439934434 DOWNLOAD_DIR "${OPEN3D_THIRD_PARTY_DOWNLOAD_DIR}/stdgpu" UPDATE_COMMAND "" - PATCH_COMMAND ${STDGPU_PATCH_COMMAND} + PATCH_COMMAND "" CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCUDAToolkit_ROOT=${CUDAToolkit_LIBRARY_ROOT} @@ -39,6 +41,7 @@ ExternalProject_Add( -DSTDGPU_BUILD_BENCHMARKS=OFF -DSTDGPU_ENABLE_CONTRACT_CHECKS=OFF -DTHRUST_INCLUDE_DIR=${THRUST_INCLUDE_DIR_PATH} + ${STDGPU_CMAKE_ARGS} ${ExternalProject_CMAKE_ARGS_hidden} CMAKE_CACHE_ARGS # Lists must be passed via CMAKE_CACHE_ARGS -DCMAKE_CUDA_ARCHITECTURES:STRING=${CMAKE_CUDA_ARCHITECTURES} diff --git a/3rdparty/webrtc/Dockerfile.webrtc b/3rdparty/webrtc/Dockerfile.webrtc index 16770438f48..9d13efcd097 100644 --- a/3rdparty/webrtc/Dockerfile.webrtc +++ b/3rdparty/webrtc/Dockerfile.webrtc @@ -1,6 +1,6 @@ # Run from the root Open3D directory: -# GLIBCXX_USE_CXX11_ABI, WEBRTC_COMMIT abd DEPOT_TOOLS_COMMIT are accepted as -# build-args. e.g.: +# GLIBCXX_USE_CXX11_ABI, WEBRTC_REPO, WEBRTC_BRANCH, WEBRTC_COMMIT, +# DEPOT_TOOLS_COMMIT and NPROC are accepted as build-args. e.g.: # # > GLIBCXX_USE_CXX11_ABI=0 # - docker build --build-arg GLIBCXX_USE_CXX11_ABI=0 -t open3d-webrtc:abi0 \ @@ -17,11 +17,17 @@ FROM ubuntu:22.04 ARG SUDO=command ARG GLIBCXX_USE_CXX11_ABI=1 +ARG WEBRTC_REPO=https://github.com/webrtc-sdk/webrtc.git +ARG WEBRTC_BRANCH=m144_release ARG WEBRTC_COMMIT ARG DEPOT_TOOLS_COMMIT +ARG NPROC ENV GLIBCXX_USE_CXX11_ABI=${GLIBCXX_USE_CXX11_ABI} +ENV WEBRTC_REPO=${WEBRTC_REPO} +ENV WEBRTC_BRANCH=${WEBRTC_BRANCH} ENV WEBRTC_COMMIT=${WEBRTC_COMMIT} ENV DEPOT_TOOLS_COMMIT=${DEPOT_TOOLS_COMMIT} +ENV NPROC=${NPROC} COPY 3rdparty/webrtc 3rdparty/webrtc RUN bash -c "source 3rdparty/webrtc/webrtc_build.sh && install_dependencies_ubuntu purge-cache" RUN bash -c "source 3rdparty/webrtc/webrtc_build.sh && download_webrtc_sources" diff --git a/3rdparty/webrtc/webrtc_build.sh b/3rdparty/webrtc/webrtc_build.sh index d4ad07a7287..4475c38528b 100755 --- a/3rdparty/webrtc/webrtc_build.sh +++ b/3rdparty/webrtc/webrtc_build.sh @@ -7,7 +7,8 @@ set -euox pipefail # Usage: # $ bash # Start a new shell # Specify custom configuration by exporting environment variables -# GLIBCXX_USE_CXX11_ABI, WEBRTC_COMMIT and DEPOT_TOOLS_COMMIT, if required. +# GLIBCXX_USE_CXX11_ABI, WEBRTC_REPO, WEBRTC_BRANCH, WEBRTC_COMMIT, +# DEPOT_TOOLS_COMMIT and NPROC, if required. # $ source 3rdparty/webrtc/webrtc_build.sh # $ install_dependencies_ubuntu # Ubuntu only # $ download_webrtc_sources @@ -35,13 +36,24 @@ set -euox pipefail # Note that these patches may or may not be compatible with your custom # WebRTC commits. You may have to patch them manually. -# Upstream HEAD on 2026-05-04 -WEBRTC_COMMIT=${WEBRTC_COMMIT:-ffb74219ec3edff87b8bb9a88c1710dc7d2df97e} +detect_nproc() { + if command -v nproc >/dev/null 2>&1; then + nproc + else + getconf _NPROCESSORS_ONLN + fi +} + +# Use the WebRTC-SDK fork by default. +WEBRTC_REPO=${WEBRTC_REPO:-https://github.com/webrtc-sdk/webrtc.git} +WEBRTC_BRANCH=${WEBRTC_BRANCH:-m144_release} +# Optionally pin to a commit after checking out WEBRTC_BRANCH. +WEBRTC_COMMIT=${WEBRTC_COMMIT:-} # Upstream HEAD on 2026-05-04 DEPOT_TOOLS_COMMIT=${DEPOT_TOOLS_COMMIT:-ff41874736c800b2f79aa8cf9596c7919066eb02} GLIBCXX_USE_CXX11_ABI=${GLIBCXX_USE_CXX11_ABI:-1} -NPROC=${NPROC:-$(getconf _NPROCESSORS_ONLN)} # POSIX: MacOS + Linux +NPROC=${NPROC:-$(detect_nproc)} SUDO=${SUDO:-sudo} # Set to command if running inside docker export PATH="$PWD/../depot_tools":${PATH} # $(basename $PWD) == Open3D export DEPOT_TOOLS_UPDATE=0 @@ -67,6 +79,37 @@ install_dependencies_ubuntu() { software-properties-common \ tree \ curl + if [[ "$(uname -m)" == "aarch64" || "$(uname -m)" == "arm64" ]]; then + curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key | + gpg --dearmor - | + $SUDO tee /etc/apt/trusted.gpg.d/apt.llvm.org.gpg >/dev/null + source <(grep VERSION_CODENAME /etc/os-release) + $SUDO apt-add-repository --yes "deb http://apt.llvm.org/${VERSION_CODENAME}/ llvm-toolchain-${VERSION_CODENAME}-22 main" + $SUDO apt-get update + $SUDO apt-get install -y clang-22 lld-22 libclang-rt-22-dev + $SUDO update-alternatives --install /usr/bin/clang clang /usr/bin/clang-22 100 + $SUDO update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-22 100 + for tool in lld ld.lld ld64.lld wasm-ld llvm-ar llvm-nm llvm-objcopy llvm-objdump llvm-ranlib llvm-readelf llvm-strip; do + if [[ -x "/usr/bin/${tool}-22" ]]; then + $SUDO update-alternatives --install "/usr/bin/${tool}" "${tool}" "/usr/bin/${tool}-22" 100 + fi + done + CLANG_RT_BUILTINS="$(find /usr/lib/llvm-22 /usr/lib/clang \ + -path '*/lib/linux/*' \ + \( -name libclang_rt.builtins.a -o -name libclang_rt.builtins-aarch64.a \) | + head -n 1)" + if [[ -z "${CLANG_RT_BUILTINS}" ]]; then + CLANG_RT_BUILTINS="$(find /usr/lib/llvm-22 /usr/lib/clang \ + -not -path '*/lib/windows/*' \ + \( -name libclang_rt.builtins.a -o -name libclang_rt.builtins-aarch64.a \) | + head -n 1)" + fi + if [[ -n "${CLANG_RT_BUILTINS}" ]]; then + $SUDO mkdir -p /usr/lib/clang/22/lib/aarch64-unknown-linux-gnu + $SUDO ln -sf "${CLANG_RT_BUILTINS}" \ + /usr/lib/clang/22/lib/aarch64-unknown-linux-gnu/libclang_rt.builtins.a + fi + fi curl https://apt.kitware.com/keys/kitware-archive-latest.asc \ 2>/dev/null | gpg --dearmor - | $SUDO sed -n 'w /etc/apt/trusted.gpg.d/kitware.gpg' # Write to file, no stdout @@ -87,16 +130,36 @@ download_webrtc_sources() { echo Get depot_tools git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git git -C depot_tools checkout $DEPOT_TOOLS_COMMIT - command -V fetch + command -V gclient echo Get WebRTC mkdir webrtc cd webrtc - fetch webrtc + if [[ -n "${WEBRTC_COMMIT}" ]]; then + WEBRTC_GCLIENT_URL="${WEBRTC_REPO}@${WEBRTC_COMMIT}" + else + WEBRTC_GCLIENT_URL="${WEBRTC_REPO}@refs/heads/${WEBRTC_BRANCH}" + fi + cat > .gclient </dev/null + fi mkdir ../webrtc/build pushd ../webrtc/build cmake -DCMAKE_INSTALL_PREFIX=../../webrtc_release \ -DGLIBCXX_USE_CXX11_ABI=${GLIBCXX_USE_CXX11_ABI} \ .. - make -j$NPROC - make install + make -j"${NPROC}" + make install -j"${NPROC}" popd # PWD=Open3D pushd .. tree -L 2 webrtc_release || ls webrtc_release/* diff --git a/3rdparty/webrtc/webrtc_common.cmake b/3rdparty/webrtc/webrtc_common.cmake index 1688eda2c69..8a09fa4d079 100644 --- a/3rdparty/webrtc/webrtc_common.cmake +++ b/3rdparty/webrtc/webrtc_common.cmake @@ -18,8 +18,12 @@ function(get_webrtc_args WEBRTC_ARGS) if (APPLE) # WebRTC default set(WEBRTC_ARGS is_clang=true\n${WEBRTC_ARGS}) elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)$") - # ARM64 Linux builds need Clang for WebRTC's NEON-enabled sources. + # m144 libyuv uses ARM features that GCC 11 cannot assemble. Use the + # native system clang/lld instead of Chromium's downloaded x86_64 tools. set(WEBRTC_ARGS is_clang=true\n${WEBRTC_ARGS}) + set(WEBRTC_ARGS clang_base_path="/usr"\n${WEBRTC_ARGS}) + set(WEBRTC_ARGS clang_use_chrome_plugins=false\n${WEBRTC_ARGS}) + set(WEBRTC_ARGS use_lld=true\n${WEBRTC_ARGS}) else() # Do not use Google clang for compilation due to LTO error when Open3D # is built with gcc on Ubuntu 20.04. @@ -80,15 +84,15 @@ endfunction() # webrtc -> libwebrtc.a # other targets -> libwebrtc_extra.a set(NINJA_TARGETS - webrtc - rtc_json - jsoncpp - builtin_video_decoder_factory - builtin_video_encoder_factory - peerconnection - p2p_server_utils - task_queue - default_task_queue_factory + :webrtc + rtc_base:rtc_json + third_party/jsoncpp:jsoncpp + api/video_codecs:builtin_video_decoder_factory + api/video_codecs:builtin_video_encoder_factory + pc:peer_connection + p2p:p2p_server_utils + api/task_queue:task_queue + api/task_queue:default_task_queue_factory ) # Byproducts for ninja build, later packaged by CMake into libwebrtc_extra.a diff --git a/CHANGELOG.md b/CHANGELOG.md index 95caf64487c..b44fdd4f988 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ ## Main - Upgrade CUDA CI to 13.2.1 and add CUDA SBSA Docker and wheel builds on Ubuntu ARM runners. -- Upgrade stdgpu third-party library to commit d7c07d0. +- Upgrade stdgpu third-party library to commit 0bebd1f. - Fix performance for non-contiguous NumPy array conversion in pybind vector converters. This change removes restrictive `py::array::c_style` flags and adds a runtime contiguity check, improving Pandas-to-Open3D conversion speed by up to ~50×. (issue #5250)(PR #7343). - Corrected documentation for Link Open3D in C++ projects (broken links). - Fix DLLs not being found in Python-package. Also prevent PATH from being searched for DLLs, except CUDA (PR #7108) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3a4761858f6..9b5bbc7a374 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -506,6 +506,8 @@ if(WIN32) # for Open3D to compile (the linker fails otherwise with a "fatal error LNK1189: library limit of 65535 # objects exceeded"). /Zc:inline will remove unreferenced data and functions from object files. add_compile_options($<$:/Zc:inline>) + # CUDA 13.2 CCCL headers require MSVC's standard-conforming preprocessor. + add_compile_options($<$:/Zc:preprocessor>) endif() if (STATIC_WINDOWS_RUNTIME) set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") diff --git a/docker/Dockerfile.wheel b/docker/Dockerfile.wheel index 792de2c1cfe..706438ebd14 100644 --- a/docker/Dockerfile.wheel +++ b/docker/Dockerfile.wheel @@ -143,14 +143,13 @@ WORKDIR /root/Open3D # Build python wheel RUN --mount=type=cache,target=/root/.cache/ccache,sharing=locked \ - export NPROC=$(($(nproc)+2)) \ + set -e \ + && export NPROC=$(($(nproc)+2)) \ && export BUILD_SHARED_LIBS=OFF \ && source /root/Open3D/util/ci_utils.sh \ - && if [ "$(uname -m)" = "aarch64" ]; then \ - build_pip_package build_azure_kinect; \ - else \ - build_pip_package build_azure_kinect build_jupyter; \ - fi \ + && build_args=(build_azure_kinect) \ + && if [ "$(uname -m)" != "aarch64" ]; then build_args+=(build_jupyter); fi \ + && build_pip_package "${build_args[@]}" \ && if [ ${CI:-}a != a ]; then find /root/Open3D/build -mindepth 1 -maxdepth 1 ! -name 'lib' -exec rm -rf {} + ; fi # remove build folder (except lib) to save CI space on Github diff --git a/util/ci_utils.sh b/util/ci_utils.sh index 5b9aa8f79ac..993cbfdd6d0 100644 --- a/util/ci_utils.sh +++ b/util/ci_utils.sh @@ -29,7 +29,7 @@ BUILD_SYCL_MODULE=${BUILD_SYCL_MODULE:-OFF} # ML TENSORFLOW_VER="2.21.0" TORCH_VER="2.12" -TORCH_REPO_URL="https://download.pytorch.org/whl/test/torch/" +TORCH_REPO_URL="https://download.pytorch.org/whl/torch/" # Python PIP_VER="26.1" PROTOBUF_VER="6.31.1" From d5593d31f9835528ca09eb34f4cb51d260a62551 Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Tue, 12 May 2026 19:20:39 +0200 Subject: [PATCH 17/19] fix windows cuda pytorch install --- .github/workflows/windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index b14e208628d..cdb9804d1a3 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -111,7 +111,7 @@ jobs: run: | if ( '${{ matrix.BUILD_CUDA_MODULE }}' -eq 'ON' ) { # python -m pip install -r open3d_ml/requirements-torch-cuda.txt - python -m pip install torch torchvision --index-url https://download.pytorch.org/whl/cu132 + python -m pip install torch torchvision --index-url https://download.pytorch.org/whl/cu132 --extra-index-url https://pypi.org/simple } else { python -m pip install -r open3d_ml/requirements-torch.txt } From 40a33361f4024f391972ecfc71295dabf3e2fe2c Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Tue, 12 May 2026 23:33:11 +0200 Subject: [PATCH 18/19] Upgrade msgpack-c 3.3.0 -> msgpack-cxx 7.0.0 The new /Zc:preprocessor flag added for CUDA 13.2 CCCL headers breaks msgpack-c 3.3.0's MSGPACK_DEFINE_MAP macro expansion under MSVC, causing all Windows builds to fail. msgpack-cxx 5.0+ fixes this; bump to 7.0.0 (header-only, drop-in compatible API). --- 3rdparty/README.md | 4 ++-- 3rdparty/msgpack/msgpack_build.cmake | 8 ++++++-- CHANGELOG.md | 1 + 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/3rdparty/README.md b/3rdparty/README.md index 05ca13f0f04..4fcea0bd7d4 100644 --- a/3rdparty/README.md +++ b/3rdparty/README.md @@ -93,8 +93,8 @@ libzmq 4.3.3 LGPLv3 + static link exception license ZeroMQ is a high-performance asynchronous messaging library https://github.com/zeromq/libzmq -------------------------------------------------------------------------------- -msgpack-c 3.3.0 Boost Software License 1.0 -MessagePack implementation for C and C++ +msgpack-cxx 7.0.0 Boost Software License 1.0 +MessagePack implementation for C++ (header-only) https://github.com/msgpack/msgpack-c/tree/cpp_master -------------------------------------------------------------------------------- nanoflann 1.3.1 BSD license diff --git a/3rdparty/msgpack/msgpack_build.cmake b/3rdparty/msgpack/msgpack_build.cmake index 8252ce43823..93f77984402 100644 --- a/3rdparty/msgpack/msgpack_build.cmake +++ b/3rdparty/msgpack/msgpack_build.cmake @@ -3,8 +3,12 @@ include(ExternalProject) ExternalProject_Add( ext_msgpack-c PREFIX msgpack-c - URL https://github.com/msgpack/msgpack-c/releases/download/cpp-3.3.0/msgpack-3.3.0.tar.gz - URL_HASH SHA256=6e114d12a5ddb8cb11f669f83f32246e484a8addd0ce93f274996f1941c1f07b + # msgpack-cxx >= 5.0 fixes config for MSVC's standards-conforming + # preprocessor (/Zc:preprocessor), which is required when building + # against CUDA 13.2 CCCL headers. The 3.3.0 release fails to expand + # MSGPACK_DEFINE_MAP under that preprocessor mode. + URL https://github.com/msgpack/msgpack-c/releases/download/cpp-7.0.0/msgpack-cxx-7.0.0.tar.gz + URL_HASH SHA256=7504b7af7e7b9002ce529d4f941e1b7fb1fb435768780ce7da4abaac79bb156f DOWNLOAD_DIR "${OPEN3D_THIRD_PARTY_DOWNLOAD_DIR}/msgpack" # do not configure CONFIGURE_COMMAND "" diff --git a/CHANGELOG.md b/CHANGELOG.md index b44fdd4f988..53bbcde1bf7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Main - Upgrade CUDA CI to 13.2.1 and add CUDA SBSA Docker and wheel builds on Ubuntu ARM runners. - Upgrade stdgpu third-party library to commit 0bebd1f. +- Upgrade msgpack-c 3.3.0 -> msgpack-cxx 7.0.0 for compatibility with MSVC's standards-conforming preprocessor (`/Zc:preprocessor`) used by CUDA 13.2 CCCL headers. - Fix performance for non-contiguous NumPy array conversion in pybind vector converters. This change removes restrictive `py::array::c_style` flags and adds a runtime contiguity check, improving Pandas-to-Open3D conversion speed by up to ~50×. (issue #5250)(PR #7343). - Corrected documentation for Link Open3D in C++ projects (broken links). - Fix DLLs not being found in Python-package. Also prevent PATH from being searched for DLLs, except CUDA (PR #7108) From 0f309bdffdfdf18dbb79f5bea57aa57d121de96a Mon Sep 17 00:00:00 2001 From: johnnynunez Date: Wed, 13 May 2026 00:43:45 +0200 Subject: [PATCH 19/19] Define MSGPACK_NO_BOOST to drop msgpack-cxx Boost dependency msgpack-cxx 4.0+ includes by default for endianness detection, which Open3D's Linux Docker images do not provide. The library bundles a Boost-free fallback gated on MSGPACK_NO_BOOST; propagate that definition through the imported target so all consumers of use msgpack/predef/other/endian.h instead. --- 3rdparty/find_dependencies.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/3rdparty/find_dependencies.cmake b/3rdparty/find_dependencies.cmake index 02f7b58f3d7..803bfd38429 100644 --- a/3rdparty/find_dependencies.cmake +++ b/3rdparty/find_dependencies.cmake @@ -1503,6 +1503,10 @@ if(NOT USE_SYSTEM_MSGPACK) INCLUDE_DIRS ${MSGPACK_INCLUDE_DIRS} DEPENDS ext_msgpack-c ) + # msgpack-cxx >= 4.0 pulls in by default for + # endianness detection. Open3D does not depend on Boost, so opt into the + # bundled msgpack/predef/* fallback via MSGPACK_NO_BOOST. + target_compile_definitions(3rdparty_msgpack INTERFACE MSGPACK_NO_BOOST) list(APPEND Open3D_3RDPARTY_PRIVATE_TARGETS_FROM_CUSTOM Open3D::3rdparty_msgpack) else() list(APPEND Open3D_3RDPARTY_PRIVATE_TARGETS_FROM_SYSTEM Open3D::3rdparty_msgpack)