xref: /aosp_15_r20/external/intel-media-driver/media_driver/agnostic/media_srcs.cmake (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1*ba62d9d3SAndroid Build Coastguard Worker# Copyright (c) 2017-2021, Intel Corporation
2*ba62d9d3SAndroid Build Coastguard Worker#
3*ba62d9d3SAndroid Build Coastguard Worker# Permission is hereby granted, free of charge, to any person obtaining a
4*ba62d9d3SAndroid Build Coastguard Worker# copy of this software and associated documentation files (the "Software"),
5*ba62d9d3SAndroid Build Coastguard Worker# to deal in the Software without restriction, including without limitation
6*ba62d9d3SAndroid Build Coastguard Worker# the rights to use, copy, modify, merge, publish, distribute, sublicense,
7*ba62d9d3SAndroid Build Coastguard Worker# and/or sell copies of the Software, and to permit persons to whom the
8*ba62d9d3SAndroid Build Coastguard Worker# Software is furnished to do so, subject to the following conditions:
9*ba62d9d3SAndroid Build Coastguard Worker#
10*ba62d9d3SAndroid Build Coastguard Worker# The above copyright notice and this permission notice shall be included
11*ba62d9d3SAndroid Build Coastguard Worker# in all copies or substantial portions of the Software.
12*ba62d9d3SAndroid Build Coastguard Worker#
13*ba62d9d3SAndroid Build Coastguard Worker# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
14*ba62d9d3SAndroid Build Coastguard Worker# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15*ba62d9d3SAndroid Build Coastguard Worker# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16*ba62d9d3SAndroid Build Coastguard Worker# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
17*ba62d9d3SAndroid Build Coastguard Worker# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
18*ba62d9d3SAndroid Build Coastguard Worker# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
19*ba62d9d3SAndroid Build Coastguard Worker# OTHER DEALINGS IN THE SOFTWARE.
20*ba62d9d3SAndroid Build Coastguard Worker
21*ba62d9d3SAndroid Build Coastguard Workerif (BUILD_KERNELS)
22*ba62d9d3SAndroid Build Coastguard Worker    # Here we define build steps to generate c-array binary shaders (kernels)
23*ba62d9d3SAndroid Build Coastguard Worker    # and their header files. If you don't use BUILD_KERNELS option these
24*ba62d9d3SAndroid Build Coastguard Worker    # kernels will just be used from pre-built form. If you will regenerate
25*ba62d9d3SAndroid Build Coastguard Worker    # kernels you may notice the difference from the per-built kernels in git-diff.
26*ba62d9d3SAndroid Build Coastguard Worker
27*ba62d9d3SAndroid Build Coastguard Worker    function(platform_to_genx platform genx kind)
28*ba62d9d3SAndroid Build Coastguard Worker        if(platform STREQUAL "gen11")
29*ba62d9d3SAndroid Build Coastguard Worker            set(genx "11" PARENT_SCOPE)
30*ba62d9d3SAndroid Build Coastguard Worker            set(kind "" PARENT_SCOPE)
31*ba62d9d3SAndroid Build Coastguard Worker        elseif(platform STREQUAL "gen11_icllp")
32*ba62d9d3SAndroid Build Coastguard Worker            set(genx "11" PARENT_SCOPE)
33*ba62d9d3SAndroid Build Coastguard Worker            set(kind "icllp" PARENT_SCOPE)
34*ba62d9d3SAndroid Build Coastguard Worker        elseif(platform STREQUAL "gen12_tgllp")
35*ba62d9d3SAndroid Build Coastguard Worker            set(genx "12" PARENT_SCOPE)
36*ba62d9d3SAndroid Build Coastguard Worker            set(kind "tgllp" PARENT_SCOPE)
37*ba62d9d3SAndroid Build Coastguard Worker        endif()
38*ba62d9d3SAndroid Build Coastguard Worker    endfunction()
39*ba62d9d3SAndroid Build Coastguard Worker
40*ba62d9d3SAndroid Build Coastguard Worker
41*ba62d9d3SAndroid Build Coastguard Worker
42*ba62d9d3SAndroid Build Coastguard Worker    # This function describes object files generated by cmc from the given input cm-file.
43*ba62d9d3SAndroid Build Coastguard Worker    # If cm-file has changed, it may be required to adjust this function.
44*ba62d9d3SAndroid Build Coastguard Worker    function(get_cm_dat_objs file objs)
45*ba62d9d3SAndroid Build Coastguard Worker        get_filename_component(name ${src} NAME)
46*ba62d9d3SAndroid Build Coastguard Worker        if(name STREQUAL "downscale_kernel_genx.cpp")
47*ba62d9d3SAndroid Build Coastguard Worker            set(objs
48*ba62d9d3SAndroid Build Coastguard Worker                downscale_kernel_genx_0.dat
49*ba62d9d3SAndroid Build Coastguard Worker                downscale_kernel_genx_1.dat
50*ba62d9d3SAndroid Build Coastguard Worker                PARENT_SCOPE)
51*ba62d9d3SAndroid Build Coastguard Worker        elseif(name STREQUAL "hme_kernel_genx.cpp")
52*ba62d9d3SAndroid Build Coastguard Worker            set(objs
53*ba62d9d3SAndroid Build Coastguard Worker                hme_kernel_genx_0.dat
54*ba62d9d3SAndroid Build Coastguard Worker                hme_kernel_genx_1.dat
55*ba62d9d3SAndroid Build Coastguard Worker                hme_kernel_genx_2.dat
56*ba62d9d3SAndroid Build Coastguard Worker                PARENT_SCOPE)
57*ba62d9d3SAndroid Build Coastguard Worker        elseif(name STREQUAL "downscale_convert_kernel_genx.cpp")
58*ba62d9d3SAndroid Build Coastguard Worker            set(objs
59*ba62d9d3SAndroid Build Coastguard Worker                downscale_convert_kernel_genx_0.dat
60*ba62d9d3SAndroid Build Coastguard Worker                PARENT_SCOPE)
61*ba62d9d3SAndroid Build Coastguard Worker        else()
62*ba62d9d3SAndroid Build Coastguard Worker            set(objs "" PARENT_SCOPE)
63*ba62d9d3SAndroid Build Coastguard Worker        endif()
64*ba62d9d3SAndroid Build Coastguard Worker    endfunction()
65*ba62d9d3SAndroid Build Coastguard Worker
66*ba62d9d3SAndroid Build Coastguard Worker    # Function parses the given c-file and extracts the value from the defined macro.
67*ba62d9d3SAndroid Build Coastguard Worker    # Parser expects the first occurence in the following format:
68*ba62d9d3SAndroid Build Coastguard Worker    #   "#define name xxx" - whitespaces are important!!
69*ba62d9d3SAndroid Build Coastguard Worker    function(get_c_macro_int file name value)
70*ba62d9d3SAndroid Build Coastguard Worker        file(STRINGS ${file} value_str REGEX "#define ${name}" LIMIT_COUNT 1)
71*ba62d9d3SAndroid Build Coastguard Worker        if(value_str STREQUAL "") # old style version
72*ba62d9d3SAndroid Build Coastguard Worker            message(FATAL_ERROR "Failed to find macro ${name} in the file: ${file}")
73*ba62d9d3SAndroid Build Coastguard Worker        endif()
74*ba62d9d3SAndroid Build Coastguard Worker        string(REPLACE "#define ${name} " "" value_str ${value_str})
75*ba62d9d3SAndroid Build Coastguard Worker        set(${value} ${value_str} PARENT_SCOPE)
76*ba62d9d3SAndroid Build Coastguard Worker    endfunction()
77*ba62d9d3SAndroid Build Coastguard Worker
78*ba62d9d3SAndroid Build Coastguard Worker    # Function generates kernel for the specified platform. It assumes that generated
79*ba62d9d3SAndroid Build Coastguard Worker    # kernel should be placed in the certain directory (see ${krn_dir}).
80*ba62d9d3SAndroid Build Coastguard Worker    function(gen_kernel_from_cm name platform index sources)
81*ba62d9d3SAndroid Build Coastguard Worker        platform_to_genx(${platform} genx kind)
82*ba62d9d3SAndroid Build Coastguard Worker
83*ba62d9d3SAndroid Build Coastguard Worker        set(krn ig${name}krn_g${genx})
84*ba62d9d3SAndroid Build Coastguard Worker        set(krn_dir ${CMAKE_SOURCE_DIR}/media_driver/agnostic/${platform}/codec/kernel_free)
85*ba62d9d3SAndroid Build Coastguard Worker        set(out_dir "${CMAKE_CURRENT_BINARY_DIR}/kernels/codec/${platform}")
86*ba62d9d3SAndroid Build Coastguard Worker
87*ba62d9d3SAndroid Build Coastguard Worker        message("krn: ${krn}")
88*ba62d9d3SAndroid Build Coastguard Worker        message("krn_dir: ${krn_dir}")
89*ba62d9d3SAndroid Build Coastguard Worker        message("out_dir: ${out_dir}")
90*ba62d9d3SAndroid Build Coastguard Worker
91*ba62d9d3SAndroid Build Coastguard Worker        add_custom_command(
92*ba62d9d3SAndroid Build Coastguard Worker            OUTPUT ${out_dir}
93*ba62d9d3SAndroid Build Coastguard Worker            COMMAND ${CMAKE_COMMAND} -E make_directory ${out_dir}
94*ba62d9d3SAndroid Build Coastguard Worker            COMMENT "Create codec kernels output directory: ${out_dir}")
95*ba62d9d3SAndroid Build Coastguard Worker
96*ba62d9d3SAndroid Build Coastguard Worker        # Compiling all the given sources
97*ba62d9d3SAndroid Build Coastguard Worker        set(dats "")
98*ba62d9d3SAndroid Build Coastguard Worker        set(cm_genx ${platform})
99*ba62d9d3SAndroid Build Coastguard Worker        if(cm_genx STREQUAL "gen11")
100*ba62d9d3SAndroid Build Coastguard Worker            # Forcing gen11lp platform for the whole gen11 family since LP instruction set
101*ba62d9d3SAndroid Build Coastguard Worker            # is a subset of other platforms in the family.
102*ba62d9d3SAndroid Build Coastguard Worker            set(cm_genx "gen11lp")
103*ba62d9d3SAndroid Build Coastguard Worker        endif()
104*ba62d9d3SAndroid Build Coastguard Worker        foreach(src ${sources})
105*ba62d9d3SAndroid Build Coastguard Worker            get_cm_dat_objs(${src} objs) # there are other otputs from cmc command, but we use only .dat
106*ba62d9d3SAndroid Build Coastguard Worker            add_custom_command(
107*ba62d9d3SAndroid Build Coastguard Worker                OUTPUT ${objs}
108*ba62d9d3SAndroid Build Coastguard Worker                DEPENDS ${out_dir} ${src}
109*ba62d9d3SAndroid Build Coastguard Worker                WORKING_DIRECTORY ${out_dir}
110*ba62d9d3SAndroid Build Coastguard Worker                COMMAND ${CMC}
111*ba62d9d3SAndroid Build Coastguard Worker                    -c -Qxcm -Qxcm_jit_target=${cm_genx}
112*ba62d9d3SAndroid Build Coastguard Worker                    -mCM_emit_common_isa -mCM_no_input_reorder -mCM_jit_option="-nocompaction"
113*ba62d9d3SAndroid Build Coastguard Worker                    ${src}
114*ba62d9d3SAndroid Build Coastguard Worker                COMMENT "Compiling ${src}..."
115*ba62d9d3SAndroid Build Coastguard Worker            )
116*ba62d9d3SAndroid Build Coastguard Worker            set(dats ${dats} ${objs})
117*ba62d9d3SAndroid Build Coastguard Worker        endforeach()
118*ba62d9d3SAndroid Build Coastguard Worker
119*ba62d9d3SAndroid Build Coastguard Worker        # Generating source from the .krn file
120*ba62d9d3SAndroid Build Coastguard Worker        get_c_macro_int(${CMAKE_CURRENT_LIST_DIR}/common/codec/kernel/codeckrnheader.h
121*ba62d9d3SAndroid Build Coastguard Worker            "IDR_CODEC_TOTAL_NUM_KERNELS" IDR_CODEC_TOTAL_NUM_KERNELS)
122*ba62d9d3SAndroid Build Coastguard Worker        add_custom_command(
123*ba62d9d3SAndroid Build Coastguard Worker            OUTPUT ${krn_dir}/${krn}.c ${krn_dir}/${krn}.h
124*ba62d9d3SAndroid Build Coastguard Worker            DEPENDS KernelBinToSource ${CMAKE_CURRENT_LIST_DIR}/common/codec/kernel/merge.py ${dats}
125*ba62d9d3SAndroid Build Coastguard Worker            WORKING_DIRECTORY ${out_dir}
126*ba62d9d3SAndroid Build Coastguard Worker            COMMAND ${PYTHON} ${CMAKE_CURRENT_LIST_DIR}/common/codec/kernel/merge.py -o ${krn}.krn ${dats}
127*ba62d9d3SAndroid Build Coastguard Worker            # ${index} is needed to match a description in the following file:
128*ba62d9d3SAndroid Build Coastguard Worker            #   media_driver/agnostic/common/codec/kernel/codeckrnheader.h
129*ba62d9d3SAndroid Build Coastguard Worker            COMMAND KernelBinToSource -i ${krn}.krn -o ${krn_dir}/ -v ${krn} -index ${index} -t ${IDR_CODEC_TOTAL_NUM_KERNELS}
130*ba62d9d3SAndroid Build Coastguard Worker            COMMENT "Generate source file from krn")
131*ba62d9d3SAndroid Build Coastguard Worker    endfunction()
132*ba62d9d3SAndroid Build Coastguard Worker
133*ba62d9d3SAndroid Build Coastguard Worker    # Function generates vp cmfc kernel for the specified platform. It assumes that generated
134*ba62d9d3SAndroid Build Coastguard Worker    # kernel should be placed in the certain directory (see ${krn_dir}).
135*ba62d9d3SAndroid Build Coastguard Worker    function(gen_vpkernel_from_cm name platform)
136*ba62d9d3SAndroid Build Coastguard Worker        platform_to_genx(${platform} genx kind)
137*ba62d9d3SAndroid Build Coastguard Worker
138*ba62d9d3SAndroid Build Coastguard Worker        set(krn ig${name}krn_g${genx}_${kind}_cmfc)
139*ba62d9d3SAndroid Build Coastguard Worker        set(krnpatch ig${name}krn_g${genx}_${kind}_cmfcpatch)
140*ba62d9d3SAndroid Build Coastguard Worker        set(krn_dir ${CMAKE_SOURCE_DIR}/media_driver/agnostic/${platform}/vp/kernel_free)
141*ba62d9d3SAndroid Build Coastguard Worker        set(link_file ${krn_dir}/component_release/LinkFile.txt)
142*ba62d9d3SAndroid Build Coastguard Worker        set(out_dir ${CMAKE_SOURCE_DIR}/media_driver/agnostic/${platform}/vp/kernel_free/cache_kernel)
143*ba62d9d3SAndroid Build Coastguard Worker        set(kernel_dir ${out_dir}/kernel)
144*ba62d9d3SAndroid Build Coastguard Worker        set(patch_dir ${out_dir}/fcpatch)
145*ba62d9d3SAndroid Build Coastguard Worker        set(kernel_hex_dir ${kernel_dir}/hex)
146*ba62d9d3SAndroid Build Coastguard Worker        set(patch_hex_dir ${patch_dir}/hex)
147*ba62d9d3SAndroid Build Coastguard Worker        set(krn_header ${CMAKE_CURRENT_LIST_DIR}/common/vp/kernel/${name}krnheader.h)
148*ba62d9d3SAndroid Build Coastguard Worker
149*ba62d9d3SAndroid Build Coastguard Worker        add_custom_command(
150*ba62d9d3SAndroid Build Coastguard Worker            OUTPUT ${out_dir} ${kernel_dir} ${patch_dir} ${kernel_hex_dir} ${patch_hex_dir}
151*ba62d9d3SAndroid Build Coastguard Worker            COMMAND ${CMAKE_COMMAND} -E make_directory ${out_dir}
152*ba62d9d3SAndroid Build Coastguard Worker            COMMAND ${CMAKE_COMMAND} -E make_directory ${kernel_dir}
153*ba62d9d3SAndroid Build Coastguard Worker            COMMAND ${CMAKE_COMMAND} -E make_directory ${patch_dir}
154*ba62d9d3SAndroid Build Coastguard Worker            COMMAND ${CMAKE_COMMAND} -E make_directory ${kernel_hex_dir}
155*ba62d9d3SAndroid Build Coastguard Worker            COMMAND ${CMAKE_COMMAND} -E make_directory ${patch_hex_dir}
156*ba62d9d3SAndroid Build Coastguard Worker            COMMENT "Creating VP cmfc kernels output directory")
157*ba62d9d3SAndroid Build Coastguard Worker
158*ba62d9d3SAndroid Build Coastguard Worker        # Compiling all the sources in the kernel source directory.
159*ba62d9d3SAndroid Build Coastguard Worker        file(GLOB_RECURSE srcs ${krn_dir}/Source/*.cpp)
160*ba62d9d3SAndroid Build Coastguard Worker
161*ba62d9d3SAndroid Build Coastguard Worker        set(objsname "")
162*ba62d9d3SAndroid Build Coastguard Worker        set(cm_genx ${kind})
163*ba62d9d3SAndroid Build Coastguard Worker
164*ba62d9d3SAndroid Build Coastguard Worker        foreach(src ${srcs})
165*ba62d9d3SAndroid Build Coastguard Worker            get_filename_component(obj ${src} NAME_WE) # there are other outputs from cmc command, but we use only .dat and .fcpatch
166*ba62d9d3SAndroid Build Coastguard Worker            if(obj STREQUAL "EOT" OR obj STREQUAL "Secure_Block_Copy") # "EOT" and "Secure_Block_Copy" don't generate the related .fcpatch file.
167*ba62d9d3SAndroid Build Coastguard Worker            add_custom_command(
168*ba62d9d3SAndroid Build Coastguard Worker                OUTPUT ${out_dir}/${obj}_0.dat
169*ba62d9d3SAndroid Build Coastguard Worker                DEPENDS ${src} ${out_dir}
170*ba62d9d3SAndroid Build Coastguard Worker                WORKING_DIRECTORY ${out_dir}
171*ba62d9d3SAndroid Build Coastguard Worker                COMMAND ${CMC}
172*ba62d9d3SAndroid Build Coastguard Worker                    -c -Qxcm -Qxcm_jit_target=${cm_genx} -I ${krn_dir}/Source/ -I ${krn_dir}/Source/Common -I ${krn_dir}/Source/Components
173*ba62d9d3SAndroid Build Coastguard Worker                    -I ${krn_dir}/Source/Core_Kernels -Qxcm_jit_option="-nocompaction" -mCM_emit_common_isa -mCM_no_input_reorder -mCM_unique_labels=MDF_FC -mCM_printregusage
174*ba62d9d3SAndroid Build Coastguard Worker                    ${src})
175*ba62d9d3SAndroid Build Coastguard Worker            else()
176*ba62d9d3SAndroid Build Coastguard Worker            add_custom_command(
177*ba62d9d3SAndroid Build Coastguard Worker                OUTPUT ${out_dir}/${obj}_0.dat ${out_dir}/${obj}.fcpatch
178*ba62d9d3SAndroid Build Coastguard Worker                DEPENDS ${src} ${out_dir}
179*ba62d9d3SAndroid Build Coastguard Worker                WORKING_DIRECTORY ${out_dir}
180*ba62d9d3SAndroid Build Coastguard Worker                COMMAND ${CMC}
181*ba62d9d3SAndroid Build Coastguard Worker                    -c -Qxcm -Qxcm_jit_target=${cm_genx} -I ${krn_dir}/Source/ -I ${krn_dir}/Source/Common -I ${krn_dir}/Source/Components
182*ba62d9d3SAndroid Build Coastguard Worker                    -I ${krn_dir}/Source/Core_Kernels -Qxcm_jit_option="-nocompaction" -mCM_emit_common_isa -mCM_no_input_reorder -mCM_unique_labels=MDF_FC -mCM_printregusage
183*ba62d9d3SAndroid Build Coastguard Worker                    ${src})
184*ba62d9d3SAndroid Build Coastguard Worker            endif()
185*ba62d9d3SAndroid Build Coastguard Worker            set(objsname ${objsname} ${obj})
186*ba62d9d3SAndroid Build Coastguard Worker        endforeach()
187*ba62d9d3SAndroid Build Coastguard Worker
188*ba62d9d3SAndroid Build Coastguard Worker        #Generate the .hex files from the .dat files by using KrnToHex.
189*ba62d9d3SAndroid Build Coastguard Worker        set(hexs "")
190*ba62d9d3SAndroid Build Coastguard Worker
191*ba62d9d3SAndroid Build Coastguard Worker         foreach(objname ${objsname})
192*ba62d9d3SAndroid Build Coastguard Worker            add_custom_command(
193*ba62d9d3SAndroid Build Coastguard Worker            OUTPUT ${kernel_dir}/${objname}.krn
194*ba62d9d3SAndroid Build Coastguard Worker            DEPENDS ${out_dir}/${objname}_0.dat ${kernel_dir}
195*ba62d9d3SAndroid Build Coastguard Worker            WORKING_DIRECTORY ${out_dir}
196*ba62d9d3SAndroid Build Coastguard Worker            COMMAND ${CMAKE_COMMAND} -E copy ${out_dir}/${objname}_0.dat ${kernel_dir}/${objname}.krn
197*ba62d9d3SAndroid Build Coastguard Worker            )
198*ba62d9d3SAndroid Build Coastguard Worker         endforeach()
199*ba62d9d3SAndroid Build Coastguard Worker
200*ba62d9d3SAndroid Build Coastguard Worker         foreach(objname ${objsname})
201*ba62d9d3SAndroid Build Coastguard Worker            add_custom_command(
202*ba62d9d3SAndroid Build Coastguard Worker            OUTPUT ${kernel_hex_dir}/${objname}.hex
203*ba62d9d3SAndroid Build Coastguard Worker            DEPENDS KrnToHex ${kernel_dir}/${objname}.krn ${kernel_hex_dir}
204*ba62d9d3SAndroid Build Coastguard Worker            WORKING_DIRECTORY ${kernel_dir}
205*ba62d9d3SAndroid Build Coastguard Worker            COMMAND KrnToHex ${kernel_dir}/${objname}.krn
206*ba62d9d3SAndroid Build Coastguard Worker            COMMAND ${CMAKE_COMMAND} -E copy ${kernel_dir}/${objname}.hex ${kernel_hex_dir}/${objname}.hex
207*ba62d9d3SAndroid Build Coastguard Worker            COMMAND ${CMAKE_COMMAND} -E remove ${kernel_dir}/${objname}.hex
208*ba62d9d3SAndroid Build Coastguard Worker            COMMENT "Generate the hex files of cmfc kernel")
209*ba62d9d3SAndroid Build Coastguard Worker            set(hexs ${hexs} ${kernel_hex_dir}/${objname}.hex)
210*ba62d9d3SAndroid Build Coastguard Worker         endforeach()
211*ba62d9d3SAndroid Build Coastguard Worker
212*ba62d9d3SAndroid Build Coastguard Worker         ##Generate the .hex files from the .fcpatch files by using KrnToHex.
213*ba62d9d3SAndroid Build Coastguard Worker
214*ba62d9d3SAndroid Build Coastguard Worker         list(REMOVE_ITEM objsname "EOT" "Secure_Block_Copy") # Remove "EOT" and "Secure_Block_Copy".
215*ba62d9d3SAndroid Build Coastguard Worker
216*ba62d9d3SAndroid Build Coastguard Worker         foreach(objname ${objsname})
217*ba62d9d3SAndroid Build Coastguard Worker            add_custom_command(
218*ba62d9d3SAndroid Build Coastguard Worker            OUTPUT ${patch_dir}/${objname}.krn
219*ba62d9d3SAndroid Build Coastguard Worker            DEPENDS ${out_dir}/${objname}.fcpatch ${patch_dir}
220*ba62d9d3SAndroid Build Coastguard Worker            WORKING_DIRECTORY ${out_dir}
221*ba62d9d3SAndroid Build Coastguard Worker            COMMAND ${CMAKE_COMMAND} -E copy ${out_dir}/${objname}.fcpatch ${patch_dir}/${objname}.krn
222*ba62d9d3SAndroid Build Coastguard Worker            )
223*ba62d9d3SAndroid Build Coastguard Worker         endforeach()
224*ba62d9d3SAndroid Build Coastguard Worker
225*ba62d9d3SAndroid Build Coastguard Worker         set(fcpatch_hexs "")
226*ba62d9d3SAndroid Build Coastguard Worker         foreach(objname ${objsname})
227*ba62d9d3SAndroid Build Coastguard Worker            add_custom_command(
228*ba62d9d3SAndroid Build Coastguard Worker            OUTPUT ${patch_hex_dir}/${objname}.hex
229*ba62d9d3SAndroid Build Coastguard Worker            DEPENDS KrnToHex ${patch_dir}/${objname}.krn ${patch_hex_dir}
230*ba62d9d3SAndroid Build Coastguard Worker            WORKING_DIRECTORY ${patch_dir}
231*ba62d9d3SAndroid Build Coastguard Worker            COMMAND KrnToHex ${patch_dir}/${objname}.krn
232*ba62d9d3SAndroid Build Coastguard Worker            COMMAND ${CMAKE_COMMAND} -E copy ${patch_dir}/${objname}.hex ${patch_hex_dir}/${objname}.hex
233*ba62d9d3SAndroid Build Coastguard Worker            COMMAND ${CMAKE_COMMAND} -E remove ${patch_dir}/${objname}.hex
234*ba62d9d3SAndroid Build Coastguard Worker            COMMENT "Generate the hex files of cmfc patch")
235*ba62d9d3SAndroid Build Coastguard Worker            set(fcpatch_hexs ${fcpatch_hexs} ${patch_hex_dir}/${objname}.hex)
236*ba62d9d3SAndroid Build Coastguard Worker         endforeach()
237*ba62d9d3SAndroid Build Coastguard Worker
238*ba62d9d3SAndroid Build Coastguard Worker        # Generating the .bin files for cmfc kernel and patch respectively.
239*ba62d9d3SAndroid Build Coastguard Worker
240*ba62d9d3SAndroid Build Coastguard Worker        add_custom_command(
241*ba62d9d3SAndroid Build Coastguard Worker            OUTPUT ${kernel_hex_dir}/${krn}.bin ${krn_header}
242*ba62d9d3SAndroid Build Coastguard Worker            DEPENDS GenDmyHex GenKrnBin ${hexs} ${link_file}   #Generate the dummy hexs from the pre-built header
243*ba62d9d3SAndroid Build Coastguard Worker            WORKING_DIRECTORY ${kernel_hex_dir}
244*ba62d9d3SAndroid Build Coastguard Worker            COMMAND GenDmyHex ${kernel_hex_dir} ${krn_header}
245*ba62d9d3SAndroid Build Coastguard Worker            COMMAND ${CMAKE_COMMAND} -E copy ${link_file} ${kernel_hex_dir}
246*ba62d9d3SAndroid Build Coastguard Worker            COMMAND GenKrnBin ${kernel_hex_dir} ${name} ${genx} tgllp_cmfc
247*ba62d9d3SAndroid Build Coastguard Worker            COMMAND ${CMAKE_COMMAND} -E copy ${krn}.h ${krn_header})
248*ba62d9d3SAndroid Build Coastguard Worker
249*ba62d9d3SAndroid Build Coastguard Worker        add_custom_command(
250*ba62d9d3SAndroid Build Coastguard Worker            OUTPUT ${patch_hex_dir}/${krnpatch}.bin
251*ba62d9d3SAndroid Build Coastguard Worker            DEPENDS GenKrnBin ${fcpatch_hexs} ${link_file}
252*ba62d9d3SAndroid Build Coastguard Worker            WORKING_DIRECTORY ${patch_hex_dir}
253*ba62d9d3SAndroid Build Coastguard Worker            COMMAND ${CMAKE_COMMAND} -E copy ${link_file} ${patch_hex_dir}
254*ba62d9d3SAndroid Build Coastguard Worker            COMMAND GenKrnBin ${patch_hex_dir} ${name} ${genx} tgllp_cmfcpatch)
255*ba62d9d3SAndroid Build Coastguard Worker
256*ba62d9d3SAndroid Build Coastguard Worker        # Generating kernel source files for cmfc kernel and patch.
257*ba62d9d3SAndroid Build Coastguard Worker
258*ba62d9d3SAndroid Build Coastguard Worker        add_custom_command(
259*ba62d9d3SAndroid Build Coastguard Worker            OUTPUT ${krn_dir}/cmfc/${krn}.c ${krn_dir}/cmfc/${krn}.h
260*ba62d9d3SAndroid Build Coastguard Worker            DEPENDS KernelBinToSource ${kernel_hex_dir}/${krn}.bin
261*ba62d9d3SAndroid Build Coastguard Worker            COMMAND KernelBinToSource -i ${kernel_hex_dir}/${krn}.bin -o ${krn_dir}/cmfc)
262*ba62d9d3SAndroid Build Coastguard Worker
263*ba62d9d3SAndroid Build Coastguard Worker        add_custom_command(
264*ba62d9d3SAndroid Build Coastguard Worker            OUTPUT ${krn_dir}/cmfcpatch/${krnpatch}.c ${krn_dir}/cmfcpatch/${krnpatch}.h
265*ba62d9d3SAndroid Build Coastguard Worker            DEPENDS KernelBinToSource ${patch_hex_dir}/${krnpatch}.bin
266*ba62d9d3SAndroid Build Coastguard Worker            COMMAND KernelBinToSource -i ${patch_hex_dir}/${krnpatch}.bin -o ${krn_dir}/cmfcpatch)
267*ba62d9d3SAndroid Build Coastguard Worker    endfunction()
268*ba62d9d3SAndroid Build Coastguard Worker
269*ba62d9d3SAndroid Build Coastguard Worker    # List of kernel sources to build.
270*ba62d9d3SAndroid Build Coastguard Worker    # NOTE: Order is important!! It should match the order in which sub-kernels are described
271*ba62d9d3SAndroid Build Coastguard Worker    # in the corresponding strcuture in the driver. For example, HME kernel should
272*ba62d9d3SAndroid Build Coastguard Worker    # match HmeDsScoreboardKernelHeaderG11
273*ba62d9d3SAndroid Build Coastguard Worker    list(APPEND HME_KRN_SOURCES
274*ba62d9d3SAndroid Build Coastguard Worker        ${CMAKE_CURRENT_LIST_DIR}/gen11/codec/kernel_free/Source/downscale_kernel_genx.cpp
275*ba62d9d3SAndroid Build Coastguard Worker        ${CMAKE_CURRENT_LIST_DIR}/gen11/codec/kernel_free/Source/hme_kernel_genx.cpp
276*ba62d9d3SAndroid Build Coastguard Worker        ${CMAKE_CURRENT_LIST_DIR}/gen11/codec/kernel_free/Source/downscale_convert_kernel_genx.cpp)
277*ba62d9d3SAndroid Build Coastguard Worker
278*ba62d9d3SAndroid Build Coastguard Worker    get_c_macro_int(${CMAKE_CURRENT_LIST_DIR}/common/codec/kernel/codeckrnheader.h
279*ba62d9d3SAndroid Build Coastguard Worker        "IDR_CODEC_HME_DS_SCOREBOARD_KERNEL" IDR_CODEC_HME_DS_SCOREBOARD_KERNEL)
280*ba62d9d3SAndroid Build Coastguard Worker
281*ba62d9d3SAndroid Build Coastguard Worker    if(GEN11_ICLLP)
282*ba62d9d3SAndroid Build Coastguard Worker        #gen_kernel_from_asm(vp gen11_icllp)
283*ba62d9d3SAndroid Build Coastguard Worker        #gen_kernel_from_cm(codec gen11 ${IDR_CODEC_HME_DS_SCOREBOARD_KERNEL} "${HME_KRN_SOURCES}")
284*ba62d9d3SAndroid Build Coastguard Worker    endif()
285*ba62d9d3SAndroid Build Coastguard Worker
286*ba62d9d3SAndroid Build Coastguard Worker    if(GEN12_TGLLP)
287*ba62d9d3SAndroid Build Coastguard Worker        #gen_vpkernel_from_cm(vp gen12_tgllp)
288*ba62d9d3SAndroid Build Coastguard Worker    endif()
289*ba62d9d3SAndroid Build Coastguard Workerendif()
290*ba62d9d3SAndroid Build Coastguard Worker
291*ba62d9d3SAndroid Build Coastguard Workermedia_include_subdirectory(common)
292*ba62d9d3SAndroid Build Coastguard Worker
293*ba62d9d3SAndroid Build Coastguard Workerif(GEN8)
294*ba62d9d3SAndroid Build Coastguard Worker    media_include_subdirectory(gen8)
295*ba62d9d3SAndroid Build Coastguard Workerendif()
296*ba62d9d3SAndroid Build Coastguard Worker
297*ba62d9d3SAndroid Build Coastguard Workerif(GEN8_BDW)
298*ba62d9d3SAndroid Build Coastguard Worker    media_include_subdirectory(gen8_bdw)
299*ba62d9d3SAndroid Build Coastguard Workerendif()
300*ba62d9d3SAndroid Build Coastguard Worker
301*ba62d9d3SAndroid Build Coastguard Workerif(GEN9)
302*ba62d9d3SAndroid Build Coastguard Worker    media_include_subdirectory(gen9)
303*ba62d9d3SAndroid Build Coastguard Workerendif()
304*ba62d9d3SAndroid Build Coastguard Worker
305*ba62d9d3SAndroid Build Coastguard Workerif(GEN9_CML)
306*ba62d9d3SAndroid Build Coastguard Worker    media_include_subdirectory(gen9_cml)
307*ba62d9d3SAndroid Build Coastguard Workerendif()
308*ba62d9d3SAndroid Build Coastguard Worker
309*ba62d9d3SAndroid Build Coastguard Workerif(GEN9_CMPV)
310*ba62d9d3SAndroid Build Coastguard Worker    media_include_subdirectory(gen9_cmpv)
311*ba62d9d3SAndroid Build Coastguard Workerendif()
312*ba62d9d3SAndroid Build Coastguard Worker
313*ba62d9d3SAndroid Build Coastguard Workerif(GEN9_BXT)
314*ba62d9d3SAndroid Build Coastguard Worker    media_include_subdirectory(gen9_bxt)
315*ba62d9d3SAndroid Build Coastguard Workerendif()
316*ba62d9d3SAndroid Build Coastguard Worker
317*ba62d9d3SAndroid Build Coastguard Workerif(GEN9_SKL)
318*ba62d9d3SAndroid Build Coastguard Worker    media_include_subdirectory(gen9_skl)
319*ba62d9d3SAndroid Build Coastguard Workerendif()
320*ba62d9d3SAndroid Build Coastguard Worker
321*ba62d9d3SAndroid Build Coastguard Workerif(GEN9_GLK)
322*ba62d9d3SAndroid Build Coastguard Worker    media_include_subdirectory(gen9_glk)
323*ba62d9d3SAndroid Build Coastguard Workerendif()
324*ba62d9d3SAndroid Build Coastguard Worker
325*ba62d9d3SAndroid Build Coastguard Workerif(GEN9_KBL)
326*ba62d9d3SAndroid Build Coastguard Worker    media_include_subdirectory(gen9_kbl)
327*ba62d9d3SAndroid Build Coastguard Workerendif()
328*ba62d9d3SAndroid Build Coastguard Worker
329*ba62d9d3SAndroid Build Coastguard Workerif(GEN11)
330*ba62d9d3SAndroid Build Coastguard Worker    media_include_subdirectory(gen11)
331*ba62d9d3SAndroid Build Coastguard Workerendif()
332*ba62d9d3SAndroid Build Coastguard Worker
333*ba62d9d3SAndroid Build Coastguard Workerif(GEN11_ICLLP)
334*ba62d9d3SAndroid Build Coastguard Worker    media_include_subdirectory(gen11_icllp)
335*ba62d9d3SAndroid Build Coastguard Workerendif()
336*ba62d9d3SAndroid Build Coastguard Worker
337*ba62d9d3SAndroid Build Coastguard Workerif(GEN11_JSL)
338*ba62d9d3SAndroid Build Coastguard Worker    media_include_subdirectory(gen11_jsl_ehl)
339*ba62d9d3SAndroid Build Coastguard Workerendif()
340*ba62d9d3SAndroid Build Coastguard Worker
341*ba62d9d3SAndroid Build Coastguard Workerif(GEN12)
342*ba62d9d3SAndroid Build Coastguard Worker    media_include_subdirectory(gen12)
343*ba62d9d3SAndroid Build Coastguard Worker    media_include_subdirectory(g12)
344*ba62d9d3SAndroid Build Coastguard Worker    media_include_subdirectory(../media_softlet/agnostic/gen12)
345*ba62d9d3SAndroid Build Coastguard Workerendif()
346*ba62d9d3SAndroid Build Coastguard Worker
347*ba62d9d3SAndroid Build Coastguard Workerif(GEN12_TGLLP)
348*ba62d9d3SAndroid Build Coastguard Worker    media_include_subdirectory(gen12_tgllp)
349*ba62d9d3SAndroid Build Coastguard Workerendif()
350*ba62d9d3SAndroid Build Coastguard Worker
351*ba62d9d3SAndroid Build Coastguard Workerif(GEN12)
352*ba62d9d3SAndroid Build Coastguard Workermedia_include_subdirectory(Xe_M)
353*ba62d9d3SAndroid Build Coastguard Workermedia_include_subdirectory(Xe_R)
354*ba62d9d3SAndroid Build Coastguard Workerendif()
355*ba62d9d3SAndroid Build Coastguard Worker
356*ba62d9d3SAndroid Build Coastguard Workerinclude(${MEDIA_EXT}/agnostic/media_srcs_ext.cmake OPTIONAL)
357