Blame CMakeLists.txt

Packit 0d464f
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
Packit 0d464f
Packit 0d464f
PROJECT (openexr)
Packit 0d464f
Packit 0d464f
SET(OPENEXR_VERSION_MAJOR "2")
Packit 0d464f
SET(OPENEXR_VERSION_MINOR "2")
Packit 0d464f
SET(OPENEXR_VERSION_PATCH "0")
Packit 0d464f
Packit 0d464f
SET(OPENEXR_VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH})
Packit 0d464f
SET(OPENEXR_VERSION_API ${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR})
Packit 0d464f
Packit 0d464f
Packit 0d464f
# enable the tests
Packit 0d464f
ENABLE_TESTING()
Packit 0d464f
Packit 0d464f
Packit 0d464f
# distro building 
Packit 0d464f
SET(CPACK_PACKAGE_VERSION_MAJOR "${OPENEXR_VERSION_MAJOR}")
Packit 0d464f
SET(CPACK_PACKAGE_VERSION_MINOR "${OPENEXR_VERSION_MINOR}")
Packit 0d464f
SET(CPACK_PACKAGE_VERSION_PATCH "${OPENEXR_VERSION_PATCH}")
Packit 0d464f
SET(CPACK_SOURCE_GENERATOR "TGZ")
Packit 0d464f
set(CPACK_SOURCE_PACKAGE_FILE_NAME
Packit 0d464f
    "${CMAKE_PROJECT_NAME}-${OPENEXR_VERSION}"
Packit 0d464f
  )
Packit 0d464f
set(CPACK_SOURCE_IGNORE_FILES
Packit 0d464f
  "/.git*;/.cvs*;${CPACK_SOURCE_IGNORE_FILES}")
Packit 0d464f
INCLUDE ( CPack )
Packit 0d464f
Packit 0d464f
Packit 0d464f
Packit 0d464f
# Allow the developer to select if Dynamic or Static libraries are built
Packit 0d464f
OPTION (BUILD_SHARED_LIBS    "Build Shared Libraries" ON)
Packit 0d464f
OPTION (USE_ZLIB_WINAPI      "Use ZLib Win API"       OFF)
Packit 0d464f
OPTION (NAMESPACE_VERSIONING "Use Namespace Versioning" ON)
Packit 0d464f
Packit 0d464f
# Setup osx rpathing
Packit 0d464f
SET (CMAKE_MACOSX_RPATH 1)
Packit 0d464f
SET (BUILD_WITH_INSTALL_RPATH 1)
Packit 0d464f
Packit 0d464f
ADD_DEFINITIONS ( -DHAVE_CONFIG_H -DILM_IMF_TEST_IMAGEDIR="${CMAKE_SOURCE_DIR}/IlmImfTest/" )
Packit 0d464f
Packit 0d464f
INCLUDE_DIRECTORIES (
Packit 0d464f
  ${CMAKE_CURRENT_BINARY_DIR}/config
Packit 0d464f
  IlmImf
Packit 0d464f
  IlmImfUtil
Packit 0d464f
  exrmaketiled
Packit 0d464f
  exrenvmap
Packit 0d464f
  exrmakepreview
Packit 0d464f
  exrmultiview
Packit 0d464f
  IlmImfFuzzTest
Packit 0d464f
)
Packit 0d464f
Packit 0d464f
FIND_PACKAGE(ZLIB REQUIRED)
Packit 0d464f
INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR})
Packit 0d464f
Packit 0d464f
IF (NOT WIN32)
Packit 0d464f
  SET ( PTHREAD_LIB pthread )
Packit 0d464f
ENDIF()
Packit 0d464f
Packit 0d464f
INCLUDE_DIRECTORIES ( ${ILMBASE_PACKAGE_PREFIX}/include/OpenEXR )
Packit 0d464f
LINK_DIRECTORIES ( ${ILMBASE_PACKAGE_PREFIX}/lib )
Packit 0d464f
MESSAGE ( "ILMBASE_PACKAGE_PREFIX = " ${ILMBASE_PACKAGE_PREFIX})
Packit 0d464f
Packit 0d464f
SET (LIB_TYPE STATIC)
Packit 0d464f
IF (BUILD_SHARED_LIBS)
Packit 0d464f
  # User wants to build Dynamic Libraries, so change the LIB_TYPE variable to CMake keyword 'SHARED'
