CMakeLists.txt 10.2 KB
Newer Older
1
include_directories(BEFORE
Chao Liu's avatar
Chao Liu committed
2
3
    ${PROJECT_SOURCE_DIR}/include
    ${PROJECT_SOURCE_DIR}/library/include
4
5
)

Chao Liu's avatar
Chao Liu committed
6
add_custom_target(examples)
7

8
9
10
11
12
13
14
15

# list of examples that are labelled as REGRESSION_EXAMPLE for make regression (runtime more than 30 seconds)
# all other tests are labelled as SMOKE_EXAMPLE
set(REGRESSION_EXAMPLES
    example_sparse_embedding3_forward_layernorm
)


16
17
18
19
20
21
function(add_example_dependencies EXAMPLE_NAME FILE_NAME)
    if(FILE_NAME)
        add_dependencies(EXAMPLE_NAME FILE_NAME)
    endif()
endfunction(add_example_dependencies EXAMPLE_NAME)

Anthony Chang's avatar
Anthony Chang committed
22
function(add_example_executable EXAMPLE_NAME FILE_NAME)
Chao Liu's avatar
Chao Liu committed
23
    message("adding example ${EXAMPLE_NAME}")
24
25
    set(result 1)
    if(DEFINED DTYPES)
Illia Silin's avatar
Illia Silin committed
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
        foreach(source IN LISTS FILE_NAME)
            set(test 0)
            if((source MATCHES "_fp16" OR source MATCHES "_f16") AND NOT "fp16" IN_LIST DTYPES)
                set(test 1)
            endif()
            if((source MATCHES "_fp32" OR source MATCHES "_f32") AND NOT "fp32" IN_LIST DTYPES)
                set(test 1)
            endif()
            if((source MATCHES "_fp64" OR source MATCHES "_f64") AND NOT "fp64" IN_LIST DTYPES)
                set(test 1)
            endif()
            if((source MATCHES "_fp8" OR source MATCHES "_f8") AND NOT "fp8" IN_LIST DTYPES)
                set(test 1)
            endif()
            if((source MATCHES "_bf8" OR source MATCHES "_bf8") AND NOT "bf8" IN_LIST DTYPES)
                set(test 1)
            endif()
            if((source MATCHES "_bf16" OR source MATCHES "_b16") AND NOT "bf16" IN_LIST DTYPES)
                set(test 1)
            endif()
            if((source MATCHES "_int8" OR source MATCHES "_i8") AND NOT "int8" IN_LIST DTYPES)
                set(test 1)
            endif()
            if(test EQUAL 1)
                message("removing example source file ${source} ")
                list(REMOVE_ITEM FILE_NAME "${source}")
            endif()
        endforeach()
54
    endif()
55

56
    set(EX_TARGETS ${SUPPORTED_GPU_TARGETS})
57

58
    #Do not build any DL examples if DL_KERNELS not set
59
60
61
62
63
64
    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()
65
    #Do not build any DPP examples if DPP_KERNELS not set
66
    foreach(source IN LISTS FILE_NAME)
67
        if(NOT DEFINED DPP_KERNELS AND source MATCHES "_dpp")
68
69
70
71
            message("removing dpp example ${source} ")
            list(REMOVE_ITEM FILE_NAME "${source}")
        endif()
    endforeach()
72
73
    #Do not build any XDL examples if gfx9 targets are not on the list
    foreach(source IN LISTS FILE_NAME)
74
        if(NOT EX_TARGETS MATCHES "gfx9" AND (source MATCHES "_xdl" OR source MATCHES "_mx"))
75
76
77
78
79
80
            message("removing xdl example ${source} ")
            list(REMOVE_ITEM FILE_NAME "${source}")
        endif()
    endforeach()
    #Do not build any WMMA examples if gfx11 targets are not on the list
    foreach(source IN LISTS FILE_NAME)
81
	if(NOT EX_TARGETS MATCHES "gfx11" AND NOT EX_TARGETS MATCHES "gfx12" AND source MATCHES "_wmma")
82
83
84
85
            message("removing wmma example ${source} ")
            list(REMOVE_ITEM FILE_NAME "${source}")
        endif()
    endforeach()
Illia Silin's avatar
Illia Silin committed
86
    #Do not build any microscaling examples if gfx950 target is not on the list
87
88
89
90
91
92
    # foreach(source IN LISTS FILE_NAME)
	# if(NOT EX_TARGETS MATCHES "gfx950" AND source MATCHES "_mx")
    #         message("removing microscaling example ${source} ")
    #         list(REMOVE_ITEM FILE_NAME "${source}")
    #     endif()
    # endforeach()
