699 lines
		
	
	
	
		
			24 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			699 lines
		
	
	
	
		
			24 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
| ## Copyright 2009-2021 Intel Corporation
 | |
| ## SPDX-License-Identifier: Apache-2.0
 | |
| 
 | |
| CMAKE_MINIMUM_REQUIRED(VERSION 3.10.0)
 | |
| 
 | |
| SET(EMBREE_VERSION_MAJOR 4)
 | |
| SET(EMBREE_VERSION_MINOR 3)
 | |
| SET(EMBREE_VERSION_PATCH 1)
 | |
| SET(EMBREE_VERSION_NOTE "")
 | |
| 
 | |
| SET(EMBREE_VERSION ${EMBREE_VERSION_MAJOR}.${EMBREE_VERSION_MINOR}.${EMBREE_VERSION_PATCH})
 | |
| MATH(EXPR EMBREE_VERSION_NUMBER "10000*${EMBREE_VERSION_MAJOR} + 100*${EMBREE_VERSION_MINOR} + ${EMBREE_VERSION_PATCH}")
 | |
| SET(CPACK_RPM_PACKAGE_RELEASE 1)
 | |
| 
 | |
| PROJECT(embree${EMBREE_VERSION_MAJOR})
 | |
| SET(EMBREE_PROJECT_COMPILATION ON)
 | |
| 
 | |
| include(CMakeDependentOption)
 | |
| 
 | |
| # We use our own strip tool on macOS to sign during install. This is required as CMake modifies RPATH of the binary during install.
 | |
| IF (APPLE AND EMBREE_SIGN_FILE)
 | |
|   SET(EMBREE_STRIP ${CMAKE_STRIP})
 | |
|   SET(CMAKE_STRIP "${PROJECT_BINARY_DIR}/post_install_target.sh")
 | |
|   CONFIGURE_FILE(scripts/post_install_target.sh.in "${PROJECT_BINARY_DIR}/post_install_target.sh" @ONLY)
 | |
| ENDIF()
 | |
| 
 | |
| MACRO (SIGN_TARGET target)
 | |
|   IF (EMBREE_SIGN_FILE)
 | |
|     IF (WIN32)
 | |
|       # on Windows we sign and do not strip as debug symbols not included in binary
 | |
|       ADD_CUSTOM_COMMAND(TARGET ${target} POST_BUILD
 | |
|         COMMAND ${EMBREE_SIGN_FILE} $<TARGET_FILE:${target}>)
 | |
|     ELSEIF (APPLE)
 | |
|       # on MacOSX we strip and sign here for testing purposes but also during install, as CMake modifies binary during install
 | |
|       ADD_CUSTOM_COMMAND(TARGET ${target} POST_BUILD
 | |
|         COMMAND ${EMBREE_STRIP} -x $<TARGET_FILE:${target}>
 | |
|         COMMAND ${EMBREE_SIGN_FILE} -o runtime -e "${CMAKE_SOURCE_DIR}/common/cmake/embree.entitlements" $<TARGET_FILE:${target}>)
 | |
|     ELSE()
 | |
|       # on Linux signing of binaries is not supported and stripping is done during install
 | |
|     ENDIF()
 | |
|   ENDIF()
 | |
| ENDMACRO()
 | |
| 
 | |
| # find git version
 | |
| IF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
 | |
|   FIND_PACKAGE(Git)
 | |
|   IF(GIT_FOUND)
 | |
|     EXECUTE_PROCESS(
 | |
|       COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
 | |
|       WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
 | |
|       OUTPUT_VARIABLE "EMBREE_HASH"
 | |
|       ERROR_QUIET
 | |
|       OUTPUT_STRIP_TRAILING_WHITESPACE)
 | |
|   ELSE()
 | |
|     SET(EMBREE_HASH 0)
 | |
|   ENDIF()
 | |
| ENDIF()
 | |
| 
 | |
| IF(COMMAND cmake_policy)
 | |
|   if (POLICY CMP0003)
 | |
|     cmake_policy(SET CMP0003 NEW)
 | |
|   endif()
 | |
|   if (POLICY CMP0042)
 | |
|     cmake_policy(SET CMP0042 NEW)
 | |
|   endif()
 | |
|   if(POLICY CMP0072)
 | |
|     cmake_policy(SET CMP0072 NEW)
 | |
|   endif()
 | |
|   if(POLICY CMP0022)
 | |
|     cmake_policy(SET CMP0022 NEW)
 | |
|   endif()
 | |
|   if(POLICY CMP0074)
 | |
|     cmake_policy(SET CMP0074 NEW)
 | |
|   endif()
 | |
|   if(POLICY CMP0135)
 | |
|     cmake_policy(SET CMP0135 NEW)
 | |
|   endif()
 | |
| ENDIF()
 | |
| 
 | |
| MARK_AS_ADVANCED(CMAKE_BACKWARDS_COMPATIBILITY)
 | |
| MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH)
 | |
| MARK_AS_ADVANCED(LIBRARY_OUTPUT_PATH)
 | |
| 
 | |
| MARK_AS_ADVANCED(CMAKE_OSX_ARCHITECTURES)
 | |
| MARK_AS_ADVANCED(CMAKE_OSX_DEPLOYMENT_TARGET)
 | |
| MARK_AS_ADVANCED(CMAKE_OSX_SYSROOT)
 | |
| MARK_AS_ADVANCED(CLEAR CMAKE_CXX_COMPILER)
 | |
| 
 | |
| SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/common/cmake" ${CMAKE_MODULE_PATH})
 | |
| 
 | |
| INCLUDE(test)
 | |
| 
 | |
| set(BUILD_DOC OFF CACHE INTERNAL "build documentation (internal only)")
 | |
| IF (BUILD_DOC)
 | |
