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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions CMakeMacOSPresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,16 @@
"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.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}",
"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}",
"MOONRAY_USE_HOUDINI": "TRUE"
"MOONRAY_USE_HOUDINI": "TRUE",
"BOOST_PYTHON_COMPONENT_NAME": "python311"
}
},
{
Expand Down
20 changes: 10 additions & 10 deletions building/macOS/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -39,10 +39,10 @@ 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
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 ""
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -420,4 +421,3 @@ ExternalProject_Add(GLFW
DEPENDS ${CHAIN}
)
set(CHAIN GLFW)

4 changes: 2 additions & 2 deletions building/macOS/pxr-houdini/pxrConfig.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
6 changes: 3 additions & 3 deletions building/macOS/pxr-houdini/pxrTargets-release.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
6 changes: 3 additions & 3 deletions building/macOS/pxr-houdini/pxrTargets.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -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)
Expand Down
6 changes: 3 additions & 3 deletions building/macOS/user-config.jam
Original file line number Diff line number Diff line change
@@ -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 : : : <compileflags>-"arch arm64" <linkflags>"-arch arm64" ;
2 changes: 1 addition & 1 deletion cmake_modules
42 changes: 42 additions & 0 deletions docs/Houdini21_macOS_PR_notes.md
Original file line number Diff line number Diff line change
@@ -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.
78 changes: 78 additions & 0 deletions docs/Houdini21_macOS_changes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# Houdini 21 macOS Compatibility Changes

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

Compatibility and integration improved in this branch. Native DWA authoring/runtime behavior in Solaris remains unresolved.

## Tested Environment
- 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.
2 changes: 1 addition & 1 deletion moonray/hydra/hdMoonray
2 changes: 1 addition & 1 deletion moonray/moonray_dcc_plugins
46 changes: 37 additions & 9 deletions scripts/macOS/setupHoudini.sh
Original file line number Diff line number Diff line change
@@ -1,14 +1,42 @@
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/Houdini20.0.751/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 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 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}")"
else
export HOUDINI_PATH="${omr_install_dir}/houdini:${omr_install_dir}/plugin/houdini:${houdini_fallback}:&"
fi