254 lines
6.6 KiB
CMake
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()
|