93
94
95
96
97
98
99
100
101
102
103
104
105
106
    #Do not build any FP8 examples if CK_ENABLE_FP8 not set
    foreach(source IN LISTS FILE_NAME)
        if(NOT DEFINED CK_ENABLE_FP8 AND source MATCHES "_fp8")
            message("removing fp8 example ${source} ")
            list(REMOVE_ITEM FILE_NAME "${source}")
        endif()
    endforeach()
    #Do not build any BF8 examples if CK_ENABLE_BF8 not set
    foreach(source IN LISTS FILE_NAME)
        if(NOT DEFINED CK_ENABLE_BF8 AND source MATCHES "_bf8")
            message("removing bf8 example ${source} ")
            list(REMOVE_ITEM FILE_NAME "${source}")
        endif()
    endforeach()
107
108
    #only continue if there are some source files left on the list
    if(FILE_NAME)
109
        if(FILE_NAME MATCHES "_xdl")
110
            list(REMOVE_ITEM EX_TARGETS gfx900 gfx906 gfx906:xnack- gfx1030 gfx1100 gfx1101 gfx1102 gfx1103 gfx1200 gfx1201 gfx10.3-generic gfx11-generic gfx12-generic)
111
112
        elseif(FILE_NAME MATCHES "_mx")
            list(REMOVE_ITEM EX_TARGETS gfx900 gfx906 gfx906:xnack- gfx1030 gfx1100 gfx1101 gfx1102 gfx1103 gfx1200 gfx1201 gfx10.3-generic gfx11-generic gfx12-generic)
113
        elseif(FILE_NAME MATCHES "_wmma")
Illia Silin's avatar
Illia Silin committed
114
            list(REMOVE_ITEM EX_TARGETS gfx900 gfx906 gfx906:xnack- gfx908:xnack+ gfx908:xnack- gfx90a:xnack+ gfx90a:xnack- gfx908 gfx90a gfx940 gfx941 gfx942 gfx1030 gfx950)
115
116
        # elseif(FILE_NAME MATCHES "_mx") #only build mx example for gfx950
        #     list(REMOVE_ITEM EX_TARGETS gfx900 gfx906 gfx906:xnack- gfx908:xnack+ gfx908:xnack- gfx90a:xnack+ gfx90a:xnack- gfx908 gfx90a gfx940 gfx941 gfx942 gfx1030 gfx1100 gfx1101 gfx1102 gfx1103 gfx1200 gfx1201 gfx10.3-generic gfx11-generic gfx12-generic)
117
118
        endif()
        set_source_files_properties(${FILE_NAME} PROPERTIES LANGUAGE HIP)
119
120
121
        add_executable(${EXAMPLE_NAME} ${FILE_NAME})
        target_link_libraries(${EXAMPLE_NAME} PRIVATE utility)
        add_test(NAME ${EXAMPLE_NAME} COMMAND $<TARGET_FILE:${EXAMPLE_NAME}> ${ARGN})
122
        set_property(TARGET ${EXAMPLE_NAME} PROPERTY HIP_ARCHITECTURES ${EX_TARGETS} )
123
124
125
126
127
128
        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}")
129
130
131
132
133
134
135
136
137
    if(result EQUAL 0 AND NOT "${EXAMPLE_NAME}" IN_LIST REGRESSION_EXAMPLES)
        #message("adding to SMOKE EXAMPLE FILTER ${EXAMPLE_NAME}")
        set_tests_properties(${EXAMPLE_NAME} PROPERTIES LABELS "SMOKE_TEST")
        add_dependencies(smoke ${EXAMPLE_NAME})
    elseif(result EQUAL 0 AND "${EXAMPLE_NAME}" IN_LIST REGRESSION_EXAMPLES)
        #message("Adding to REGRESSION EXAMPLE FILTER ${EXAMPLE_NAME}")
        set_tests_properties(${EXAMPLE_NAME} PROPERTIES LABELS "REGRESSION_TEST")
        add_dependencies(regression ${EXAMPLE_NAME})
    endif()
138
    set(result ${result} PARENT_SCOPE)
Anthony Chang's avatar
Anthony Chang committed
139
140
endfunction(add_example_executable EXAMPLE_NAME)

141
142
143
144
145
146
function(add_example_dependencies EXAMPLE_NAME FILE_NAME)
    if(result EQUAL 0)
        add_dependencies(${EXAMPLE_NAME} ${FILE_NAME})
    endif()
endfunction(add_example_dependencies EXAMPLE_NAME)

Anthony Chang's avatar
Anthony Chang committed
147
148
function(add_example_executable_no_testing EXAMPLE_NAME FILE_NAME)
    message("adding example ${EXAMPLE_NAME}")