|   ADD_SUBDIRECTORY(doc)
 | |
| ENDIF()
 | |
| 
 | |
| OPTION(EMBREE_TUTORIALS    "Enable to build Embree tutorials" ON)
 | |
| 
 | |
| ##############################################################
 | |
| # Embree configuration
 | |
| ##############################################################
 | |
| 
 | |
| SET(EMBREE_STATIC_LIB ON CACHE BOOL "Build Embree as a static library." FORCE)
 | |
| MARK_AS_ADVANCED(EMBREE_STATIC_LIB)
 | |
| IF (EMBREE_STATIC_LIB)
 | |
|   SET(EMBREE_LIB_TYPE STATIC)
 | |
|   ADD_DEFINITIONS(-DEMBREE_STATIC_LIB)
 | |
| ELSE()
 | |
|   SET(EMBREE_LIB_TYPE SHARED)
 | |
| ENDIF()
 | |
| 
 | |
| OPTION(EMBREE_ISPC_SUPPORT "Build Embree with support for ISPC applications." OFF)
 | |
| IF (EMSCRIPTEN)
 | |
|   SET(EMBREE_ISPC_SUPPORT OFF CACHE BOOL "Build Embree with support for ISPC applications." FORCE)
 | |
| ENDIF()
 | |
| 
 | |
| SET(EMBREE_API_NAMESPACE "" CACHE STRING "C++ namespace to put API symbols into.")
 | |
| SET(EMBREE_LIBRARY_NAME  "embree${EMBREE_VERSION_MAJOR}" CACHE STRING "Name of the embree library file (default is embree${EMBREE_VERSION_MAJOR})")
 | |
| 
 | |
| IF (EMBREE_API_NAMESPACE AND EMBREE_ISPC_SUPPORT)
 | |
|    MESSAGE(FATAL_ERROR "You cannot enable ISPC when EMBREE_API_NAMESPACE is used.")
 | |
| ENDIF()
 | |
| 
 | |
| ##############################################################################
 | |
| # Configurations (add configurations also to common/cmake/embree-config.cmake)
 | |
| 
 | |
| OPTION(EMBREE_ZIP_MODE "Create Embree ZIP package" ON)
 | |
| MARK_AS_ADVANCED(EMBREE_ZIP_MODE)
 | |
| 
 | |
| OPTION(EMBREE_INSTALL_DEPENDENCIES "Install Embree dependencies in binary packages and install" OFF)
 | |
| MARK_AS_ADVANCED(EMBREE_INSTALL_DEPENDENCIES)
 | |
| 
 | |
| OPTION(EMBREE_STAT_COUNTERS "Enables statistic counters.")
 | |
| OPTION(EMBREE_STACK_PROTECTOR "When enabled Embree compiles with stack protection against return address overrides." OFF)
 | |
| 
 | |
| IF (NOT APPLE)
 | |
|   OPTION(EMBREE_SYCL_SUPPORT "Enables SYCL GPU support." OFF)
 | |
| ENDIF()
 | |
| CMAKE_DEPENDENT_OPTION(EMBREE_SYCL_LARGEGRF "Enables SYCL large GRF support." OFF "EMBREE_SYCL_SUPPORT" OFF)
 | |
| CMAKE_DEPENDENT_OPTION(EMBREE_SYCL_DBG "Enables DPC++ debug info." OFF "EMBREE_SYCL_SUPPORT" OFF)
 | |
| CMAKE_DEPENDENT_OPTION(EMBREE_SYCL_GEOMETRY_CALLBACK  "Enabled geometry callbacks which are disabled by default for SYCL." OFF  "EMBREE_SYCL_SUPPORT" OFF)
 | |
| 
 | |
| MARK_AS_ADVANCED(EMBREE_SYCL_LARGEGRF)
 | |
| MARK_AS_ADVANCED(EMBREE_SYCL_DBG)
 | |
| MARK_AS_ADVANCED(EMBREE_SYCL_GEOMETRY_CALLBACK)
 | |
| 
 | |
| IF (EMBREE_SYCL_GEOMETRY_CALLBACK)
 | |
|   message(WARNING "Enabling EMBREE_SYCL_GEOMETRY_CALLBACK is experimental and may result in poor performance.")
 | |
| ENDIF()
 | |
| 
 | |
| IF (EMBREE_SYCL_SUPPORT)
 | |
|   ADD_DEFINITIONS("-DEMBREE_SYCL_SUPPORT")  # FIXME: only use define from rtcore_config.h
 | |
| ENDIF()
 | |
| 
 | |
| CMAKE_DEPENDENT_OPTION(EMBREE_SYCL_RT_SIMULATION "Using hardware simulation" OFF "EMBREE_SYCL_SUPPORT" OFF)
 | |
| MARK_AS_ADVANCED(EMBREE_SYCL_RT_SIMULATION)
 | |
| IF (EMBREE_SYCL_RT_SIMULATION AND NOT EMBREE_SYCL_RT_VALIDATION_API AND EMBREE_SYCL_IMPLICIT_DISPATCH_GLOBALS)
 | |
|   MESSAGE(FATAL_ERROR "Using EMBREE_SYCL_RT_SIMULATION requires EMBREE_SYCL_RT_VALIDATION_API=ON and EMBREE_SYCL_IMPLICIT_DISPATCH_GLOBALS=OFF")
 | |
| ENDIF()
 | |
| IF (EMBREE_SYCL_RT_SIMULATION)
 | |
|   ADD_DEFINITIONS("-DEMBREE_SYCL_RT_SIMULATION")
 | |
| ENDIF()
 | |
| 
 | |
| CMAKE_DEPENDENT_OPTION(EMBREE_SYCL_RT_VALIDATION_API "Use rt_validation API instead of IGC provided rt_production API" OFF "EMBREE_SYCL_SUPPORT" OFF)
 | |
