include_directories(BEFORE ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/library/include ) add_custom_target(examples) function(add_example_executable EXAMPLE_NAME FILE_NAME) message("adding example ${EXAMPLE_NAME}") set(result 1) if(DEFINED DTYPES) foreach(source IN LISTS FILE_NAME) set(test 0) foreach(type IN LISTS DTYPES) if(type MATCHES "fp16") set(type1 "_f16") elseif(type MATCHES "fp32") set(type1 "_f32") elseif(type MATCHES "fp8") set(type1 "_f8") elseif(type MATCHES "bf16") set(type1 "_b16") elseif(type MATCHES "fp64") set(type1 "_f64") elseif(type MATCHES "int8") set(type1 "_i8") endif() if("${source}" MATCHES "${type}" OR "${source}" MATCHES "${type1}") #if filename matches any selected type, exit type loop and do no exclude the file from the list set(test 0) break() elseif((source MATCHES "fp8" OR source MATCHES "fp32" OR source MATCHES "fp64" OR source MATCHES "bf16" OR source MATCHES "int8" OR source MATCHES "fp16" OR source MATCHES "_f8" OR source MATCHES "_f32" OR source MATCHES "_f64" OR source MATCHES "_i8" OR source MATCHES "_f16" OR source MATCHES "_b16") AND NOT(source MATCHES type OR source MATCHES type1)) #if filename contains a type which doesn't match any selected type, mark it for removal set(test 1) endif() endforeach() if(test EQUAL 1) message("removing example source file ${source} ") list(REMOVE_ITEM FILE_NAME "${source}") endif() endforeach() endif() foreach(source IN LISTS FILE_NAME) if(NOT DEFINED DL_KERNELS AND source MATCHES "_dl") message("removing dl example ${source} ") list(REMOVE_ITEM FILE_NAME "${source}") endif() endforeach() #only continue if there are some source files left on the list if(FILE_NAME) add_executable(${EXAMPLE_NAME} ${FILE_NAME}) target_link_libraries(${EXAMPLE_NAME} PRIVATE utility) add_test(NAME ${EXAMPLE_NAME} COMMAND $ ${ARGN}) add_dependencies(examples ${EXAMPLE_NAME}) add_dependencies(check ${EXAMPLE_NAME}) rocm_install(TARGETS ${EXAMPLE_NAME} COMPONENT examples) set(result 0) endif() #message("add_example returns ${result}") set(result ${result} PARENT_SCOPE) endfunction(add_example_executable EXAMPLE_NAME) function(add_example_executable_no_testing EXAMPLE_NAME FILE_NAME) message("adding example ${EXAMPLE_NAME}") set(result 1) if(DEFINED DTYPES) foreach(source IN LISTS FILE_NAME) set(test 0) foreach(type IN LISTS DTYPES) if(type MATCHES "fp16") set(type1 "_f16") elseif(type MATCHES "fp32") set(type1 "_f32") elseif(type MATCHES "fp8") set(type1 "_f8") elseif(type MATCHES "bf16") set(type1 "_b16") elseif(type MATCHES "fp64") set(type1 "_f64") elseif(type MATCHES "int8") set(type1 "_i8") endif() if("${source}" MATCHES "${type}" OR "${source}" MATCHES "${type1}") #if filename matches any selected type, exit type loop and do no exclude the file from the list set(test 0) break() elseif((source MATCHES "fp8" OR source MATCHES "fp32" OR source MATCHES "fp64" OR source MATCHES "bf16" OR source MATCHES "int8" OR source MATCHES "fp16" OR source MATCHES "_f8" OR source MATCHES "_f32" OR source MATCHES "_f64" OR source MATCHES "_i8" OR source MATCHES "_f16" OR source MATCHES "_b16") AND NOT(source MATCHES type OR source MATCHES type1)) #if filename contains a type which doesn't match any selected type, mark it for removal set(test 1) endif() endforeach() if(test EQUAL 1) message("removing example ${source} ") list(REMOVE_ITEM FILE_NAME "${source}") endif() endforeach() endif() foreach(source IN LISTS FILE_NAME) if(NOT DEFINED DL_KERNELS AND source MATCHES "_dl") message("removing dl example ${source} ") list(REMOVE_ITEM FILE_NAME "${source}") endif() endforeach() #only continue if there are some source files left on the list if(FILE_NAME) add_executable(${EXAMPLE_NAME} ${FILE_NAME}) target_link_libraries(${EXAMPLE_NAME} PRIVATE utility) add_dependencies(examples ${EXAMPLE_NAME}) rocm_install(TARGETS ${EXAMPLE_NAME} COMPONENT examples) set(result 0) endif() #message("add_example returns ${result}") set(result ${result} PARENT_SCOPE) endfunction(add_example_executable_no_testing EXAMPLE_NAME) # add all example subdir file(GLOB dir_list LIST_DIRECTORIES true *) FOREACH(subdir ${dir_list}) IF(IS_DIRECTORY "${subdir}") add_subdirectory(${subdir}) ENDIF() ENDFOREACH()