| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- cmake_minimum_required(VERSION 3.18)
- project(ISPCObjectGenex CXX ISPC)
- set(CMAKE_ISPC_INSTRUCTION_SETS "sse2-i32x4;sse4-i16x8;avx1-i32x16;avx2-i32x4;avx512knl-i32x16;avx512skx-i32x8")
- add_library(ispc_objects OBJECT
- simple.ispc
- )
- target_compile_definitions(ispc_objects PRIVATE
- $<$<COMPILE_LANG_AND_ID:ISPC,Intel>:M_PI=3.1415926535f>
- )
- set_target_properties(ispc_objects PROPERTIES POSITION_INDEPENDENT_CODE ON)
- if(CMAKE_SIZEOF_VOID_P EQUAL 4)
- set_source_files_properties(simple.ispc PROPERTIES COMPILE_OPTIONS "--arch=x86")
- endif()
- #Test ObjectFiles with file(GENERATE)
- file(GENERATE
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/gen_$<LOWER_CASE:$<CONFIG>/>path_to_objs.h
- CONTENT [[
- #ifndef path_to_objs
- #define path_to_objs
- #include <string>
- static std::string obj_paths = "$<TARGET_OBJECTS:ispc_objects>";
- #endif
- ]]
- )
- add_executable(ISPCObjectGenex main.cxx)
- add_dependencies(ISPCObjectGenex ispc_objects)
- list(LENGTH CMAKE_ISPC_INSTRUCTION_SETS numberOfTargets)
- math(EXPR numberOfTargets "${numberOfTargets}+1")
- target_compile_definitions(ISPCObjectGenex PRIVATE
- "ExpectedISPCObjects=${numberOfTargets}"
- "CONFIG_TYPE=gen_$<LOWER_CASE:$<CONFIG>>"
- )
- target_include_directories(ISPCObjectGenex PRIVATE ${CMAKE_CURRENT_BINARY_DIR} )
- target_compile_features(ISPCObjectGenex PRIVATE cxx_std_11)
|