| IF (EMBREE_SYCL_RT_VALIDATION_API)
 | |
|   ADD_DEFINITIONS("-DEMBREE_SYCL_RT_VALIDATION_API")
 | |
| ENDIF()
 | |
| 
 | |
| CMAKE_DEPENDENT_OPTION(EMBREE_SYCL_IMPLICIT_DISPATCH_GLOBALS "Using L0 allocated Dispatch Globals" ON "EMBREE_SYCL_RT_VALIDATION_API" OFF)
 | |
| IF (EMBREE_SYCL_RT_VALIDATION_API AND NOT EMBREE_SYCL_IMPLICIT_DISPATCH_GLOBALS)
 | |
|   ADD_DEFINITIONS("-DEMBREE_SYCL_ALLOC_DISPATCH_GLOBALS")
 | |
| ENDIF()
 | |
| 
 | |
| MARK_AS_ADVANCED(EMBREE_SYCL_RT_VALIDATION_API)
 | |
| MARK_AS_ADVANCED(EMBREE_SYCL_IMPLICIT_DISPATCH_GLOBALS)
 | |
| 
 | |
| IF (EMBREE_SYCL_SUPPORT)
 | |
|   SET(EMBREE_SYCL_AOT_DEVICES "none" CACHE STRING "SYCL devices to use for AOT compilation")
 | |
|   SET_PROPERTY(CACHE EMBREE_SYCL_AOT_DEVICES PROPERTY STRINGS none dg2 pvc XE_HPG_CORE XE_HPC_CORE)
 | |
|   
 | |
|   SET(EMBREE_SYCL_AOT_DEVICE_REVISION 0)
 | |
|   IF (EMBREE_SYCL_AOT_DEVICES STREQUAL "dg2")
 | |
|     SET(EMBREE_SYCL_AOT_DEVICE_REVISION 4)  # FIXME: bug workaround should get removed
 | |
|   ENDIF()
 | |
| ENDIF()
 | |
| 
 | |
| CMAKE_DEPENDENT_OPTION(EMBREE_SYCL_L0_RTAS_BUILDER "Enable Level Zero RTAS builder" OFF "EMBREE_SYCL_SUPPORT" OFF)
 | |
| IF (EMBREE_SYCL_L0_RTAS_BUILDER)
 | |
|   ADD_DEFINITIONS("-DEMBREE_SYCL_L0_RTAS_BUILDER")
 | |
| ENDIF()
 | |
| 
 | |
| OPTION(EMBREE_RAY_MASK "Enables ray mask support." ON)
 | |
| OPTION(EMBREE_BACKFACE_CULLING "Enables backface culling.")
 | |
| OPTION(EMBREE_BACKFACE_CULLING_CURVES "Enables backface culling for curve primitives." OFF)
 | |
| OPTION(EMBREE_BACKFACE_CULLING_SPHERES "Enables backface culling for sphere primitives." OFF)
 | |
| 
 | |
| OPTION(EMBREE_FILTER_FUNCTION "Enables filter functions." ON)
 | |
| OPTION(EMBREE_IGNORE_INVALID_RAYS "Ignores invalid rays." OFF) # FIXME: enable by default?
 | |
| OPTION(EMBREE_COMPACT_POLYS "Enables double indexed poly layout." OFF)
 | |
| OPTION(EMBREE_GEOMETRY_TRIANGLE "Enables support for triangle geometries." ON)
 | |
| OPTION(EMBREE_GEOMETRY_QUAD "Enables support for quad geometries." ON)
 | |
| OPTION(EMBREE_GEOMETRY_CURVE "Enables support for curve geometries." ON)
 | |
| OPTION(EMBREE_GEOMETRY_SUBDIVISION "Enables support for subdiv geometries." ON)
 | |
| OPTION(EMBREE_GEOMETRY_USER "Enables support for user geometries." ON)
 | |
| OPTION(EMBREE_GEOMETRY_INSTANCE "Enables support for instances." ON)
 | |
| OPTION(EMBREE_GEOMETRY_INSTANCE_ARRAY "Enables support for instance arrays." ON)
 | |
| SET(EMBREE_MAX_INSTANCE_LEVEL_COUNT 1 CACHE STRING "Maximum number of instance levels.")
 | |
| 
 | |
| IF (NOT EMBREE_GEOMETRY_INSTANCE AND NOT EMBREE_GEOMETRY_INSTANCE_ARRAY AND NOT EMBREE_MAX_INSTANCE_LEVEL_COUNT EQUAL 1)
 | |
|   message(FATAL_ERROR "EMBREE_MAX_INSTANCE_LEVEL_COUNT must be 1 when EMBREE_GEOMETRY_INSTANCE and EMBREE_GEOMETRY_INSTANCE_ARRAY are disabled")
 | |
| ENDIF()
 | |
| 
 | |
| OPTION(EMBREE_GEOMETRY_GRID "Enables support for grid geometries." ON)
 | |
| OPTION(EMBREE_GEOMETRY_POINT "Enables support for point geometries." ON)
 | |
| 
 | |
| OPTION(EMBREE_RAY_PACKETS "Enabled support for ray packets." ON)
 | |
| 
 | |
| 
 | |
| SET(EMBREE_CURVE_SELF_INTERSECTION_AVOIDANCE_FACTOR 2.0 CACHE STRING "Self intersection avoidance factor for flat curves. Specify floating point value in range 0 to inf.")
 | |
| OPTION(EMBREE_DISC_POINT_SELF_INTERSECTION_AVOIDANCE "Enables self intersection avoidance for ray oriented discs." ON)
 | |
| OPTION(EMBREE_MIN_WIDTH "Enables min-width feature to enlarge curve and point thickness to pixel width." OFF)
 | |
