1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
#
# Copyright (c) 2018-2025, Intel Corporation
#
# SPDX-License-Identifier: BSD-3-Clause
#
# ispc ADDISPCTest.cmake
#
function(add_ispc_example)
set(options USE_COMMON_SETTINGS)
set(oneValueArgs NAME ISPC_SRC_NAME DATA_DIR)
set(multiValueArgs ISPC_IA_TARGETS ISPC_ARM_TARGETS ISPC_FLAGS TARGET_SOURCES LIBRARIES DATA_FILES)
cmake_parse_arguments("example" "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
if ("${ISPC_ARCH}" MATCHES "x86")
string(REPLACE "," ";" ISPC_TARGETS ${example_ISPC_IA_TARGETS})
elseif ("${ISPC_ARCH}" STREQUAL "arm" OR "${ISPC_ARCH}" STREQUAL "aarch64")
string(REPLACE "," ";" ISPC_TARGETS ${example_ISPC_ARM_TARGETS})
else()
message(FATAL_ERROR "Unknown architecture ${ISPC_ARCH}")
endif()
add_executable(${example_NAME})
target_sources(${example_NAME}
PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/${ISPC_SRC_NAME}.ispc"
${example_TARGET_SOURCES}
)
set_property(TARGET ${example_NAME} PROPERTY POSITION_INDEPENDENT_CODE ON)
set_property(TARGET ${example_NAME} PROPERTY ISPC_INSTRUCTION_SETS "${ISPC_TARGETS}")
target_compile_options(${example_NAME} PRIVATE $<$<COMPILE_LANGUAGE:ISPC>:${example_ISPC_FLAGS}>)
target_compile_options(${example_NAME} PRIVATE $<$<COMPILE_LANGUAGE:ISPC>:--arch=${ISPC_ARCH}>)
if (UNIX)
set(arch_flag "-m${ISPC_ARCH_BIT}")
target_compile_options(${example_NAME} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX>:${arch_flag}>)
elseif (WIN32 AND MSVC)
target_compile_options(${example_NAME} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX>:/fp:fast /Oi>)
endif()
if (example_USE_COMMON_SETTINGS)
find_package(Threads)
target_sources(${example_NAME} PRIVATE ${EXAMPLES_ROOT}/common/tasksys.cpp)
target_sources(${example_NAME} PRIVATE ${EXAMPLES_ROOT}/common/timing.h)
target_link_libraries(${example_NAME} PRIVATE Threads::Threads)
endif()
# Link libraries
if (example_LIBRARIES)
target_link_libraries(${example_NAME} ${example_LIBRARIES})
endif()
set_target_properties(${example_NAME} PROPERTIES FOLDER "Examples")
if(MSVC)
# Group ISPC files inside Visual Studio
source_group("ISPC" FILES "${CMAKE_CURRENT_SOURCE_DIR}/${ISPC_SRC_NAME}.ispc")
endif()
# Install example
# We do not need to include examples binaries to the package
if (NOT ISPC_PREPARE_PACKAGE)
install(TARGETS ${example_NAME} RUNTIME DESTINATION examples/${example_NAME})
if (example_DATA_FILES)
install(FILES ${example_DATA_FILES}
DESTINATION examples/${example_NAME})
endif()
if (example_DATA_DIR)
install(DIRECTORY ${example_DATA_DIR}
DESTINATION examples/${example_NAME})
endif()
endif()
endfunction()
|