## Copyright 2009-2021 Intel Corporation ## SPDX-License-Identifier: Apache-2.0 IF (EMBREE_SYCL_RT_SIMULATION) FIND_PACKAGE(rtcore) ENDIF() IF (EMBREE_SYCL_SUPPORT) ADD_SUBDIRECTORY(level_zero) ADD_SUBDIRECTORY(rthwif) ENDIF() IF (EMBREE_CONFIG) ADD_DEFINITIONS(-DEMBREE_CONFIG="${EMBREE_CONFIG}") ENDIF() MACRO(DISABLE_STACK_PROTECTOR_FOR_INTERSECTORS) FOREACH(src ${ARGN}) IF (src MATCHES ".*intersector.*") DISABLE_STACK_PROTECTOR_FOR_FILE(${src}) ENDIF() ENDFOREACH() ENDMACRO() SOURCE_GROUP("Source Files\\bvh4" "/bvh4/" ) SOURCE_GROUP("Source Files\\bvh8" "/bvh8/" ) SOURCE_GROUP("Source Files\\geometry" "/geometry/" ) SOURCE_GROUP("Source Files\\builders" "/builders.*/" ) SOURCE_GROUP("Source Files\\common" "/kernels/common/" ) SOURCE_GROUP("Source Files\\tasking" "/tasking/" ) SOURCE_GROUP("Source Files\\algorithms" "/algorithms/") SOURCE_GROUP("" FILES embree.rc) SET(EMBREE_LIBRARY_FILES embree.rc common/device.cpp common/stat.cpp common/acceln.cpp common/accelset.cpp common/state.cpp common/rtcore.cpp common/rtcore_builder.cpp common/scene.cpp common/scene_verify.cpp common/alloc.cpp common/geometry.cpp common/scene_user_geometry.cpp common/scene_instance.cpp common/scene_instance_array.cpp common/scene_triangle_mesh.cpp common/scene_quad_mesh.cpp common/scene_curves.cpp common/scene_line_segments.cpp common/scene_grid_mesh.cpp common/scene_points.cpp common/motion_derivative.cpp subdiv/bezier_curve.cpp subdiv/bspline_curve.cpp subdiv/catmullrom_curve.cpp geometry/primitive4.cpp geometry/instance_intersector.cpp geometry/instance_array_intersector.cpp geometry/curve_intersector_virtual_4v.cpp geometry/curve_intersector_virtual_4i.cpp geometry/curve_intersector_virtual_4i_mb.cpp geometry/curve_intersector_virtual_8v.cpp geometry/curve_intersector_virtual_8i.cpp geometry/curve_intersector_virtual_8i_mb.cpp builders/primrefgen.cpp bvh/bvh.cpp bvh/bvh_statistics.cpp bvh/bvh4_factory.cpp bvh/bvh8_factory.cpp bvh/bvh_collider.cpp bvh/bvh_rotate.cpp bvh/bvh_refit.cpp bvh/bvh_builder.cpp bvh/bvh_builder_hair.cpp bvh/bvh_builder_hair_mb.cpp bvh/bvh_builder_morton.cpp bvh/bvh_builder_sah.cpp bvh/bvh_builder_sah_spatial.cpp bvh/bvh_builder_sah_mb.cpp bvh/bvh_builder_twolevel.cpp bvh/bvh_intersector1_bvh4.cpp ) IF (EMBREE_SYCL_SUPPORT) SET(EMBREE_LIBRARY_FILES ${EMBREE_LIBRARY_FILES} sycl/rthwif_embree_builder.cpp) ENDIF() IF (EMBREE_GEOMETRY_SUBDIVISION) SET(EMBREE_LIBRARY_FILES ${EMBREE_LIBRARY_FILES} common/scene_subdiv_mesh.cpp subdiv/tessellation_cache.cpp subdiv/subdivpatch1base.cpp subdiv/catmullclark_coefficients.cpp geometry/grid_soa.cpp subdiv/subdivpatch1base_eval.cpp bvh/bvh_builder_subdiv.cpp) ENDIF() IF (EMBREE_RAY_PACKETS) SET(EMBREE_LIBRARY_FILES ${EMBREE_LIBRARY_FILES} bvh/bvh_intersector_hybrid4_bvh4.cpp) ENDIF() MACRO(embree_files TARGET ISA) SET(${TARGET} geometry/instance_intersector.cpp geometry/instance_array_intersector.cpp geometry/curve_intersector_virtual_4v.cpp geometry/curve_intersector_virtual_4i.cpp geometry/curve_intersector_virtual_4i_mb.cpp geometry/curve_intersector_virtual_8v.cpp geometry/curve_intersector_virtual_8i.cpp geometry/curve_intersector_virtual_8i_mb.cpp bvh/bvh_intersector1_bvh4.cpp) IF (${ISA} EQUAL ${ISA_LOWEST_AVX}) LIST(APPEND ${TARGET} geometry/primitive8.cpp) ENDIF() IF (${ISA} EQUAL ${SSE2} OR ${ISA} EQUAL ${AVX} OR ${ISA} EQUAL ${AVX2} OR ${ISA} EQUAL ${AVX512} OR ${ISA_LOWEST} EQUAL ${ISA}) LIST(APPEND ${TARGET} common/scene_user_geometry.cpp common/scene_instance.cpp common/scene_instance_array.cpp common/scene_triangle_mesh.cpp common/scene_quad_mesh.cpp common/scene_curves.cpp common/scene_line_segments.cpp common/scene_grid_mesh.cpp common/scene_points.cpp bvh/bvh_collider.cpp bvh/bvh_refit.cpp bvh/bvh_builder.cpp bvh/bvh_builder_hair.cpp bvh/bvh_builder_hair_mb.cpp bvh/bvh_builder_sah.cpp bvh/bvh_builder_sah_spatial.cpp bvh/bvh_builder_sah_mb.cpp bvh/bvh_builder_twolevel.cpp) IF (EMBREE_GEOMETRY_SUBDIVISION) LIST(APPEND ${TARGET} bvh/bvh_builder_subdiv.cpp) ENDIF() ENDIF() IF (${ISA} EQUAL ${SSE2} OR ${ISA} EQUAL ${AVX} OR ${ISA} EQUAL ${AVX2} OR ${ISA_LOWEST} EQUAL ${ISA}) LIST(APPEND ${TARGET} bvh/bvh_builder_morton.cpp bvh/bvh_rotate.cpp builders/primrefgen.cpp) ENDIF() IF (${ISA} GREATER ${SSE42}) LIST(APPEND ${TARGET} bvh/bvh_intersector1_bvh8.cpp) ENDIF() IF (${ISA} EQUAL ${AVX}) LIST(APPEND ${TARGET} bvh/bvh.cpp bvh/bvh_statistics.cpp) ENDIF() IF (EMBREE_GEOMETRY_SUBDIVISION) LIST(APPEND ${TARGET} common/scene_subdiv_mesh.cpp geometry/grid_soa.cpp subdiv/subdivpatch1base_eval.cpp) ENDIF() IF (EMBREE_RAY_PACKETS) LIST(APPEND ${TARGET} bvh/bvh_intersector_hybrid4_bvh4.cpp) IF (${ISA} GREATER ${SSE42}) LIST(APPEND ${TARGET} bvh/bvh_intersector_hybrid8_bvh4.cpp bvh/bvh_intersector_hybrid4_bvh8.cpp bvh/bvh_intersector_hybrid8_bvh8.cpp) ENDIF() IF (${ISA} GREATER ${AVX2}) LIST(APPEND ${TARGET} bvh/bvh_intersector_hybrid16_bvh8.cpp bvh/bvh_intersector_hybrid16_bvh4.cpp) ENDIF() ENDIF() ENDMACRO() #embree_files(EMBREE_LIBRARY_FILES_SSE2 ${SSE2}) embree_files(EMBREE_LIBRARY_FILES_SSE42 ${SSE42}) embree_files(EMBREE_LIBRARY_FILES_AVX ${AVX}) embree_files(EMBREE_LIBRARY_FILES_AVX2 ${AVX2}) embree_files(EMBREE_LIBRARY_FILES_AVX512 ${AVX512}) #message("SSE2: ${EMBREE_LIBRARY_FILES_SSE2}") #message("SSE42: ${EMBREE_LIBRARY_FILES_SSE42}") #message("AVX: ${EMBREE_LIBRARY_FILES_AVX}") #message("AVX2: ${EMBREE_LIBRARY_FILES_AVX2}") #message("AVX512: ${EMBREE_LIBRARY_FILES_AVX512}") # replaces all .cpp files with a dummy file that includes that .cpp file # this is to work around an ICC name mangling issue related to lambda functions under windows MACRO (CreateISADummyFiles list isa) SET(${list}) FOREACH(src ${ARGN}) SET(src_file "${CMAKE_CURRENT_SOURCE_DIR}/${src}") SET(dst_file "${CMAKE_BINARY_DIR}/${src}.${isa}.cpp") SET(${list} ${${list}} ${dst_file}) ADD_CUSTOM_COMMAND(OUTPUT ${dst_file} COMMAND ${CMAKE_COMMAND} -D src=${src_file} -D dst=${dst_file} -P "${PROJECT_SOURCE_DIR}/common/cmake/create_isa_dummy_file.cmake" DEPENDS ${src_file}) ENDFOREACH() ENDMACRO() #CreateISADummyFiles(EMBREE_LIBRARY_FILES_SSE2 sse2 ${EMBREE_LIBRARY_FILES_SSE2}) CreateISADummyFiles(EMBREE_LIBRARY_FILES_SSE42 sse42 ${EMBREE_LIBRARY_FILES_SSE42}) CreateISADummyFiles(EMBREE_LIBRARY_FILES_AVX avx ${EMBREE_LIBRARY_FILES_AVX}) CreateISADummyFiles(EMBREE_LIBRARY_FILES_AVX2 avx2 ${EMBREE_LIBRARY_FILES_AVX2}) CreateISADummyFiles(EMBREE_LIBRARY_FILES_AVX512 avx512 ${EMBREE_LIBRARY_FILES_AVX512}) MACRO (CheckGlobals library) IF (NOT WIN32 AND NOT APPLE) ADD_CUSTOM_TARGET(${library}_check_globals ALL COMMAND ${CMAKE_COMMAND} -D file=$ -P "${PROJECT_SOURCE_DIR}/common/cmake/check_globals.cmake" DEPENDS ${library}) ENDIF() ENDMACRO() DISABLE_STACK_PROTECTOR_FOR_INTERSECTORS(${EMBREE_LIBRARY_FILES}) ADD_LIBRARY(embree ${EMBREE_LIB_TYPE} ${EMBREE_LIBRARY_FILES}) IF (EMBREE_SYCL_SUPPORT) ADD_LIBRARY(embree_sycl STATIC sycl/rtcore_sycl.cpp sycl/rthwif_embree.cpp) SET_TARGET_PROPERTIES(embree_sycl PROPERTIES COMPILE_FLAGS ${CMAKE_CXX_FLAGS_SYCL}) IF (EMBREE_SYCL_RT_VALIDATION_API) TARGET_LINK_LIBRARIES(embree_sycl PRIVATE embree_rthwif_sycl) ENDIF() IF (EMBREE_SYCL_RT_SIMULATION) TARGET_LINK_LIBRARIES(embree_sycl PRIVATE rtcore) ENDIF() INSTALL(TARGETS embree_sycl EXPORT embree_sycl-targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel) INSTALL(EXPORT embree_sycl-targets DESTINATION ${EMBREE_CMAKEEXPORT_DIR} COMPONENT devel) SET_TARGET_PROPERTIES(embree_sycl PROPERTIES OUTPUT_NAME embree${EMBREE_VERSION_MAJOR}_sycl) ENDIF() SET_TARGET_PROPERTIES(embree PROPERTIES COMPILE_FLAGS "${FLAGS_LOWEST}") SET_TARGET_PROPERTIES(embree PROPERTIES COMPILE_DEFINITIONS "EMBREE_LOWEST_ISA") SET_PROPERTY(TARGET embree PROPERTY FOLDER kernels) IF (NOT WIN32 AND NOT APPLE) ADD_CUSTOM_TARGET(embree_check_stack_frame_size COMMAND ${CMAKE_COMMAND} -D file=$ -P "${PROJECT_SOURCE_DIR}/common/cmake/check_stack_frame_size.cmake" DEPENDS embree) ENDIF() #IF (EMBREE_ISA_SSE2 AND EMBREE_LIBRARY_FILES_SSE2) # ADD_LIBRARY(embree_sse2 STATIC ${EMBREE_LIBRARY_FILES_SSE2}) # SET_TARGET_PROPERTIES(embree_sse2 PROPERTIES COMPILE_FLAGS "${FLAGS_SSE2}") # SET_PROPERTY(TARGET embree_sse2 PROPERTY FOLDER kernels) # SET(EMBREE_LIBRARIES ${EMBREE_LIBRARIES} embree_sse2) # CheckGlobals(embree_sse2) #IF (EMBREE_STATIC_LIB) # INSTALL(TARGETS embree_sse2 ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel) # ENDIF() #ENDIF () IF (EMBREE_ISA_SSE42 AND EMBREE_LIBRARY_FILES_SSE42) DISABLE_STACK_PROTECTOR_FOR_INTERSECTORS(${EMBREE_LIBRARY_FILES_SSE42}) ADD_LIBRARY(embree_sse42 STATIC ${EMBREE_LIBRARY_FILES_SSE42}) TARGET_LINK_LIBRARIES(embree_sse42 PRIVATE tasking) SET_TARGET_PROPERTIES(embree_sse42 PROPERTIES COMPILE_FLAGS "${FLAGS_SSE42}") SET_PROPERTY(TARGET embree_sse42 PROPERTY FOLDER kernels) SET(EMBREE_LIBRARIES ${EMBREE_LIBRARIES} embree_sse42) CheckGlobals(embree_sse42) IF (EMBREE_STATIC_LIB) INSTALL(TARGETS embree_sse42 EXPORT embree_sse42-targets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel) INSTALL(EXPORT embree_sse42-targets DESTINATION "${EMBREE_CMAKEEXPORT_DIR}" COMPONENT devel) ENDIF() ENDIF () IF (EMBREE_ISA_AVX AND EMBREE_LIBRARY_FILES_AVX) DISABLE_STACK_PROTECTOR_FOR_INTERSECTORS(${EMBREE_LIBRARY_FILES_AVX}) ADD_LIBRARY(embree_avx STATIC ${EMBREE_LIBRARY_FILES_AVX}) TARGET_LINK_LIBRARIES(embree_avx PRIVATE tasking) SET_TARGET_PROPERTIES(embree_avx PROPERTIES COMPILE_FLAGS "${FLAGS_AVX}") SET_PROPERTY(TARGET embree_avx PROPERTY FOLDER kernels) SET(EMBREE_LIBRARIES ${EMBREE_LIBRARIES} embree_avx) CheckGlobals(embree_avx) IF (EMBREE_STATIC_LIB) INSTALL(TARGETS embree_avx EXPORT embree_avx-targets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel) INSTALL(EXPORT embree_avx-targets DESTINATION "${EMBREE_CMAKEEXPORT_DIR}" COMPONENT devel) ENDIF() ENDIF() IF (EMBREE_ISA_AVX2 AND EMBREE_LIBRARY_FILES_AVX2) DISABLE_STACK_PROTECTOR_FOR_INTERSECTORS(${EMBREE_LIBRARY_FILES_AVX2}) ADD_LIBRARY(embree_avx2 STATIC ${EMBREE_LIBRARY_FILES_AVX2}) TARGET_LINK_LIBRARIES(embree_avx2 PRIVATE tasking) SET_TARGET_PROPERTIES(embree_avx2 PROPERTIES COMPILE_FLAGS "${FLAGS_AVX2}") SET_PROPERTY(TARGET embree_avx2 PROPERTY FOLDER kernels) SET(EMBREE_LIBRARIES ${EMBREE_LIBRARIES} embree_avx2) CheckGlobals(embree_avx2) IF (EMBREE_STATIC_LIB) INSTALL(TARGETS embree_avx2 EXPORT embree_avx2-targets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel) INSTALL(EXPORT embree_avx2-targets DESTINATION "${EMBREE_CMAKEEXPORT_DIR}" COMPONENT devel) ENDIF() ENDIF() IF (EMBREE_ISA_AVX512 AND EMBREE_LIBRARY_FILES_AVX512) DISABLE_STACK_PROTECTOR_FOR_INTERSECTORS(${EMBREE_LIBRARY_FILES_AVX512}) ADD_LIBRARY(embree_avx512 STATIC ${EMBREE_LIBRARY_FILES_AVX512}) TARGET_LINK_LIBRARIES(embree_avx512 PRIVATE tasking) SET_TARGET_PROPERTIES(embree_avx512 PROPERTIES COMPILE_FLAGS "${FLAGS_AVX512}") SET_PROPERTY(TARGET embree_avx512 PROPERTY FOLDER kernels) SET(EMBREE_LIBRARIES ${EMBREE_LIBRARIES} embree_avx512) CheckGlobals(embree_avx512) IF (EMBREE_STATIC_LIB) INSTALL(TARGETS embree_avx512 EXPORT embree_avx512-targets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel) INSTALL(EXPORT embree_avx512-targets DESTINATION "${EMBREE_CMAKEEXPORT_DIR}" COMPONENT devel) ENDIF() ENDIF() TARGET_LINK_LIBRARIES(embree PRIVATE ${EMBREE_LIBRARIES} sys math simd lexers tasking) IF (EMBREE_SYCL_SUPPORT) TARGET_LINK_LIBRARIES(embree PRIVATE ${SYCL_LIB_NAME} ze_wrapper PUBLIC embree_sycl) ENDIF() #TARGET_LINK_LIBRARIES(embree PRIVATE ${EMBREE_LIBRARIES} sys math simd lexers tasking ${CMAKE_LINK_FLAGS_SYCL}) # FIXME: enable this line SET_TARGET_PROPERTIES(embree PROPERTIES OUTPUT_NAME ${EMBREE_LIBRARY_NAME}) target_include_directories(embree PUBLIC $ $) # libtbb is located in same install folder as libembree IF(WIN32) ELSEIF(APPLE) SET_TARGET_PROPERTIES(embree PROPERTIES INSTALL_RPATH "@loader_path") # On MacOSX we tell dyld to find libtbb in the folder libembree is placed ELSE() SET_TARGET_PROPERTIES(embree PROPERTIES INSTALL_RPATH "$ORIGIN") # Linux we tell ld to find libtbb in the folder libembree is placed. ENDIF() IF (WIN32) ELSEIF (APPLE) SET_TARGET_PROPERTIES(embree PROPERTIES LINK_FLAGS -Wl,-exported_symbols_list,"${PROJECT_SOURCE_DIR}/kernels/export.macosx.map") SET_SOURCE_FILES_PROPERTIES(common/rtcore.cpp PROPERTIES OBJECT_DEPENDS "${PROJECT_SOURCE_DIR}/kernels/export.macosx.map") ELSE() SET_TARGET_PROPERTIES(embree PROPERTIES LINK_FLAGS -Wl,--version-script="${PROJECT_SOURCE_DIR}/kernels/export.linux.map") SET_SOURCE_FILES_PROPERTIES(common/rtcore.cpp PROPERTIES OBJECT_DEPENDS "${PROJECT_SOURCE_DIR}/kernels/export.linux.map") ENDIF() IF (EMBREE_ZIP_MODE) SET_TARGET_PROPERTIES(embree PROPERTIES VERSION ${EMBREE_VERSION_MAJOR} SOVERSION ${EMBREE_VERSION_MAJOR}) ELSE() SET_TARGET_PROPERTIES(embree PROPERTIES VERSION ${EMBREE_VERSION} SOVERSION ${EMBREE_VERSION_MAJOR}) ENDIF() INSTALL(TARGETS embree EXPORT embree-targets LIBRARY NAMELINK_SKIP DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT lib # on Windows put the dlls into bin RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT examples # ... and the import lib into the devel package ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel ) # export Embree targets INSTALL(EXPORT embree-targets DESTINATION "${EMBREE_CMAKEEXPORT_DIR}" COMPONENT devel) # installs libembree4.so link IF (NOT EMBREE_STATIC_LIB) INSTALL(TARGETS embree LIBRARY NAMELINK_ONLY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel ) ENDIF() SIGN_TARGET(embree)