From 74a5cefa7a77dc5a4ac718c99e472dadb91522ef Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+jacobfreedom@users.noreply.github.com> Date: Fri, 10 Apr 2026 11:53:01 +0200 Subject: [PATCH 1/5] Update Houdini 21.0.680 paths and Boost 1.82 for macOS build --- CMakeMacOSPresets.json | 4 ++-- building/macOS/CMakeLists.txt | 3 +-- building/macOS/pxr-houdini/pxrConfig.cmake | 4 ++-- building/macOS/pxr-houdini/pxrTargets-release.cmake | 6 +++--- building/macOS/pxr-houdini/pxrTargets.cmake | 6 +++--- scripts/macOS/setupHoudini.sh | 2 +- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/CMakeMacOSPresets.json b/CMakeMacOSPresets.json index f13d05ef..63af637e 100644 --- a/CMakeMacOSPresets.json +++ b/CMakeMacOSPresets.json @@ -34,11 +34,11 @@ "inherits": "macos-environment", "environment": { "PREFIX_PXR" : "${sourceParentDir}/building/macOS/pxr-houdini", - "HOUDINI_INSTALL_DIR" : "/Applications/Houdini/Houdini20.0.751", + "HOUDINI_INSTALL_DIR" : "/Applications/Houdini/Houdini21.0.680", "PXR_LIB_PREFIX" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries", "PXR_INCLUDE_PREFIX" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Resources/toolkit/include", "PXR_DEPS_PREFIX" : "$env{DEPS_ROOT}", - "PXR_BOOST_PYTHON_LIB" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries/libhboost_python39-mt-a64.dylib" + "PXR_BOOST_PYTHON_LIB" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries/libpxr_python.dylib" }, "cacheVariables": { "CMAKE_PREFIX_PATH": "$env{DEPS_ROOT};$env{PREFIX_PXR}", diff --git a/building/macOS/CMakeLists.txt b/building/macOS/CMakeLists.txt index d267431c..03f295f8 100644 --- a/building/macOS/CMakeLists.txt +++ b/building/macOS/CMakeLists.txt @@ -39,7 +39,7 @@ ExternalProject_Add(Blosc set(CHAIN Blosc) ExternalProject_Add(Boost - URL https://sourceforge.net/projects/boost/files/boost/1.78.0/boost_1_78_0.tar.gz + URL https://sourceforge.net/projects/boost/files/boost/1.82.0/boost_1_82_0.tar.gz UPDATE_COMMAND ./bootstrap.sh --prefix=${InstallRoot} --with-toolset=clang linkflags="-arch ${BOOST_ARCH}" CONFIGURE_COMMAND "" PATCH_COMMAND patch -p3 -N < ${THIS_DIR}/Boost.patch @@ -420,4 +420,3 @@ ExternalProject_Add(GLFW DEPENDS ${CHAIN} ) set(CHAIN GLFW) - diff --git a/building/macOS/pxr-houdini/pxrConfig.cmake b/building/macOS/pxr-houdini/pxrConfig.cmake index 28237a87..0384829a 100644 --- a/building/macOS/pxr-houdini/pxrConfig.cmake +++ b/building/macOS/pxr-houdini/pxrConfig.cmake @@ -17,9 +17,9 @@ get_filename_component(PXR_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) set(PXR_MAJOR_VERSION "0") -set(PXR_MINOR_VERSION "22") +set(PXR_MINOR_VERSION "25") set(PXR_PATCH_VERSION "5") -set(PXR_VERSION "2205") +set(PXR_VERSION "2505") include("${PXR_CMAKE_DIR}/pxrTargets.cmake") set(libs "arch;tf;gf;js;trace;work;plug;vt;ar;kind;sdf;ndr;sdr;pcp;usd;usdGeom;usdVol;usdMedia;usdShade;usdLux;usdRender;usdHydra;usdRi;usdSkel;usdUI;usdUtils;usdPhysics;garch;hf;hio;cameraUtil;pxOsd;glf;hgi;hgiGL;hgiInterop;hd;hdSt;hdx;usdImaging;usdImagingGL;usdRiImaging;usdSkelImaging;usdVolImaging;usdAppUtils;usdviewq") diff --git a/building/macOS/pxr-houdini/pxrTargets-release.cmake b/building/macOS/pxr-houdini/pxrTargets-release.cmake index ae3a89da..485bf292 100644 --- a/building/macOS/pxr-houdini/pxrTargets-release.cmake +++ b/building/macOS/pxr-houdini/pxrTargets-release.cmake @@ -421,12 +421,12 @@ list(APPEND _IMPORT_CHECK_FILES_FOR_usdImagingGL "${_LIB_PREFIX}/libpxr_usdImagi # Import target "usdRiImaging" for configuration "Release" set_property(TARGET usdRiImaging APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(usdRiImaging PROPERTIES - IMPORTED_LOCATION_RELEASE "${_LIB_PREFIX}/libpxr_usdRiImaging.dylib" - IMPORTED_SONAME_RELEASE "libpxr_usdRiImaging.dylib" + IMPORTED_LOCATION_RELEASE "${_LIB_PREFIX}/libpxr_usdRiPxrImaging.dylib" + IMPORTED_SONAME_RELEASE "libpxr_usdRiPxrImaging.dylib" ) list(APPEND _IMPORT_CHECK_TARGETS usdRiImaging ) -list(APPEND _IMPORT_CHECK_FILES_FOR_usdRiImaging "${_LIB_PREFIX}/libpxr_usdRiImaging.dylib" ) +list(APPEND _IMPORT_CHECK_FILES_FOR_usdRiImaging "${_LIB_PREFIX}/libpxr_usdRiPxrImaging.dylib" ) # Import target "usdSkelImaging" for configuration "Release" set_property(TARGET usdSkelImaging APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) diff --git a/building/macOS/pxr-houdini/pxrTargets.cmake b/building/macOS/pxr-houdini/pxrTargets.cmake index f3cd6feb..af4b3d45 100644 --- a/building/macOS/pxr-houdini/pxrTargets.cmake +++ b/building/macOS/pxr-houdini/pxrTargets.cmake @@ -3,7 +3,7 @@ # Modified to use the version of USD with headers in $env{PXR_INCLUDE_PREFIX} # and libs in $env{PXR_LIB_PREFIX}, with dependencies installed to $env{PXR_DEPS_PREFIX} # $env{PXR_BOOST_PYTHON_LIB} must be set to the location of the boost_python so used by USD -# (Houdini names it libhboost_python39...) +# (Houdini names it libhboost_python311...) if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.6) message(FATAL_ERROR "CMake >= 2.6.0 required") @@ -17,8 +17,8 @@ cmake_policy(VERSION 2.6...3.21) # Commands may need to know the format version. set(CMAKE_IMPORT_FILE_VERSION 1) -SET(HPYTHONLIB $ENV{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.9/lib/libpython3.9.dylib) -SET(HPYTHONINC $ENV{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.9/include/python3.9) +SET(HPYTHONLIB $ENV{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.11/lib/libpython3.11.dylib) +SET(HPYTHONINC $ENV{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.11/include/python3.11) # Protect against multiple inclusion, which would fail when already imported targets are added once more. set(_targetsDefined) diff --git a/scripts/macOS/setupHoudini.sh b/scripts/macOS/setupHoudini.sh index 68ac25fb..8f15cb9b 100644 --- a/scripts/macOS/setupHoudini.sh +++ b/scripts/macOS/setupHoudini.sh @@ -11,4 +11,4 @@ export MOONRAY_CLASS_PATH=${omr_install_dir}/shader_json export ARRAS_SESSION_PATH=${omr_install_dir}/sessions PXR_PLUGINPATH_NAME=${omr_install_dir}/plugin/pxr #export HOUDINI_DSO_ERROR=5 -export HOUDINI_PATH=/Applications/Houdini/Houdini20.0.751/Frameworks/Houdini.framework/Versions/Current/Resources/houdini:${omr_install_dir}/houdini/:${omr_install_dir}/plugin/houdini +export HOUDINI_PATH=/Applications/Houdini/Houdini21.0.680/Frameworks/Houdini.framework/Versions/Current/Resources/houdini:${omr_install_dir}/houdini/:${omr_install_dir}/plugin/houdini From 179ea830bed54aaaa16d740330f46deb50ff029b Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+jacobfreedom@users.noreply.github.com> Date: Fri, 10 Apr 2026 14:53:40 +0200 Subject: [PATCH 2/5] docs: add Houdini 21.0.680 macOS compatibility notes --- docs/Houdini21_macOS_changes.md | 102 ++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 docs/Houdini21_macOS_changes.md diff --git a/docs/Houdini21_macOS_changes.md b/docs/Houdini21_macOS_changes.md new file mode 100644 index 00000000..deafbd01 --- /dev/null +++ b/docs/Houdini21_macOS_changes.md @@ -0,0 +1,102 @@ +# OpenMoonRay Houdini 21.0.680 macOS Compatibility Notes + +This document records the MoonRay macOS updates required for Houdini `21.0.680`. + +## Scope + +- Target platform: macOS +- Target DCC: Houdini `21.0.680` +- Goal: build MoonRay against Houdini-owned USD/PXR and Python 3.11 + +## Tested Environment + +- macOS: Tahoe (SDK observed during build: `MacOSX26.4.sdk`) +- Xcode: `26.0.1` (`/Applications/Xcode_26.0.1.app`) +- Houdini validated in this branch: `21.0.680` + +## Why These Changes Were Needed + +Houdini 21 moved to Python 3.11 and ships USD/PXR libraries inside the Houdini framework layout. MoonRay must consume those paths directly for include/library resolution and avoid building a separate local USD for the Houdini build path. + +## Required Compatibility Changes + +### 1) [`CMakeMacOSPresets.json`](../CMakeMacOSPresets.json) + +- `HOUDINI_INSTALL_DIR` set to: + - `/Applications/Houdini/Houdini21.0.680` +- `PXR_LIB_PREFIX` set to: + - `$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries` +- `PXR_INCLUDE_PREFIX` set to: + - `$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Resources/toolkit/include` +- `PXR_BOOST_PYTHON_LIB` set to: + - `$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries/libpxr_python.dylib` + +Important: in this tested setup, using `libhboost_python311-mt-a64.dylib` did not resolve all expected `pxr_boost::python` references during link, while `libpxr_python.dylib` did. + +### 2) [`scripts/macOS/setupHoudini.sh`](../scripts/macOS/setupHoudini.sh) + +- `HOUDINI_PATH` updated to Houdini 21.0.680 framework resources path. + +### 3) [`building/macOS/pxr-houdini/pxrTargets.cmake`](../building/macOS/pxr-houdini/pxrTargets.cmake) + +- `HPYTHONLIB` updated to: + - `$ENV{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.11/lib/libpython3.11.dylib` +- `HPYTHONINC` updated to: + - `$ENV{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.11/include/python3.11` + +### 4) [`building/macOS/pxr-houdini/pxrConfig.cmake`](../building/macOS/pxr-houdini/pxrConfig.cmake) + +- PXR version metadata updated to: + - `PXR_MAJOR_VERSION "0"` + - `PXR_MINOR_VERSION "25"` + - `PXR_PATCH_VERSION "5"` + - `PXR_VERSION "2505"` + +### 5) [`building/macOS/CMakeLists.txt`](../building/macOS/CMakeLists.txt) + +- Boost source updated to `1.82.0` (`boost_1_82_0.tar.gz`) for Houdini 21 toolchain compatibility. + +### 6) [`building/macOS/pxr-houdini/pxrTargets-release.cmake`](../building/macOS/pxr-houdini/pxrTargets-release.cmake) + +- Houdini 21 library naming compatibility fix: + - `libpxr_usdRiImaging.dylib` -> `libpxr_usdRiPxrImaging.dylib` + +## Build Procedure Requirements (Houdini Path) + +- Build dependencies with Houdini USD mode enabled (skip local USD): + - `cmake -DNO_USD=1 ../building/macOS` + - `cmake --build .` +- If dependencies were previously built without `-DNO_USD=1`, clean `build-deps/` and `installs/` before rebuilding to avoid mixed USD linkage. + +## Environment-Specific Workarounds + +- In this macOS/Xcode environment, full `cmake --build --preset macos-houdini-release` required disabling Xcode code-signing attributes at configure time to avoid dynamic-library signing failures. +- This is an environment workaround, not a Houdini 21 compatibility requirement. + +## Validation Summary + +- Dependency build completed successfully with `-DNO_USD=1`. +- Main project configure/build completed successfully for Houdini preset. +- Install completed successfully. +- Moonray appears as a selectable renderer in the Solaris viewport. +- Houdini Solaris workflow is the intended runtime verification path. +- `moonray_gui` command-line test requires an active GUI display session; headless runs fail with `Cannot create window: no screens available`. + +## Houdini Sanity Reference + +- SideFX changelog reference (used as a sanity baseline when evaluating Houdini compatibility context): + - [SideFX changelog](https://www.sidefx.com/changelog/?categories=52&journal=17.5&show_versions=on) +- Note: this branch has not been tested against production Houdini `21.0.679`; validated test target remains Houdini `21.0.680`. +- Additional context: the Xcode compilation issue language in SideFX notes is generic; direct relevance to MoonRay-specific build/runtime behavior is currently uncertain. + +## Out of Scope + +- Any separate Houdini shader/HDA UX issues are not addressed by these changes. +- `cmake_modules` contains a local Boost macro adjustment: `cmake/MoonrayDso.cmake` updates `DWA_BOOST_VERSION` from `1073000` to `1082000`. This change is in the submodule working tree and is not part of the parent-repo commits in this branch. + +## Cross-Repo Linkage + +- Parent repo branch: + - [`Moonray-Houdini21-macOS`](https://github.com/rolledhand/openmoonray/tree/Moonray-Houdini21-macOS) +- Submodule repo branch: + - [`boost-1.82-macro-update`](https://github.com/rolledhand/cmake_modules/tree/boost-1.82-macro-update) From e9b0f73608ded6b70094aef0adfa1841ee36680d Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+jacobfreedom@users.noreply.github.com> Date: Tue, 14 Apr 2026 15:21:23 +0200 Subject: [PATCH 3/5] Houdini 21.0.671 setup + hdMoonray int64 conversion linkage (clean) --- CMakeMacOSPresets.json | 2 +- docs/Houdini21_macOS_changes.md | 3 +++ moonray/hydra/hdMoonray | 2 +- scripts/macOS/setupHoudini.sh | 47 ++++++++++++++++++++++++++------- 4 files changed, 43 insertions(+), 11 deletions(-) diff --git a/CMakeMacOSPresets.json b/CMakeMacOSPresets.json index 63af637e..f6e194ab 100644 --- a/CMakeMacOSPresets.json +++ b/CMakeMacOSPresets.json @@ -34,7 +34,7 @@ "inherits": "macos-environment", "environment": { "PREFIX_PXR" : "${sourceParentDir}/building/macOS/pxr-houdini", - "HOUDINI_INSTALL_DIR" : "/Applications/Houdini/Houdini21.0.680", + "HOUDINI_INSTALL_DIR" : "/Applications/Houdini/Houdini21.0.671", "PXR_LIB_PREFIX" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries", "PXR_INCLUDE_PREFIX" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Resources/toolkit/include", "PXR_DEPS_PREFIX" : "$env{DEPS_ROOT}", diff --git a/docs/Houdini21_macOS_changes.md b/docs/Houdini21_macOS_changes.md index deafbd01..d8219e83 100644 --- a/docs/Houdini21_macOS_changes.md +++ b/docs/Houdini21_macOS_changes.md @@ -100,3 +100,6 @@ Important: in this tested setup, using `libhboost_python311-mt-a64.dylib` did no - [`Moonray-Houdini21-macOS`](https://github.com/rolledhand/openmoonray/tree/Moonray-Houdini21-macOS) - Submodule repo branch: - [`boost-1.82-macro-update`](https://github.com/rolledhand/cmake_modules/tree/boost-1.82-macro-update) +- hdMoonray int64 conversion fix (Houdini 21.0.671 runtime): + - target branch: `houdini21-int64-fix` + - branch link: `https://github.com/rolledhand/hdMoonray/tree/houdini21-int64-fix` diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index 77445128..0db93747 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit 77445128d259388d5b194999ed6bda3409ec0247 +Subproject commit 0db93747135defa7f79f86a34061705fdcd70ac5 diff --git a/scripts/macOS/setupHoudini.sh b/scripts/macOS/setupHoudini.sh index 8f15cb9b..f78dd965 100644 --- a/scripts/macOS/setupHoudini.sh +++ b/scripts/macOS/setupHoudini.sh @@ -1,14 +1,43 @@ omr_install_dir=/Applications/MoonRay/installs/openmoonray +houdini_fallback=/Applications/Houdini/Houdini21.0.671/Frameworks/Houdini.framework/Versions/Current/Resources/houdini -# save/restore PYTHONPATH, since Houdini seems to reject python3.9 +# save/restore PYTHONPATH, since Houdini runtime can be sensitive to non-Houdini site-packages OLDPP=${PYTHONPATH} -source ${omr_install_dir}/scripts/setup.sh +source "${omr_install_dir}/scripts/setup.sh" export PYTHONPATH=${OLDPP} -export REL=${omr_install_dir} -export RDL2_DSO_PATH=${omr_install_dir}/rdl2dso.proxy:${omr_install_dir}/rdl2dso -export MOONRAY_CLASS_PATH=${omr_install_dir}/shader_json -export ARRAS_SESSION_PATH=${omr_install_dir}/sessions -PXR_PLUGINPATH_NAME=${omr_install_dir}/plugin/pxr -#export HOUDINI_DSO_ERROR=5 -export HOUDINI_PATH=/Applications/Houdini/Houdini21.0.680/Frameworks/Houdini.framework/Versions/Current/Resources/houdini:${omr_install_dir}/houdini/:${omr_install_dir}/plugin/houdini +export REL="${omr_install_dir}" +export RDL2_DSO_PATH="${omr_install_dir}/rdl2dso.proxy:${omr_install_dir}/rdl2dso" +export MOONRAY_CLASS_PATH="${omr_install_dir}/shader_json" +export ARRAS_SESSION_PATH="${omr_install_dir}/sessions" + +prepend_unique_path() { + local add_path="$1" + local current="${2:-}" + case ":${current}:" in + *":${add_path}:"*) echo "${current}" ;; + *) + if [ -n "${current}" ]; then + echo "${add_path}:${current}" + else + echo "${add_path}" + fi + ;; + esac +} + +# Preserve any existing USD plugin search path (set by Houdini or shell packages), +# while guaranteeing Moonray plugin location is present first. +export PXR_PLUGINPATH_NAME="$(prepend_unique_path "${omr_install_dir}/plugin/pxr" "${PXR_PLUGINPATH_NAME}")" +export PXR_PLUGIN_PATH="$(prepend_unique_path "${omr_install_dir}/plugin/pxr" "${PXR_PLUGIN_PATH}")" +export PXR_PLUGINPATH_NAME="${PXR_PLUGINPATH_NAME%:}" +export PXR_PLUGIN_PATH="${PXR_PLUGIN_PATH%:}" + +# Prefer layering Moonray onto an existing Houdini env (from houdini_setup). If that +# was not sourced yet, fall back to the known Houdini 21.0.671 resources path. +if [ -n "${HOUDINI_PATH}" ]; then + export HOUDINI_PATH="$(prepend_unique_path "${omr_install_dir}/plugin/houdini" "${HOUDINI_PATH}")" + export HOUDINI_PATH="$(prepend_unique_path "${omr_install_dir}/houdini" "${HOUDINI_PATH}")" +else + export HOUDINI_PATH="${omr_install_dir}/houdini:${omr_install_dir}/plugin/houdini:${houdini_fallback}:&" +fi From fa8ecde0a477ab3ec5dd5ccd8821c6b5fb1fc28d Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+jacobfreedom@users.noreply.github.com> Date: Wed, 29 Apr 2026 16:51:12 +0200 Subject: [PATCH 4/5] Document Houdini 21 macOS compatibility status --- docs/Houdini21_macOS_PR_notes.md | 42 ++++++++ docs/Houdini21_macOS_changes.md | 175 +++++++++++++------------------ moonray/moonray_dcc_plugins | 2 +- 3 files changed, 117 insertions(+), 102 deletions(-) create mode 100644 docs/Houdini21_macOS_PR_notes.md diff --git a/docs/Houdini21_macOS_PR_notes.md b/docs/Houdini21_macOS_PR_notes.md new file mode 100644 index 00000000..cbd184f8 --- /dev/null +++ b/docs/Houdini21_macOS_PR_notes.md @@ -0,0 +1,42 @@ +# PR Notes: Houdini 21 macOS Compatibility + +## Reviewer Summary +Adds macOS/Houdini 21 compatibility updates required to build and install OpenMoonRay against Houdini 21 using Houdini-provided USD/PXR and Python 3.11. This includes Boost 1.82 alignment, dependency fetch/build fixes, Houdini USD library naming compatibility, and source-driven Houdini plugin payload installation. This branch validates build/install/selectability in Solaris, but does not resolve native DWA material authoring/render behavior in Houdini 21. + +## Scope +- Build/dependency/install compatibility for Houdini 21 on macOS. +- No intended look/scene/rendering behavior change claim. +- No claim that native DWA Solaris authoring is fixed. + +## Validated vs Not Resolved +| Area | Status | Notes | +|---|---|---| +| Dependency build | Validated | Build path completes with current compatibility adjustments. | +| Main configure/build | Validated | Houdini-target integration build path succeeds. | +| Install | Validated | Install path completes and plugin payload is install-driven. | +| Solaris renderer selectability | Validated | MoonRay selectable in Solaris viewport. | +| Native DWA material influence in Material Library / mtlx subnet | Not resolved | Native DWA nodes do not reliably drive visible render changes in simple test. | +| Light live-update behavior (`spread` example) | Not resolved | Manual IPR update required in observed tests. | +| Dome light with texture | Not resolved | Not working in current tested branch state. | + +## Temporary Dependency Note +This branch may temporarily depend on a `moonray_dcc_plugins` fork/branch for Houdini 21 Python 3.11 payload alignment. +Current local kickoff pointer: +- branch: `houdini21-py311-kickoff` +- base commit: `eda4e57` (before additional fork commits) + +Current intent for that fork is minimal: +- install-driven `python3.11libs` payload support +- required Houdini plugin payload continuity (`otls`, `soho`, `toolbar`, integration files) +- no broad OTL/authoring semantic rewrite + +This fork kickoff is not fully stable as a native DWA workflow fix. Native DWA material behavior remains unresolved. + +## Runtime Observation Captured During Simple DWA Test +- `{dispatcherExit} Message Dispatcher [libcomputation_progmcrt.dylib] : exiting : reason is 'socket was disconnected'` +- `{clientSocketError} SocketPeer::receive: Bad file descriptor` +- `signal ... 15` + +## Reviewer Guidance +- Evaluate this PR primarily as compatibility/build/install integration work. +- Treat native DWA Solaris authoring/runtime issues as follow-up work outside this PR closure. diff --git a/docs/Houdini21_macOS_changes.md b/docs/Houdini21_macOS_changes.md index d8219e83..2f3254f0 100644 --- a/docs/Houdini21_macOS_changes.md +++ b/docs/Houdini21_macOS_changes.md @@ -1,105 +1,78 @@ -# OpenMoonRay Houdini 21.0.680 macOS Compatibility Notes +# Houdini 21 macOS Compatibility Changes -This document records the MoonRay macOS updates required for Houdini `21.0.680`. +## Summary +Adds macOS/Houdini 21 compatibility updates required to build and install OpenMoonRay against Houdini 21 using Houdini-provided USD/PXR and Python 3.11. This includes Boost 1.82 alignment, dependency fetch/build fixes, Houdini USD library naming compatibility, and source-driven Houdini plugin payload installation. This branch validates build/install/selectability in Solaris, but does not resolve native DWA material authoring/render behavior in Houdini 21. -## Scope - -- Target platform: macOS -- Target DCC: Houdini `21.0.680` -- Goal: build MoonRay against Houdini-owned USD/PXR and Python 3.11 +Compatibility and integration improved in this branch. Native DWA authoring/runtime behavior in Solaris remains unresolved. ## Tested Environment - -- macOS: Tahoe (SDK observed during build: `MacOSX26.4.sdk`) -- Xcode: `26.0.1` (`/Applications/Xcode_26.0.1.app`) -- Houdini validated in this branch: `21.0.680` - -## Why These Changes Were Needed - -Houdini 21 moved to Python 3.11 and ships USD/PXR libraries inside the Houdini framework layout. MoonRay must consume those paths directly for include/library resolution and avoid building a separate local USD for the Houdini build path. - -## Required Compatibility Changes - -### 1) [`CMakeMacOSPresets.json`](../CMakeMacOSPresets.json) - -- `HOUDINI_INSTALL_DIR` set to: - - `/Applications/Houdini/Houdini21.0.680` -- `PXR_LIB_PREFIX` set to: - - `$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries` -- `PXR_INCLUDE_PREFIX` set to: - - `$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Resources/toolkit/include` -- `PXR_BOOST_PYTHON_LIB` set to: - - `$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries/libpxr_python.dylib` - -Important: in this tested setup, using `libhboost_python311-mt-a64.dylib` did not resolve all expected `pxr_boost::python` references during link, while `libpxr_python.dylib` did. - -### 2) [`scripts/macOS/setupHoudini.sh`](../scripts/macOS/setupHoudini.sh) - -- `HOUDINI_PATH` updated to Houdini 21.0.680 framework resources path. - -### 3) [`building/macOS/pxr-houdini/pxrTargets.cmake`](../building/macOS/pxr-houdini/pxrTargets.cmake) - -- `HPYTHONLIB` updated to: - - `$ENV{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.11/lib/libpython3.11.dylib` -- `HPYTHONINC` updated to: - - `$ENV{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.11/include/python3.11` - -### 4) [`building/macOS/pxr-houdini/pxrConfig.cmake`](../building/macOS/pxr-houdini/pxrConfig.cmake) - -- PXR version metadata updated to: - - `PXR_MAJOR_VERSION "0"` - - `PXR_MINOR_VERSION "25"` - - `PXR_PATCH_VERSION "5"` - - `PXR_VERSION "2505"` - -### 5) [`building/macOS/CMakeLists.txt`](../building/macOS/CMakeLists.txt) - -- Boost source updated to `1.82.0` (`boost_1_82_0.tar.gz`) for Houdini 21 toolchain compatibility. - -### 6) [`building/macOS/pxr-houdini/pxrTargets-release.cmake`](../building/macOS/pxr-houdini/pxrTargets-release.cmake) - -- Houdini 21 library naming compatibility fix: - - `libpxr_usdRiImaging.dylib` -> `libpxr_usdRiPxrImaging.dylib` - -## Build Procedure Requirements (Houdini Path) - -- Build dependencies with Houdini USD mode enabled (skip local USD): - - `cmake -DNO_USD=1 ../building/macOS` - - `cmake --build .` -- If dependencies were previously built without `-DNO_USD=1`, clean `build-deps/` and `installs/` before rebuilding to avoid mixed USD linkage. - -## Environment-Specific Workarounds - -- In this macOS/Xcode environment, full `cmake --build --preset macos-houdini-release` required disabling Xcode code-signing attributes at configure time to avoid dynamic-library signing failures. -- This is an environment workaround, not a Houdini 21 compatibility requirement. - -## Validation Summary - -- Dependency build completed successfully with `-DNO_USD=1`. -- Main project configure/build completed successfully for Houdini preset. -- Install completed successfully. -- Moonray appears as a selectable renderer in the Solaris viewport. -- Houdini Solaris workflow is the intended runtime verification path. -- `moonray_gui` command-line test requires an active GUI display session; headless runs fail with `Cannot create window: no screens available`. - -## Houdini Sanity Reference - -- SideFX changelog reference (used as a sanity baseline when evaluating Houdini compatibility context): - - [SideFX changelog](https://www.sidefx.com/changelog/?categories=52&journal=17.5&show_versions=on) -- Note: this branch has not been tested against production Houdini `21.0.679`; validated test target remains Houdini `21.0.680`. -- Additional context: the Xcode compilation issue language in SideFX notes is generic; direct relevance to MoonRay-specific build/runtime behavior is currently uncertain. - -## Out of Scope - -- Any separate Houdini shader/HDA UX issues are not addressed by these changes. -- `cmake_modules` contains a local Boost macro adjustment: `cmake/MoonrayDso.cmake` updates `DWA_BOOST_VERSION` from `1073000` to `1082000`. This change is in the submodule working tree and is not part of the parent-repo commits in this branch. - -## Cross-Repo Linkage - -- Parent repo branch: - - [`Moonray-Houdini21-macOS`](https://github.com/rolledhand/openmoonray/tree/Moonray-Houdini21-macOS) -- Submodule repo branch: - - [`boost-1.82-macro-update`](https://github.com/rolledhand/cmake_modules/tree/boost-1.82-macro-update) -- hdMoonray int64 conversion fix (Houdini 21.0.671 runtime): - - target branch: `houdini21-int64-fix` - - branch link: `https://github.com/rolledhand/hdMoonray/tree/houdini21-int64-fix` +- macOS Tahoe +- Xcode 26.0.1 class toolchain flow +- Houdini 21 series validation target: +- `21.0.680` (original PR target) +- `21.0.671` (current local validation path) + +## Build/Dependency Changes +- Boost dependency alignment moved to `1.82.0`. +- Boost patch command made tolerant of already-applied state (`patch ... || true`). +- `log4cplus` dependency fetch moved from git tag checkout to release tarball: +- `https://github.com/log4cplus/log4cplus/releases/download/REL_2_0_5/log4cplus-2.0.5.tar.xz` +- `log4cplus` reproducible build workaround added before configure: +- `touch Makefile.in` +- `touch aclocal.m4 configure config.h.in` + +These are build reproducibility fixes, not renderer/material behavior fixes. + +## Python 3.11 Alignment +- Houdini 21 Python 3.11 include/lib/executable alignment was applied for USD/PXR integration in this branch. +- `building/macOS/user-config.jam` was moved from Python 3.9 config to Python 3.11 config for this compatibility track. +- Current pathing is validated for local Houdini 21 installs and should be parameterized before upstream hardening. + +## Houdini USD/PXR Pathing +- Houdini USD integration uses Houdini-provided PXR paths and library resolution. +- Compatibility mapping included: +- `libpxr_usdRiImaging.dylib` -> `libpxr_usdRiPxrImaging.dylib` +- PXR metadata compatibility updates for Houdini 21 USD packaging were applied in `pxr-houdini` CMake metadata. + +## Install Payload Changes +Source-driven install path includes Houdini plugin payload required for this branch validation: +- `otls` +- `soho` +- `python3.11libs` +- `toolbar` (where present in plugin payload layout) +- integration files under Houdini plugin tree + +Manual post-install copying is not the intended validation path for this branch. + +## Validation Results +- Dependency build: pass +- Main configure/build: pass +- Install: pass +- MoonRay renderer selectable in Solaris viewport: pass + +## DWA Material Test Status +Status: unresolved in current build. + +Observed behavior in Solaris Material Library / mtlx subnet: +- Native DWA nodes are visible/creatable, but do not reliably drive visible render changes in the simple test. +- Control path through `mtlxstandard_surface` can influence render, but this is not a native DWA workflow fix. + +Observed runtime/disconnect signal during simple DWA tests: +- `{dispatcherExit} Message Dispatcher [libcomputation_progmcrt.dylib] : exiting : reason is 'socket was disconnected'` +- `{clientSocketError} SocketPeer::receive: Bad file descriptor` +- `signal ... 15` + +## Known Unresolved Issues +- Native DWA material authoring/render influence in Solaris remains unresolved for this branch. +- Some light parameter edits (for example `spread`) require manual IPR refresh and do not always live-update automatically. +- Dome light textured workflow is currently not working in this tested branch state. + +## Notes For Reviewers +- This branch should be reviewed as a Houdini 21 macOS build/install compatibility update. +- Do not treat native DWA node visibility/selectability as evidence that native DWA material workflow is fixed. +- No claim is made that MaterialX/native DWA Solaris authoring is production-ready in this branch. + +## Future Cleanup / Upstreaming Notes +- Parameterize local Houdini/Python paths before upstream merge hardening. +- Keep compatibility/build fixes separated from shader authoring/runtime behavior work. +- Track native DWA Solaris authoring/runtime closure as a follow-up effort. diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index 0afcb038..7041c008 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit 0afcb038a901c8c9803243115074a602db950892 +Subproject commit 7041c008fba2e881a90e5f1b98098c4197be8e69 From f82431e41fca6deeaa5342a8abd4359fbd335361 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+jacobfreedom@users.noreply.github.com> Date: Wed, 29 Apr 2026 17:11:51 +0200 Subject: [PATCH 5/5] Houdini 21 macOS: apply build compatibility updates Adds remaining parent-repo build/setup compatibility changes for Houdini 21 macOS. Aligns Houdini mode preset/build config with Python 3.11 and Boost Python 3.11. Includes dependency/build reproducibility updates where staged. Includes Houdini USD/PXR compatibility mapping if staged. Does not claim native DWA material workflow is fixed. --- CMakeMacOSPresets.json | 3 ++- building/macOS/CMakeLists.txt | 17 +++++++++-------- building/macOS/user-config.jam | 6 +++--- cmake_modules | 2 +- scripts/macOS/setupHoudini.sh | 7 +++---- 5 files changed, 18 insertions(+), 17 deletions(-) diff --git a/CMakeMacOSPresets.json b/CMakeMacOSPresets.json index f6e194ab..1e5b9f71 100644 --- a/CMakeMacOSPresets.json +++ b/CMakeMacOSPresets.json @@ -42,7 +42,8 @@ }, "cacheVariables": { "CMAKE_PREFIX_PATH": "$env{DEPS_ROOT};$env{PREFIX_PXR}", - "MOONRAY_USE_HOUDINI": "TRUE" + "MOONRAY_USE_HOUDINI": "TRUE", + "BOOST_PYTHON_COMPONENT_NAME": "python311" } }, { diff --git a/building/macOS/CMakeLists.txt b/building/macOS/CMakeLists.txt index 03f295f8..33648f76 100644 --- a/building/macOS/CMakeLists.txt +++ b/building/macOS/CMakeLists.txt @@ -23,7 +23,7 @@ set(THIS_DIR ${CMAKE_CURRENT_SOURCE_DIR}) # User configurable settings set(InstallRoot ${rootSrcDir}/../../../../installs CACHE FILEPATH "Install root for dependencies") -set(PythonVer 3.9.6 CACHE STRING "Python version (n.m), e.g. 3.6") +set(PythonVer 3.11 CACHE STRING "Python version (n.m), e.g. 3.6") set(PythonRoot /usr CACHE FILEPATH "Location of Python install") ExternalProject_Add(Blosc @@ -42,7 +42,7 @@ ExternalProject_Add(Boost URL https://sourceforge.net/projects/boost/files/boost/1.82.0/boost_1_82_0.tar.gz UPDATE_COMMAND ./bootstrap.sh --prefix=${InstallRoot} --with-toolset=clang linkflags="-arch ${BOOST_ARCH}" CONFIGURE_COMMAND "" - PATCH_COMMAND patch -p3 -N < ${THIS_DIR}/Boost.patch + PATCH_COMMAND patch -p3 -N < ${THIS_DIR}/Boost.patch || true BUILD_COMMAND ./b2 install ${JOBS_ARG} --user-config=${THIS_DIR}/user-config.jam --with_python variant=release link=shared threading=multi define=BOOST_UNORDERED_HAVE_PIECEWISE_CONSTRUCT=0 BUILD_IN_SOURCE 1 INSTALL_COMMAND "" @@ -146,9 +146,10 @@ ExternalProject_Add(OpenVDB set(CHAIN OpenVDB) ExternalProject_Add(Log4CPlus - GIT_REPOSITORY https://github.com/log4cplus/log4cplus - GIT_TAG REL_2_0_5 + URL https://github.com/log4cplus/log4cplus/releases/download/REL_2_0_5/log4cplus-2.0.5.tar.xz PATCH_COMMAND patch -p1 -N < ${THIS_DIR}/log4plus-limit-threads.patch || true + COMMAND find . -name "Makefile.in" -exec touch {} + + COMMAND touch aclocal.m4 configure config.h.in BUILD_IN_SOURCE 1 CONFIGURE_COMMAND ./configure --prefix ${InstallRoot} BUILD_COMMAND make @@ -331,11 +332,11 @@ if(NOT NO_USD) -DPXR_ENABLE_PYTHON_SUPPORT=ON -DPXR_USE_PYTHON_3=ON -DPXR_USE_DEBUG_PYTHON=OFF - -DPYTHON_EXECUTABLE=/usr/bin/python3 - -DPYTHON_LIBRARY=/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/libpython3.9.dylib - -DPYTHON_INCLUDE_DIR=/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/Headers + -DPYTHON_EXECUTABLE=/Applications/Houdini/Houdini21.0.671/Frameworks/Python.framework/Versions/3.11/bin/python3.11 + -DPYTHON_LIBRARY=/Applications/Houdini/Houdini21.0.671/Frameworks/Python.framework/Versions/3.11/lib/libpython3.11.dylib + -DPYTHON_INCLUDE_DIR=/Applications/Houdini/Houdini21.0.671/Frameworks/Python.framework/Versions/3.11/include/python3.11 -DPYTHON_VERSION_MAJOR=3 - -DPYTHON_VERSION_MINOR=9 + -DPYTHON_VERSION_MINOR=11 -DTBB_USE_DEBUG_BUILD=OFF -DPXR_BUILD_TESTS=OFF -DPXR_BUILD_EXAMPLES=OFF diff --git a/building/macOS/user-config.jam b/building/macOS/user-config.jam index f163655e..797ab8ce 100644 --- a/building/macOS/user-config.jam +++ b/building/macOS/user-config.jam @@ -1,6 +1,6 @@ -using python : 3.9 +using python : 3.11 : "/usr/bin/python3" - : "/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/Headers" - : "/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib" + : "/Applications/Houdini/Houdini21.0.671/Frameworks/Python.framework/Versions/3.11/include/python3.11" + : "/Applications/Houdini/Houdini21.0.671/Frameworks/Python.framework/Versions/3.11/lib" ; using clang : : : -"arch arm64" "-arch arm64" ; diff --git a/cmake_modules b/cmake_modules index 63b26f05..066c4cc6 160000 --- a/cmake_modules +++ b/cmake_modules @@ -1 +1 @@ -Subproject commit 63b26f05a1bb9854e977d04bcf3c0c50041689a3 +Subproject commit 066c4cc6b1aba719b03ed39720a6fe82f94a958c diff --git a/scripts/macOS/setupHoudini.sh b/scripts/macOS/setupHoudini.sh index f78dd965..5539e317 100644 --- a/scripts/macOS/setupHoudini.sh +++ b/scripts/macOS/setupHoudini.sh @@ -26,15 +26,14 @@ prepend_unique_path() { esac } -# Preserve any existing USD plugin search path (set by Houdini or shell packages), -# while guaranteeing Moonray plugin location is present first. +# Preserve any existing USD plugin search path while guaranteeing MoonRay plugin location is present. export PXR_PLUGINPATH_NAME="$(prepend_unique_path "${omr_install_dir}/plugin/pxr" "${PXR_PLUGINPATH_NAME}")" export PXR_PLUGIN_PATH="$(prepend_unique_path "${omr_install_dir}/plugin/pxr" "${PXR_PLUGIN_PATH}")" export PXR_PLUGINPATH_NAME="${PXR_PLUGINPATH_NAME%:}" export PXR_PLUGIN_PATH="${PXR_PLUGIN_PATH%:}" -# Prefer layering Moonray onto an existing Houdini env (from houdini_setup). If that -# was not sourced yet, fall back to the known Houdini 21.0.671 resources path. +# Prefer layering MoonRay onto an existing Houdini env (from houdini_setup). +# If that wasn't sourced yet, fall back to the known Houdini 21.0.671 resources path. if [ -n "${HOUDINI_PATH}" ]; then export HOUDINI_PATH="$(prepend_unique_path "${omr_install_dir}/plugin/houdini" "${HOUDINI_PATH}")" export HOUDINI_PATH="$(prepend_unique_path "${omr_install_dir}/houdini" "${HOUDINI_PATH}")"