Packit 0d464f
  SET (LIB_TYPE SHARED)
Packit 0d464f
    IF (WIN32)
Packit 0d464f
    ADD_DEFINITIONS(-DOPENEXR_DLL)
Packit 0d464f
  ENDIF ()
Packit 0d464f
ENDIF ()
Packit 0d464f
Packit 0d464f
IF (USE_ZLIB_WINAPI)
Packit 0d464f
  ADD_DEFINITIONS(-DZLIB_WINAPI)
Packit 0d464f
ENDIF ()
Packit 0d464f
Packit 0d464f
# Test for GCC-style inline asm support with AVX instructions
Packit 0d464f
INCLUDE (CheckCXXSourceCompiles)
Packit 0d464f
CHECK_CXX_SOURCE_COMPILES (
Packit 0d464f
	"
Packit 0d464f
	int main()
Packit 0d464f
	{
Packit 0d464f
	 #if defined(__GNUC__) && defined(__SSE2__) 
Packit 0d464f
		 int n   = 0;
Packit 0d464f
		 int eax = 0;
Packit 0d464f
		 int edx = 0;
Packit 0d464f
		 __asm__(
Packit 0d464f
			 \"xgetbv     ;\"
Packit 0d464f
			 \"vzeroupper  \"
Packit 0d464f
			 : \"=a\"(eax), \"=d\"(edx) : \"c\"(n) : );
Packit 0d464f
	 #else
Packit 0d464f
		 #error No GCC style inline asm supported for AVX instructions
Packit 0d464f
	 #endif
Packit 0d464f
	}
Packit 0d464f
	" HAVE_GCC_INLINE_ASM_AVX)
Packit 0d464f
Packit 0d464f
# Check if sysconf(_SC_NPROCESSORS_ONLN) can be used for CPU count
Packit 0d464f
CHECK_CXX_SOURCE_COMPILES (
Packit 0d464f
    "
Packit 0d464f
    #include <unistd.h>
Packit 0d464f
    int main()
Packit 0d464f
    {
Packit 0d464f
        sysconf(_SC_NPROCESSORS_ONLN);
Packit 0d464f
    }
Packit 0d464f
    " HAVE_SYSCONF_NPROCESSORS_ONLN)
Packit 0d464f
Packit 0d464f
Packit 0d464f
##########################
Packit 0d464f
# OpenEXRConfig.h generation
Packit 0d464f
##########################
Packit 0d464f
IF (WIN32)
Packit 0d464f
  FILE ( WRITE ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_HAVE_COMPLETE_IOMANIP 1\n" )
Packit 0d464f
ELSEIF (APPLE)
Packit 0d464f
  FILE ( WRITE ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_HAVE_DARWIN 1\n" )
Packit 0d464f
  FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_HAVE_COMPLETE_IOMANIP 1\n" )
Packit 0d464f
  FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#include <string.h>\n" )
Packit 0d464f
ELSE ()
Packit 0d464f
  # Linux
Packit 0d464f
  FILE ( WRITE ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_HAVE_LINUX_PROCFS 1\n" )
Packit 0d464f
  FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_HAVE_COMPLETE_IOMANIP 1\n" )
Packit 0d464f
  FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_HAVE_LARGE_STACK 1\n" )
Packit 0d464f
ENDIF()
Packit 0d464f
  
Packit 0d464f
IF (NAMESPACE_VERSIONING)
Packit 0d464f
    FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_INTERNAL_NAMESPACE_CUSTOM 1\n")
Packit 0d464f
    FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_NAMESPACE Imf\n" )
Packit 0d464f
    FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_INTERNAL_NAMESPACE Imf_${OPENEXR_VERSION_API}\n\n" )
Packit 0d464f
ELSE ()
Packit 0d464f
    FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_INTERNAL_NAMESPACE_CUSTOM 0\n")
Packit 0d464f
    FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_NAMESPACE Imf\n" )
Packit 0d464f
    FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_INTERNAL_NAMESPACE Imf\n\n" )
Packit 0d464f
ENDIF ()
Packit 0d464f
Packit 0d464f
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_VERSION_STRING \"${OPENEXR_VERSION}\"\n" )
Packit 0d464f
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_PACKAGE_STRING \"OpenEXR ${OPENEXR_VERSION}\"\n" )
Packit 0d464f
Packit 0d464f
Packit 0d464f
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "
Packit 0d464f
#define OPENEXR_VERSION_MAJOR ${OPENEXR_VERSION_MAJOR}
Packit 0d464f
#define OPENEXR_VERSION_MINOR ${OPENEXR_VERSION_MINOR}
Packit 0d464f
#define OPENEXR_VERSION_PATCH ${OPENEXR_VERSION_PATCH}
Packit 0d464f
")
Packit 0d464f
Packit 0d464f
Packit 0d464f
  FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "
Packit 0d464f
// Version as a single hex number, e.g. 0x01000300 == 1.0.3
Packit 0d464f
#define OPENEXR_VERSION_HEX ((OPENEXR_VERSION_MAJOR << 24) | \\
Packit 0d464f
                             (OPENEXR_VERSION_MINOR << 16) | \\
Packit 0d464f
                             (OPENEXR_VERSION_PATCH <<  8))\n
Packit 0d464f
")
Packit 0d464f
Packit 0d464f
IF (HAVE_GCC_INLINE_ASM_AVX)
Packit 0d464f
  FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX 1\n" )
Packit 0d464f
ENDIF()
Packit 0d464f
  
Packit 0d464f
IF (HAVE_SYSCONF_NPROCESSORS_ONLN)
Packit 0d464f
  FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_HAVE_SYSCONF_NPROCESSORS_ONLN 1\n" )
Packit 0d464f
ENDIF()
Packit 0d464f
  
Packit 0d464f
SET (OPENEXR_LIBSUFFIX "")
Packit 0d464f
SET (ILMBASE_LIBSUFFIX "")
Packit 0d464f
IF (NAMESPACE_VERSIONING)
Packit 0d464f
  SET ( OPENEXR_LIBSUFFIX "-${OPENEXR_VERSION_API}" )
Packit 0d464f
  # assume same NAMESPACE_VERSION setting for IlmBase for now
Packit 0d464f
  SET ( ILMBASE_LIBSUFFIX "-${OPENEXR_VERSION_API}" )
Packit 0d464f
ENDIF ()
Packit 0d464f
Packit 0d464f
##########################
Packit 0d464f
# IlmImf library
Packit 0d464f
##########################
Packit 0d464f
ADD_SUBDIRECTORY ( IlmImf )
Packit 0d464f
Packit 0d464f
SET_TARGET_PROPERTIES ( IlmImf
Packit 0d464f
  PROPERTIES
Packit 0d464f
  VERSION 22.0.0
Packit 0d464f
  SOVERSION 22
Packit 0d464f
  OUTPUT_NAME "IlmImf${OPENEXR_LIBSUFFIX}"
Packit 0d464f
  )
Packit 0d464f
  
Packit 0d464f
##########################
Packit 0d464f
# IlmImfUtil library
Packit 0d464f
##########################
Packit 0d464f
ADD_SUBDIRECTORY ( IlmImfUtil )
Packit 0d464f
Packit 0d464f
SET_TARGET_PROPERTIES ( IlmImfUtil
Packit 0d464f
  PROPERTIES
Packit 0d464f
  VERSION 22.0.0
Packit 0d464f
  SOVERSION 22
Packit 0d464f
  OUTPUT_NAME "IlmImfUtil${OPENEXR_LIBSUFFIX}"
Packit 0d464f
  )
Packit 0d464f
  
Packit 0d464f
##########################
Packit 0d464f
# Example Code
Packit 0d464f
##########################
Packit 0d464f
ADD_SUBDIRECTORY ( IlmImfExamples )
Packit 0d464f
Packit 0d464f
  
Packit 0d464f
##########################
Packit 0d464f
# Tests
Packit 0d464f
##########################
Packit 0d464f
ADD_SUBDIRECTORY ( IlmImfTest )
Packit 0d464f
ADD_SUBDIRECTORY ( IlmImfUtilTest )
Packit 0d464f
ADD_SUBDIRECTORY ( IlmImfFuzzTest )
Packit 0d464f
Packit 0d464f
Packit 0d464f
##########################
Packit 0d464f
# Binaries / Utilities
Packit 0d464f
##########################
Packit 0d464f
ADD_SUBDIRECTORY ( exrheader )
Packit 0d464f
ADD_SUBDIRECTORY ( exrmaketiled )
Packit 0d464f
ADD_SUBDIRECTORY ( exrstdattr )
Packit 0d464f
ADD_SUBDIRECTORY ( exrmakepreview )
Packit 0d464f
ADD_SUBDIRECTORY ( exrenvmap )
Packit 0d464f
ADD_SUBDIRECTORY ( exrmultiview )
Packit 0d464f
ADD_SUBDIRECTORY ( exrmultipart )
Packit 0d464f
Packit 0d464f
Packit 0d464f
##########################
Packit 0d464f
# Installation
Packit 0d464f
##########################
Packit 0d464f
Packit 0d464f
INSTALL ( FILES
Packit 0d464f
  ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h
Packit 0d464f
  DESTINATION
Packit 0d464f
  ${CMAKE_INSTALL_PREFIX}/include/OpenEXR
Packit 0d464f
  )
Packit 0d464f
Packit 0d464f
# Documentation
Packit 0d464f
INSTALL ( FILES
Packit 0d464f
  doc/TechnicalIntroduction.pdf
Packit 0d464f
  doc/ReadingAndWritingImageFiles.pdf
Packit 0d464f
  doc/OpenEXRFileLayout.pdf
Packit 0d464f
  doc/MultiViewOpenEXR.pdf
Packit 0d464f
  doc/InterpretingDeepPixels.pdf
Packit 0d464f
  doc/TheoryDeepPixels.pdf
Packit 0d464f
  DESTINATION
Packit 0d464f
  ${CMAKE_INSTALL_PREFIX}/share/doc/OpenEXR-${OPENEXR_VERSION}
Packit 0d464f
  )
Packit 0d464f
Packit 0d464f
# Examples
Packit 0d464f
INSTALL ( FILES
Packit 0d464f
  IlmImfExamples/main.cpp
Packit 0d464f
  IlmImfExamples/drawImage.cpp
Packit 0d464f
  IlmImfExamples/rgbaInterfaceExamples.cpp
Packit 0d464f
  IlmImfExamples/rgbaInterfaceTiledExamples.cpp
Packit 0d464f
  IlmImfExamples/generalInterfaceExamples.cpp
Packit 0d464f
  IlmImfExamples/lowLevelIoExamples.cpp
Packit 0d464f
  IlmImfExamples/previewImageExamples.cpp
Packit 0d464f
  IlmImfExamples/generalInterfaceTiledExamples.cpp
Packit 0d464f
  IlmImfExamples/generalInterfaceTiledExamples.h
Packit 0d464f
  IlmImfExamples/drawImage.h
Packit 0d464f
  IlmImfExamples/rgbaInterfaceExamples.h
Packit 0d464f
  IlmImfExamples/generalInterfaceExamples.h
Packit 0d464f
  IlmImfExamples/rgbaInterfaceTiledExamples.h
Packit 0d464f
  IlmImfExamples/lowLevelIoExamples.h
Packit 0d464f
  IlmImfExamples/previewImageExamples.h
Packit 0d464f
  IlmImfExamples/namespaceAlias.h
Packit 0d464f
  DESTINATION
Packit 0d464f
  ${CMAKE_INSTALL_PREFIX}/share/doc/OpenEXR-${OPENEXR_VERSION}/examples
Packit 0d464f
  )