149
150
151
152
    set(result 1)
    if(DEFINED DTYPES)
    foreach(source IN LISTS FILE_NAME)
        set(test 0)
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
        if((source MATCHES "_fp16" OR source MATCHES "_f16") AND NOT "fp16" IN_LIST DTYPES)
            set(test 1)
        endif()
        if((source MATCHES "_fp32" OR source MATCHES "_f32") AND NOT "fp32" IN_LIST DTYPES)
            set(test 1)
        endif()
        if((source MATCHES "_fp64" OR source MATCHES "_f64") AND NOT "fp64" IN_LIST DTYPES)
            set(test 1)
        endif()
        if((source MATCHES "_fp8" OR source MATCHES "_f8") AND NOT "fp8" IN_LIST DTYPES)
            set(test 1)
        endif()
        if((source MATCHES "_bf8" OR source MATCHES "_bf8") AND NOT "bf8" IN_LIST DTYPES)
            set(test 1)
        endif()
        if((source MATCHES "_bf16" OR source MATCHES "_b16") AND NOT "bf16" IN_LIST DTYPES)
            set(test 1)
        endif()
        if((source MATCHES "_int8" OR source MATCHES "_i8") AND NOT "int8" IN_LIST DTYPES)
            set(test 1)
        endif()
174
175
176
        if(test EQUAL 1)
            message("removing example ${source} ")
            list(REMOVE_ITEM FILE_NAME "${source}")
177
        endif()
178
179
    endforeach()
    endif()
180

181
182
    set(EX_TARGETS ${SUPPORTED_GPU_TARGETS})

183
    #Do not build any DL examples if DL_KERNELS not set
184
185
186
187
188
189
    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()
190
191
    #Do not build any XDL examples if gfx9 targets are not on the list
    foreach(source IN LISTS FILE_NAME)
192
        if(NOT EX_TARGETS MATCHES "gfx9" AND source MATCHES "_xdl")
193
194
195
196
197
198
            message("removing xdl example ${source} ")
            list(REMOVE_ITEM FILE_NAME "${source}")
        endif()
    endforeach()
    #Do not build any WMMA examples if gfx11 targets are not on the list
    foreach(source IN LISTS FILE_NAME)
199
	if(NOT EX_TARGETS MATCHES "gfx11" AND NOT EX_TARGETS MATCHES "gfx12" AND source MATCHES "_wmma")
200
201
202
203
            message("removing wmma example ${source} ")
            list(REMOVE_ITEM FILE_NAME "${source}")
        endif()
    endforeach()
204
205
    #only continue if there are some source files left on the list
    if(FILE_NAME)
206
        if(FILE_NAME MATCHES "_xdl")
207
            list(REMOVE_ITEM EX_TARGETS gfx900 gfx906 gfx906:xnack- gfx1030 gfx1100 gfx1101 gfx1102 gfx1103 gfx1200 gfx1201 gfx10.3-generic gfx11-generic gfx12-generic)
208
        elseif(FILE_NAME MATCHES "_wmma")
Illia Silin's avatar
Illia Silin committed
209
            list(REMOVE_ITEM EX_TARGETS gfx900 gfx906 gfx906:xnack- gfx908:xnack+ gfx908:xnack- gfx90a:xnack+ gfx90a:xnack- gfx908 gfx90a gfx940 gfx941 gfx942 gfx1030 gfx950)
210
211
        endif()
        set_source_files_properties(${FILE_NAME} PROPERTIES LANGUAGE HIP)
212
213
214
        add_executable(${EXAMPLE_NAME} ${FILE_NAME})
        target_link_libraries(${EXAMPLE_NAME} PRIVATE utility)
        add_dependencies(examples ${EXAMPLE_NAME})
215
        set_property(TARGET ${EXAMPLE_NAME} PROPERTY HIP_ARCHITECTURES ${EX_TARGETS} )
216
217
218
        rocm_install(TARGETS ${EXAMPLE_NAME} COMPONENT examples)
        set(result 0)
    endif()
219
    
220
    #message("add_example returns ${result}")
221
    set(result ${result} PARENT_SCOPE)
222

rocking5566's avatar
rocking5566 committed
223
endfunction(add_example_executable_no_testing EXAMPLE_NAME)
224

Shaojie WANG's avatar
Shaojie WANG committed
225
226
227
# add all example subdir
file(GLOB dir_list LIST_DIRECTORIES true *)
FOREACH(subdir ${dir_list})
Ruturaj Vaidya's avatar
Ruturaj Vaidya committed
228
    if(IS_DIRECTORY "${subdir}" AND EXISTS "${subdir}/CMakeLists.txt")
Shaojie WANG's avatar
Shaojie WANG committed
229
230
231
        add_subdirectory(${subdir})
    ENDIF()
ENDFOREACH()