| 
 | |
| ##############################################################
 | |
| # Platform detection and defaults
 | |
| ##############################################################
 | |
| 
 | |
| # detect ARM compilation
 | |
| IF (APPLE AND CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND (CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" OR CMAKE_OSX_ARCHITECTURES MATCHES "arm64"))
 | |
|   MESSAGE(STATUS "Building for Apple silicon")
 | |
|   SET(EMBREE_ARM ON)
 | |
| ELSEIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64")
 | |
|   MESSAGE(STATUS "Building for AArch64")
 | |
|   SET(EMBREE_ARM ON)
 | |
| ENDIF()
 | |
| 
 | |
| SET(EMBREE_TASKING_SYSTEM "INTERNAL" CACHE STRING "Selects tasking system")
 | |
| #SET(EMBREE_TBB_COMPONENT "tbb" CACHE STRING "The TBB component/library name.")
 | |
| 
 | |
| IF (WIN32)
 | |
|   SET_PROPERTY(CACHE EMBREE_TASKING_SYSTEM PROPERTY STRINGS TBB INTERNAL PPL)
 | |
| ELSE()
 | |
|   SET_PROPERTY(CACHE EMBREE_TASKING_SYSTEM PROPERTY STRINGS TBB INTERNAL)
 | |
| ENDIF()
 | |
| 
 | |
| IF (EMBREE_TASKING_SYSTEM STREQUAL "TBB")
 | |
|   SET(TASKING_TBB      ON )
 | |
|   SET(TASKING_INTERNAL OFF)
 | |
|   SET(TASKING_PPL      OFF )
 | |
|   ADD_DEFINITIONS(-DTASKING_TBB)
 | |
|   LIST(APPEND ISPC_DEFINITIONS -DTASKING_TBB)
 | |
| ELSEIF (EMBREE_TASKING_SYSTEM STREQUAL "PPL")
 | |
|   SET(TASKING_PPL      ON )
 | |
|   SET(TASKING_TBB      OFF )
 | |
|   SET(TASKING_INTERNAL OFF)
 | |
|   ADD_DEFINITIONS(-DTASKING_PPL)
 | |
|   LIST(APPEND ISPC_DEFINITIONS -DTASKING_PPL)
 | |
| ELSE()
 | |
|   SET(TASKING_INTERNAL ON )
 | |
|   SET(TASKING_TBB      OFF)
 | |
|   SET(TASKING_PPL      OFF )
 | |
|   ADD_DEFINITIONS(-DTASKING_INTERNAL)
 | |
|   LIST(APPEND ISPC_DEFINITIONS -DTASKING_INTERNAL)
 | |
| ENDIF()
 | |
| 
 | |
| ##############################################################
 | |
| # Compiler
 | |
| ##############################################################
 | |
| # TODO: fixme, define relwithassert also for icc, msvc, ... or remove when debug build with dpcpp is useable
 | |
| IF(EMBREE_SYCL_SUPPORT)
 | |
|   SET(CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo;RelWithAssert")
 | |
| ELSE()
 | |
| SET(CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo")
 | |
| ENDIF()
 | |
| 
 | |
| # Validate build type
 | |
| IF (CMAKE_BUILD_TYPE)
 | |
|   string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)
 | |
|   IF (${MATCHED_CONFIG} EQUAL -1)
 | |
|     message(FATAL_ERROR "CMAKE_BUILD_TYPE (${CMAKE_BUILD_TYPE}) allows only the following values: ${CONFIGURATION_TYPES}")
 | |
|   ENDIF()
 | |
| ENDIF()
 | |
| 
 | |
| message(DEBUG "CMAKE_GENERATOR_TOOLSET: ${CMAKE_GENERATOR_TOOLSET}")
 | |
| message(DEBUG "CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}")
 | |
| message(DEBUG "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")
 | |
| 
 | |
| IF (WIN32)
 | |
|   IF (NOT DEFAULT_CMAKE_CONFIGURATION_TYPES_SET)
 | |
|     SET(CMAKE_CONFIGURATION_TYPES "${CONFIGURATION_TYPES}" CACHE STRING "List of generated configurations." FORCE)
 | |
|     SET(DEFAULT_CMAKE_CONFIGURATION_TYPES_SET ON CACHE INTERNAL "Default CMake configuration types set.")
 | |
|   ENDIF()
 | |
|   SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON)
 | |
| 
 | |
|   IF ((${CMAKE_CXX_COMPILER_ID} MATCHES "IntelLLVM") OR
 | |
|       (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND ${CMAKE_CXX_COMPILER} MATCHES "icx") OR
 | |
|       (${CMAKE_CXX_COMPILER} MATCHES "dpcpp"))
 | |
|     MESSAGE("-- DPCPP compiler detected")
 | |
|     INCLUDE(dpcpp)
 | |
|   ELSEIF(${CMAKE_GENERATOR_TOOLSET} MATCHES "^LLVM")
 | |
|     set(EMBREE_SYCL_SUPPORT OFF)
 | |
|     MESSAGE("-- CLANG compiler detected")
 | |
|     INCLUDE(clang)
 | |
|   ELSEIF(${CMAKE_GENERATOR_TOOLSET} MATCHES "^Intel")
 | |
|     set(EMBREE_SYCL_SUPPORT OFF)
 | |
|     MESSAGE("-- Intel compiler detected")
 | |
|     INCLUDE (intel)
 | |
|   ELSEIF(${CMAKE_CXX_COMPILER_FRONTEND_VARIANT} MATCHES "GNU")
 | |
|     set(EMBREE_SYCL_SUPPORT OFF)
 | |
|     MESSAGE("-- GNU-like compiler detected")
 | |
|     INCLUDE(gnu)
 | |
|   ELSE()
 | |
|     set(EMBREE_SYCL_SUPPORT OFF)
 | |
|     IF (EMBREE_ISA_AVX512)
 | |
|       MESSAGE(FATAL_ERROR "Microsoft Visual C++ Compiler does not support AVX512. Please use Intel Compiler or Clang.")
 | |
|     ENDIF()
 | |
|     MESSAGE("-- MSVC detected")
 | |
|     INCLUDE (msvc)
 | |
|   ENDIF()
 | |
| 
 | |
| ELSE (WIN32)
 | |
|   IF(CMAKE_CXX_COMPILER_WRAPPER STREQUAL "CrayPrgEnv")
 | |
|     INCLUDE (crayprgenv)
 | |
|   ELSE()
 | |
|     GET_FILENAME_COMPONENT(CXX_COMPILER_NAME ${CMAKE_CXX_COMPILER} NAME)
 | |
|     
 | |
|     STRING(TOLOWER "${CMAKE_CXX_COMPILER_ID}" _LOWER_CXX_COMPILER_ID)
 | |
|     STRING(REPLACE "appleclang" "clang" _LOWER_CXX_COMPILER_ID ${_LOWER_CXX_COMPILER_ID})
 | |
|     STRING(REPLACE "intelllvm" "dpcpp" _LOWER_CXX_COMPILER_ID ${_LOWER_CXX_COMPILER_ID})
 | |
|     IF(${_LOWER_CXX_COMPILER_ID} MATCHES "clang" AND ${CXX_COMPILER_NAME} MATCHES "icpx")
 | |
|       STRING(REPLACE "clang" "dpcpp" _LOWER_CXX_COMPILER_ID ${_LOWER_CXX_COMPILER_ID})
 | |
|     ENDIF()
 | |
|     IF(${_LOWER_CXX_COMPILER_ID} MATCHES "clang" AND ${CXX_COMPILER_NAME} MATCHES "dpcpp")
 | |
|       STRING(REPLACE "clang" "dpcpp" _LOWER_CXX_COMPILER_ID ${_LOWER_CXX_COMPILER_ID})
 | |
|     ENDIF()
 | |
|     IF (EMBREE_SYCL_SUPPORT)
 | |
|       SET(_LOWER_CXX_COMPILER_ID "dpcpp")
 | |
|     ENDIF()
 | |
|     STRING(TOUPPER "${_LOWER_CXX_COMPILER_ID}" _UPPER_CXX_COMPILER_ID)
 | |
|     MESSAGE("-- ${_UPPER_CXX_COMPILER_ID} detected")
 | |
|     INCLUDE(${_LOWER_CXX_COMPILER_ID} OPTIONAL RESULT_VARIABLE COMPILER_FOUND)
 | |
|     IF (NOT COMPILER_FOUND)
 | |
|       MESSAGE(FATAL_ERROR "Unsupported compiler: " ${CMAKE_CXX_COMPILER_ID})
 | |
|     ENDIF ()
 | |
|   ENDIF ()
 | |
| 
 | |
|   IF(NOT CMAKE_BUILD_TYPE)
 | |
|     SET(CMAKE_BUILD_TYPE "Release" CACHE STRING "Specifies the build type." FORCE)
 | |
|     SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CONFIGURATION_TYPES})
 | |
