xref: /aosp_15_r20/external/intel-media-driver/media_driver/media_top_cmake.cmake (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1# Copyright (c) 2017-2023, Intel Corporation
2#
3# Permission is hereby granted, free of charge, to any person obtaining a
4# copy of this software and associated documentation files (the "Software"),
5# to deal in the Software without restriction, including without limitation
6# the rights to use, copy, modify, merge, publish, distribute, sublicense,
7# and/or sell copies of the Software, and to permit persons to whom the
8# Software is furnished to do so, subject to the following conditions:
9#
10# The above copyright notice and this permission notice shall be included
11# in all copies or substantial portions of the Software.
12#
13# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
14# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
17# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
18# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
19# OTHER DEALINGS IN THE SOFTWARE.
20
21project( media )
22
23find_package(PkgConfig)
24find_package(X11)
25find_package(Backtrace)
26
27# to get access to generated header files
28include_directories(${CMAKE_BINARY_DIR})
29
30bs_set_if_undefined(LIB_NAME iHD_drv_video)
31
32option (MEDIA_RUN_TEST_SUITE "run google test module after install" ON)
33include(${MEDIA_DRIVER_CMAKE}/media_gen_flags.cmake)
34include(${MEDIA_DRIVER_CMAKE}/media_feature_flags.cmake)
35
36
37if(NOT DEFINED SKIP_GMM_CHECK)
38    # checking dependencies
39    pkg_check_modules(LIBGMM REQUIRED igdgmm>=12.0.0)
40
41    if(LIBGMM_FOUND)
42        include_directories(BEFORE ${LIBGMM_INCLUDE_DIRS})
43        # link_directories() should appear before add_library and the like
44        # otherwise it will not take effect
45        link_directories(${LIBGMM_LIBRARY_DIRS})
46    endif()
47endif(NOT DEFINED SKIP_GMM_CHECK)
48
49message("-- media -- PLATFORM = ${PLATFORM}")
50message("-- media -- ARCH = ${ARCH}")
51message("-- media -- CMAKE_CURRENT_LIST_DIR = ${CMAKE_CURRENT_LIST_DIR}")
52message("-- media -- INCLUDED_LIBS = ${INCLUDED_LIBS}")
53message("-- media -- LIB_NAME = ${LIB_NAME}")
54message("-- media -- OUTPUT_NAME = ${OUTPUT_NAME}")
55message("-- media -- BUILD_TYPE/UFO_BUILD_TYPE/CMAKE_BUILD_TYPE = ${BUILD_TYPE}/${UFO_BUILD_TYPE}/${CMAKE_BUILD_TYPE}")
56message("-- media -- LIBVA_INSTALL_PATH = ${LIBVA_INSTALL_PATH}")
57message("-- media -- MEDIA_VERSION = ${MEDIA_VERSION}")
58if(X11_FOUND)
59    message("-- media -- X11 Found")
60    pkg_check_modules(LIBVAX11 libva-x11)
61    if(LIBVAX11_FOUND)
62        message("-- media -- LIBVAX11 Found")
63    else()
64        set(X11_FOUND FALSE)
65    endif()
66endif()
67
68set(LIB_NAME_STATIC "${LIB_NAME}_STATIC")
69set(SOURCES_ "")
70set(COMMON_SOURCES_ "")
71set(SOFTLET_COMMON_SOURCES_ "")
72set(COMMON_PRIVATE_INCLUDE_DIRS_ "")
73set(SOFTLET_COMMON_PRIVATE_INCLUDE_DIRS_ "")
74set(VP_SOURCES_ "")
75set(SOFTLET_VP_SOURCES_ "")       # softlet source group
76
77set(VP_PRIVATE_INCLUDE_DIRS_ "")
78set(SOFTLET_VP_PRIVATE_INCLUDE_DIRS_ "")
79set(SHARED_SOURCES_ "")
80set(UPDATED_SOURCES_ "")
81set(SOFTLET_DDI_SOURCES_ "")
82set(SOFTLET_DDI_PRIVATE_INCLUDE_DIRS_ "")
83set(SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_ "")
84
85################################################################################
86# codec
87################################################################################
88set(CODEC_SOURCES_ "")                  # legacy source group
89set(CODEC_HEADERS_ "")
90set(CODEC_PRIVATE_INCLUDE_DIRS_ "")
91set(SOFTLET_CODEC_SOURCES_ "")          # softlet source group
92set(SOFTLET_CODEC_HEADERS_ "")
93set(SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_ "")
94set(SOFTLET_CODEC_COMMON_SOURCES_ "")   # softlet codec common source group
95set(SOFTLET_CODEC_COMMON_HEADERS_ "")
96set(SOFTLET_CODEC_COMMON_PRIVATE_INCLUDE_DIRS_ "")
97set(SOFTLET_ENCODE_SOURCES_ "")          # softlet encode source group
98set(SOFTLET_ENCODE_HEADERS_ "")
99set(SOFTLET_ENCODE_PRIVATE_INCLUDE_DIRS_ "")
100set(SOFTLET_ENCODE_COMMON_SOURCES_ "")
101set(SOFTLET_ENCODE_COMMON_HEADERS_ "")
102set(SOFTLET_ENCODE_COMMON_PRIVATE_INCLUDE_DIRS_ "")
103set(SOFTLET_ENCODE_AV1_SOURCES_ "")
104set(SOFTLET_ENCODE_AV1_HEADERS_ "")
105set(SOFTLET_ENCODE_AV1_PRIVATE_INCLUDE_DIRS_ "")
106set(SOFTLET_ENCODE_HEVC_SOURCES_ "")
107set(SOFTLET_ENCODE_HEVC_HEADERS_ "")
108set(SOFTLET_ENCODE_HEVC_PRIVATE_INCLUDE_DIRS_ "")
109set(SOFTLET_ENCODE_AVC_SOURCES_ "")
110set(SOFTLET_ENCODE_AVC_HEADERS_ "")
111set(SOFTLET_ENCODE_AVC_PRIVATE_INCLUDE_DIRS_ "")
112set(SOFTLET_ENCODE_VP9_SOURCES_ "")
113set(SOFTLET_ENCODE_VP9_HEADERS_ "")
114set(SOFTLET_ENCODE_VP9_PRIVATE_INCLUDE_DIRS_ "")
115set(SOFTLET_ENCODE_JPEG_SOURCES_ "")
116set(SOFTLET_ENCODE_JPEG_HEADERS_ "")
117set(SOFTLET_ENCODE_JPEG_PRIVATE_INCLUDE_DIRS_ "")
118set(SOFTLET_DECODE_SOURCES_ "")          # softlet decode source group
119set(SOFTLET_DECODE_HEADERS_ "")
120set(SOFTLET_DECODE_PRIVATE_INCLUDE_DIRS_ "")
121set(SOFTLET_DECODE_COMMON_SOURCES_ "")
122set(SOFTLET_DECODE_COMMON_HEADERS_ "")
123set(SOFTLET_DECODE_COMMON_PRIVATE_INCLUDE_DIRS_ "")
124set(SOFTLET_DECODE_AVC_SOURCES_ "")
125set(SOFTLET_DECODE_AVC_HEADERS_ "")
126set(SOFTLET_DECODE_AVC_PRIVATE_INCLUDE_DIRS_ "")
127set(SOFTLET_DECODE_HEVC_SOURCES_ "")
128set(SOFTLET_DECODE_HEVC_HEADERS_ "")
129set(SOFTLET_DECODE_HEVC_PRIVATE_INCLUDE_DIRS_ "")
130set(SOFTLET_DECODE_JPEG_SOURCES_ "")
131set(SOFTLET_DECODE_JPEG_HEADERS_ "")
132set(SOFTLET_DECODE_JPEG_PRIVATE_INCLUDE_DIRS_ "")
133set(SOFTLET_DECODE_MPEG2_SOURCES_ "")
134set(SOFTLET_DECODE_MPEG2_HEADERS_ "")
135set(SOFTLET_DECODE_MPEG2_PRIVATE_INCLUDE_DIRS_ "")
136set(SOFTLET_DECODE_VP9_SOURCES_ "")
137set(SOFTLET_DECODE_VP9_HEADERS_ "")
138set(SOFTLET_DECODE_VP9_PRIVATE_INCLUDE_DIRS_ "")
139set(SOFTLET_DECODE_AV1_SOURCES_ "")
140set(SOFTLET_DECODE_AV1_HEADERS_ "")
141set(SOFTLET_DECODE_AV1_PRIVATE_INCLUDE_DIRS_ "")
142set(SOFTLET_DECODE_VP8_SOURCES_ "")
143set(SOFTLET_DECODE_VP8_HEADERS_ "")
144set(SOFTLET_DECODE_VP8_PRIVATE_INCLUDE_DIRS_ "")
145set(SOFTLET_DECODE_VVC_SOURCES_ "")
146set(SOFTLET_DECODE_VVC_HEADERS_ "")
147set(SOFTLET_DECODE_VVC_PRIVATE_INCLUDE_DIRS_ "")
148
149set(SOFTLET_CODEC_EXT_SOURCES_ "")
150set(SOFTLET_CODEC_EXT_HEADERS_ "")
151set(SOFTLET_CODEC_EXT_PRIVATE_INCLUDE_DIRS_ "")
152
153######################################################
154#MOS LIB
155set (MOS_COMMON_SOURCES_ "")
156set (MOS_COMMON_HEADERS_ "")
157set (MOS_PRIVATE_SOURCES_ "")
158set (MOS_PUBLIC_INCLUDE_DIRS_ "")
159set (MOS_PRIVATE_INCLUDE_DIRS_ "")
160set (MOS_PREPEND_INCLUDE_DIRS_ "")
161set (MOS_EXT_INCLUDE_DIRS_ "")
162
163set (SOFTLET_MOS_COMMON_SOURCES_ "")
164set (SOFTLET_MOS_COMMON_HEADERS_ "")
165set (SOFTLET_MOS_PRIVATE_SOURCES_ "")
166set (SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_ "")
167set (SOFTLET_MOS_PRIVATE_INCLUDE_DIRS_ "")
168set (SOFTLET_MOS_PREPEND_INCLUDE_DIRS_ "")
169set (SOFTLET_MOS_EXT_INCLUDE_DIRS_ "")
170######################################################
171
172######################################################
173#CP LIB
174set(CP_COMMON_HEADERS_ "")        # legacy source group
175set(CP_COMMON_SOURCES_ "")
176set(CP_COMMON_SHARED_HEADERS_ "") # legacy and softlet shared source group
177set(CP_COMMON_SHARED_SOURCES_ "")
178set(CP_COMMON_NEXT_HEADERS_ "")   # softlet source group
179set(CP_COMMON_NEXT_SOURCES_ "")
180set(CP_SOURCES_ "")               # common + os part
181######################################################
182# MHW
183################################################################################
184set(SOFTLET_MHW_SOURCES_ "")
185set(SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_ "")
186set(SOFTLET_MHW_VDBOX_SOURCES_ "")
187set(SOFTLET_MHW_VDBOX_PRIVATE_INCLUDE_DIRS_ "")
188set(SOFTLET_MHW_VDBOX_COMMON_SOURCES_ "")
189set(SOFTLET_MHW_VDBOX_HCP_SOURCES_ "")
190set(SOFTLET_MHW_VDBOX_HUC_SOURCES_ "")
191set(SOFTLET_MHW_VDBOX_VDENC_SOURCES_ "")
192set(SOFTLET_MHW_VDBOX_AVP_SOURCES_ "")
193set(SOFTLET_MHW_VDBOX_MFX_SOURCES_ "")
194set(SOFTLET_MHW_VDBOX_VVCP_SOURCES_ "")
195set(SOFTLET_MHW_VDBOX_AQM_SOURCES_ "")
196set(SOFTLET_MHW_EXT_SOURCES_ "")
197set(SOFTLET_MHW_COMMON_SOURCES_ "")
198set(SOFTLET_MHW_COMMON_PRIVATE_INCLUDE_DIRS_ "")
199set(SOFTLET_MHW_BLT_SOURCES_ "")
200set(SOFTLET_MHW_BLT_PRIVATE_INCLUDE_DIRS_ "")
201set(SOFTLET_MHW_RENDER_SOURCES_ "")
202set(SOFTLET_MHW_RENDER_PRIVATE_INCLUDE_DIRS_ "")
203set(SOFTLET_MHW_SFC_SOURCES_ "")
204set(SOFTLET_MHW_SFC_PRIVATE_INCLUDE_DIRS_ "")
205set(SOFTLET_MHW_VEBOX_SOURCES_ "")
206set(SOFTLET_MHW_VEBOX_PRIVATE_INCLUDE_DIRS_ "")
207set(SOFTLET_MHW_MI_SOURCES_ "")
208set(SOFTLET_MHW_MI_PRIVATE_INCLUDE_DIRS_ "")
209
210# add source
211# first
212media_include_subdirectory(../media_common/agnostic)
213media_include_subdirectory(../media_common/linux)
214
215# second
216media_include_subdirectory(agnostic)
217media_include_subdirectory(linux)
218media_include_subdirectory(media_softlet)
219media_include_subdirectory(media_interface)
220media_include_subdirectory(../media_softlet/agnostic)
221media_include_subdirectory(../media_softlet/linux)
222media_include_subdirectory(../media_softlet/media_interface)
223
224include(${MEDIA_EXT}/media_srcs_ext.cmake OPTIONAL)
225include(${MEDIA_COMMON_EXT}/media_srcs_ext.cmake OPTIONAL)
226include(${MEDIA_SOFTLET_EXT}/media_srcs_ext.cmake OPTIONAL)
227
228include(${MEDIA_DRIVER_CMAKE}/media_include_paths.cmake)
229
230include(${MEDIA_DRIVER_CMAKE}/media_compile_flags.cmake)
231
232#
233# set platform specific defines
234#
235bs_set_defines()
236
237set_source_files_properties(${SOURCES_} PROPERTIES LANGUAGE "CXX")
238set_source_files_properties(${COMMON_SOURCES_} PROPERTIES LANGUAGE "CXX")
239set_source_files_properties(${SOFTLET_COMMON_SOURCES_} PROPERTIES LANGUAGE "CXX")
240set_source_files_properties(${CODEC_SOURCES_} PROPERTIES LANGUAGE "CXX")
241set_source_files_properties(${SOFTLET_CODEC_SOURCES_} PROPERTIES LANGUAGE "CXX")
242set_source_files_properties(${SOFTLET_ENCODE_SOURCES_} PROPERTIES LANGUAGE "CXX")
243set_source_files_properties(${SOFTLET_DECODE_SOURCES_} PROPERTIES LANGUAGE "CXX")
244set_source_files_properties(${VP_SOURCES_} PROPERTIES LANGUAGE "CXX")
245set_source_files_properties(${SOFTLET_VP_SOURCES_} PROPERTIES LANGUAGE "CXX")
246set_source_files_properties(${CP_COMMON_SOURCES_} PROPERTIES LANGUAGE "CXX")
247set_source_files_properties(${CP_COMMON_SHARED_SOURCES_} PROPERTIES LANGUAGE "CXX")
248set_source_files_properties(${CP_COMMON_NEXT_SOURCES_} PROPERTIES LANGUAGE "CXX")
249set_source_files_properties(${CP_SOURCES_} PROPERTIES LANGUAGE "CXX")
250set_source_files_properties(${SOFTLET_DDI_SOURCES_} PROPERTIES LANGUAGE "CXX")
251set_source_files_properties(${SOURCES_SSE2} PROPERTIES LANGUAGE "CXX")
252set_source_files_properties(${SOURCES_SSE4} PROPERTIES LANGUAGE "CXX")
253
254# MHW settings
255set(SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_
256${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_}
257${SOFTLET_MHW_VDBOX_PRIVATE_INCLUDE_DIRS_}
258${SOFTLET_MHW_COMMON_PRIVATE_INCLUDE_DIRS_}
259${SOFTLET_MHW_BLT_PRIVATE_INCLUDE_DIRS_}
260${SOFTLET_MHW_RENDER_PRIVATE_INCLUDE_DIRS_}
261${SOFTLET_MHW_SFC_PRIVATE_INCLUDE_DIRS_}
262${SOFTLET_MHW_VEBOX_PRIVATE_INCLUDE_DIRS_}
263${SOFTLET_MHW_MI_PRIVATE_INCLUDE_DIRS_}
264)
265
266set(SOFTLET_MHW_VDBOX_SOURCES_
267${SOFTLET_MHW_VDBOX_SOURCES_}
268${SOFTLET_MHW_VDBOX_COMMON_SOURCES_}
269${SOFTLET_MHW_VDBOX_HCP_SOURCES_}
270${SOFTLET_MHW_VDBOX_HUC_SOURCES_}
271${SOFTLET_MHW_VDBOX_VDENC_SOURCES_}
272${SOFTLET_MHW_VDBOX_AVP_SOURCES_}
273${SOFTLET_MHW_VDBOX_MFX_SOURCES_}
274${SOFTLET_MHW_VDBOX_VVCP_SOURCES_}
275${SOFTLET_MHW_VDBOX_AQM_SOURCES_}
276${SOFTLET_MHW_EXT_SOURCES_}
277)
278
279set(SOFTLET_MHW_SOURCES_
280${SOFTLET_MHW_SOURCES_}
281${SOFTLET_MHW_VDBOX_SOURCES_}
282${SOFTLET_MHW_COMMON_SOURCES_}
283${SOFTLET_MHW_BLT_SOURCES_}
284${SOFTLET_MHW_RENDER_SOURCES_}
285${SOFTLET_MHW_SFC_SOURCES_}
286${SOFTLET_MHW_VEBOX_SOURCES_}
287${SOFTLET_MHW_MI_SOURCES_}
288)
289
290#CODEC SETTINGS
291set(SOFTLET_ENCODE_SOURCES_
292${SOFTLET_ENCODE_SOURCES_}
293${SOFTLET_ENCODE_COMMON_SOURCES_}
294${SOFTLET_ENCODE_AV1_SOURCES_}
295${SOFTLET_ENCODE_HEVC_SOURCES_}
296${SOFTLET_ENCODE_AVC_SOURCES_}
297${SOFTLET_ENCODE_VP9_SOURCES_}
298${SOFTLET_ENCODE_JPEG_SOURCES_}
299)
300
301set(SOFTLET_DECODE_SOURCES_
302${SOFTLET_DECODE_SOURCES_}
303${SOFTLET_DECODE_COMMON_SOURCES_}
304${SOFTLET_DECODE_AVC_SOURCES_}
305${SOFTLET_DECODE_HEVC_SOURCES_}
306${SOFTLET_DECODE_JPEG_SOURCES_}
307${SOFTLET_DECODE_MPEG2_SOURCES_}
308${SOFTLET_DECODE_VP9_SOURCES_}
309${SOFTLET_DECODE_AV1_SOURCES_}
310${SOFTLET_DECODE_VP8_SOURCES_}
311${SOFTLET_DECODE_VVC_SOURCES_}
312)
313
314set(SOFTLET_CODEC_SOURCES_
315${SOFTLET_CODEC_SOURCES_}
316${SOFTLET_CODEC_COMMON_SOURCES_}
317${SOFTLET_ENCODE_SOURCES_}
318${SOFTLET_DECODE_SOURCES_}
319${SOFTLET_CODEC_EXT_SOURCES_}
320)
321
322set(SOFTLET_ENCODE_HEADERS_
323${SOFTLET_ENCODE_HEADERS_}
324${SOFTLET_ENCODE_COMMON_HEADERS_}
325${SOFTLET_ENCODE_AV1_HEADERS_}
326${SOFTLET_ENCODE_HEVC_HEADERS_}
327${SOFTLET_ENCODE_AVC_HEADERS_}
328${SOFTLET_ENCODE_VP9_HEADERS_}
329${SOFTLET_ENCODE_JPEG_HEADERS_}
330)
331
332set(SOFTLET_DECODE_HEADERS_
333${SOFTLET_DECODE_HEADERS_}
334${SOFTLET_DECODE_COMMON_HEADERS_}
335${SOFTLET_DECODE_AVC_HEADERS_}
336${SOFTLET_DECODE_HEVC_HEADERS_}
337${SOFTLET_DECODE_JPEG_HEADERS_}
338${SOFTLET_DECODE_MPEG2_HEADERS_}
339${SOFTLET_DECODE_VP9_HEADERS_}
340${SOFTLET_DECODE_AV1_HEADERS_}
341${SOFTLET_DECODE_VP8_HEADERS_}
342${SOFTLET_DECODE_VVC_HEADERS_}
343)
344
345set(SOFTLET_CODEC_HEADERS_
346${SOFTLET_CODEC_HEADERS_}
347${SOFTLET_CODEC_COMMON_HEADERS_}
348${SOFTLET_ENCODE_HEADERS_}
349${SOFTLET_DECODE_HEADERS_}
350${SOFTLET_CODEC_EXT_HEADERS_}
351)
352
353set(SOFTLET_ENCODE_PRIVATE_INCLUDE_DIRS_
354${SOFTLET_ENCODE_PRIVATE_INCLUDE_DIRS_}
355${SOFTLET_ENCODE_COMMON_PRIVATE_INCLUDE_DIRS_}
356${SOFTLET_ENCODE_AV1_PRIVATE_INCLUDE_DIRS_}
357${SOFTLET_ENCODE_HEVC_PRIVATE_INCLUDE_DIRS_}
358${SOFTLET_ENCODE_AVC_PRIVATE_INCLUDE_DIRS_}
359${SOFTLET_ENCODE_VP9_PRIVATE_INCLUDE_DIRS_}
360${SOFTLET_ENCODE_JPEG_PRIVATE_INCLUDE_DIRS_}
361)
362
363set(SOFTLET_DECODE_PRIVATE_INCLUDE_DIRS_
364${SOFTLET_DECODE_PRIVATE_INCLUDE_DIRS_}
365${SOFTLET_DECODE_COMMON_PRIVATE_INCLUDE_DIRS_}
366${SOFTLET_DECODE_AVC_PRIVATE_INCLUDE_DIRS_}
367${SOFTLET_DECODE_HEVC_PRIVATE_INCLUDE_DIRS_}
368${SOFTLET_DECODE_JPEG_PRIVATE_INCLUDE_DIRS_}
369${SOFTLET_DECODE_MPEG2_PRIVATE_INCLUDE_DIRS_}
370${SOFTLET_DECODE_VP9_PRIVATE_INCLUDE_DIRS_}
371${SOFTLET_DECODE_AV1_PRIVATE_INCLUDE_DIRS_}
372${SOFTLET_DECODE_VP8_PRIVATE_INCLUDE_DIRS_}
373${SOFTLET_DECODE_VVC_PRIVATE_INCLUDE_DIRS_}
374)
375
376set(SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_
377${SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_}
378${SOFTLET_CODEC_COMMON_PRIVATE_INCLUDE_DIRS_}
379${SOFTLET_ENCODE_PRIVATE_INCLUDE_DIRS_}
380${SOFTLET_DECODE_PRIVATE_INCLUDE_DIRS_}
381${SOFTLET_CODEC_EXT_PRIVATE_INCLUDE_DIRS_}
382)
383
384set (CP_SOURCES_
385    ${CP_SOURCES_}
386    ${CP_COMMON_SOURCES_}
387    ${CP_COMMON_SHARED_SOURCES_}
388    ${CP_COMMON_NEXT_SOURCES_})
389
390set (SHARED_SOURCES_
391    ${SHARED_SOURCES_}
392    ${COMMON_SOURCES_}
393    ${CODEC_SOURCES_}
394    ${VP_SOURCES_}
395    ${CP_SOURCES_})
396
397FOREACH(SRC1 ${SOURCES_})
398    set (FOUND 0)
399    FOREACH(SRC2 ${SHARED_SOURCES_})
400        if (${SRC1} STREQUAL ${SRC2})
401            set (FOUND 1)
402            break()
403        endif()
404    ENDFOREACH()
405    if (NOT ${FOUND} EQUAL 1)
406        set (UPDATED_SOURCES_
407            ${UPDATED_SOURCES_}
408            ${SRC1})
409    endif()
410ENDFOREACH()
411
412set (COMMON_SOURCES_
413    ${COMMON_SOURCES_}
414    ${UPDATED_SOURCES_})
415
416set(COMMON_PRIVATE_INCLUDE_DIRS_
417    ${COMMON_PRIVATE_INCLUDE_DIRS_}
418    ${SOFTLET_COMMON_PRIVATE_INCLUDE_DIRS_})
419
420set (VP_PRIVATE_INCLUDE_DIRS_
421    ${VP_PRIVATE_INCLUDE_DIRS_}
422    ${SOFTLET_VP_PRIVATE_INCLUDE_DIRS_})
423
424add_library(${LIB_NAME}_SSE2 OBJECT ${SOURCES_SSE2})
425target_compile_options(${LIB_NAME}_SSE2 PRIVATE -msse2)
426target_include_directories(${LIB_NAME}_SSE2 BEFORE PRIVATE ${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_} ${MOS_PUBLIC_INCLUDE_DIRS_} ${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_} ${COMMON_PRIVATE_INCLUDE_DIRS_} ${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_} ${SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_})
427
428add_library(${LIB_NAME}_SSE4 OBJECT ${SOURCES_SSE4})
429target_compile_options(${LIB_NAME}_SSE4 PRIVATE -msse4.1)
430target_include_directories(${LIB_NAME}_SSE4 BEFORE PRIVATE ${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_} ${MOS_PUBLIC_INCLUDE_DIRS_} ${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_} ${COMMON_PRIVATE_INCLUDE_DIRS_} ${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_} ${SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_})
431
432add_library(${LIB_NAME}_COMMON OBJECT ${COMMON_SOURCES_} ${SOFTLET_DDI_SOURCES_})
433set_property(TARGET ${LIB_NAME}_COMMON PROPERTY POSITION_INDEPENDENT_CODE 1)
434MediaAddCommonTargetDefines(${LIB_NAME}_COMMON)
435target_include_directories(${LIB_NAME}_COMMON  BEFORE PRIVATE ${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_} ${MOS_PUBLIC_INCLUDE_DIRS_} ${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_}  ${COMMON_PRIVATE_INCLUDE_DIRS_} ${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_} ${SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_} ${VP_PRIVATE_INCLUDE_DIRS_} ${COMMON_CP_DIRECTORIES_} ${SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_})
436FOREACH(SRC ${COMMON_SOURCES_})
437    if ("${SRC}" MATCHES "media/media_softlet" OR (NOT "${SOFTLET_EXT_PATH}" STREQUAL "" AND "${SRC}" MATCHES "${SOFTLET_EXT_PATH}"))
438        message(FATAL_ERROR "common legacy lib include softlet files ${SRC} - exiting!")
439        exit(1)
440    endif()
441ENDFOREACH()
442
443set_source_files_properties(${SOFTLET_MHW_SOURCES_} PROPERTIES LANGUAGE "CXX")
444add_library(${LIB_NAME}_SOFTLET_COMMON OBJECT ${SOFTLET_COMMON_SOURCES_} ${SOFTLET_MHW_SOURCES_})
445set_property(TARGET ${LIB_NAME}_SOFTLET_COMMON PROPERTY POSITION_INDEPENDENT_CODE 1)
446MediaAddCommonTargetDefines(${LIB_NAME}_SOFTLET_COMMON)
447target_include_directories(${LIB_NAME}_SOFTLET_COMMON BEFORE PRIVATE
448    ${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_}
449    ${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_}
450    ${SOFTLET_COMMON_PRIVATE_INCLUDE_DIRS_}
451    ${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_}
452    ${SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_}
453    ${SOFTLET_VP_PRIVATE_INCLUDE_DIRS_}
454    ${SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_}
455    ${CP_INTERFACE_DIRECTORIES_}
456)
457FOREACH(SRC ${SOFTLET_COMMON_SOURCES_})
458    if ("${SRC}" MATCHES "media/media_driver" OR (NOT "${LEGACY_EXT_PATH}" STREQUAL "" AND "${SRC}" MATCHES "${LEGACY_EXT_PATH}"))
459        message(FATAL_ERROR "softlet lib include legacy files ${SRC} - exiting!")
460        exit(1)
461    endif()
462ENDFOREACH()
463
464add_library(${LIB_NAME}_CODEC OBJECT ${CODEC_SOURCES_})
465set_property(TARGET ${LIB_NAME}_CODEC PROPERTY POSITION_INDEPENDENT_CODE 1)
466MediaAddCommonTargetDefines(${LIB_NAME}_CODEC)
467target_include_directories(${LIB_NAME}_CODEC BEFORE PRIVATE ${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_} ${MOS_PUBLIC_INCLUDE_DIRS_} ${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_} ${COMMON_PRIVATE_INCLUDE_DIRS_} ${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_} ${SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_} ${VP_PRIVATE_INCLUDE_DIRS_} ${COMMON_CP_DIRECTORIES_} ${SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_})
468FOREACH(SRC ${CODEC_SOURCES_})
469    if ("${SRC}" MATCHES "media/media_softlet" OR (NOT "${SOFTLET_EXT_PATH}" STREQUAL "" AND "${SRC}" MATCHES "${SOFTLET_EXT_PATH}"))
470        message(FATAL_ERROR "codec legacy lib include softlet files ${SRC} - exiting!")
471        exit(1)
472    endif()
473ENDFOREACH()
474
475add_library(${LIB_NAME}_SOFTLET_CODEC OBJECT ${SOFTLET_CODEC_SOURCES_})
476set_property(TARGET ${LIB_NAME}_SOFTLET_CODEC PROPERTY POSITION_INDEPENDENT_CODE 1)
477MediaAddCommonTargetDefines(${LIB_NAME}_SOFTLET_CODEC)
478target_include_directories(${LIB_NAME}_SOFTLET_CODEC BEFORE PRIVATE
479    ${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_}
480    ${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_}
481    ${SOFTLET_COMMON_PRIVATE_INCLUDE_DIRS_}
482    ${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_}
483    ${SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_}
484    ${SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_}
485    ${CP_INTERFACE_DIRECTORIES_}
486)
487FOREACH(SRC ${SOFTLET_CODEC_SOURCES_})
488    if ("${SRC}" MATCHES "media/media_driver" OR (NOT "${LEGACY_EXT_PATH}" STREQUAL "" AND "${SRC}" MATCHES "${LEGACY_EXT_PATH}"))
489        message(FATAL_ERROR "softlet lib include legacy files ${SRC} - exiting!")
490        exit(1)
491    endif()
492ENDFOREACH()
493
494add_library(${LIB_NAME}_VP OBJECT ${VP_SOURCES_})
495set_property(TARGET ${LIB_NAME}_VP PROPERTY POSITION_INDEPENDENT_CODE 1)
496MediaAddCommonTargetDefines(${LIB_NAME}_VP)
497target_include_directories(${LIB_NAME}_VP BEFORE PRIVATE ${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_} ${MOS_PUBLIC_INCLUDE_DIRS_} ${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_} ${COMMON_PRIVATE_INCLUDE_DIRS_} ${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_} ${VP_PRIVATE_INCLUDE_DIRS_} ${COMMON_CP_DIRECTORIES_} ${SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_} ${SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_})
498FOREACH(SRC ${VP_SOURCES_})
499    if ("${SRC}" MATCHES "media/media_softlet" OR (NOT "${SOFTLET_EXT_PATH}" STREQUAL "" AND "${SRC}" MATCHES "${SOFTLET_EXT_PATH}"))
500        message(FATAL_ERROR "vp legacy lib include softlet files ${SRC} - exiting!")
501        exit(1)
502    endif()
503ENDFOREACH()
504
505add_library(${LIB_NAME}_SOFTLET_VP OBJECT ${SOFTLET_VP_SOURCES_})
506set_property(TARGET ${LIB_NAME}_SOFTLET_VP PROPERTY POSITION_INDEPENDENT_CODE 1)
507MediaAddCommonTargetDefines(${LIB_NAME}_SOFTLET_VP)
508target_include_directories(${LIB_NAME}_SOFTLET_VP BEFORE PRIVATE
509    ${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_}
510    ${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_}
511    ${SOFTLET_COMMON_PRIVATE_INCLUDE_DIRS_}
512    ${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_}
513    ${SOFTLET_VP_PRIVATE_INCLUDE_DIRS_}
514    ${SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_}
515    ${SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_}
516    ${CP_INTERFACE_DIRECTORIES_}
517)
518FOREACH(SRC ${SOFTLET_VP_SOURCES_})
519    if ("${SRC}" MATCHES "media/media_driver" OR (NOT "${LEGACY_EXT_PATH}" STREQUAL "" AND "${SRC}" MATCHES "${LEGACY_EXT_PATH}"))
520        message(FATAL_ERROR "softlet lib include legacy files ${SRC} - exiting!")
521        exit(1)
522    endif()
523ENDFOREACH()
524
525add_library(${LIB_NAME}_CP OBJECT ${CP_SOURCES_})
526set_property(TARGET ${LIB_NAME}_CP PROPERTY POSITION_INDEPENDENT_CODE 1)
527MediaAddCommonTargetDefines(${LIB_NAME}_CP)
528target_include_directories(${LIB_NAME}_CP BEFORE PRIVATE ${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_} ${MOS_PUBLIC_INCLUDE_DIRS_} ${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_} ${COMMON_PRIVATE_INCLUDE_DIRS_} ${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_} ${SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_} ${VP_PRIVATE_INCLUDE_DIRS_} ${COMMON_CP_DIRECTORIES_} ${SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_})
529
530#DDI LIB
531if(NOT "${SOFTLET_DDI_SOURCES_}" STREQUAL "")
532    add_library(${LIB_NAME}_SOFTLET_DDI OBJECT ${SOFTLET_DDI_SOURCES_})
533    set_property(TARGET ${LIB_NAME}_SOFTLET_DDI PROPERTY POSITION_INDEPENDENT_CODE 1)
534    set_property(TARGET ${LIB_NAME}_SOFTLET_DDI APPEND PROPERTY COMPILE_DEFINITIONS MEDIA_SOFTLET)
535    MediaAddCommonTargetDefines(${LIB_NAME}_SOFTLET_DDI)
536    target_include_directories(${LIB_NAME}_SOFTLET_DDI BEFORE PRIVATE
537        ${SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_}
538        ${SOFTLET_DDI_PRIVATE_INCLUDE_DIRS_}
539        ${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_}
540        ${MOS_PUBLIC_INCLUDE_DIRS_}
541        ${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_}
542        ${COMMON_PRIVATE_INCLUDE_DIRS_}
543        ${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_}
544        ${VP_PRIVATE_INCLUDE_DIRS_}
545        ${COMMON_CP_DIRECTORIES_}
546        ${SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_})
547endif()
548FOREACH(SRC ${SOFTLET_DDI_SOURCES_})
549    if ("${SRC}" MATCHES "media/media_driver" OR (NOT "${LEGACY_EXT_PATH}" STREQUAL "" AND "${SRC}" MATCHES "${LEGACY_EXT_PATH}"))
550        message(FATAL_ERROR "softlet lib include legacy files ${SRC} - exiting!")
551        exit(1)
552    endif()
553ENDFOREACH()
554
555######################################################
556#MOS LIB
557############## MOS ########################################
558set_source_files_properties(${MOS_COMMON_SOURCES_} PROPERTIES LANGUAGE "CXX")
559set_source_files_properties(${SOFTLET_MOS_COMMON_SOURCES_} PROPERTIES LANGUAGE "CXX")
560
561#1 non softlet mos lib
562
563set (MOS_EXT_INCLUDE_DIRS_
564${BS_DIR_MEDIA}/cmrtlib/linux/hardware  # This is to include drm_device.h in cmrtlib, no cpp file needed.
565)
566
567add_library(${LIB_NAME}_mos OBJECT ${MOS_COMMON_SOURCES_} ${SOFTLET_MOS_COMMON_SOURCES_})
568set_property(TARGET ${LIB_NAME}_mos PROPERTY POSITION_INDEPENDENT_CODE 1)
569MediaAddCommonTargetDefines(${LIB_NAME}_mos)
570target_include_directories(${LIB_NAME}_mos BEFORE PRIVATE
571    ${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_}
572    ${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_}
573    ${MOS_PUBLIC_INCLUDE_DIRS_}
574    ${MOS_EXT_INCLUDE_DIRS_}
575    ${COMMON_PRIVATE_INCLUDE_DIRS_}
576    ${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_}
577    ${VP_PRIVATE_INCLUDE_DIRS_}
578    ${SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_}
579)
580
581#2 softlet mos lib
582
583set (SOFTLET_MOS_EXT_INCLUDE_DIRS_
584${SOFTLET_MOS_EXT_INCLUDE_DIRS_}
585${BS_DIR_MEDIA}/cmrtlib/linux/hardware # This is to include drm_device.h in cmrtlib, no cpp file needed.
586${MEDIA_COMMON}/agnostic/common/media_interfaces
587${MEDIA_COMMON}/agnostic/common/shared
588${MEDIA_COMMON}/linux/common/cp/os
589${MEDIA_SOFTLET}/agnostic/common/media_interfaces
590${MEDIA_SOFTLET}/agnostic/common/shared
591${MEDIA_SOFTLET}/agnostic/common/shared/mediacopy
592${MEDIA_SOFTLET}/linux/common/ddi
593)
594
595add_library(${LIB_NAME}_mos_softlet OBJECT ${SOFTLET_MOS_COMMON_SOURCES_} ${SOFTLET_MOS_PRIVATE_SOURCES_})
596set_property(TARGET ${LIB_NAME}_mos_softlet PROPERTY POSITION_INDEPENDENT_CODE 1)
597MediaAddCommonTargetDefines(${LIB_NAME}_mos_softlet)
598target_include_directories(${LIB_NAME}_mos_softlet BEFORE PRIVATE
599    ${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_}
600    ${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_}
601    ${SOFTLET_MOS_EXT_INCLUDE_DIRS_}
602)
603############## MOS LIB END ########################################
604
605############## Media Driver Static and Shared Lib #################
606add_library(${LIB_NAME} SHARED
607    $<TARGET_OBJECTS:${LIB_NAME}_mos>
608    $<TARGET_OBJECTS:${LIB_NAME}_COMMON>
609    $<TARGET_OBJECTS:${LIB_NAME}_CODEC>
610    $<TARGET_OBJECTS:${LIB_NAME}_VP>
611    $<TARGET_OBJECTS:${LIB_NAME}_CP>
612    $<TARGET_OBJECTS:${LIB_NAME}_SSE2>
613    $<TARGET_OBJECTS:${LIB_NAME}_SSE4>
614    $<TARGET_OBJECTS:${LIB_NAME}_SOFTLET_VP>
615    $<TARGET_OBJECTS:${LIB_NAME}_SOFTLET_CODEC>
616    $<TARGET_OBJECTS:${LIB_NAME}_SOFTLET_COMMON>)
617
618
619add_library(${LIB_NAME_STATIC} STATIC
620    $<TARGET_OBJECTS:${LIB_NAME}_mos>
621    $<TARGET_OBJECTS:${LIB_NAME}_COMMON>
622    $<TARGET_OBJECTS:${LIB_NAME}_CODEC>
623    $<TARGET_OBJECTS:${LIB_NAME}_VP>
624    $<TARGET_OBJECTS:${LIB_NAME}_CP>
625    $<TARGET_OBJECTS:${LIB_NAME}_SSE2>
626    $<TARGET_OBJECTS:${LIB_NAME}_SSE4>
627    $<TARGET_OBJECTS:${LIB_NAME}_SOFTLET_VP>
628    $<TARGET_OBJECTS:${LIB_NAME}_SOFTLET_CODEC>
629    $<TARGET_OBJECTS:${LIB_NAME}_SOFTLET_COMMON>)
630
631set_target_properties(${LIB_NAME_STATIC} PROPERTIES OUTPUT_NAME ${LIB_NAME})
632
633option(MEDIA_BUILD_FATAL_WARNINGS "Turn compiler warnings into fatal errors" ON)
634if(MEDIA_BUILD_FATAL_WARNINGS)
635    set_target_properties(${LIB_NAME}_COMMON PROPERTIES COMPILE_FLAGS "-Werror")
636    set_target_properties(${LIB_NAME}_CODEC PROPERTIES COMPILE_FLAGS "-Werror")
637    set_target_properties(${LIB_NAME}_VP PROPERTIES COMPILE_FLAGS "-Werror")
638    set_target_properties(${LIB_NAME}_CP PROPERTIES COMPILE_FLAGS "-Werror")
639    set_target_properties(${LIB_NAME}_mos PROPERTIES COMPILE_FLAGS "-Werror")
640    set_target_properties(${LIB_NAME}_SOFTLET_VP PROPERTIES COMPILE_FLAGS "-Werror")
641    set_target_properties(${LIB_NAME}_SOFTLET_CODEC PROPERTIES COMPILE_FLAGS "-Werror")
642    set_target_properties(${LIB_NAME}_SOFTLET_COMMON PROPERTIES COMPILE_FLAGS "-Werror")
643endif()
644
645set(MEDIA_LINK_FLAGS "-Wl,--no-as-needed -Wl,--gc-sections -z relro -z now -fPIC")
646option(MEDIA_BUILD_HARDENING "Enable hardening (stack-protector, fortify source)" ON)
647if(MEDIA_BUILD_HARDENING)
648    set(MEDIA_LINK_FLAGS "${MEDIA_LINK_FLAGS} -fstack-protector")
649endif()
650set_target_properties(${LIB_NAME} PROPERTIES LINK_FLAGS ${MEDIA_LINK_FLAGS})
651
652set_target_properties(${LIB_NAME}        PROPERTIES PREFIX "")
653set_target_properties(${LIB_NAME_STATIC} PROPERTIES PREFIX "")
654
655set(MEDIA_LINK_EXTERNAL_LIBS "${PKG_PCIACCESS_LIBRARIES} m pthread dl")
656if(Backtrace_FOUND)
657    set(MEDIA_LINK_EXTERNAL_LIBS "${MEDIA_LINK_EXTERNAL_LIBS} ${Backtrace_LIBRARY}")
658endif()
659
660bs_ufo_link_libraries_noBsymbolic(
661    ${LIB_NAME}
662    "${INCLUDED_LIBS}"
663    "${MEDIA_LINK_EXTERNAL_LIBS}"
664)
665
666if (NOT DEFINED INCLUDED_LIBS OR "${INCLUDED_LIBS}" STREQUAL "")
667    # dep libs (gmmlib for now) can be passed through INCLUDED_LIBS, but if not, we need try to setup dep through including dep projects
668    if(NOT LIBGMM_FOUND)
669        # If we failed to setup dependency from gmmlib via pkg-config we will try to
670        # add gmmlib as a target from sources. We need to do this here, after
671        # add_library() for iHD driver since gmmlib needs this information.
672        if (NOT TARGET igfx_gmmumd_dll)
673            add_subdirectory("${BS_DIR_GMMLIB}" "${CMAKE_BINARY_DIR}/gmmlib")
674        endif()
675        if (NOT TARGET igfx_gmmumd_dll)
676            message(FATAL_ERROR "gmm library not found on the system")
677        endif()
678        set(LIBGMM_CFLAGS_OTHER -DGMM_LIB_DLL)
679        set(LIBGMM_LIBRARIES igfx_gmmumd_dll)
680    endif()
681
682    target_compile_options( ${LIB_NAME} PUBLIC ${LIBGMM_CFLAGS_OTHER})
683    target_link_libraries ( ${LIB_NAME} ${LIBGMM_LIBRARIES})
684
685    include(${MEDIA_EXT_CMAKE}/ext/media_feature_include_ext.cmake OPTIONAL)
686
687endif(NOT DEFINED INCLUDED_LIBS OR "${INCLUDED_LIBS}" STREQUAL "")
688
689############## Media Driver Static and Shared Lib ##################
690
691# post target attributes
692bs_set_post_target()
693
694if(MEDIA_RUN_TEST_SUITE AND ENABLE_KERNELS AND ENABLE_NONFREE_KERNELS AND "${CMAKE_BUILD_TYPE}" STREQUAL "ReleaseInternal")
695    add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/linux/ult)
696    include(${MEDIA_EXT}/media_softlet/ult/ult_top_cmake.cmake OPTIONAL)
697endif()
698