CMakeLists.txt 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. cmake_minimum_required(VERSION 3.18)
  2. project(ISPCObjectGenex CXX ISPC)
  3. set(CMAKE_ISPC_INSTRUCTION_SETS "sse2-i32x4;sse4-i16x8;avx1-i32x16;avx2-i32x4;avx512knl-i32x16;avx512skx-i32x8")
  4. add_library(ispc_objects OBJECT
  5. simple.ispc
  6. )
  7. target_compile_definitions(ispc_objects PRIVATE
  8. $<$<COMPILE_LANG_AND_ID:ISPC,Intel>:M_PI=3.1415926535f>
  9. )
  10. set_target_properties(ispc_objects PROPERTIES POSITION_INDEPENDENT_CODE ON)
  11. if(CMAKE_SIZEOF_VOID_P EQUAL 4)
  12. set_source_files_properties(simple.ispc PROPERTIES COMPILE_OPTIONS "--arch=x86")
  13. endif()
  14. #Test ObjectFiles with file(GENERATE)
  15. file(GENERATE
  16. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/gen_$<LOWER_CASE:$<CONFIG>/>path_to_objs.h
  17. CONTENT [[
  18. #ifndef path_to_objs
  19. #define path_to_objs
  20. #include <string>
  21. static std::string obj_paths = "$<TARGET_OBJECTS:ispc_objects>";
  22. #endif
  23. ]]
  24. )
  25. add_executable(ISPCObjectGenex main.cxx)
  26. add_dependencies(ISPCObjectGenex ispc_objects)
  27. list(LENGTH CMAKE_ISPC_INSTRUCTION_SETS numberOfTargets)
  28. math(EXPR numberOfTargets "${numberOfTargets}+1")
  29. target_compile_definitions(ISPCObjectGenex PRIVATE
  30. "ExpectedISPCObjects=${numberOfTargets}"
  31. "CONFIG_TYPE=gen_$<LOWER_CASE:$<CONFIG>>"
  32. )
  33. target_include_directories(ISPCObjectGenex PRIVATE ${CMAKE_CURRENT_BINARY_DIR} )
  34. target_compile_features(ISPCObjectGenex PRIVATE cxx_std_11)