|   ENDIF(NOT CMAKE_BUILD_TYPE)
 | |
| 
 | |
|   OPTION(CMAKE_VERBOSE_MAKEFILE "Enables verbose mode.")
 | |
|   MARK_AS_ADVANCED(CLEAR CMAKE_VERBOSE_MAKEFILE)
 | |
| 
 | |
| ENDIF (WIN32)
 | |
| 
 | |
| ##############################################################
 | |
| # ISA configuration
 | |
| ##############################################################
 | |
| 
 | |
| # just for compatibility with old naming
 | |
| IF(DEFINED EMBREE_ISA_AVX512SKX)
 | |
|   UNSET(EMBREE_ISA_AVX512 CACHE)
 | |
|   SET(EMBREE_ISA_AVX512 ${EMBREE_ISA_AVX512SKX} CACHE BOOL "")
 | |
| ENDIF()
 | |
| 
 | |
| IF (CMAKE_CXX_COMPILER_WRAPPER STREQUAL "CrayPrgEnv")
 | |
|   SET(EMBREE_MAX_ISA "DEFAULT" CACHE STRING "Selects highest ISA to support.")
 | |
| ELSEIF (EMSCRIPTEN)
 | |
|   SET(EMBREE_MAX_ISA "SSE2" CACHE STRING "Selects highest ISA to support.")
 | |
| ELSE()
 | |
|   SET(EMBREE_MAX_ISA "NONE" CACHE STRING "Selects highest ISA to support.")
 | |
| ENDIF()
 | |
| 
 | |
| IF (EMBREE_ARM)
 | |
|   SET_PROPERTY(CACHE EMBREE_MAX_ISA PROPERTY STRINGS NONE NEON NEON2X)
 | |
| ELSE()  
 | |
|   SET_PROPERTY(CACHE EMBREE_MAX_ISA PROPERTY STRINGS NONE SSE2 SSE4.2 AVX AVX2 AVX512 DEFAULT)
 | |
| ENDIF()
 | |
| 
 | |
| IF (EMBREE_MAX_ISA STREQUAL "NONE")
 | |
|   
 | |
|   IF (EMBREE_ARM)
 | |
|     IF (APPLE)
 | |
|       OPTION(EMBREE_ISA_NEON   "Enables NEON ISA." OFF)
 | |
|       OPTION(EMBREE_ISA_NEON2X "Enables NEON ISA double pumped." ON)
 | |
|     ELSE()
 | |
