blob: c57f9d9bcc77062fdf2db1a271c2940232817cf3 [file] [log] [blame]
# Copyright 2016 The ChromiumOS Authors
# Distributed under the terms of the GNU General Public License v2
EAPI="7"
CROS_WORKON_PROJECT="chromiumos/platform/minigbm"
CROS_WORKON_LOCALNAME="../platform/minigbm"
inherit multilib-minimal arc-build cros-workon cros-sanitizers
DESCRIPTION="ChromeOS gralloc implementation"
HOMEPAGE="https://chromium.googlesource.com/chromiumos/platform/minigbm"
LICENSE="BSD-Google"
SLOT="0"
KEYWORDS="~*"
VIDEO_CARDS="amdgpu exynos intel marvell mediatek msm rockchip tegra virgl"
# shellcheck disable=SC2086
IUSE="$(printf 'video_cards_%s ' ${VIDEO_CARDS})"
MINI_GBM_PLATFORMS_USE=( mt8183 mt8186 mt8188g mt8192 mt8195 sc7280 )
IUSE+=" ${MINI_GBM_PLATFORMS_USE[*]/#/minigbm_platform_}"
IUSE+=" arcpp"
RDEPEND="
!<media-libs/minigbm-0.0.1-r438
x11-libs/arc-libdrm[${MULTILIB_USEDEP}]
"
DEPEND="
${RDEPEND}
video_cards_amdgpu? ( virtual/arc-opengles )
"
src_configure() {
sanitizers-setup-env
# Use arc-build base class to select the right compiler
arc-build-select-clang
# This packages uses -flto with gold, which doesn't support -Os
# or -Oz. This produces a 76KB .so, so optimizing for size is
# probably not a big deal.
cros_optimize_package_for_speed
BUILD_DIR="$(cros-workon_get_build_dir)"
append-lfs-flags
if [[ -n "${ARC_PLATFORM_SDK_VERSION}" ]]; then
append-cppflags -DANDROID_API_LEVEL="${ARC_PLATFORM_SDK_VERSION}"
fi
# TODO(gsingh): use pkgconfig
if use video_cards_intel; then
export DRV_I915=1
append-cppflags -DDRV_I915
append-cppflags -DI915_SCANOUT_Y_TILED
fi
if use video_cards_rockchip; then
export DRV_ROCKCHIP=1
append-cppflags -DDRV_ROCKCHIP
fi
if use video_cards_mediatek; then
use minigbm_platform_mt8183 && append-cppflags -DMTK_MT8183
use minigbm_platform_mt8186 && append-cppflags -DMTK_MT8186
use minigbm_platform_mt8188g && append-cppflags -DMTK_MT8188G
use minigbm_platform_mt8192 && append-cppflags -DMTK_MT8192
use minigbm_platform_mt8195 && append-cppflags -DMTK_MT8195
export DRV_MEDIATEK=1
append-cppflags -DDRV_MEDIATEK
fi
if use video_cards_msm; then
use minigbm_platform_sc7280 && append-cppflags -DSC_7280
export DRV_MSM=1
append-cppflags -DDRV_MSM
# On ARC++ UBWC causes visible green artifacts to appear during
# window resize eg. during video playback.
# This sould be removed once window resizing will handle UBWC
# correctly. See b/195709707
use arcpp && append-cppflags -DQCOM_DISABLE_COMPRESSED_NV12
fi
if use video_cards_amdgpu; then
export DRV_AMDGPU=1
append-cppflags -DDRV_AMDGPU -DHAVE_LIBDRM
fi
if use video_cards_virgl; then
append-cppflags -DVIRTIO_GPU_NEXT
fi
multilib-minimal_src_configure
}
multilib_src_compile() {
filter-flags "-DDRI_DRIVER_DIR=*"
append-cppflags -DDRI_DRIVER_DIR="/vendor/$(get_libdir)/dri"
export TARGET_DIR="${BUILD_DIR}/"
# ARCVM doesn't need gralloc.cros.so because it uses
# gralloc.minigbm_arcvm.so, which is built inside Android vendor image.
if use arcpp; then
emake -C "${S}/cros_gralloc"
fi
emake -C "${S}/cros_gralloc/gralloc0/tests/"
}
multilib_src_install() {
if use arcpp; then
exeinto "${ARC_PREFIX}/vendor/$(get_libdir)/hw/"
doexe "${BUILD_DIR}"/gralloc.cros.so
fi
into "/usr/local/"
# shellcheck disable=SC2154
newbin "${BUILD_DIR}"/gralloctest "gralloctest_${ABI}"
}
multilib_src_install_all() {
if use arcpp; then
# Install cros_gralloc header files for arc-mali-* packages
insinto "/usr/include/cros_gralloc"
doins "${S}/cros_gralloc/cros_gralloc_handle.h"
fi
}