diff --git a/CMakeLists.txt b/CMakeLists.txt index ab8177f1d2..f8159beae4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -869,6 +869,7 @@ endif() set(BIKSIM_LIB_NAME "biksim") set(BUILTINS_SOURCES_LIB_NAME "builtins_sources") set(BUILTINS_BINARIES_LIB_NAME "builtins_binaries") +set(BUILTINS_SPIRV_LIB_NAME "builtins_spirv") set(BUILTINS_VME_LIB_NAME "builtins_vme") set(SCHEDULER_BINARY_LIB_NAME "scheduler_binary") @@ -893,6 +894,7 @@ macro(generate_runtime_lib LIB_NAME MOCKABLE GENERATE_EXEC) target_compile_definitions(${BUILTINS_SOURCES_LIB_NAME} PUBLIC MOCKABLE_VIRTUAL=) target_compile_definitions(${BUILTINS_VME_LIB_NAME} PUBLIC MOCKABLE_VIRTUAL=) target_compile_definitions(${BUILTINS_BINARIES_LIB_NAME} PUBLIC MOCKABLE_VIRTUAL=) + target_compile_definitions(${BUILTINS_SPIRV_LIB_NAME} PUBLIC MOCKABLE_VIRTUAL=) target_compile_definitions(${SCHEDULER_BINARY_LIB_NAME} PUBLIC MOCKABLE_VIRTUAL=) diff --git a/level_zero/CMakeLists.txt b/level_zero/CMakeLists.txt index 9a582a6289..037e577828 100644 --- a/level_zero/CMakeLists.txt +++ b/level_zero/CMakeLists.txt @@ -233,7 +233,7 @@ if(DEFINED AUB_STREAM_DIR) endif() target_sources(${TARGET_NAME_L0} PRIVATE - $ + $ ) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/source/inc) diff --git a/shared/source/built_ins/kernels/CMakeLists.txt b/shared/source/built_ins/kernels/CMakeLists.txt index 308a6cb3bd..dd6b8003bf 100644 --- a/shared/source/built_ins/kernels/CMakeLists.txt +++ b/shared/source/built_ins/kernels/CMakeLists.txt @@ -90,6 +90,49 @@ function(compile_builtin gen_type platform_type builtin bits builtin_options) ) endfunction() +function(generate_cpp_spirv builtin) + + if(NOT DEFINED cloc_cmd_prefix) + if(WIN32) + set(cloc_cmd_prefix $) + else() + if(DEFINED NEO__IGC_LIBRARY_PATH) + set(cloc_cmd_prefix LD_LIBRARY_PATH=${NEO__IGC_LIBRARY_PATH}:$ $) + else() + set(cloc_cmd_prefix LD_LIBRARY_PATH=$ $) + endif() + endif() + endif() + set(OUTPUTDIR "${BUILTINS_OUTDIR_WITH_ARCH}/spirv") + get_filename_component(BASENAME ${builtin} NAME_WE) + set(INPUT_FILENAME ${builtin}.builtin_kernel) + set(OUTPUT_FILES_FOR_SPV + ${OUTPUTDIR}/${BASENAME}.spv + ${OUTPUTDIR}/${BASENAME}.bin + ${OUTPUTDIR}/${BASENAME}.gen + ) + set(GENERATED_SPV_INPUT ${OUTPUTDIR}/${BASENAME}.spv) + set(OUTPUT_FILE_CPP + ${OUTPUTDIR}/${builtin}.cpp + ) + set(OUTPUT_LIST_SPV_FILES ${OUTPUT_LIST_SPV_FILES} ${OUTPUT_FILES_FOR_SPV} PARENT_SCOPE) + set(OUTPUT_LIST_CPP_FILES ${OUTPUT_LIST_CPP_FILES} ${OUTPUT_FILE_CPP} PARENT_SCOPE) + string(TOLOWER ${DEFAULT_SUPPORTED_PLATFORM} DEF_PLATFORM) + add_custom_command( + OUTPUT ${OUTPUT_FILES_FOR_SPV} + COMMAND ${cloc_cmd_prefix} -q -file ${INPUT_FILENAME} -device ${DEF_PLATFORM} -out_dir ${OUTPUTDIR} -output_no_suffix -options "-cl-kernel-arg-info" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${INPUT_FILENAME} ocloc copy_compiler_files + ) + add_custom_command( + OUTPUT ${OUTPUT_FILE_CPP} + COMMAND $ --file ${GENERATED_SPV_INPUT} --output ${OUTPUT_FILE_CPP} --array ${BASENAME} --platform "default" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${GENERATED_SPV_INPUT} $ + ) +endfunction() + + macro(macro_for_each_gen) foreach(PLATFORM_TYPE ${PLATFORM_TYPES}) if(${GEN_TYPE}_HAS_${PLATFORM_TYPE}) @@ -133,4 +176,13 @@ macro(macro_for_each_gen) endforeach() endmacro() +file(MAKE_DIRECTORY "${BUILTINS_OUTDIR_WITH_ARCH}/spirv") +foreach(builtin ${GENERATED_BUILTINS}) + generate_cpp_spirv(${builtin}) +endforeach() +add_custom_target(spirv_builtins ALL DEPENDS ${OUTPUT_LIST_SPV_FILES} ${OUTPUT_LIST_CPP_FILES}) +add_library(${BUILTINS_SPIRV_LIB_NAME} OBJECT ${OUTPUT_LIST_CPP_FILES}) +target_sources(${BUILTINS_SPIRV_LIB_NAME} PRIVATE ${OUTPUT_LIST_CPP_FILES}) +set_target_properties(${BUILTINS_SPIRV_LIB_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) + apply_macro_for_each_gen("SUPPORTED")