Files
UnrealEngine/Engine/Source/ThirdParty/Alembic/alembic-1.8.7/CMakeLists.txt
2025-05-18 13:04:45 +08:00

330 lines
11 KiB
CMake

##-*****************************************************************************
##
## Copyright (c) 2009-2016,
## Sony Pictures Imageworks Inc. and
## Industrial Light & Magic, a division of Lucasfilm Entertainment Company Ltd.
##
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions are
## met:
## * Redistributions of source code must retain the above copyright
## notice, this list of conditions and the following disclaimer.
## * Redistributions in binary form must reproduce the above
## copyright notice, this list of conditions and the following disclaimer
## in the documentation and/or other materials provided with the
## distribution.
## * Neither the name of Industrial Light & Magic nor the names of
## its contributors may be used to endorse or promote products derived
## from this software without specific prior written permission.
##
## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
##
##-*****************************************************************************
CMAKE_MINIMUM_REQUIRED(VERSION 3.13)
PROJECT(Alembic VERSION 1.8.7)
MESSAGE(STATUS "CMAKE SYSTEM NAME: ${CMAKE_SYSTEM_NAME}")
IF (RUN_FROM_MK)
SET(CMAKE_FIRST_RUN CACHE STRING "CMake initialised from mk script")
MARK_AS_ADVANCED (CMAKE_FIRST_RUN)
ENDIF()
IF (NOT DEFINED QUIET)
SET(CMAKE_VERBOSE_MAKEFILE TRUE)
ENDIF()
INCLUDE(GNUInstallDirs)
#-******************************************************************************
# OPTIONS (set with -D<option>=<value>)
#-******************************************************************************
OPTION(USE_ARNOLD "Include Arnold stuff" OFF)
OPTION(USE_BINARIES "Include binaries" ON)
OPTION(USE_EXAMPLES "Include examples" OFF)
OPTION(USE_HDF5 "Include HDF5 stuff" OFF)
OPTION(USE_MAYA "Include Maya stuff" OFF)
OPTION(USE_PRMAN "Include PRMan stuff" OFF)
OPTION(USE_PYALEMBIC "Include PyAlembic stuff" OFF)
OPTION(USE_STATIC_BOOST "Build with static Boost libs" OFF)
OPTION(USE_STATIC_HDF5 "Build with static HDF5 libs" OFF)
OPTION(USE_TESTS "Include Alembic tests" ON)
OPTION(ALEMBIC_BUILD_LIBS "Build library, if off use external alembic libs" ON)
OPTION(ALEMBIC_ILMBASE_LINK_STATIC "IlmBase is a static library" OFF)
OPTION(ALEMBIC_SHARED_LIBS "Build shared libraries" ON)
OPTION(ALEMBIC_DEBUG_WARNINGS_AS_ERRORS "In debug mode build with warnings as errors" ON)
SET(PYALEMBIC_PYTHON_MAJOR 3 CACHE STRING "Which major version of python to look for when building PyAlembic")
option(DOCS_PATH
"Create and install the HTML based API documentation to this location (requires Doxygen)"
OFF)
# Set static/dynamic build options
SET(LIB_TYPE STATIC)
IF (ALEMBIC_SHARED_LIBS)
SET(LIB_TYPE SHARED)
IF (WIN32)
ADD_DEFINITIONS(-DALEMBIC_DLL)
ENDIF()
ENDIF(ALEMBIC_SHARED_LIBS)
# Need to test this on multiple platforms, it is an easy way to enable
# memory checks like valgrind by doing:
# ctest -D ExperimentalMemCheck
# include (CTest)
# Cmake system specific flags
SET(WINDOWS FALSE)
IF ("${CMAKE_SYSTEM_NAME}" MATCHES "Windows")
SET(WINDOWS TRUE)
ENDIF()
SET(DARWIN FALSE)
IF ("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
SET(DARWIN TRUE)
ENDIF()
SET(LINUX FALSE)
IF ("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
SET(LINUX TRUE)
ENDIF()
# if not set fall back to VFX reference platform 2018 to 2020
IF ("${CMAKE_CXX_STANDARD}" STREQUAL "")
MESSAGE("Defaulting CMAKE_CXX_STANDARD to 14")
SET(CMAKE_CXX_STANDARD 14)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
ENDIF()
# Set visibility for GNU compilers
IF (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
ENDIF()
# Set some debug vs opt flags
if (ALEMBIC_DEBUG_WARNINGS_AS_ERRORS AND "${CMAKE_BUILD_TYPE}" MATCHES "Debug" AND NOT MSVC)
add_compile_options(-Wall -Werror -Wextra -Wno-unused-parameter -Wno-deprecated -Wunused-local-typedefs)
if((CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 7.0) OR
CMAKE_CXX_COMPILER_ID MATCHES "CLANG")
add_compile_options( -Wno-error=implicit-fallthrough)
endif()
endif()
IF (NOT ${WINDOWS})
SET(EXTERNAL_MATH_LIBS "-lm")
ELSE()
SET(EXTERNAL_MATH_LIBS "")
ENDIF()
IF (MSVC)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
IF ((CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16) AND
(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 15))
# MSVC15/MSVS2009 fix
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj" )
ENDIF ()
ADD_DEFINITIONS(-DPLATFORM_WINDOWS -DPLATFORM=WINDOWS)
IF (NOT ALEMBIC_ILMBASE_LINK_STATIC)
ADD_DEFINITIONS(-DOPENEXR_DLL)
ENDIF()
ELSEIF (${DARWIN})
#ADD_DEFINITIONS(-DPLATFORM_DARWIN -DPLATFORM=DARWIN "-arch x86_64")
ADD_DEFINITIONS(-DPLATFORM_DARWIN -DPLATFORM=DARWIN)
ELSE()
ADD_DEFINITIONS(-DPLATFORM_LINUX -DPLATFORM=LINUX)
ENDIF()
#-******************************************************************************
# INSTALLATION
#-******************************************************************************
IF (DEFINED ENV{ALEMBIC_INSTALL_PREFIX})
SET( CMAKE_INSTALL_PREFIX
$ENV{ALEMBIC_INSTALL_PREFIX}/alembic-${PROJECT_VERSION})
ENDIF()
# Tell me what my install location would be
MESSAGE(STATUS "The install dir is ${CMAKE_INSTALL_PREFIX}")
# check in the source directory
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake/Modules)
#-******************************************************************************
# TESTS
#-******************************************************************************
# Globally enable testing
ENABLE_TESTING()
IF (BUILD_TESTING)
SET(BUILDNAME "${BUILDNAME}" CACHE STRING "Name of build on the dashboard")
MARK_AS_ADVANCED(BUILDNAME)
ENDIF(BUILD_TESTING)
IF (UNIX AND NOT WINDOWS)
FIND_PROGRAM(CMAKE_UNAME uname /bin /usr/bin /usr/local/bin )
IF (CMAKE_UNAME)
EXECUTE_PROCESS(COMMAND uname -m OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR)
SET(CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR} CACHE INTERNAL
"processor type (i386 and x86_64)")
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
ADD_DEFINITIONS(-fPIC)
ENDIF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
ENDIF(CMAKE_UNAME)
ENDIF(UNIX AND NOT WINDOWS)
IF (DARWIN)
ADD_DEFINITIONS(-fPIC)
ENDIF()
#-******************************************************************************
# DEPENDENCIES
#-******************************************************************************
FIND_PACKAGE(Threads REQUIRED)
IF (DOCS_PATH)
FIND_PACKAGE(Doxygen)
ENDIF()
# IlmBase
INCLUDE("./cmake/AlembicIlmBase.cmake")
# HDF5
IF (USE_HDF5)
FIND_PACKAGE(ZLIB REQUIRED)
SET(ALEMBIC_WITH_HDF5 "1")
INCLUDE("./cmake/AlembicHDF5.cmake")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DH5_USE_18_API")
ENDIF()
#-******************************************************************************
# BUILD LIBRARIES
#-******************************************************************************
# Alembic
IF (ALEMBIC_BUILD_LIBS)
ADD_SUBDIRECTORY(lib)
INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/lib" "${PROJECT_BINARY_DIR}/lib")
ADD_LIBRARY( Alembic::Alembic ALIAS Alembic )
ELSE()
FIND_PACKAGE(Alembic REQUIRED CONFIG HINTS ${ALEMBIC_ROOT})
MESSAGE(STATUS "Using external Alembic")
ENDIF()
# PyAlembic
IF (USE_PYALEMBIC)
FIND_PACKAGE(Python${PYALEMBIC_PYTHON_MAJOR} COMPONENTS Interpreter Development)
if(Python${PYALEMBIC_PYTHON_MAJOR}_FOUND)
MESSAGE(STATUS "Found Python ${Python${PYALEMBIC_PYTHON_MAJOR}_VERSION}")
INCLUDE("./cmake/AlembicPyIlmBase.cmake")
ADD_SUBDIRECTORY(python)
else()
MESSAGE(WARNING "Python not found! Skipping PyAlembic")
endif()
ENDIF()
#-******************************************************************************
# BUILD BINARIES
#-******************************************************************************
# PRMan
IF (USE_PRMAN)
INCLUDE("./cmake/AlembicPRMan.cmake")
IF (${ALEMBIC_PRMAN_FOUND})
MESSAGE(STATUS "Building PRMan plugins")
ADD_SUBDIRECTORY(prman)
ELSE()
MESSAGE(STATUS "PRMan not found")
ENDIF()
ENDIF()
# Arnold
IF (USE_ARNOLD)
INCLUDE("./cmake/AlembicArnold.cmake")
IF (${ALEMBIC_ARNOLD_FOUND})
MESSAGE(STATUS "Building Arnold plugins")
ADD_SUBDIRECTORY( arnold )
ELSE()
MESSAGE(STATUS "Arnold not found")
ENDIF()
ENDIF()
# Maya
IF (USE_MAYA)
INCLUDE("./cmake/AlembicMaya.cmake")
IF (MAYA_FOUND)
MESSAGE(STATUS "Building Maya plugins")
ADD_SUBDIRECTORY(maya)
ELSE()
MESSAGE(STATUS "Maya not found")
ENDIF()
ENDIF()
# Binaries (abcls, abctree, etc)
IF (USE_BINARIES)
ADD_SUBDIRECTORY(bin)
ENDIF()
# Examples
IF (USE_EXAMPLES)
ADD_SUBDIRECTORY(examples)
ENDIF()
#-******************************************************************************
SET(_config_msg "\n * Alembic Configuration ===")
MACRO(info_cfg_option
_setting)
SET(_msg " * ${_setting}")
STRING(LENGTH "${_msg}" _len)
WHILE("40" GREATER "${_len}")
SET(_msg "${_msg} ")
MATH(EXPR _len "${_len} + 1")
ENDWHILE()
SET(_config_msg "${_config_msg}\n${_msg}${${_setting}}")
ENDMACRO()
info_cfg_option(USE_ARNOLD)
info_cfg_option(USE_BINARIES)
info_cfg_option(USE_EXAMPLES)
info_cfg_option(USE_HDF5)
info_cfg_option(USE_MAYA)
info_cfg_option(USE_PRMAN)
info_cfg_option(USE_PYALEMBIC)
info_cfg_option(USE_STATIC_BOOST)
info_cfg_option(USE_STATIC_HDF5)
info_cfg_option(USE_TESTS)
info_cfg_option(ALEMBIC_ILMBASE_LINK_STATIC)
info_cfg_option(ALEMBIC_SHARED_LIBS)
info_cfg_option(ALEMBIC_DEBUG_WARNINGS_AS_ERRORS)
info_cfg_option(PYALEMBIC_PYTHON_MAJOR)
info_cfg_option(DOCS_PATH)
MESSAGE("${_config_msg}")
#-******************************************************************************
# PACKAGING (place at the end)
#-******************************************************************************
set(CPACK_PACKAGE_CONTACT "Lucas Miller")
# The following is distribution specific but leaving it here as an example for
# the future (the example is for Ubuntu 22.04)
# set(CPACK_DEBIAN_PACKAGE_DEPENDS "libimath-3-1-29")
include(CPack)