|       OPTION(EMBREE_ISA_NEON   "Enables NEON ISA." ON)
 | |
|       OPTION(EMBREE_ISA_NEON2X "Enables NEON ISA double pumped." OFF)
 | |
|     ENDIF()
 | |
|   ELSE()
 | |
|     TRY_COMPILE(COMPILER_SUPPORTS_AVX    "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX})
 | |
|     TRY_COMPILE(COMPILER_SUPPORTS_AVX2   "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX2})
 | |
|     TRY_COMPILE(COMPILER_SUPPORTS_AVX512 "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX512})
 | |
|   
 | |
|     OPTION(EMBREE_ISA_SSE2 "Enables SSE2 ISA." ON)
 | |
|     OPTION(EMBREE_ISA_SSE42 "Enables SSE4.2 ISA." ON)
 | |
|     OPTION(EMBREE_ISA_AVX "Enables AVX ISA." ${COMPILER_SUPPORTS_AVX})
 | |
|     OPTION(EMBREE_ISA_AVX2 "Enables AVX2 ISA." ${COMPILER_SUPPORTS_AVX2})
 | |
|     IF (WIN32 OR APPLE)
 | |
|       OPTION(EMBREE_ISA_AVX512 "Enables AVX512 ISA." OFF)
 | |
|     ELSE()
 | |
|       OPTION(EMBREE_ISA_AVX512 "Enables AVX512 ISA." ${COMPILER_SUPPORTS_AVX512})
 | |
|     ENDIF()
 | |
|     # Don't use OPTION, but still set them to OFF, so that embree-config.cmake is consisten with its definitions
 | |
|     SET(EMBREE_ISA_NEON   OFF)
 | |
|     SET(EMBREE_ISA_NEON2X OFF)
 | |
|   ENDIF()
 | |
| 
 | |
| ELSEIF (EMBREE_MAX_ISA STREQUAL "DEFAULT")
 | |
|   UNSET(EMBREE_ISA_NEON CACHE)
 | |
|   UNSET(EMBREE_ISA_NEON2X CACHE)
 | |
|   UNSET(EMBREE_ISA_SSE2 CACHE)
 | |
|   UNSET(EMBREE_ISA_SSE42 CACHE)
 | |
|   UNSET(EMBREE_ISA_AVX CACHE)
 | |
|   UNSET(EMBREE_ISA_AVX2 CACHE)
 | |
|   UNSET(EMBREE_ISA_AVX512 CACHE)
 | |
|   SET(EMBREE_ISA_NEON OFF)
 | |
|   SET(EMBREE_ISA_NEON2X OFF)
 | |
|   SET(EMBREE_ISA_SSE2 OFF)
 | |
|   SET(EMBREE_ISA_SSE42 OFF)
 | |
|   SET(EMBREE_ISA_AVX OFF)
 | |
|   SET(EMBREE_ISA_AVX2 OFF)
 | |
|   SET(EMBREE_ISA_AVX512 OFF)
 | |
|   MESSAGE(STATUS "Detecting default ISA...")
 | |
|   INCLUDE(check_isa_default)
 | |
|   CHECK_ISA_DEFAULT(EMBREE_ISA_DEFAULT)
 | |
|   MESSAGE(STATUS "Detected default ISA: ${EMBREE_ISA_DEFAULT}")
 | |
|   SET(EMBREE_ISA_${EMBREE_ISA_DEFAULT} ON)
 | |
| 
 | |
| ELSE()
 | |
|   UNSET(EMBREE_ISA_NEON CACHE)
 | |
|   UNSET(EMBREE_ISA_NEON2X CACHE)
 | |
|   UNSET(EMBREE_ISA_SSE2 CACHE)
 | |
|   UNSET(EMBREE_ISA_SSE42 CACHE)
 | |
|   UNSET(EMBREE_ISA_AVX CACHE)
 | |
|   UNSET(EMBREE_ISA_AVX2 CACHE)
 | |
|   UNSET(EMBREE_ISA_AVX512 CACHE)
 | |
|  
 | |
|   IF(EMBREE_MAX_ISA STREQUAL "NEON")
 | |
|     SET(ISA  1)
 | |
|   ELSEIF(EMBREE_MAX_ISA STREQUAL "NEON2X")
 | |
|     SET(ISA  2)
 | |
|   ELSEIF(EMBREE_MAX_ISA STREQUAL "SSE2")
 | |
|     SET(ISA  1)
 | |
|   ELSEIF(EMBREE_MAX_ISA STREQUAL "SSE4.2")
 | |
|     SET(ISA  2)
 | |
|   ELSEIF(EMBREE_MAX_ISA STREQUAL "AVX")
 | |
|     SET(ISA  3)
 | |
|   ELSEIF(EMBREE_MAX_ISA STREQUAL "AVX2")
 | |
|     SET(ISA  4)
 | |
|   ELSEIF(EMBREE_MAX_ISA STREQUAL "AVX512")
 | |
|     SET(ISA 5)
 | |
|   ELSEIF(EMBREE_MAX_ISA STREQUAL "AVX512SKX")  # just for compatibility
 | |
|     SET(ISA 5)
 | |
|   ELSE()
 | |
|     MESSAGE(FATAL_ERROR "Unsupported ISA specified: " ${EMBREE_MAX_ISA})
 | |
|   ENDIF()
 | |
| 
 | |
|   SET(EMBREE_ISA_NEON OFF)
 | |
|   SET(EMBREE_ISA_NEON2X OFF)
 | |
|   SET(EMBREE_ISA_SSE2 OFF)
 | |
|   SET(EMBREE_ISA_SSE42 OFF)
 | |
|   SET(EMBREE_ISA_AVX OFF)
 | |
|   SET(EMBREE_ISA_AVX2 OFF)
 | |
|   SET(EMBREE_ISA_AVX512 OFF)
 | |
| 
 | |
|   IF (EMBREE_ARM)
 | |
|     IF (ISA GREATER 0)
 | |
|       SET(EMBREE_ISA_NEON ON)
 | |
|     ENDIF ()
 | |
|     IF (ISA GREATER 1)
 | |
|       SET(EMBREE_ISA_NEON2X ON)
 | |
|     ENDIF ()
 | |
|   ELSE()
 | |
|     IF (ISA GREATER 0)
 | |
|       SET(EMBREE_ISA_SSE2  ON)
 | |
|     ENDIF ()
 | |
|     IF (ISA GREATER 1)
 | |
|       SET(EMBREE_ISA_SSE42  ON)
 | |
|     ENDIF ()
 | |
|     IF (ISA GREATER 2)
 | |
|       SET(EMBREE_ISA_AVX  ON)
 | |
|     ENDIF ()
 | |
|     IF (ISA GREATER 3)
 | |
|       SET(EMBREE_ISA_AVX2  ON)
 | |
|     ENDIF ()
 | |
|     IF (ISA GREATER 4)
 | |
|       SET(EMBREE_ISA_AVX512  ON)
 | |
|     ENDIF ()
 | |
|   ENDIF()
 | |
| ENDIF()
 | |
| 
 | |
| IF(CMAKE_CXX_COMPILER_WRAPPER STREQUAL "CrayPrgEnv")
 | |
|   SET(EMBREE_ISA_SSE42 OFF)
 | |
| ENDIF()
 | |
| 
 | |
| IF (APPLE AND EMBREE_STATIC_LIB)
 | |
| 
 | |
|   # count number of set ISAs
 | |
|   SET(NUMISA 0)
 | |
|   IF (EMBREE_ISA_NEON)
 | |
|     MATH(EXPR NUMISA "${NUMISA}+1")
 | |
|   ENDIF()
 | |
|   IF (EMBREE_ISA_NEON2X)
 | |
|     MATH(EXPR NUMISA "${NUMISA}+1")
 | |
|   ENDIF()
 | |
|   IF (EMBREE_ISA_SSE2)
 | |
|     MATH(EXPR NUMISA "${NUMISA}+1")
 | |
|   ENDIF()
 | |
|   IF (EMBREE_ISA_SSE42)
 | |
|     MATH(EXPR NUMISA "${NUMISA}+1")
 | |
|   ENDIF()
 | |
|   IF (EMBREE_ISA_AVX)
 | |
|     MATH(EXPR NUMISA "${NUMISA}+1")
 | |
|   ENDIF()
 | |
|   IF (EMBREE_ISA_AVX2)
 | |
|     MATH(EXPR NUMISA "${NUMISA}+1")
 | |
|   ENDIF()
 | |
|   IF (EMBREE_ISA_AVX512)
 | |
|     MATH(EXPR NUMISA "${NUMISA}+1")
 | |
|   ENDIF()
 | |
| 
 | |
|   IF (NUMISA GREATER 1)
 | |
|     IF (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
 | |
|       IF (${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER "9.0.0" OR ${CMAKE_CXX_COMPILER_VERSION} VERSION_EQUAL "9.0.0")
 | |
|         MESSAGE(FATAL_ERROR "Using Embree as static library is not supported with AppleClang >= 9.0 when multiple ISAs are selected. Please either build a shared library or enable only one ISA.")
 | |
|       ENDIF()
 | |
|     ENDIF()
 | |
|   ENDIF()
 | |
| ENDIF()
 | |
| 
 | |
| ##############################################################
 | |
| # ISA configuration continued
 | |
| ##############################################################
 | |
| 
 | |
| SET(SSE2 0)
 | |
| SET(SSE42 1)
 | |
| SET(AVX 2)
 | |
| SET(AVX2 3)
 | |
| SET(AVX512 4)
 | |
| 
 | |
| UNSET(FLAGS_LOWEST)
 | |
| SET(ISA_LOWEST -1)
 | |
| SET(ISA_LOWEST_AVX 2)
 | |
| 
 | |
| IF (EMBREE_ARM)
 | |
|   IF (EMBREE_ISA_NEON2X)
 | |
|     LIST(APPEND ISPC_TARGETS "neon-i32x8")
 | |
|   ELSEIF (EMBREE_ISA_NEON)
 | |
|     LIST(APPEND ISPC_TARGETS "neon-i32x4")
 | |
|   ENDIF()
 | |
| ENDIF()
 | |
| 
 | |
| IF (EMBREE_ISA_NEON)
 | |
|   SET(EMBREE_ISA_SSE2 ON)
 | |
| ENDIF()
 | |
| 
 | |
| IF (EMBREE_ISA_NEON2X)
 | |
|   SET(EMBREE_ISA_SSE2 OFF)
 | |
|   SET(EMBREE_ISA_SSE42 OFF)
 | |
|   SET(EMBREE_ISA_AVX OFF)
 | |
|   SET(EMBREE_ISA_AVX2 ON)
 | |
| ENDIF()
 | |
| 
 | |
| IF (EMBREE_ISA_SSE2)
 | |
|   ADD_DEFINITIONS(-DEMBREE_TARGET_SSE2)
 | |
|   IF (NOT EMBREE_ARM)
 | |
|     LIST(APPEND ISPC_TARGETS "sse2")
 | |
|   ENDIF()
 | |
|   IF(NOT FLAGS_LOWEST)
 | |
|     SET(ISA_LOWEST ${SSE2})
 | |
|     SET(FLAGS_LOWEST ${FLAGS_SSE2})
 | |
|   ENDIF()
 | |
| ENDIF()
 | |
| 
 | |
| IF (EMBREE_ISA_SSE42)
 | |
|   ADD_DEFINITIONS(-DEMBREE_TARGET_SSE42)
 | |
|   IF (NOT EMBREE_ARM)
 | |
|     LIST(APPEND ISPC_TARGETS "sse4")
 | |
|   ENDIF()
 | |
|   IF(NOT FLAGS_LOWEST)
 | |
|     SET(ISA_LOWEST ${SSE42})
 | |
|     SET(FLAGS_LOWEST ${FLAGS_SSE42})
 | |
|   ENDIF()
 | |
| ENDIF ()
 | |
| 
 | |
| IF (EMBREE_ISA_AVX)
 | |
|   ADD_DEFINITIONS(-DEMBREE_TARGET_AVX)
 | |
|   IF (NOT EMBREE_ARM)
 | |
|     LIST(APPEND ISPC_TARGETS "avx")
 | |
|   ENDIF()
 | |
|   IF(NOT FLAGS_LOWEST)
 | |
|     SET(ISA_LOWEST ${AVX})
 | |
|     SET(ISA_LOWEST_AVX ${AVX})
 | |
|     SET(FLAGS_LOWEST ${FLAGS_AVX})
 | |
|   ENDIF()
 | |
| ENDIF ()
 | |
| 
 | |
| IF (EMBREE_ISA_AVX2)
 | |
|   ADD_DEFINITIONS(-DEMBREE_TARGET_AVX2)
 | |
|   IF (NOT EMBREE_ARM)
 | |
|     LIST(APPEND ISPC_TARGETS "avx2")
 | |
|   ENDIF()
 | |
|   IF(NOT FLAGS_LOWEST)
 | |
|     SET(ISA_LOWEST ${AVX2})
 | |
|     SET(ISA_LOWEST_AVX ${AVX2})
 | |
|     SET(FLAGS_LOWEST ${FLAGS_AVX2})
 | |
|   ENDIF()
 | |
| ENDIF ()
 | |
| 
 | |
| IF (EMBREE_ISA_AVX512)
 | |
|   ADD_DEFINITIONS(-DEMBREE_TARGET_AVX512)
 | |
|   IF (NOT EMBREE_ARM)
 | |
|     LIST(APPEND ISPC_TARGETS "avx512skx-i32x16")
 | |
|   ENDIF()
 | |
|   IF(NOT FLAGS_LOWEST)
 | |
|     SET(ISA_LOWEST ${AVX512})
 | |
|     SET(ISA_LOWEST_AVX ${AVX512})
 | |
|     SET(FLAGS_LOWEST ${FLAGS_AVX512})
 | |
|   ENDIF()
 | |
| ENDIF ()
 | |
| 
 | |
| IF (ISA_LOWEST EQUAL -1)
 | |
|   MESSAGE(FATAL_ERROR "You have to enable at least one ISA!")
 | |
| ENDIF()
 | |
| 
 | |
| INCLUDE (ispc)
 | |
| 
 | |
| ##############################################################
 | |
| # Create Binary Packages (uses above config options)
 | |
| ##############################################################
 | |
| include(package)
 | |
| 
 | |
| ##############################################################
 | |
| # Create Config files
 | |
| ##############################################################
 | |
| 
 | |
| CONFIGURE_FILE(
 | |
|   "${PROJECT_SOURCE_DIR}/kernels/config.h.in"
 | |
|   "${PROJECT_SOURCE_DIR}/kernels/config.h"
 | |
|   )
 | |
| 
 | |
| INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR})
 | |
| 
 | |
| CONFIGURE_FILE(
 | |
|   "${PROJECT_SOURCE_DIR}/kernels/rtcore_config.h.in"
 | |
|   "${PROJECT_SOURCE_DIR}/include/embree4/rtcore_config.h"
 | |
| )
 | |
| 
 | |
| CONFIGURE_FILE(
 | |
|   "${PROJECT_SOURCE_DIR}/kernels/hash.h.in"
 | |
|   "${PROJECT_SOURCE_DIR}/kernels/hash.h"
 | |
| )
 | |
| CONFIGURE_FILE(
 | |
|   "${PROJECT_SOURCE_DIR}/kernels/export.linux.map.in"
 | |
|   "${PROJECT_SOURCE_DIR}/kernels/export.linux.map"
 | |
| )
 | |
| CONFIGURE_FILE(
 | |
|   "${PROJECT_SOURCE_DIR}/kernels/export.macosx.map.in"
 | |
|   "${PROJECT_SOURCE_DIR}/kernels/export.macosx.map"
 | |
| )
 | |
| 
 | |
| 
 | |
| ##############################################################
 | |
| # Output paths
 | |
| ##############################################################
 | |
| SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
 | |
| SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
 | |
| SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
 | |
| 
 | |
| ##############################################################
 | |
| # Directories to compile
 | |
| ##############################################################
 | |
| 
 | |
| ADD_SUBDIRECTORY(common)
 | |
| ADD_SUBDIRECTORY(kernels)
 | |
| 
 | |
| ##############################################################
 | |
| # Uninstall
 | |
| ##############################################################
 | |
| 
 | |
| IF (NOT TARGET uninstall)
 | |
|   configure_file(
 | |
|       "${CMAKE_CURRENT_SOURCE_DIR}/common/cmake/uninstall.cmake.in"
 | |
|       "${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake"
 | |
|       IMMEDIATE @ONLY)
 | |
| 
 | |
|   add_custom_target(uninstall
 | |
|       COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake")
 | |
| 
 | |
|   SET_PROPERTY(TARGET uninstall PROPERTY FOLDER CMakePredefinedTargets)
 | |
| ENDIF()
 | |
| 
 | |
| ##############################################################
 | |
| # Has to be last
 | |
| ##############################################################
 | |
| 
 | |
| INCLUDE(CPack)
 |