diff --git a/CMakeLists.txt b/CMakeLists.txt index 36f77a5520..f1f117b3b4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,6 +97,9 @@ OPTION(EMBREE_TUTORIALS "Enable to build Embree tutorials" ON) # Embree configuration ############################################################## +ADD_LIBRARY(embree_config INTERFACE) +ADD_LIBRARY(embree::config ALIAS embree_config) + GET_PROPERTY(SHARED_LIBS_SUPPORTED GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS) IF(SHARED_LIBS_SUPPORTED) OPTION(EMBREE_STATIC_LIB "Build Embree as a static library.") @@ -107,7 +110,7 @@ ELSE() ENDIF() IF (EMBREE_STATIC_LIB) SET(EMBREE_LIB_TYPE STATIC) - ADD_DEFINITIONS(-DEMBREE_STATIC_LIB) + TARGET_COMPILE_DEFINITIONS(embree_config INTERFACE -DEMBREE_STATIC_LIB) ELSE() SET(EMBREE_LIB_TYPE SHARED) ENDIF() @@ -180,19 +183,19 @@ IF (EMBREE_TASKING_SYSTEM STREQUAL "TBB") SET(TASKING_TBB ON ) SET(TASKING_INTERNAL OFF) SET(TASKING_PPL OFF ) - ADD_DEFINITIONS(-DTASKING_TBB) + TARGET_COMPILE_DEFINITIONS(embree_config INTERFACE -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) + TARGET_COMPILE_DEFINITIONS(embree_config INTERFACE -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) + TARGET_COMPILE_DEFINITIONS(embree_config INTERFACE -DTASKING_INTERNAL) LIST(APPEND ISPC_DEFINITIONS -DTASKING_INTERNAL) ENDIF() @@ -240,7 +243,7 @@ ELSE (WIN32) 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}) @@ -293,12 +296,12 @@ ENDIF() IF (EMBREE_ARM) SET_PROPERTY(CACHE EMBREE_MAX_ISA PROPERTY STRINGS NONE NEON NEON2X) -ELSE() +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) @@ -311,7 +314,7 @@ IF (EMBREE_MAX_ISA STREQUAL "NONE") 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}) @@ -352,7 +355,7 @@ ELSE() 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") @@ -480,7 +483,7 @@ IF (EMBREE_ISA_NEON2X) ENDIF() IF (EMBREE_ISA_SSE2) - ADD_DEFINITIONS(-DEMBREE_TARGET_SSE2) + TARGET_COMPILE_DEFINITIONS(embree_config INTERFACE -DEMBREE_TARGET_SSE2) IF (NOT EMBREE_ARM) LIST(APPEND ISPC_TARGETS "sse2") ENDIF() @@ -491,7 +494,7 @@ IF (EMBREE_ISA_SSE2) ENDIF() IF (EMBREE_ISA_SSE42) - ADD_DEFINITIONS(-DEMBREE_TARGET_SSE42) + TARGET_COMPILE_DEFINITIONS(embree_config INTERFACE -DEMBREE_TARGET_SSE42) IF (NOT EMBREE_ARM) LIST(APPEND ISPC_TARGETS "sse4") ENDIF() @@ -502,7 +505,7 @@ IF (EMBREE_ISA_SSE42) ENDIF () IF (EMBREE_ISA_AVX) - ADD_DEFINITIONS(-DEMBREE_TARGET_AVX) + TARGET_COMPILE_DEFINITIONS(embree_config INTERFACE -DEMBREE_TARGET_AVX) IF (NOT EMBREE_ARM) LIST(APPEND ISPC_TARGETS "avx") ENDIF() @@ -514,7 +517,7 @@ IF (EMBREE_ISA_AVX) ENDIF () IF (EMBREE_ISA_AVX2) - ADD_DEFINITIONS(-DEMBREE_TARGET_AVX2) + TARGET_COMPILE_DEFINITIONS(embree_config INTERFACE -DEMBREE_TARGET_AVX2) IF (NOT EMBREE_ARM) LIST(APPEND ISPC_TARGETS "avx2") ENDIF() @@ -526,7 +529,7 @@ IF (EMBREE_ISA_AVX2) ENDIF () IF (EMBREE_ISA_AVX512) - ADD_DEFINITIONS(-DEMBREE_TARGET_AVX512) + TARGET_COMPILE_DEFINITIONS(embree_config INTERFACE -DEMBREE_TARGET_AVX512) IF (NOT EMBREE_ARM) LIST(APPEND ISPC_TARGETS "avx512skx-i32x16") ENDIF() diff --git a/common/lexers/CMakeLists.txt b/common/lexers/CMakeLists.txt index 1e2452cd9f..0e9fcbac1a 100644 --- a/common/lexers/CMakeLists.txt +++ b/common/lexers/CMakeLists.txt @@ -5,7 +5,7 @@ ADD_LIBRARY(lexers STATIC stringstream.cpp tokenstream.cpp ) -TARGET_LINK_LIBRARIES(lexers sys math) +TARGET_LINK_LIBRARIES(lexers sys math embree::config) SET_PROPERTY(TARGET lexers PROPERTY FOLDER common) SET_PROPERTY(TARGET lexers APPEND PROPERTY COMPILE_FLAGS " ${FLAGS_LOWEST}") diff --git a/common/math/CMakeLists.txt b/common/math/CMakeLists.txt index fcfa45598f..98d7230011 100644 --- a/common/math/CMakeLists.txt +++ b/common/math/CMakeLists.txt @@ -2,6 +2,7 @@ ## SPDX-License-Identifier: Apache-2.0 ADD_LIBRARY(math STATIC constants.cpp) +TARGET_LINK_LIBRARIES(math embree::config) SET_PROPERTY(TARGET math PROPERTY FOLDER common) SET_PROPERTY(TARGET math APPEND PROPERTY COMPILE_FLAGS " ${FLAGS_LOWEST}") diff --git a/common/simd/CMakeLists.txt b/common/simd/CMakeLists.txt index 989a00d6ef..0b94f9d008 100644 --- a/common/simd/CMakeLists.txt +++ b/common/simd/CMakeLists.txt @@ -2,6 +2,7 @@ ## SPDX-License-Identifier: Apache-2.0 ADD_LIBRARY(simd STATIC sse.cpp) +TARGET_LINK_LIBRARIES(simd embree::config) SET_PROPERTY(TARGET simd PROPERTY FOLDER common) SET_PROPERTY(TARGET simd APPEND PROPERTY COMPILE_FLAGS " ${FLAGS_LOWEST}") diff --git a/common/sys/CMakeLists.txt b/common/sys/CMakeLists.txt index ce44b14ea7..8deb8911b3 100644 --- a/common/sys/CMakeLists.txt +++ b/common/sys/CMakeLists.txt @@ -20,7 +20,7 @@ ADD_LIBRARY(sys STATIC SET_PROPERTY(TARGET sys PROPERTY FOLDER common) SET_PROPERTY(TARGET sys APPEND PROPERTY COMPILE_FLAGS " ${FLAGS_LOWEST}") -TARGET_LINK_LIBRARIES(sys ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS}) +TARGET_LINK_LIBRARIES(sys embree::config ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS}) IF (EMBREE_STATIC_LIB) INSTALL(TARGETS sys EXPORT sys-targets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel) diff --git a/common/tasking/CMakeLists.txt b/common/tasking/CMakeLists.txt index 2aeb73698a..55820f6a81 100644 --- a/common/tasking/CMakeLists.txt +++ b/common/tasking/CMakeLists.txt @@ -14,7 +14,8 @@ ELSEIF (TASKING_TBB) endif() ADD_LIBRARY(tasking STATIC taskschedulertbb.cpp) - + TARGET_LINK_LIBRARIES(tasking PUBLIC embree::config) + if (TARGET TBB::${EMBREE_TBB_COMPONENT}) message("-- TBB: reuse existing TBB::${TBB_COMPONENT} target") TARGET_LINK_LIBRARIES(tasking PUBLIC TBB::${EMBREE_TBB_COMPONENT}) diff --git a/kernels/CMakeLists.txt b/kernels/CMakeLists.txt index 7c2f43ddb1..80a7590f06 100644 --- a/kernels/CMakeLists.txt +++ b/kernels/CMakeLists.txt @@ -2,7 +2,7 @@ ## SPDX-License-Identifier: Apache-2.0 IF (EMBREE_CONFIG) - ADD_DEFINITIONS(-DEMBREE_CONFIG="${EMBREE_CONFIG}") + TARGET_COMPILE_DEFINITIONS(embree_config INTERFACE -DEMBREE_CONFIG="${EMBREE_CONFIG}") ENDIF() MACRO(DISABLE_STACK_PROTECTOR_FOR_INTERSECTORS) @@ -23,7 +23,7 @@ SOURCE_GROUP("Source Files\\algorithms" "/algorithms/") SOURCE_GROUP("" FILES embree.rc) SET(EMBREE_LIBRARY_FILES - + embree.rc common/device.cpp @@ -86,7 +86,7 @@ IF (EMBREE_GEOMETRY_SUBDIVISION) subdiv/tessellation_cache.cpp subdiv/subdivpatch1base.cpp subdiv/catmullclark_coefficients.cpp - geometry/grid_soa.cpp + geometry/grid_soa.cpp subdiv/subdivpatch1base_eval.cpp bvh/bvh_builder_subdiv.cpp) ENDIF() @@ -100,7 +100,7 @@ IF (EMBREE_RAY_PACKETS) ENDIF() MACRO(embree_files TARGET ISA) - + SET(${TARGET} geometry/instance_intersector.cpp geometry/curve_intersector_virtual_4v.cpp @@ -113,15 +113,15 @@ MACRO(embree_files TARGET ISA) IF (${ISA} EQUAL ${ISA_LOWEST_AVX}) LIST(APPEND ${TARGET} geometry/primitive8.cpp) - ENDIF() + 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_triangle_mesh.cpp - common/scene_quad_mesh.cpp + common/scene_quad_mesh.cpp common/scene_curves.cpp common/scene_line_segments.cpp common/scene_grid_mesh.cpp @@ -148,7 +148,7 @@ MACRO(embree_files TARGET ISA) bvh/bvh_rotate.cpp builders/primrefgen.cpp) ENDIF() - + IF (${ISA} GREATER ${SSE42}) LIST(APPEND ${TARGET} bvh/bvh_intersector1_bvh8.cpp) ENDIF() @@ -165,7 +165,7 @@ MACRO(embree_files TARGET ISA) geometry/grid_soa.cpp subdiv/subdivpatch1base_eval.cpp) ENDIF() - + IF (EMBREE_RAY_PACKETS) LIST(APPEND ${TARGET} bvh/bvh_intersector_hybrid4_bvh4.cpp @@ -186,7 +186,7 @@ MACRO(embree_files TARGET ISA) bvh/bvh_intersector_hybrid16_bvh4.cpp) ENDIF() ENDIF() - + ENDMACRO() #embree_files(EMBREE_LIBRARY_FILES_SSE2 ${SSE2}) @@ -210,7 +210,7 @@ MACRO (CreateISADummyFiles list isa) SET(dst_file "${CMAKE_BINARY_DIR}/${src}.${isa}.cpp") SET(${list} ${${list}} ${dst_file}) ADD_CUSTOM_COMMAND(OUTPUT ${dst_file} - COMMAND ${CMAKE_COMMAND} + COMMAND ${CMAKE_COMMAND} -D src=${src_file} -D dst=${dst_file} -P "${PROJECT_SOURCE_DIR}/common/cmake/create_isa_dummy_file.cmake" @@ -252,7 +252,7 @@ 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) + TARGET_LINK_LIBRARIES(embree_sse42 PRIVATE tasking PUBLIC embree::config) 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) @@ -266,7 +266,7 @@ 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) + TARGET_LINK_LIBRARIES(embree_avx PRIVATE tasking PUBLIC embree::config) 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) @@ -280,7 +280,7 @@ 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) + TARGET_LINK_LIBRARIES(embree_avx2 PRIVATE tasking PUBLIC embree::config) 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) @@ -294,7 +294,7 @@ 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) + TARGET_LINK_LIBRARIES(embree_avx512 PRIVATE tasking PUBLIC embree::config) 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) @@ -305,7 +305,7 @@ IF (EMBREE_ISA_AVX512 AND EMBREE_LIBRARY_FILES_AVX512) ENDIF() ENDIF() -TARGET_LINK_LIBRARIES(embree PRIVATE ${EMBREE_LIBRARIES} sys math simd lexers tasking) +TARGET_LINK_LIBRARIES(embree PRIVATE ${EMBREE_LIBRARIES} sys math simd lexers tasking PUBLIC embree::config) SET_TARGET_PROPERTIES(embree PROPERTIES OUTPUT_NAME ${EMBREE_LIBRARY_NAME}) target_include_directories(embree PUBLIC $ @@ -323,7 +323,7 @@ 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") + 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") @@ -335,7 +335,7 @@ ELSE() SET_TARGET_PROPERTIES(embree PROPERTIES VERSION ${EMBREE_VERSION} SOVERSION ${EMBREE_VERSION_MAJOR}) ENDIF() -INSTALL(TARGETS embree EXPORT embree-targets +INSTALL(TARGETS embree embree_config 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