diff --git a/CMakeLists.txt b/CMakeLists.txt index 41e85148fe..1f017569b6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1024,8 +1024,12 @@ macro(generate_runtime_lib LIB_NAME MOCKABLE GENERATE_EXEC) target_compile_definitions(${BUILTINS_VME_LIB_NAME} PUBLIC MOCKABLE_VIRTUAL=) target_compile_definitions(${BUILTINS_BINARIES_BINDFUL_LIB_NAME} PUBLIC MOCKABLE_VIRTUAL=) target_compile_definitions(${BUILTINS_BINARIES_BINDLESS_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=) + if(TARGET ${BUILTINS_SPIRV_LIB_NAME}) + target_compile_definitions(${BUILTINS_SPIRV_LIB_NAME} PUBLIC MOCKABLE_VIRTUAL=) + endif() + if(TARGET ${SCHEDULER_BINARY_LIB_NAME}) + target_compile_definitions(${SCHEDULER_BINARY_LIB_NAME} PUBLIC MOCKABLE_VIRTUAL=) + endif() if(${MOCKABLE}) target_compile_definitions(${LIB_NAME} PUBLIC MOCKABLE_VIRTUAL=virtual) diff --git a/level_zero/CMakeLists.txt b/level_zero/CMakeLists.txt index 83de4580ec..bd25f03582 100644 --- a/level_zero/CMakeLists.txt +++ b/level_zero/CMakeLists.txt @@ -282,10 +282,12 @@ if(BUILD_WITH_L0) $ ) endif() - target_sources(${TARGET_NAME_L0} - PRIVATE - $ - ) + if(TARGET ${BUILTINS_SPIRV_LIB_NAME}) + target_sources(${TARGET_NAME_L0} + PRIVATE + $ + ) + endif() if(NOT ${DONT_USE_PREBUILT_KERNELS_L0}) message("Prebuilt kernels are linked to Level Zero.") target_sources(${TARGET_NAME_L0} diff --git a/level_zero/core/test/aub_tests/CMakeLists.txt b/level_zero/core/test/aub_tests/CMakeLists.txt index ccba3ea7a4..b57e44298c 100644 --- a/level_zero/core/test/aub_tests/CMakeLists.txt +++ b/level_zero/core/test/aub_tests/CMakeLists.txt @@ -72,10 +72,14 @@ target_sources(${TARGET_NAME} PRIVATE $ $ $ - $ $ $ ) +if(TARGET ${BUILTINS_SPIRV_LIB_NAME}) + target_sources(${TARGET_NAME} PRIVATE + $ + ) +endif() target_sources(${TARGET_NAME} PRIVATE ${NEO_SOURCE_DIR}/opencl/test/unit_test/helpers${BRANCH_DIR_SUFFIX}/kernel_binary_helper_hash_value.cpp diff --git a/level_zero/core/test/unit_tests/CMakeLists.txt b/level_zero/core/test/unit_tests/CMakeLists.txt index 601e041fd5..2dcd559dba 100644 --- a/level_zero/core/test/unit_tests/CMakeLists.txt +++ b/level_zero/core/test/unit_tests/CMakeLists.txt @@ -126,10 +126,14 @@ target_sources(${TARGET_NAME} PRIVATE $ $ $ - $ $ $ ) +if(TARGET ${BUILTINS_SPIRV_LIB_NAME}) + target_sources(${TARGET_NAME} PRIVATE + $ + ) +endif() set(TEST_MODULES ${CMAKE_CURRENT_SOURCE_DIR}/test_modules/test_kernel.cl diff --git a/level_zero/tools/test/unit_tests/CMakeLists.txt b/level_zero/tools/test/unit_tests/CMakeLists.txt index acfa5235ad..c691aed596 100644 --- a/level_zero/tools/test/unit_tests/CMakeLists.txt +++ b/level_zero/tools/test/unit_tests/CMakeLists.txt @@ -116,10 +116,14 @@ target_sources(${TARGET_NAME} PRIVATE $ $ $ - $ $ $ ) +if(TARGET ${BUILTINS_SPIRV_LIB_NAME}) + target_sources(${TARGET_NAME} PRIVATE + $ + ) +endif() option(L0_ULT_VERBOSE "Use the default/verbose test output" OFF) if(NOT L0_ULT_VERBOSE) diff --git a/opencl/source/CMakeLists.txt b/opencl/source/CMakeLists.txt index 864a53ad5f..2961e16d7e 100644 --- a/opencl/source/CMakeLists.txt +++ b/opencl/source/CMakeLists.txt @@ -123,8 +123,12 @@ if(${GENERATE_EXECUTABLE}) $ $ $ - $ ) + if(TARGET ${SCHEDULER_BINARY_LIB_NAME}) + list(APPEND NEO_DYNAMIC_LIB__TARGET_OBJECTS + $ + ) + endif() if(DEFINED AUB_STREAM_PROJECT_NAME) list(APPEND NEO_DYNAMIC_LIB__TARGET_OBJECTS $) diff --git a/opencl/source/built_ins/kernels/CMakeLists.txt b/opencl/source/built_ins/kernels/CMakeLists.txt index c73332fa60..660be4988f 100644 --- a/opencl/source/built_ins/kernels/CMakeLists.txt +++ b/opencl/source/built_ins/kernels/CMakeLists.txt @@ -4,104 +4,106 @@ # SPDX-License-Identifier: MIT # -add_custom_target(builtins_vme_sources) -set_target_properties(builtins_vme_sources PROPERTIES FOLDER "${OPENCL_RUNTIME_PROJECTS_FOLDER}/${OPENCL_BUIILINS_PROJECTS_FOLDER}") -set(BUILTINS_OUTDIR_WITH_ARCH "${TargetDir}/built_ins/${NEO_ARCH}") -add_dependencies(${BUILTINS_BINARIES_BINDFUL_LIB_NAME} builtins_vme_sources) -add_subdirectories() -set(GENERATED_BUILTINS ${GENERATED_BUILTINS} PARENT_SCOPE) -set(GENERATED_BUILTINS_STATELESS ${GENERATED_BUILTINS_STATELESS} PARENT_SCOPE) +if(NOT NEO_DISABLE_BUILTINS_COMPILATION) + add_custom_target(builtins_vme_sources) + set_target_properties(builtins_vme_sources PROPERTIES FOLDER "${OPENCL_RUNTIME_PROJECTS_FOLDER}/${OPENCL_BUIILINS_PROJECTS_FOLDER}") + set(BUILTINS_OUTDIR_WITH_ARCH "${TargetDir}/built_ins/${NEO_ARCH}") + add_dependencies(${BUILTINS_BINARIES_BINDFUL_LIB_NAME} builtins_vme_sources) + add_subdirectories() + set(GENERATED_BUILTINS ${GENERATED_BUILTINS} PARENT_SCOPE) + set(GENERATED_BUILTINS_STATELESS ${GENERATED_BUILTINS_STATELESS} PARENT_SCOPE) -if("${NEO_ARCH}" STREQUAL "x32") - set(BUILTIN_OPTIONS "-cl-intel-greater-than-4GB-buffer-required") -else() - set(BUILTIN_OPTIONS "") -endif() - -set(BUILTIN_OPTIONS_STATELESS - "-cl-intel-greater-than-4GB-buffer-required" -) - -if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") - list(APPEND __cloc__options__ "-D DEBUG") -endif() - -set(BUILTINS_INCLUDE_DIR ${TargetDir} PARENT_SCOPE) -set(BUILTIN_CPP "") - -function(get_bits_for_stateless gen_type platform_type) - # Force 32bits compiling on gen9lp for stateless builtins - if((${GEN_TYPE} STREQUAL "GEN9") AND (${PLATFORM_TYPE} STREQUAL "LP")) - set(BITS "32" PARENT_SCOPE) + if("${NEO_ARCH}" STREQUAL "x32") + set(BUILTIN_OPTIONS "-cl-intel-greater-than-4GB-buffer-required") else() - set(BITS ${NEO_BITS} PARENT_SCOPE) + set(BUILTIN_OPTIONS "") endif() -endfunction() -# Define function for compiling built-ins (with ocloc) -function(compile_builtin gen_type platform_type builtin bits builtin_options) - string(TOLOWER ${gen_type} gen_type_lower) - get_family_name_with_type(${gen_type} ${platform_type}) - set(OUTPUTDIR "${BUILTINS_OUTDIR_WITH_ARCH}/${gen_type_lower}") - # get filename - set(FILENAME ${builtin}) - # get name of the file w/o extension - get_filename_component(BASENAME ${builtin} NAME_WE) - - set(OUTPUTPATH_BASE "${OUTPUTDIR}/${BASENAME}_${family_name_with_type}") - set(OUTPUT_FILES - ${OUTPUTPATH_BASE}.spv - ${OUTPUTPATH_BASE}.bin - ${OUTPUTPATH_BASE}.cpp - ${OUTPUTPATH_BASE}.gen + set(BUILTIN_OPTIONS_STATELESS + "-cl-intel-greater-than-4GB-buffer-required" ) - # function returns builtin cpp filename - unset(BUILTIN_CPP) - # set variable outside function - set(BUILTIN_CPP built_ins/${NEO_ARCH}/${gen_type_lower}/${BASENAME}_${family_name_with_type}.cpp PARENT_SCOPE) - if(NOT DEFINED cloc_cmd_prefix) - if(WIN32) - set(cloc_cmd_prefix ocloc) + if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") + list(APPEND __cloc__options__ "-D DEBUG") + endif() + + set(BUILTINS_INCLUDE_DIR ${TargetDir} PARENT_SCOPE) + set(BUILTIN_CPP "") + + function(get_bits_for_stateless gen_type platform_type) + # Force 32bits compiling on gen9lp for stateless builtins + if((${GEN_TYPE} STREQUAL "GEN9") AND (${PLATFORM_TYPE} STREQUAL "LP")) + set(BITS "32" PARENT_SCOPE) else() - if(DEFINED NEO__IGC_LIBRARY_PATH) - set(cloc_cmd_prefix LD_LIBRARY_PATH=${NEO__IGC_LIBRARY_PATH}:$ $) + set(BITS ${NEO_BITS} PARENT_SCOPE) + endif() + endfunction() + + # Define function for compiling built-ins (with ocloc) + function(compile_builtin gen_type platform_type builtin bits builtin_options) + string(TOLOWER ${gen_type} gen_type_lower) + get_family_name_with_type(${gen_type} ${platform_type}) + set(OUTPUTDIR "${BUILTINS_OUTDIR_WITH_ARCH}/${gen_type_lower}") + # get filename + set(FILENAME ${builtin}) + # get name of the file w/o extension + get_filename_component(BASENAME ${builtin} NAME_WE) + + set(OUTPUTPATH_BASE "${OUTPUTDIR}/${BASENAME}_${family_name_with_type}") + set(OUTPUT_FILES + ${OUTPUTPATH_BASE}.spv + ${OUTPUTPATH_BASE}.bin + ${OUTPUTPATH_BASE}.cpp + ${OUTPUTPATH_BASE}.gen + ) + + # function returns builtin cpp filename + unset(BUILTIN_CPP) + # set variable outside function + set(BUILTIN_CPP built_ins/${NEO_ARCH}/${gen_type_lower}/${BASENAME}_${family_name_with_type}.cpp PARENT_SCOPE) + if(NOT DEFINED cloc_cmd_prefix) + if(WIN32) + set(cloc_cmd_prefix ocloc) else() - set(cloc_cmd_prefix LD_LIBRARY_PATH=$ $) + 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() - endif() - list(APPEND __cloc__options__ "-cl-kernel-arg-info") - add_custom_command( - OUTPUT ${OUTPUT_FILES} - COMMAND ${cloc_cmd_prefix} -q -file ${FILENAME} -device ${DEFAULT_SUPPORTED_${gen_type}_${platform_type}_PLATFORM} ${builtin_options} -${bits} -out_dir ${OUTPUTDIR} -options "$" - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS ${builtin} ocloc copy_compiler_files - ) -endfunction() + list(APPEND __cloc__options__ "-cl-kernel-arg-info") + add_custom_command( + OUTPUT ${OUTPUT_FILES} + COMMAND ${cloc_cmd_prefix} -q -file ${FILENAME} -device ${DEFAULT_SUPPORTED_${gen_type}_${platform_type}_PLATFORM} ${builtin_options} -${bits} -out_dir ${OUTPUTDIR} -options "$" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${builtin} ocloc copy_compiler_files + ) + endfunction() -macro(macro_for_each_gen) - foreach(PLATFORM_TYPE ${PLATFORM_TYPES}) - if(${GEN_TYPE}_HAS_${PLATFORM_TYPE}) - get_family_name_with_type(${GEN_TYPE} ${PLATFORM_TYPE}) - string(TOLOWER ${PLATFORM_TYPE} PLATFORM_TYPE_LOWER) - unset(BUILTINS_COMMANDS) - foreach(GENERATED_BUILTIN ${GENERATED_BUILTINS}) - compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}") - list(APPEND BUILTINS_COMMANDS ${TargetDir}/${BUILTIN_CPP}) - endforeach() - get_bits_for_stateless(${GEN_TYPE} ${PLATFORM_TYPE}) - foreach(GENERATED_BUILTIN_STATELESS ${GENERATED_BUILTINS_STATELESS}) - compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_STATELESS}.builtin_kernel ${BITS} "${BUILTIN_OPTIONS_STATELESS}") - list(APPEND BUILTINS_COMMANDS ${TargetDir}/${BUILTIN_CPP}) - endforeach() - set(target_name builtins_${family_name_with_type}_vme) - add_custom_target(${target_name} DEPENDS ${BUILTINS_COMMANDS}) - add_dependencies(builtins ${target_name}) - set_target_properties(${target_name} PROPERTIES FOLDER "${OPENCL_RUNTIME_PROJECTS_FOLDER}/built_ins/${family_name_with_type}") - endif() - endforeach() -endmacro() + macro(macro_for_each_gen) + foreach(PLATFORM_TYPE ${PLATFORM_TYPES}) + if(${GEN_TYPE}_HAS_${PLATFORM_TYPE}) + get_family_name_with_type(${GEN_TYPE} ${PLATFORM_TYPE}) + string(TOLOWER ${PLATFORM_TYPE} PLATFORM_TYPE_LOWER) + unset(BUILTINS_COMMANDS) + foreach(GENERATED_BUILTIN ${GENERATED_BUILTINS}) + compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}") + list(APPEND BUILTINS_COMMANDS ${TargetDir}/${BUILTIN_CPP}) + endforeach() + get_bits_for_stateless(${GEN_TYPE} ${PLATFORM_TYPE}) + foreach(GENERATED_BUILTIN_STATELESS ${GENERATED_BUILTINS_STATELESS}) + compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_STATELESS}.builtin_kernel ${BITS} "${BUILTIN_OPTIONS_STATELESS}") + list(APPEND BUILTINS_COMMANDS ${TargetDir}/${BUILTIN_CPP}) + endforeach() + set(target_name builtins_${family_name_with_type}_vme) + add_custom_target(${target_name} DEPENDS ${BUILTINS_COMMANDS}) + add_dependencies(builtins ${target_name}) + set_target_properties(${target_name} PROPERTIES FOLDER "${OPENCL_RUNTIME_PROJECTS_FOLDER}/built_ins/${family_name_with_type}") + endif() + endforeach() + endmacro() -apply_macro_for_each_gen("SUPPORTED") + apply_macro_for_each_gen("SUPPORTED") +endif() diff --git a/opencl/source/scheduler/CMakeLists.txt b/opencl/source/scheduler/CMakeLists.txt index 0b2fe5fb27..e3836ff647 100644 --- a/opencl/source/scheduler/CMakeLists.txt +++ b/opencl/source/scheduler/CMakeLists.txt @@ -13,6 +13,6 @@ set(RUNTIME_SRCS_SCHEDULER target_sources(${NEO_STATIC_LIB_NAME} PRIVATE ${RUNTIME_SRCS_SCHEDULER}) set_property(GLOBAL PROPERTY RUNTIME_SRCS_SCHEDULER ${RUNTIME_SRCS_SCHEDULER}) -if(NOT (TARGET ${SCHEDULER_BINARY_LIB_NAME})) +if(NOT NEO_DISABLE_BUILTINS_COMPILATION AND NOT (TARGET ${SCHEDULER_BINARY_LIB_NAME})) include(scheduler_binary.cmake) endif() diff --git a/opencl/test/unit_test/CMakeLists.txt b/opencl/test/unit_test/CMakeLists.txt index 1255350168..65909be53f 100644 --- a/opencl/test/unit_test/CMakeLists.txt +++ b/opencl/test/unit_test/CMakeLists.txt @@ -70,8 +70,12 @@ set(NEO_IGDRCL_TESTS__TARGET_OBJECTS $ $ $ - $ ) +if(TARGET ${SCHEDULER_BINARY_LIB_NAME}) + list(APPEND NEO_IGDRCL_TESTS__TARGET_OBJECTS + $ + ) +endif() if(DEFINED AUB_STREAM_PROJECT_NAME) add_library(aub_stream_mock_lib OBJECT EXCLUDE_FROM_ALL diff --git a/opencl/test/unit_test/aub_tests/CMakeLists.txt b/opencl/test/unit_test/aub_tests/CMakeLists.txt index 45f7ac317c..4c6aefc26e 100644 --- a/opencl/test/unit_test/aub_tests/CMakeLists.txt +++ b/opencl/test/unit_test/aub_tests/CMakeLists.txt @@ -17,12 +17,16 @@ list(APPEND IGDRCL_AUB_TESTS__TARGET_OBJECTS ${NEO_SOURCE_DIR}/shared/test/common/test_macros/test_checks_shared.cpp ${NEO_SHARED_aub_tests_configurations} $ - $ $ $ $ $ ) +if(TARGET ${SCHEDULER_BINARY_LIB_NAME}) + list(APPEND IGDRCL_AUB_TESTS__TARGET_OBJECTS + $ + ) +endif() if(DEFINED AUB_STREAM_PROJECT_NAME) list(APPEND IGDRCL_AUB_TESTS__TARGET_OBJECTS $) diff --git a/shared/source/built_ins/kernels/CMakeLists.txt b/shared/source/built_ins/kernels/CMakeLists.txt index 59723fdb29..929b981fe1 100644 --- a/shared/source/built_ins/kernels/CMakeLists.txt +++ b/shared/source/built_ins/kernels/CMakeLists.txt @@ -4,209 +4,211 @@ # SPDX-License-Identifier: MIT # -add_custom_target(builtins) -set_target_properties(builtins PROPERTIES FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUIILINS_PROJECTS_FOLDER}") -set(BUILTINS_OUTDIR_WITH_ARCH "${TargetDir}/built_ins/${NEO_ARCH}") -add_dependencies(${BUILTINS_BINARIES_BINDFUL_LIB_NAME} builtins) -add_dependencies(${BUILTINS_BINARIES_BINDLESS_LIB_NAME} builtins) -add_subdirectories() -set(GENERATED_BUILTINS ${GENERATED_BUILTINS} PARENT_SCOPE) -set(GENERATED_BUILTINS_IMAGES ${GENERATED_BUILTINS_IMAGES} PARENT_SCOPE) -set(GENERATED_BUILTINS_STATELESS ${GENERATED_BUILTINS_STATELESS} PARENT_SCOPE) +if(NOT NEO_DISABLE_BUILTINS_COMPILATION) + add_custom_target(builtins) + set_target_properties(builtins PROPERTIES FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUIILINS_PROJECTS_FOLDER}") + set(BUILTINS_OUTDIR_WITH_ARCH "${TargetDir}/built_ins/${NEO_ARCH}") + add_dependencies(${BUILTINS_BINARIES_BINDFUL_LIB_NAME} builtins) + add_dependencies(${BUILTINS_BINARIES_BINDLESS_LIB_NAME} builtins) + add_subdirectories() + set(GENERATED_BUILTINS ${GENERATED_BUILTINS} PARENT_SCOPE) + set(GENERATED_BUILTINS_IMAGES ${GENERATED_BUILTINS_IMAGES} PARENT_SCOPE) + set(GENERATED_BUILTINS_STATELESS ${GENERATED_BUILTINS_STATELESS} PARENT_SCOPE) -if("${NEO_ARCH}" STREQUAL "x32") - set(BUILTIN_OPTIONS "-cl-intel-greater-than-4GB-buffer-required") -else() - set(BUILTIN_OPTIONS "") -endif() - -set(BUILTIN_OPTIONS_STATELESS - "-cl-intel-greater-than-4GB-buffer-required" -) - -set(bindless_OPTIONS - -internal_options "-cl-intel-use-bindless-mode" -) - -set(bindful_OPTIONS - "" -) - -if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") - list(APPEND __cloc__options__ "-D DEBUG") -endif() - -set(BUILTINS_INCLUDE_DIR ${TargetDir} PARENT_SCOPE) -set(BUILTIN_CPP "") - -function(get_bits_for_stateless gen_type platform_type) - # Force 32bits compiling on gen9lp for stateless builtins - if((${gen_type} STREQUAL "GEN9") AND (${platform_type} STREQUAL "LP")) - set(BITS "32" PARENT_SCOPE) + if("${NEO_ARCH}" STREQUAL "x32") + set(BUILTIN_OPTIONS "-cl-intel-greater-than-4GB-buffer-required") else() - set(BITS ${NEO_BITS} PARENT_SCOPE) + set(BUILTIN_OPTIONS "") endif() -endfunction() -# Define function for compiling built-ins (with ocloc) -function(compile_builtin gen_type platform_type builtin bits builtin_options mode) - string(TOLOWER ${gen_type} gen_type_lower) - get_family_name_with_type(${gen_type} ${platform_type}) - set(OUTPUTDIR "${BUILTINS_OUTDIR_WITH_ARCH}/${gen_type_lower}") - # get filename - set(FILENAME ${builtin}) - # get name of the file w/o extension - get_filename_component(BASENAME ${builtin} NAME_WE) - - set(OUTPUT_FILE_SPV - ${OUTPUTDIR}/${mode}_${BASENAME}_${family_name_with_type}.spv + set(BUILTIN_OPTIONS_STATELESS + "-cl-intel-greater-than-4GB-buffer-required" ) - if(NOT DEFINED cloc_cmd_prefix) - if(WIN32) - set(cloc_cmd_prefix ocloc) + set(bindless_OPTIONS + -internal_options "-cl-intel-use-bindless-mode" + ) + + set(bindful_OPTIONS + "" + ) + + if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") + list(APPEND __cloc__options__ "-D DEBUG") + endif() + + set(BUILTINS_INCLUDE_DIR ${TargetDir} PARENT_SCOPE) + set(BUILTIN_CPP "") + + function(get_bits_for_stateless gen_type platform_type) + # Force 32bits compiling on gen9lp for stateless builtins + if((${gen_type} STREQUAL "GEN9") AND (${platform_type} STREQUAL "LP")) + set(BITS "32" PARENT_SCOPE) else() - if(DEFINED NEO__IGC_LIBRARY_PATH) - set(cloc_cmd_prefix LD_LIBRARY_PATH=${NEO__IGC_LIBRARY_PATH}:$ $) + set(BITS ${NEO_BITS} PARENT_SCOPE) + endif() + endfunction() + + # Define function for compiling built-ins (with ocloc) + function(compile_builtin gen_type platform_type builtin bits builtin_options mode) + string(TOLOWER ${gen_type} gen_type_lower) + get_family_name_with_type(${gen_type} ${platform_type}) + set(OUTPUTDIR "${BUILTINS_OUTDIR_WITH_ARCH}/${gen_type_lower}") + # get filename + set(FILENAME ${builtin}) + # get name of the file w/o extension + get_filename_component(BASENAME ${builtin} NAME_WE) + + set(OUTPUT_FILE_SPV + ${OUTPUTDIR}/${mode}_${BASENAME}_${family_name_with_type}.spv + ) + + if(NOT DEFINED cloc_cmd_prefix) + if(WIN32) + set(cloc_cmd_prefix ocloc) else() - set(cloc_cmd_prefix LD_LIBRARY_PATH=$ $) + 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() - endif() - list(APPEND __cloc__options__ "-cl-kernel-arg-info") - set(INTERNAL_OPTIONS "${${mode}_OPTIONS}") - add_custom_command( - OUTPUT ${OUTPUT_FILE_SPV} - COMMAND ${cloc_cmd_prefix} -q -file ${FILENAME} -spv_only -device ${DEFAULT_SUPPORTED_${gen_type}_${platform_type}_PLATFORM} ${builtin_options} -${bits} -output ${mode}_${BASENAME} -out_dir ${OUTPUTDIR} ${INTERNAL_OPTIONS} -options "$" - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS ${builtin} ocloc copy_compiler_files - ) - foreach(REVISION_ID ${${platform_type}_${gen_type}_REVISIONS}) - set(OUTPUT_FILE_CPP - ${OUTPUTDIR}/${mode}_${BASENAME}_${family_name_with_type}_${REVISION_ID}.cpp - ) - set(BINARY_OUTPUT "${OUTPUTDIR}/${mode}_${BASENAME}_${REVISION_ID}_${family_name_with_type}") - set(OUTPUT_FILES_BINARIES - ${BINARY_OUTPUT}.gen - ${BINARY_OUTPUT}.bin - ) - list(APPEND BUILTINS_COMMANDS "${OUTPUT_FILE_CPP}") + list(APPEND __cloc__options__ "-cl-kernel-arg-info") + set(INTERNAL_OPTIONS "${${mode}_OPTIONS}") add_custom_command( - OUTPUT ${OUTPUT_FILES_BINARIES} - COMMAND ${cloc_cmd_prefix} -q -file ${OUTPUT_FILE_SPV} -spirv_input -device ${DEFAULT_SUPPORTED_${gen_type}_${platform_type}_PLATFORM} ${builtin_options} -${bits} -output ${mode}_${BASENAME}_${REVISION_ID} -out_dir ${OUTPUTDIR} -revision_id ${REVISION_ID} ${INTERNAL_OPTIONS} -options "$" + OUTPUT ${OUTPUT_FILE_SPV} + COMMAND ${cloc_cmd_prefix} -q -file ${FILENAME} -spv_only -device ${DEFAULT_SUPPORTED_${gen_type}_${platform_type}_PLATFORM} ${builtin_options} -${bits} -output ${mode}_${BASENAME} -out_dir ${OUTPUTDIR} ${INTERNAL_OPTIONS} -options "$" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS ${OUTPUT_FILE_SPV} ocloc copy_compiler_files + DEPENDS ${builtin} ocloc copy_compiler_files + ) + foreach(REVISION_ID ${${platform_type}_${gen_type}_REVISIONS}) + set(OUTPUT_FILE_CPP + ${OUTPUTDIR}/${mode}_${BASENAME}_${family_name_with_type}_${REVISION_ID}.cpp + ) + set(BINARY_OUTPUT "${OUTPUTDIR}/${mode}_${BASENAME}_${REVISION_ID}_${family_name_with_type}") + set(OUTPUT_FILES_BINARIES + ${BINARY_OUTPUT}.gen + ${BINARY_OUTPUT}.bin + ) + list(APPEND BUILTINS_COMMANDS "${OUTPUT_FILE_CPP}") + add_custom_command( + OUTPUT ${OUTPUT_FILES_BINARIES} + COMMAND ${cloc_cmd_prefix} -q -file ${OUTPUT_FILE_SPV} -spirv_input -device ${DEFAULT_SUPPORTED_${gen_type}_${platform_type}_PLATFORM} ${builtin_options} -${bits} -output ${mode}_${BASENAME}_${REVISION_ID} -out_dir ${OUTPUTDIR} -revision_id ${REVISION_ID} ${INTERNAL_OPTIONS} -options "$" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${OUTPUT_FILE_SPV} ocloc copy_compiler_files + ) + add_custom_command( + OUTPUT ${OUTPUT_FILE_CPP} + COMMAND $ --file ${BINARY_OUTPUT}.gen --output ${OUTPUT_FILE_CPP} --array ${mode}_${BASENAME} --platform ${family_name_with_type} --revision_id ${REVISION_ID} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${OUTPUT_FILES_BINARIES} $ + ) + endforeach() + set(BUILTINS_COMMANDS ${BUILTINS_COMMANDS} PARENT_SCOPE) + 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() + + get_filename_component(BASENAME ${builtin} NAME_WE) + get_filename_component(DIR ${builtin} DIRECTORY) + + set(OUTPUTDIR "${BUILTINS_OUTDIR_WITH_ARCH}/spirv/${DIR}") + string(REPLACE "//" "/" OUTPUTDIR ${OUTPUTDIR}) + + set(INPUT_FILENAME ${builtin}.builtin_kernel) + + set(GENERATED_SPV_INPUT ${OUTPUTDIR}/${BASENAME}.spv) + set(OUTPUT_FILE_CPP + ${OUTPUTDIR}/${BASENAME}.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) + add_custom_command( + OUTPUT ${GENERATED_SPV_INPUT} + COMMAND ${cloc_cmd_prefix} -q -spv_only -file ${INPUT_FILENAME} -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 ${BINARY_OUTPUT}.gen --output ${OUTPUT_FILE_CPP} --array ${mode}_${BASENAME} --platform ${family_name_with_type} --revision_id ${REVISION_ID} + COMMAND $ --file ${GENERATED_SPV_INPUT} --output ${OUTPUT_FILE_CPP} --array ${BASENAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS ${OUTPUT_FILES_BINARIES} $ + DEPENDS ${GENERATED_SPV_INPUT} $ ) - endforeach() - set(BUILTINS_COMMANDS ${BUILTINS_COMMANDS} PARENT_SCOPE) -endfunction() + 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=$ $) + macro(macro_for_each_gen) + foreach(PLATFORM_TYPE ${PLATFORM_TYPES}) + if(${GEN_TYPE}_HAS_${PLATFORM_TYPE}) + unset(IMAGE_SUPPORT) + GEN_CONTAINS_PLATFORMS("SUPPORTED_IMAGES" ${GEN_TYPE} IMAGE_SUPPORT) + get_family_name_with_type(${GEN_TYPE} ${PLATFORM_TYPE}) + string(TOLOWER ${PLATFORM_TYPE} PLATFORM_TYPE_LOWER) + get_bits_for_stateless(${GEN_TYPE} ${PLATFORM_TYPE}) + set(target_name builtins_${family_name_with_type}) + add_custom_target(${target_name}) + add_dependencies(builtins ${target_name}) + set_target_properties(${target_name} PROPERTIES FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUIILINS_PROJECTS_FOLDER}/${family_name_with_type}") + foreach(MODE ${BIND_MODES}) + unset(BUILTINS_COMMANDS) + foreach(GENERATED_BUILTIN ${GENERATED_BUILTINS}) + compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}" ${MODE}) + endforeach() + foreach(GENERATED_BUILTIN_STATELESS ${GENERATED_BUILTINS_STATELESS}) + compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_STATELESS}.builtin_kernel ${BITS} "${BUILTIN_OPTIONS_STATELESS}" ${MODE}) + endforeach() + if(${IMAGE_SUPPORT}) + foreach(GENERATED_BUILTINS_IMAGES ${GENERATED_BUILTINS_IMAGES}) + compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTINS_IMAGES}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}" ${MODE}) + endforeach() + foreach(GENERATED_BUILTIN_IMAGES_STATELESS ${GENERATED_BUILTINS_IMAGES_STATELESS}) + compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_IMAGES_STATELESS}.builtin_kernel ${BITS} "${BUILTIN_OPTIONS_STATELESS}" ${MODE}) + endforeach() + endif() + get_property(GENERATED_BUILTINS_CPPS_${MODE} GLOBAL PROPERTY GENERATED_BUILTINS_CPPS_${MODE}) + foreach(BUILTIN ${BUILTINS_COMMANDS}) + list(APPEND GENERATED_BUILTINS_CPPS_${MODE} ${BUILTIN}) + endforeach() + set_property(GLOBAL PROPERTY GENERATED_BUILTINS_CPPS_${MODE} ${GENERATED_BUILTINS_CPPS_${MODE}}) + add_custom_target(${target_name}_${MODE} DEPENDS ${BUILTINS_COMMANDS}) + add_dependencies(${target_name} ${target_name}_${MODE}) + set_target_properties(${target_name}_${MODE} PROPERTIES FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUIILINS_PROJECTS_FOLDER}/${family_name_with_type}") + endforeach() endif() - endif() - endif() + endforeach() + endmacro() - get_filename_component(BASENAME ${builtin} NAME_WE) - get_filename_component(DIR ${builtin} DIRECTORY) - - set(OUTPUTDIR "${BUILTINS_OUTDIR_WITH_ARCH}/spirv/${DIR}") - string(REPLACE "//" "/" OUTPUTDIR ${OUTPUTDIR}) - - set(INPUT_FILENAME ${builtin}.builtin_kernel) - - set(GENERATED_SPV_INPUT ${OUTPUTDIR}/${BASENAME}.spv) - set(OUTPUT_FILE_CPP - ${OUTPUTDIR}/${BASENAME}.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) - add_custom_command( - OUTPUT ${GENERATED_SPV_INPUT} - COMMAND ${cloc_cmd_prefix} -q -spv_only -file ${INPUT_FILENAME} -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} - 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}) - unset(IMAGE_SUPPORT) - GEN_CONTAINS_PLATFORMS("SUPPORTED_IMAGES" ${GEN_TYPE} IMAGE_SUPPORT) - get_family_name_with_type(${GEN_TYPE} ${PLATFORM_TYPE}) - string(TOLOWER ${PLATFORM_TYPE} PLATFORM_TYPE_LOWER) - get_bits_for_stateless(${GEN_TYPE} ${PLATFORM_TYPE}) - set(target_name builtins_${family_name_with_type}) - add_custom_target(${target_name}) - add_dependencies(builtins ${target_name}) - set_target_properties(${target_name} PROPERTIES FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUIILINS_PROJECTS_FOLDER}/${family_name_with_type}") - foreach(MODE ${BIND_MODES}) - unset(BUILTINS_COMMANDS) - foreach(GENERATED_BUILTIN ${GENERATED_BUILTINS}) - compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}" ${MODE}) - endforeach() - foreach(GENERATED_BUILTIN_STATELESS ${GENERATED_BUILTINS_STATELESS}) - compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_STATELESS}.builtin_kernel ${BITS} "${BUILTIN_OPTIONS_STATELESS}" ${MODE}) - endforeach() - if(${IMAGE_SUPPORT}) - foreach(GENERATED_BUILTINS_IMAGES ${GENERATED_BUILTINS_IMAGES}) - compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTINS_IMAGES}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}" ${MODE}) - endforeach() - foreach(GENERATED_BUILTIN_IMAGES_STATELESS ${GENERATED_BUILTINS_IMAGES_STATELESS}) - compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_IMAGES_STATELESS}.builtin_kernel ${BITS} "${BUILTIN_OPTIONS_STATELESS}" ${MODE}) - endforeach() - endif() - get_property(GENERATED_BUILTINS_CPPS_${MODE} GLOBAL PROPERTY GENERATED_BUILTINS_CPPS_${MODE}) - foreach(BUILTIN ${BUILTINS_COMMANDS}) - list(APPEND GENERATED_BUILTINS_CPPS_${MODE} ${BUILTIN}) - endforeach() - set_property(GLOBAL PROPERTY GENERATED_BUILTINS_CPPS_${MODE} ${GENERATED_BUILTINS_CPPS_${MODE}}) - add_custom_target(${target_name}_${MODE} DEPENDS ${BUILTINS_COMMANDS}) - add_dependencies(${target_name} ${target_name}_${MODE}) - set_target_properties(${target_name}_${MODE} PROPERTIES FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUIILINS_PROJECTS_FOLDER}/${family_name_with_type}") - endforeach() - endif() + file(MAKE_DIRECTORY "${BUILTINS_OUTDIR_WITH_ARCH}/spirv") + foreach(builtin ${GENERATED_BUILTINS}) + generate_cpp_spirv(${builtin}) endforeach() -endmacro() + foreach(builtin_images ${GENERATED_BUILTINS_IMAGES}) + generate_cpp_spirv(${builtin_images}) + endforeach() + foreach(builtin_stateless ${GENERATED_BUILTINS_STATELESS}) + generate_cpp_spirv(${builtin_stateless}) + endforeach() + foreach(builtin_images_stateless ${GENERATED_BUILTINS_IMAGES_STATELESS}) + generate_cpp_spirv(${builtin_images_stateless}) + endforeach() + add_library(${BUILTINS_SPIRV_LIB_NAME} OBJECT ${OUTPUT_LIST_CPP_FILES}) + set_target_properties(${BUILTINS_SPIRV_LIB_NAME} PROPERTIES + POSITION_INDEPENDENT_CODE ON + FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUIILINS_PROJECTS_FOLDER}" + ) -file(MAKE_DIRECTORY "${BUILTINS_OUTDIR_WITH_ARCH}/spirv") -foreach(builtin ${GENERATED_BUILTINS}) - generate_cpp_spirv(${builtin}) -endforeach() -foreach(builtin_images ${GENERATED_BUILTINS_IMAGES}) - generate_cpp_spirv(${builtin_images}) -endforeach() -foreach(builtin_stateless ${GENERATED_BUILTINS_STATELESS}) - generate_cpp_spirv(${builtin_stateless}) -endforeach() -foreach(builtin_images_stateless ${GENERATED_BUILTINS_IMAGES_STATELESS}) - generate_cpp_spirv(${builtin_images_stateless}) -endforeach() -add_library(${BUILTINS_SPIRV_LIB_NAME} OBJECT ${OUTPUT_LIST_CPP_FILES}) -set_target_properties(${BUILTINS_SPIRV_LIB_NAME} PROPERTIES - POSITION_INDEPENDENT_CODE ON - FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUIILINS_PROJECTS_FOLDER}" -) - -apply_macro_for_each_gen("SUPPORTED") + apply_macro_for_each_gen("SUPPORTED") +endif()