xref: /aosp_15_r20/external/intel-media-driver/media_softlet/media_top_cmake.cmake (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1# Copyright (c) 2017-2022, 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)
25
26bs_set_if_undefined(LIB_NAME iHD_drv_video)
27
28option (MEDIA_RUN_TEST_SUITE "run google test module after install" ON)
29include(${MEDIA_SOFTLET_CMAKE}/media_gen_flags.cmake)
30include(${MEDIA_SOFTLET_CMAKE}/media_feature_flags.cmake)
31
32
33if(NOT DEFINED SKIP_GMM_CHECK)
34    # checking dependencies
35    pkg_check_modules(LIBGMM REQUIRED igdgmm>=12.0.0)
36
37    if(LIBGMM_FOUND)
38        include_directories(BEFORE ${LIBGMM_INCLUDE_DIRS})
39        # link_directories() should appear before add_library and the like
40        # otherwise it will not take effect
41        link_directories(${LIBGMM_LIBRARY_DIRS})
42    endif()
43endif(NOT DEFINED SKIP_GMM_CHECK)
44
45message("-- media -- PLATFORM = ${PLATFORM}")
46message("-- media -- ARCH = ${ARCH}")
47message("-- media -- CMAKE_CURRENT_LIST_DIR = ${CMAKE_CURRENT_LIST_DIR}")
48message("-- media -- INCLUDED_LIBS = ${INCLUDED_LIBS}")
49message("-- media -- LIB_NAME = ${LIB_NAME}")
50message("-- media -- OUTPUT_NAME = ${OUTPUT_NAME}")
51message("-- media -- BUILD_TYPE/UFO_BUILD_TYPE/CMAKE_BUILD_TYPE = ${BUILD_TYPE}/${UFO_BUILD_TYPE}/${CMAKE_BUILD_TYPE}")
52message("-- media -- LIBVA_INSTALL_PATH = ${LIBVA_INSTALL_PATH}")
53message("-- media -- MEDIA_VERSION = ${MEDIA_VERSION}")
54if(X11_FOUND)
55    message("-- media -- X11 Found")
56    pkg_check_modules(LIBVAX11 libva-x11)
57    if(LIBVAX11_FOUND)
58        message("-- media -- LIBVAX11 Found")
59    else()
60        set(X11_FOUND FALSE)
61    endif()
62endif()
63
64set(LIB_NAME_STATIC "${LIB_NAME}_softlet_STATIC")
65set(SOFTLET_COMMON_SOURCES_ "")
66set(SOFTLET_COMMON_PRIVATE_INCLUDE_DIRS_ "")
67set(SOFTLET_VP_SOURCES_ "")       # softlet source group
68set(SOFTLET_VP_PRIVATE_INCLUDE_DIRS_ "")
69set(CP_COMMON_SHARED_SOURCES_ "") # legacy and softlet shared source group
70set(CP_COMMON_NEXT_SOURCES_ "")   # softlet source group
71set(SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_ "")
72set(SOFTLET_CODEC_SOURCES_ "")
73set(SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_ "")
74set(CP_INTERFACE_DIRECTORIES_ "")
75
76######################################################
77#MOS LIB
78set (SOFTLET_MOS_COMMON_SOURCES_ "")
79set (SOFTLET_MOS_COMMON_HEADERS_ "")
80set (SOFTLET_MOS_PRIVATE_SOURCES_ "")
81set (SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_ "")
82set (SOFTLET_MOS_PRIVATE_INCLUDE_DIRS_ "")
83set (SOFTLET_MOS_PREPEND_INCLUDE_DIRS_ "")
84set (SOFTLET_MOS_EXT_INCLUDE_DIRS_ "")
85######################################################
86################################################################################
87# MHW
88################################################################################
89set(SOFTLET_MHW_VDBOX_PRIVATE_INCLUDE_DIRS_ "")
90set(SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_ "")
91
92set(SOFTLET_MHW_VDBOX_COMMON_SOURCES_ "")
93set(SOFTLET_MHW_VDBOX_SOURCES_ "")
94set(SOFTLET_MHW_SOURCES_ "")
95set(SOFTLET_MHW_VDBOX_HCP_SOURCES_ "")
96set(SOFTLET_MHW_VDBOX_HUC_SOURCES_ "")
97set(SOFTLET_MHW_VDBOX_VDENC_SOURCES_ "")
98set(SOFTLET_MHW_VDBOX_AVP_SOURCES_ "")
99set(SOFTLET_MHW_VDBOX_MFX_SOURCES_ "")
100set(SOFTLET_MHW_VDBOX_VVCP_SOURCES_ "")
101set(SOFTLET_MHW_VDBOX_AQM_SOURCES_ "")
102set(SOFTLET_MHW_EXT_SOURCES_ "")
103
104# MHW settings
105set(SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_
106${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_}
107${SOFTLET_MHW_VDBOX_PRIVATE_INCLUDE_DIRS_}
108${SOFTLET_MHW_COMMON_PRIVATE_INCLUDE_DIRS_}
109${SOFTLET_MHW_BLT_PRIVATE_INCLUDE_DIRS_}
110${SOFTLET_MHW_RENDER_PRIVATE_INCLUDE_DIRS_}
111${SOFTLET_MHW_SFC_PRIVATE_INCLUDE_DIRS_}
112${SOFTLET_MHW_VEBOX_PRIVATE_INCLUDE_DIRS_}
113${SOFTLET_MHW_MI_PRIVATE_INCLUDE_DIRS_}
114)
115
116set(SOFTLET_MHW_VDBOX_SOURCES_
117${SOFTLET_MHW_VDBOX_SOURCES_}
118${SOFTLET_MHW_VDBOX_COMMON_SOURCES_}
119${SOFTLET_MHW_VDBOX_HCP_SOURCES_}
120${SOFTLET_MHW_VDBOX_HUC_SOURCES_}
121${SOFTLET_MHW_VDBOX_VDENC_SOURCES_}
122${SOFTLET_MHW_VDBOX_AVP_SOURCES_}
123${SOFTLET_MHW_VDBOX_MFX_SOURCES_}
124${SOFTLET_MHW_VDBOX_VVCP_SOURCES_}
125${SOFTLET_MHW_VDBOX_AQM_SOURCES_}
126${SOFTLET_MHW_EXT_SOURCES_}
127)
128
129set(SOFTLET_MHW_SOURCES_
130${SOFTLET_MHW_SOURCES_}
131${SOFTLET_MHW_VDBOX_SOURCES_}
132${SOFTLET_MHW_COMMON_SOURCES_}
133${SOFTLET_MHW_BLT_SOURCES_}
134${SOFTLET_MHW_RENDER_SOURCES_}
135${SOFTLET_MHW_SFC_SOURCES_}
136${SOFTLET_MHW_VEBOX_SOURCES_}
137${SOFTLET_MHW_MI_SOURCES_}
138)
139
140# add source
141media_include_subdirectory(../media_common/agnostic)
142media_include_subdirectory(../media_common/linux)
143media_include_subdirectory(media_interface)
144
145media_include_subdirectory(agnostic)
146media_include_subdirectory(linux)
147
148include(${MEDIA_SOFTLET_EXT}/media_srcs_ext.cmake OPTIONAL)
149include(${MEDIA_COMMON_EXT}/media_srcs_ext.cmake OPTIONAL)
150
151include(${MEDIA_SOFTLET_CMAKE}/media_include_paths.cmake)
152
153include(${MEDIA_SOFTLET_CMAKE}/media_compile_flags.cmake)
154
155#
156# set platform specific defines
157#
158bs_set_defines()
159
160
161set_source_files_properties(${SOURCES_} PROPERTIES LANGUAGE "CXX")
162set_source_files_properties(${SOFTLET_COMMON_SOURCES_} PROPERTIES LANGUAGE "CXX")
163set_source_files_properties(${SOFTLET_MHW_SOURCES_} PROPERTIES LANGUAGE "CXX")
164set_source_files_properties(${SOFTLET_VP_SOURCES_} PROPERTIES LANGUAGE "CXX")
165set_source_files_properties(${CP_COMMON_SHARED_SOURCES_} PROPERTIES LANGUAGE "CXX")
166set_source_files_properties(${CP_COMMON_NEXT_SOURCES_} PROPERTIES LANGUAGE "CXX")
167set_source_files_properties(${SOURCES_SSE2} PROPERTIES LANGUAGE "CXX")
168set_source_files_properties(${SOURCES_SSE4} PROPERTIES LANGUAGE "CXX")
169
170add_library(${LIB_NAME}_SOFTLET_COMMON OBJECT ${SOFTLET_COMMON_SOURCES_} ${SOFTLET_MHW_SOURCES_})
171set_property(TARGET ${LIB_NAME}_SOFTLET_COMMON PROPERTY POSITION_INDEPENDENT_CODE 1)
172MediaAddCommonTargetDefines(${LIB_NAME}_SOFTLET_COMMON)
173target_include_directories(${LIB_NAME}_SOFTLET_COMMON BEFORE PRIVATE
174    ${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_}
175    ${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_}
176    ${SOFTLET_COMMON_PRIVATE_INCLUDE_DIRS_}
177    ${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_}
178    ${SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_}
179    ${SOFTLET_VP_PRIVATE_INCLUDE_DIRS_}
180    ${CP_INTERFACE_DIRECTORIES_}
181    ${SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_}
182)
183
184add_library(${LIB_NAME}_SOFTLET_VP OBJECT ${SOFTLET_VP_SOURCES_})
185set_property(TARGET ${LIB_NAME}_SOFTLET_VP PROPERTY POSITION_INDEPENDENT_CODE 1)
186MediaAddCommonTargetDefines(${LIB_NAME}_SOFTLET_VP)
187target_include_directories(${LIB_NAME}_SOFTLET_VP BEFORE PRIVATE
188    ${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_}
189    ${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_}
190    ${SOFTLET_COMMON_PRIVATE_INCLUDE_DIRS_}
191    ${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_}
192    ${SOFTLET_VP_PRIVATE_INCLUDE_DIRS_}
193    ${SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_}
194    ${SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_}
195    ${CP_INTERFACE_DIRECTORIES_}
196)
197
198add_library(${LIB_NAME}_SOFTLET_CODEC OBJECT ${SOFTLET_CODEC_SOURCES_})
199set_property(TARGET ${LIB_NAME}_SOFTLET_CODEC PROPERTY POSITION_INDEPENDENT_CODE 1)
200MediaAddCommonTargetDefines(${LIB_NAME}_SOFTLET_CODEC)
201target_include_directories(${LIB_NAME}_SOFTLET_CODEC BEFORE PRIVATE
202    ${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_}
203    ${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_}
204    ${SOFTLET_COMMON_PRIVATE_INCLUDE_DIRS_}
205    ${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_}
206    ${SOFTLET_VP_PRIVATE_INCLUDE_DIRS_}
207    ${SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_}
208    ${SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_}
209    ${CP_INTERFACE_DIRECTORIES_}
210)
211############## MOS LIB ########################################
212set_source_files_properties(${MOS_COMMON_SOURCES_} PROPERTIES LANGUAGE "CXX")
213set_source_files_properties(${SOFTLET_MOS_COMMON_SOURCES_} PROPERTIES LANGUAGE "CXX")
214
215# This is to include drm_device.h in cmrtlib, no cpp file needed.
216set (SOFTLET_MOS_EXT_INCLUDE_DIRS_
217${SOFTLET_MOS_EXT_INCLUDE_DIRS_}
218${BS_DIR_MEDIA}/cmrtlib/linux/hardware
219)
220
221
222#1 softlet mos lib
223add_library(${LIB_NAME}_mos_softlet OBJECT ${SOFTLET_MOS_COMMON_SOURCES_} ${SOFTLET_MOS_PRIVATE_SOURCES_})
224set_property(TARGET ${LIB_NAME}_mos_softlet PROPERTY POSITION_INDEPENDENT_CODE 1)
225MediaAddCommonTargetDefines(${LIB_NAME}_mos_softlet)
226target_include_directories(${LIB_NAME}_mos_softlet BEFORE PRIVATE
227    ${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_}
228    ${SOFTLET_MOS_EXT_INCLUDE_DIRS_}
229    ${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_}
230)
231############## MOS LIB END ########################################
232
233############## Media Driver Static and Shared Lib ##################
234# The shared library cannot succeed until all refactor done. Comment it out.
235#add_library(${LIB_NAME}_softlet SHARED
236#    $<TARGET_OBJECTS:${LIB_NAME}_mos_softlet>
237#    $<TARGET_OBJECTS:${LIB_NAME}_SOFTLET_VP>
238#    $<TARGET_OBJECTS:${LIB_NAME}_SOFTLET_COMMON>)
239
240add_library(${LIB_NAME_STATIC} STATIC
241    $<TARGET_OBJECTS:${LIB_NAME}_mos_softlet>
242    $<TARGET_OBJECTS:${LIB_NAME}_SOFTLET_VP>
243    $<TARGET_OBJECTS:${LIB_NAME}_SOFTLET_CODEC>
244    $<TARGET_OBJECTS:${LIB_NAME}_SOFTLET_COMMON>)
245
246set_target_properties(${LIB_NAME_STATIC} PROPERTIES OUTPUT_NAME ${LIB_NAME_STATIC})
247
248option(MEDIA_BUILD_FATAL_WARNINGS "Turn compiler warnings into fatal errors" ON)
249if(MEDIA_BUILD_FATAL_WARNINGS)
250    set_target_properties(${LIB_NAME}_mos_softlet PROPERTIES COMPILE_FLAGS "-Werror")
251    set_target_properties(${LIB_NAME}_SOFTLET_VP PROPERTIES COMPILE_FLAGS "-Werror")
252    set_target_properties(${LIB_NAME}_SOFTLET_CODEC PROPERTIES COMPILE_FLAGS "-Werror")
253    set_target_properties(${LIB_NAME}_SOFTLET_COMMON PROPERTIES COMPILE_FLAGS "-Werror")
254endif()
255
256set(MEDIA_LINK_FLAGS "-Wl,--no-as-needed -Wl,--gc-sections -z relro -z now -fPIC")
257option(MEDIA_BUILD_HARDENING "Enable hardening (stack-protector, fortify source)" ON)
258if(MEDIA_BUILD_HARDENING)
259    set(MEDIA_LINK_FLAGS "${MEDIA_LINK_FLAGS} -fstack-protector")
260endif()
261set_target_properties(${LIB_NAME}_softlet PROPERTIES LINK_FLAGS ${MEDIA_LINK_FLAGS})
262
263set_target_properties(${LIB_NAME}_softlet        PROPERTIES PREFIX "")
264set_target_properties(${LIB_NAME_STATIC} PROPERTIES PREFIX "")
265
266bs_ufo_link_libraries_noBsymbolic(
267    ${LIB_NAME}_softlet
268    "${INCLUDED_LIBS}"
269    "${PKG_PCIACCESS_LIBRARIES} m pthread dl"
270)
271
272if (NOT DEFINED INCLUDED_LIBS OR "${INCLUDED_LIBS}" STREQUAL "")
273    # dep libs (gmmlib for now) can be passed through INCLUDED_LIBS, but if not, we need try to setup dep through including dep projects
274    if(NOT LIBGMM_FOUND)
275        # If we failed to setup dependency from gmmlib via pkg-config we will try to
276        # add gmmlib as a target from sources. We need to do this here, after
277        # add_library() for iHD driver since gmmlib needs this information.
278        if (NOT TARGET igfx_gmmumd_dll)
279            add_subdirectory("${BS_DIR_GMMLIB}" "${CMAKE_BINARY_DIR}/gmmlib")
280        endif()
281        if (NOT TARGET igfx_gmmumd_dll)
282            message(FATAL_ERROR "gmm library not found on the system")
283        endif()
284        set(LIBGMM_CFLAGS_OTHER -DGMM_LIB_DLL)
285        set(LIBGMM_LIBRARIES igfx_gmmumd_dll)
286    endif()
287
288    target_compile_options( ${LIB_NAME}_softlet PUBLIC ${LIBGMM_CFLAGS_OTHER})
289    target_link_libraries ( ${LIB_NAME}_softlet ${LIBGMM_LIBRARIES})
290
291    target_compile_definitions(${LIB_NAME}_softlet PUBLIC GMM_LIB_DLL)
292    include(${MEDIA_SOFTLET_EXT_CMAKE}/media_feature_include_ext.cmake OPTIONAL)
293
294endif(NOT DEFINED INCLUDED_LIBS OR "${INCLUDED_LIBS}" STREQUAL "")
295
296############## Media Driver Static and Shared Lib ##################
297
298# post target attributes
299bs_set_post_target()
300
301if(MEDIA_RUN_TEST_SUITE AND ENABLE_KERNELS AND ENABLE_NONFREE_KERNELS)
302
303endif()
304