Files
UnrealEngine/Engine/Source/ThirdParty/OpenVDB/openvdb-12.0.0/cmake/OpenVDBMayaSetup.cmake
2025-05-18 13:04:45 +08:00

254 lines
6.6 KiB
CMake

# Copyright Contributors to the OpenVDB Project
# SPDX-License-Identifier: Apache-2.0
#
#[=======================================================================[.rst:
OpenVDBMayaSetup
-------------------
Finds the Maya installation and sets up dependencies for OpenVDB builds.
This ensures that all dependencies that are included with a Maya
distribution are configured to load from that installation.
Use this module by invoking include with the form::
include ( OpenVDBMayaSetup )
Result Variables
^^^^^^^^^^^^^^^^
This will define the following variables:
``Maya_FOUND``
True if the system has Maya installed.
``Maya_VERSION``
The version of the Maya which was found.
Additionally, the following values are set for all dependent OpenVDB
builds, ensuring they link against the correct libraries. This may
overwrite user provided values.
``TBB_INCLUDEDIR``
``TBB_LIBRARYDIR``
Hints
^^^^^
Instead of explicitly setting the cache variables, the following
variables may be provided to tell this module where to look.
``Maya_ROOT``
Preferred installation prefix.
``ENV{Maya_ROOT}``
Preferred installation prefix.
``ENV{MAYA_LOCATION}``
Preferred installation prefix.
``DISABLE_CMAKE_SEARCH_PATHS``
Disable CMakes default search paths for find_xxx calls in this module
#]=======================================================================]
# Find the Maya installation and use Maya's CMake to initialize
# the Maya lib
cmake_minimum_required(VERSION 3.20)
set(_FIND_MAYA_ADDITIONAL_OPTIONS "")
if(DISABLE_CMAKE_SEARCH_PATHS)
set(_FIND_MAYA_ADDITIONAL_OPTIONS NO_DEFAULT_PATH)
endif()
# Set _MAYA_ROOT based on a user provided root var. Xxx_ROOT and ENV{Xxx_ROOT}
# are prioritised over the legacy capitalized XXX_ROOT variables for matching
# CMake 3.12 behaviour
# @todo deprecate -D and ENV MAYA_ROOT from CMake 3.12
if(Maya_ROOT)
set(_MAYA_ROOT ${Maya_ROOT})
elseif(DEFINED ENV{Maya_ROOT})
set(_MAYA_ROOT $ENV{Maya_ROOT})
elseif(MAYA_ROOT)
set(_MAYA_ROOT ${MAYA_ROOT})
elseif(DEFINED ENV{MAYA_ROOT})
set(_MAYA_ROOT $ENV{MAYA_ROOT})
endif()
set(_MAYA_ROOT_SEARCH_DIR)
if(_MAYA_ROOT)
list(APPEND _MAYA_ROOT_SEARCH_DIR ${_MAYA_ROOT})
endif()
# @todo deprecate MAYA_LOCATION? There may be workflows which set this variable
if(DEFINED ENV{MAYA_LOCATION})
list(APPEND _MAYA_ROOT_SEARCH_DIR $ENV{MAYA_LOCATION})
endif()
# ------------------------------------------------------------------------
# Search for Maya
# ------------------------------------------------------------------------
find_path(Maya_INCLUDE_DIR maya/MTypes.h
${_FIND_MAYA_ADDITIONAL_OPTIONS}
PATHS ${_MAYA_ROOT_SEARCH_DIR}
PATH_SUFFIXES include
)
if(NOT EXISTS "${Maya_INCLUDE_DIR}/maya/MTypes.h")
message(FATAL_ERROR "Unable to locate Maya Installation.")
endif()
# Determine Maya version, including point releases. Currently only works for
# Maya 2016 and onwards so there is no -x64 and -x32 suffixes in the version
file(STRINGS "${Maya_INCLUDE_DIR}/maya/MTypes.h"
_maya_version_string REGEX "#define MAYA_API_VERSION "
)
string(REGEX REPLACE ".*#define[ \t]+MAYA_API_VERSION[ \t]+([0-9]+).*$" "\\1"
_maya_version_string "${_maya_version_string}"
)
string(SUBSTRING ${_maya_version_string} 0 4 Maya_MAJOR_VERSION)
string(SUBSTRING ${_maya_version_string} 4 2 Maya_MINOR_VERSION)
if(Maya_MINOR_VERSION LESS 50)
set(Maya_VERSION ${Maya_MAJOR_VERSION})
else()
set(Maya_VERSION ${Maya_MAJOR_VERSION}.5)
endif()
unset(_maya_version_string)
# Find required maya libs
set(_MAYA_COMPONENT_LIST
OpenMaya
OpenMayaFX
OpenMayaUI
Foundation
)
set(Maya_LIBRARY_DIR "")
if(APPLE)
set(Maya_LIBRARY_DIR ${Maya_INCLUDE_DIR}/../Maya.app/Contents/MacOS/)
else()
set(Maya_LIBRARY_DIR ${Maya_INCLUDE_DIR}/../lib/)
endif()
set(Maya_LIB_COMPONENTS "")
foreach(COMPONENT ${_MAYA_COMPONENT_LIST})
find_library(Maya_${COMPONENT}_LIBRARY ${COMPONENT}
${_FIND_MAYA_ADDITIONAL_OPTIONS}
PATHS ${Maya_LIBRARY_DIR}
)
list(APPEND Maya_LIB_COMPONENTS ${Maya_${COMPONENT}_LIBRARY})
endforeach()
# ------------------------------------------------------------------------
# Cache and set Maya_FOUND
# ------------------------------------------------------------------------
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Maya
FOUND_VAR Maya_FOUND
REQUIRED_VARS
Maya_INCLUDE_DIR
Maya_LIB_COMPONENTS
VERSION_VAR Maya_VERSION
)
if(NOT Maya_FOUND)
message(FATAL_ERROR "Unable to locate Maya Installation.")
elseif(Maya_VERSION VERSION_LESS MINIMUM_MAYA_VERSION)
message(WARNING "Unsupported Maya Version ${Maya_VERSION}. Minimum "
"supported is ${MINIMUM_MAYA_VERSION}."
)
endif()
# ------------------------------------------------------------------------
# Configure dependencies
# ------------------------------------------------------------------------
if(NOT TBB_INCLUDEDIR)
set(TBB_INCLUDEDIR ${Maya_INCLUDE_DIR})
endif()
if(NOT TBB_LIBRARYDIR)
set(TBB_LIBRARYDIR ${Maya_LIBRARY_DIR})
endif()
# ------------------------------------------------------------------------
# Configure Maya
# ------------------------------------------------------------------------
set(Maya_LIBRARIES ${Maya_LIB_COMPONENTS})
set(Maya_INCLUDE_DIRS ${Maya_INCLUDE_DIR})
set(Maya_LIBRARY_DIRS ${Maya_LIBRARY_DIR})
if(APPLE)
set(Maya_DEFINITIONS
-DMAC_PLUGIN
-DREQUIRE_IOSTREAM
-DOSMac_
-DOSMac_MachO_
-D_BOOL
)
elseif(WIN32)
set(Maya_DEFINITIONS
-DNOMINMAX
-DNT_PLUGIN
-DREQUIRE_IOSTREAM
-D_USE_MATH_DEFINES
-D_CRT_SECURE_NO_WARNINGS
)
else()
set(Maya_DEFINITIONS
-D_BOOL
-DFUNCPROTO
-DGL_GLEXT_PROTOTYPES=1
-DREQUIRE_IOSTREAM
-DUNIX
-fno-gnu-keywords
-fno-omit-frame-pointer
-fno-strict-aliasing
-funsigned-char
-Wno-comment
-Wno-multichar
-Wno-strict-aliasing
-m64
-DBits64_
-DLINUX
-DLINUX_64
)
endif()
# Configure imported targets
if(NOT TARGET Maya)
add_library(Maya INTERFACE)
foreach(COMPONENT ${_MAYA_COMPONENT_LIST})
add_library(Maya::${COMPONENT} UNKNOWN IMPORTED)
set_target_properties(Maya::${COMPONENT} PROPERTIES
IMPORTED_LOCATION "${Maya_${COMPONENT}_LIBRARY}"
INTERFACE_COMPILE_OPTIONS "${Maya_DEFINITIONS}"
INTERFACE_INCLUDE_DIRECTORIES "${Maya_INCLUDE_DIRS}"
)
target_link_libraries(Maya INTERFACE Maya::${COMPONENT})
endforeach()
endif()
macro(MAYA_SET_LIBRARY_PROPERTIES NAME)
if(WIN32)
set_target_properties(${NAME} PROPERTIES
SUFFIX ".mll"
PREFIX ""
LINK_FLAGS "/export:initializePlugin /export:uninitializePlugin"
)
elseif(APPLE)
set_target_properties(${NAME} PROPERTIES
SUFFIX ".bundle"
PREFIX ""
)
else()
set_target_properties(${NAME} PROPERTIES
PREFIX ""
)
endif()
endmacro()