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