UsdLayerManager/cmake/modules/FindOpenUSD.cmake

189 lines
4.6 KiB
CMake

# FindOpenUSD.cmake
# Finds OpenUSD installation and sets up necessary variables
#
# This module defines:
# OpenUSD_FOUND - System has OpenUSD
# OpenUSD_INCLUDE_DIRS - OpenUSD include directories
# OpenUSD_LIBRARIES - Libraries needed to use OpenUSD
# OpenUSD_LIBRARY_DIR - Directory containing OpenUSD libraries
# OpenUSD_VERSION - Version of OpenUSD found
# Look for OpenUSD root
find_path(OpenUSD_ROOT_DIR
NAMES include/pxr/pxr.h lib/usd_usd.lib
PATHS
${CMAKE_PREFIX_PATH}
$ENV{OpenUSD_ROOT}
DOC "OpenUSD root directory"
)
if(OpenUSD_ROOT_DIR)
set(OpenUSD_INCLUDE_DIR "${OpenUSD_ROOT_DIR}/include")
set(OpenUSD_LIBRARY_DIR "${OpenUSD_ROOT_DIR}/lib")
set(OpenUSD_BIN_DIR "${OpenUSD_ROOT_DIR}/lib")
endif()
# Find Python 3.12 (required by this USD build)
find_path(Python312_INCLUDE_DIR
NAMES Python.h
PATHS
"$ENV{LOCALAPPDATA}/Programs/Python/Python312/include"
"C:/Python312/include"
"C:/Program Files/Python312/include"
DOC "Python 3.12 include directory"
NO_DEFAULT_PATH
)
find_path(Python312_LIBRARY_DIR
NAMES python312.lib
PATHS
"$ENV{LOCALAPPDATA}/Programs/Python/Python312/libs"
"C:/Python312/libs"
"C:/Program Files/Python312/libs"
DOC "Python 3.12 library directory"
NO_DEFAULT_PATH
)
# Core USD libraries needed for the project
set(OpenUSD_REQUIRED_LIBS
arch
tf
gf
vt
work
plug
trace
sdf
pcp
usd
usdGeom
usdLux
usdShade
usdImaging
usdImagingGL
hdx
hd
hdSt
hf
hgi
hgiGL
glf
hio
ar
kind
ndr
sdr
python
cameraUtil
)
# Dependency libraries bundled with USD
set(OpenUSD_DEP_LIBS
tbb
tbbmalloc
Imath-3_1
osdCPU
)
# Find USD libraries
set(OpenUSD_LIBRARIES "")
foreach(lib ${OpenUSD_REQUIRED_LIBS})
find_library(OpenUSD_${lib}_LIBRARY
NAMES usd_${lib}
PATHS ${OpenUSD_LIBRARY_DIR}
NO_DEFAULT_PATH
)
if(OpenUSD_${lib}_LIBRARY)
list(APPEND OpenUSD_LIBRARIES ${OpenUSD_${lib}_LIBRARY})
else()
message(WARNING "Could not find OpenUSD library: usd_${lib}")
endif()
endforeach()
# Find dependency libraries
foreach(lib ${OpenUSD_DEP_LIBS})
find_library(OpenUSD_dep_${lib}_LIBRARY
NAMES ${lib}
PATHS ${OpenUSD_LIBRARY_DIR}
NO_DEFAULT_PATH
)
if(OpenUSD_dep_${lib}_LIBRARY)
list(APPEND OpenUSD_LIBRARIES ${OpenUSD_dep_${lib}_LIBRARY})
endif()
endforeach()
# Find Python library
if(Python312_LIBRARY_DIR)
find_library(Python312_LIBRARY
NAMES python312
PATHS ${Python312_LIBRARY_DIR}
NO_DEFAULT_PATH
)
if(Python312_LIBRARY)
list(APPEND OpenUSD_LIBRARIES ${Python312_LIBRARY})
endif()
endif()
# Try to find version from pxr.h
if(OpenUSD_INCLUDE_DIR AND EXISTS "${OpenUSD_INCLUDE_DIR}/pxr/pxr.h")
file(STRINGS "${OpenUSD_INCLUDE_DIR}/pxr/pxr.h" _version_line
REGEX "^#define PXR_VERSION ")
if(_version_line)
string(REGEX REPLACE "^#define PXR_VERSION ([0-9]+).*" "\\1" OpenUSD_VERSION "${_version_line}")
endif()
endif()
# Handle standard find_package arguments
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(OpenUSD
REQUIRED_VARS
OpenUSD_INCLUDE_DIR
OpenUSD_LIBRARY_DIR
OpenUSD_LIBRARIES
VERSION_VAR OpenUSD_VERSION
)
if(OpenUSD_FOUND)
set(OpenUSD_INCLUDE_DIRS
${OpenUSD_INCLUDE_DIR}
)
# Add Python include if found
if(Python312_INCLUDE_DIR)
list(APPEND OpenUSD_INCLUDE_DIRS ${Python312_INCLUDE_DIR})
endif()
# Create imported target
if(NOT TARGET OpenUSD::OpenUSD)
add_library(OpenUSD::OpenUSD INTERFACE IMPORTED)
set_target_properties(OpenUSD::OpenUSD PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${OpenUSD_INCLUDE_DIRS}"
INTERFACE_LINK_LIBRARIES "${OpenUSD_LIBRARIES}"
)
# Add required compile definitions for USD
target_compile_definitions(OpenUSD::OpenUSD INTERFACE
NOMINMAX
)
endif()
message(STATUS "Found OpenUSD: ${OpenUSD_INCLUDE_DIR}")
message(STATUS "OpenUSD Libraries: ${OpenUSD_LIBRARY_DIR}")
message(STATUS "OpenUSD Binaries: ${OpenUSD_BIN_DIR}")
if(Python312_INCLUDE_DIR)
message(STATUS "Python 3.12: ${Python312_INCLUDE_DIR}")
endif()
if(OpenUSD_VERSION)
message(STATUS "OpenUSD Version: ${OpenUSD_VERSION}")
endif()
endif()
mark_as_advanced(
OpenUSD_INCLUDE_DIR
OpenUSD_LIBRARY_DIR
Python312_INCLUDE_DIR
Python312_LIBRARY_DIR
)