Developer Guide#
This guide describes how to consume the published Usd Optimize package from your own packman and premake based build, so that you can link against the library and call its C++ API.
To build Usd Optimize itself from source, or to consume a prebuilt binary drop
directly, see the repository README.md and the install guides under
docs/install-prebuilt-linux.md and docs/install-prebuilt-windows.md.
Platform-specific requirements of the source build are covered under
Platform build notes below.
Linking against the package#
Update your
deps/target-deps.packman.xmlto add ausd_optimizedependency withlinkPath="../_build/target-deps/usd_optimize".Add a new file
deps/usd-optimize-deps.packman.xmlwith the following contents:<project toolsVersion="5.0"> <import path="../_build/target-deps/usd_optimize/dev/deps/all-deps.packman.xml"> <filter include="autouv-core" /> <filter include="omnimesh_ops_usd" /> </import> <dependency name="autouv-core" linkPath="../_build/target-deps/omni_autouv_core" tags="non-redist"/> <dependency name="omnimesh_ops_usd" linkPath="../_build/target-deps/omnimesh_ops_usd" tags="non-redist"/> </project>
Update your
repo.tomlto pull the new file. For example:[repo_build] fetch.packman_target_files_to_pull = [ "${root}/deps/target-deps.packman.xml", "${root}/deps/usd-optimize-deps.packman.xml", ]
Access the
use_usd_optimize()function in your premake by adding the following sections.... usd_optimize_build = require(path.replaceextension(os.matchfiles("_build/target-deps/usd_optimize/*/dev/tools/premake/usd-optimize-public.lua")[1], "")) ... project "foo_bar" usd_optimize_build.use_usd_optimize() ...
Calling the API#
Once your project links against Usd Optimize, include the public header and drive operations through the core singleton:
#include <usd_optimize/core/UsdOptimize.h>
The public C++ interface is documented in the Usd Optimize C++ API reference. The equivalent Python entry points are described in Usd Optimize Python API, and the operation catalog (with JSON configuration examples that apply equally to the C++ and Python paths) is in Operations.
Extending Usd Optimize#
New optimizations are added as plugins that subclass usd_optimize::Operation
and register themselves with the core library. The full plugin authoring guide
lives in PLUGINS.md in the repository root.
Platform build notes#
These apply when building Usd Optimize from source with ./repo.sh build /
repo.bat build.
(Windows) Host toolchain discovery. The build links a host-installed
compiler (msbuild.link_host_toolchain in repo.toml), not packman
msvc. If discovery fails, set msbuild.vs_path / msbuild.vs_version
(and msbuild.winsdk_path for the SDK) in repo.toml — see
repo_build toolchains.
A Visual Studio install without the C++ toolset is not enough: if
Microsoft.VCToolsVersion.default.txt is missing under
VC/Auxiliary/Build, add the Desktop development with C++ workload via
the Visual Studio Installer.
(Windows, non-English locale) Set PYTHONUTF8=1. Repo tooling reads
UTF-8 config files, but Python on Windows decodes text using the system ANSI
code page (CP949, CP932, GBK), which surfaces as a UnicodeDecodeError
during repo.bat build. Enable UTF-8 mode:
set PYTHONUTF8=1 :: current session
setx PYTHONUTF8 1 :: persist for new shells
$env:PYTHONUTF8 = "1" # current session
English/US Windows defaults to CP1252, which overlaps UTF-8 for ASCII and so
usually hides this; PYTHONUTF8=1 is a harmless, safe default. See
PEP 540.
(Linux) Extra requirements for ./repo.sh py_package. It needs
patchelf (sudo apt-get install patchelf) for auditwheel repair, and
outbound HTTPS/PyPI access — tools/pyproject/pybuild.sh pip-installs
Poetry, auditwheel, and related tools into
_build/host-deps/py_package_venv/. If that bootstrap fails partway, remove
the venv and rerun: rm -rf _build/host-deps/py_package_venv.
(Linux x86_64) C++11 ABI is enabled via
premake.linux_x86_64_cxx_abi in repo.toml.