blob: 3bf958235ae04900367eedfe1053915546af266f [file] [log] [blame]
# Copyright (c) 2017-2022, Intel Corporation
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
project( media )
find_package(PkgConfig)
find_package(X11)
bs_set_if_undefined(LIB_NAME iHD_drv_video)
option (MEDIA_RUN_TEST_SUITE "run google test module after install" ON)
include(${MEDIA_SOFTLET_CMAKE}/media_gen_flags.cmake)
include(${MEDIA_SOFTLET_CMAKE}/media_feature_flags.cmake)
if(NOT DEFINED SKIP_GMM_CHECK)
# checking dependencies
pkg_check_modules(LIBGMM REQUIRED igdgmm>=12.0.0)
if(LIBGMM_FOUND)
include_directories(BEFORE ${LIBGMM_INCLUDE_DIRS})
# link_directories() should appear before add_library and the like
# otherwise it will not take effect
link_directories(${LIBGMM_LIBRARY_DIRS})
endif()
endif(NOT DEFINED SKIP_GMM_CHECK)
message("-- media -- PLATFORM = ${PLATFORM}")
message("-- media -- ARCH = ${ARCH}")
message("-- media -- CMAKE_CURRENT_LIST_DIR = ${CMAKE_CURRENT_LIST_DIR}")
message("-- media -- INCLUDED_LIBS = ${INCLUDED_LIBS}")
message("-- media -- LIB_NAME = ${LIB_NAME}")
message("-- media -- OUTPUT_NAME = ${OUTPUT_NAME}")
message("-- media -- BUILD_TYPE/UFO_BUILD_TYPE/CMAKE_BUILD_TYPE = ${BUILD_TYPE}/${UFO_BUILD_TYPE}/${CMAKE_BUILD_TYPE}")
message("-- media -- LIBVA_INSTALL_PATH = ${LIBVA_INSTALL_PATH}")
message("-- media -- MEDIA_VERSION = ${MEDIA_VERSION}")
if(X11_FOUND)
message("-- media -- X11 Found")
pkg_check_modules(LIBVAX11 libva-x11)
if(LIBVAX11_FOUND)
message("-- media -- LIBVAX11 Found")
else()
set(X11_FOUND FALSE)
endif()
endif()
set(LIB_NAME_STATIC "${LIB_NAME}_softlet_STATIC")
set(SOFTLET_COMMON_SOURCES_ "")
set(SOFTLET_COMMON_PRIVATE_INCLUDE_DIRS_ "")
set(SOFTLET_VP_SOURCES_ "") # softlet source group
set(SOFTLET_VP_PRIVATE_INCLUDE_DIRS_ "")
set(CP_COMMON_SHARED_SOURCES_ "") # legacy and softlet shared source group
set(CP_COMMON_NEXT_SOURCES_ "") # softlet source group
set(SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_ "")
set(SOFTLET_CODEC_SOURCES_ "")
set(SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_ "")
set(CP_INTERFACE_DIRECTORIES_ "")
######################################################
#MOS LIB
set (SOFTLET_MOS_COMMON_SOURCES_ "")
set (SOFTLET_MOS_COMMON_HEADERS_ "")
set (SOFTLET_MOS_PRIVATE_SOURCES_ "")
set (SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_ "")
set (SOFTLET_MOS_PRIVATE_INCLUDE_DIRS_ "")
set (SOFTLET_MOS_PREPEND_INCLUDE_DIRS_ "")
set (SOFTLET_MOS_EXT_INCLUDE_DIRS_ "")
######################################################
################################################################################
# MHW
################################################################################
set(SOFTLET_MHW_VDBOX_PRIVATE_INCLUDE_DIRS_ "")
set(SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_ "")
set(SOFTLET_MHW_VDBOX_COMMON_SOURCES_ "")
set(SOFTLET_MHW_VDBOX_SOURCES_ "")
set(SOFTLET_MHW_SOURCES_ "")
set(SOFTLET_MHW_VDBOX_HCP_SOURCES_ "")
set(SOFTLET_MHW_VDBOX_HUC_SOURCES_ "")
set(SOFTLET_MHW_VDBOX_VDENC_SOURCES_ "")
set(SOFTLET_MHW_VDBOX_AVP_SOURCES_ "")
set(SOFTLET_MHW_VDBOX_MFX_SOURCES_ "")
set(SOFTLET_MHW_VDBOX_AQM_SOURCES_ "")
set(SOFTLET_MHW_EXT_SOURCES_ "")
# MHW settings
set(SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_
${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_}
${SOFTLET_MHW_VDBOX_PRIVATE_INCLUDE_DIRS_}
${SOFTLET_MHW_COMMON_PRIVATE_INCLUDE_DIRS_}
${SOFTLET_MHW_BLT_PRIVATE_INCLUDE_DIRS_}
${SOFTLET_MHW_RENDER_PRIVATE_INCLUDE_DIRS_}
${SOFTLET_MHW_SFC_PRIVATE_INCLUDE_DIRS_}
${SOFTLET_MHW_VEBOX_PRIVATE_INCLUDE_DIRS_}
${SOFTLET_MHW_MI_PRIVATE_INCLUDE_DIRS_}
)
set(SOFTLET_MHW_VDBOX_SOURCES_
${SOFTLET_MHW_VDBOX_SOURCES_}
${SOFTLET_MHW_VDBOX_COMMON_SOURCES_}
${SOFTLET_MHW_VDBOX_HCP_SOURCES_}
${SOFTLET_MHW_VDBOX_HUC_SOURCES_}
${SOFTLET_MHW_VDBOX_VDENC_SOURCES_}
${SOFTLET_MHW_VDBOX_AVP_SOURCES_}
${SOFTLET_MHW_VDBOX_MFX_SOURCES_}
${SOFTLET_MHW_VDBOX_AQM_SOURCES_}
${SOFTLET_MHW_EXT_SOURCES_}
)
set(SOFTLET_MHW_SOURCES_
${SOFTLET_MHW_SOURCES_}
${SOFTLET_MHW_VDBOX_SOURCES_}
${SOFTLET_MHW_COMMON_SOURCES_}
${SOFTLET_MHW_BLT_SOURCES_}
${SOFTLET_MHW_RENDER_SOURCES_}
${SOFTLET_MHW_SFC_SOURCES_}
${SOFTLET_MHW_VEBOX_SOURCES_}
${SOFTLET_MHW_MI_SOURCES_}
)
# add source
media_include_subdirectory(../media_common/agnostic)
media_include_subdirectory(../media_common/linux)
media_include_subdirectory(media_interface)
media_include_subdirectory(agnostic)
media_include_subdirectory(linux)
include(${MEDIA_SOFTLET_EXT}/media_srcs_ext.cmake OPTIONAL)
include(${MEDIA_COMMON_EXT}/media_srcs_ext.cmake OPTIONAL)
include(${MEDIA_SOFTLET_CMAKE}/media_include_paths.cmake)
include(${MEDIA_SOFTLET_CMAKE}/media_compile_flags.cmake)
#
# set platform specific defines
#
bs_set_defines()
set_source_files_properties(${SOURCES_} PROPERTIES LANGUAGE "CXX")
set_source_files_properties(${SOFTLET_COMMON_SOURCES_} PROPERTIES LANGUAGE "CXX")
set_source_files_properties(${SOFTLET_MHW_SOURCES_} PROPERTIES LANGUAGE "CXX")
set_source_files_properties(${SOFTLET_VP_SOURCES_} PROPERTIES LANGUAGE "CXX")
set_source_files_properties(${CP_COMMON_SHARED_SOURCES_} PROPERTIES LANGUAGE "CXX")
set_source_files_properties(${CP_COMMON_NEXT_SOURCES_} PROPERTIES LANGUAGE "CXX")
set_source_files_properties(${SOURCES_SSE2} PROPERTIES LANGUAGE "CXX")
set_source_files_properties(${SOURCES_SSE4} PROPERTIES LANGUAGE "CXX")
add_library(${LIB_NAME}_SOFTLET_COMMON OBJECT ${SOFTLET_COMMON_SOURCES_} ${SOFTLET_MHW_SOURCES_})
set_property(TARGET ${LIB_NAME}_SOFTLET_COMMON PROPERTY POSITION_INDEPENDENT_CODE 1)
MediaAddCommonTargetDefines(${LIB_NAME}_SOFTLET_COMMON)
target_include_directories(${LIB_NAME}_SOFTLET_COMMON BEFORE PRIVATE
${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_}
${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_}
${SOFTLET_COMMON_PRIVATE_INCLUDE_DIRS_}
${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_}
${SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_}
${SOFTLET_VP_PRIVATE_INCLUDE_DIRS_}
${CP_INTERFACE_DIRECTORIES_}
${SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_}
)
add_library(${LIB_NAME}_SOFTLET_VP OBJECT ${SOFTLET_VP_SOURCES_})
set_property(TARGET ${LIB_NAME}_SOFTLET_VP PROPERTY POSITION_INDEPENDENT_CODE 1)
MediaAddCommonTargetDefines(${LIB_NAME}_SOFTLET_VP)
target_include_directories(${LIB_NAME}_SOFTLET_VP BEFORE PRIVATE
${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_}
${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_}
${SOFTLET_COMMON_PRIVATE_INCLUDE_DIRS_}
${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_}
${SOFTLET_VP_PRIVATE_INCLUDE_DIRS_}
${SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_}
${SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_}
${CP_INTERFACE_DIRECTORIES_}
)
add_library(${LIB_NAME}_SOFTLET_CODEC OBJECT ${SOFTLET_CODEC_SOURCES_})
set_property(TARGET ${LIB_NAME}_SOFTLET_CODEC PROPERTY POSITION_INDEPENDENT_CODE 1)
MediaAddCommonTargetDefines(${LIB_NAME}_SOFTLET_CODEC)
target_include_directories(${LIB_NAME}_SOFTLET_CODEC BEFORE PRIVATE
${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_}
${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_}
${SOFTLET_COMMON_PRIVATE_INCLUDE_DIRS_}
${SOFTLET_MHW_PRIVATE_INCLUDE_DIRS_}
${SOFTLET_VP_PRIVATE_INCLUDE_DIRS_}
${SOFTLET_DDI_PUBLIC_INCLUDE_DIRS_}
${SOFTLET_CODEC_PRIVATE_INCLUDE_DIRS_}
${CP_INTERFACE_DIRECTORIES_}
)
############## MOS LIB ########################################
set_source_files_properties(${MOS_COMMON_SOURCES_} PROPERTIES LANGUAGE "CXX")
set_source_files_properties(${SOFTLET_MOS_COMMON_SOURCES_} PROPERTIES LANGUAGE "CXX")
# This is to include drm_device.h in cmrtlib, no cpp file needed.
set (SOFTLET_MOS_EXT_INCLUDE_DIRS_
${SOFTLET_MOS_EXT_INCLUDE_DIRS_}
${BS_DIR_MEDIA}/cmrtlib/linux/hardware
)
#1 softlet mos lib
add_library(${LIB_NAME}_mos_softlet OBJECT ${SOFTLET_MOS_COMMON_SOURCES_} ${SOFTLET_MOS_PRIVATE_SOURCES_})
set_property(TARGET ${LIB_NAME}_mos_softlet PROPERTY POSITION_INDEPENDENT_CODE 1)
MediaAddCommonTargetDefines(${LIB_NAME}_mos_softlet)
target_include_directories(${LIB_NAME}_mos_softlet BEFORE PRIVATE
${SOFTLET_MOS_PREPEND_INCLUDE_DIRS_}
${SOFTLET_MOS_EXT_INCLUDE_DIRS_}
${SOFTLET_MOS_PUBLIC_INCLUDE_DIRS_}
)
############## MOS LIB END ########################################
############## Media Driver Static and Shared Lib ##################
# The shared library cannot succeed until all refactor done. Comment it out.
#add_library(${LIB_NAME}_softlet SHARED
# $<TARGET_OBJECTS:${LIB_NAME}_mos_softlet>
# $<TARGET_OBJECTS:${LIB_NAME}_SOFTLET_VP>
# $<TARGET_OBJECTS:${LIB_NAME}_SOFTLET_COMMON>)
add_library(${LIB_NAME_STATIC} STATIC
$<TARGET_OBJECTS:${LIB_NAME}_mos_softlet>
$<TARGET_OBJECTS:${LIB_NAME}_SOFTLET_VP>
$<TARGET_OBJECTS:${LIB_NAME}_SOFTLET_CODEC>
$<TARGET_OBJECTS:${LIB_NAME}_SOFTLET_COMMON>)
set_target_properties(${LIB_NAME_STATIC} PROPERTIES OUTPUT_NAME ${LIB_NAME_STATIC})
option(MEDIA_BUILD_FATAL_WARNINGS "Turn compiler warnings into fatal errors" ON)
if(MEDIA_BUILD_FATAL_WARNINGS)
set_target_properties(${LIB_NAME}_mos_softlet PROPERTIES COMPILE_FLAGS "-Werror")
set_target_properties(${LIB_NAME}_SOFTLET_VP PROPERTIES COMPILE_FLAGS "-Werror")
set_target_properties(${LIB_NAME}_SOFTLET_CODEC PROPERTIES COMPILE_FLAGS "-Werror")
set_target_properties(${LIB_NAME}_SOFTLET_COMMON PROPERTIES COMPILE_FLAGS "-Werror")
endif()
set(MEDIA_LINK_FLAGS "-Wl,--no-as-needed -Wl,--gc-sections -z relro -z now -fPIC")
option(MEDIA_BUILD_HARDENING "Enable hardening (stack-protector, fortify source)" ON)
if(MEDIA_BUILD_HARDENING)
set(MEDIA_LINK_FLAGS "${MEDIA_LINK_FLAGS} -fstack-protector")
endif()
set_target_properties(${LIB_NAME}_softlet PROPERTIES LINK_FLAGS ${MEDIA_LINK_FLAGS})
set_target_properties(${LIB_NAME}_softlet PROPERTIES PREFIX "")
set_target_properties(${LIB_NAME_STATIC} PROPERTIES PREFIX "")
bs_ufo_link_libraries_noBsymbolic(
${LIB_NAME}_softlet
"${INCLUDED_LIBS}"
"${PKG_PCIACCESS_LIBRARIES} m pthread dl"
)
if (NOT DEFINED INCLUDED_LIBS OR "${INCLUDED_LIBS}" STREQUAL "")
# dep libs (gmmlib for now) can be passed through INCLUDED_LIBS, but if not, we need try to setup dep through including dep projects
if(NOT LIBGMM_FOUND)
# If we failed to setup dependency from gmmlib via pkg-config we will try to
# add gmmlib as a target from sources. We need to do this here, after
# add_library() for iHD driver since gmmlib needs this information.
if (NOT TARGET igfx_gmmumd_dll)
add_subdirectory("${BS_DIR_GMMLIB}" "${CMAKE_BINARY_DIR}/gmmlib")
endif()
if (NOT TARGET igfx_gmmumd_dll)
message(FATAL_ERROR "gmm library not found on the system")
endif()
set(LIBGMM_CFLAGS_OTHER -DGMM_LIB_DLL)
set(LIBGMM_LIBRARIES igfx_gmmumd_dll)
endif()
target_compile_options( ${LIB_NAME}_softlet PUBLIC ${LIBGMM_CFLAGS_OTHER})
target_link_libraries ( ${LIB_NAME}_softlet ${LIBGMM_LIBRARIES})
target_compile_definitions(${LIB_NAME}_softlet PUBLIC GMM_LIB_DLL)
include(${MEDIA_SOFTLET_EXT_CMAKE}/media_feature_include_ext.cmake OPTIONAL)
endif(NOT DEFINED INCLUDED_LIBS OR "${INCLUDED_LIBS}" STREQUAL "")
############## Media Driver Static and Shared Lib ##################
# post target attributes
bs_set_post_target()
if(MEDIA_RUN_TEST_SUITE AND ENABLE_KERNELS AND ENABLE_NONFREE_KERNELS)
endif()