| # Copyright 2015 The ChromiumOS Authors |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| EAPI=7 |
| CROS_WORKON_COMMIT="f518f3c5603a35fc39b5916c3687fa1cceb105b4" |
| CROS_WORKON_TREE="d65210909ec32e989faab1e093c2c6315d1a5256" |
| CROS_WORKON_PROJECT="chromiumos/platform/bmpblk" |
| CROS_WORKON_LOCALNAME="../platform/bmpblk" |
| CROS_WORKON_OUTOFTREE_BUILD="1" |
| |
| PYTHON_COMPAT=( python3_{6..9} ) |
| inherit cros-workon python-r1 |
| |
| DESCRIPTION="Chrome OS Firmware Bitmap Block" |
| HOMEPAGE="https://chromium.googlesource.com/chromiumos/platform/bmpblk/" |
| SRC_URI="" |
| LICENSE="BSD-Google" |
| KEYWORDS="*" |
| IUSE="physical_presence_power physical_presence_recovery unibuild" |
| REQUIRED_USE="unibuild" |
| |
| BDEPEND="${PYTHON_DEPS} |
| dev-python/pillow[${PYTHON_USEDEP}]" |
| DEPEND="chromeos-base/chromeos-config:=" |
| |
| BMPBLK_BUILD_NAMES=() |
| BMPBLK_BUILD_TARGETS=() |
| |
| src_prepare() { |
| local name |
| local bmpblk_target |
| |
| while read -r name && read -r bmpblk_target; do |
| if [[ -z "${bmpblk_target}" ]]; then |
| # Use ${ARCH}-generic to get a fallback configuration. |
| bmpblk_target="${ARCH}-generic" |
| fi |
| BMPBLK_BUILD_NAMES+=("${name}") |
| BMPBLK_BUILD_TARGETS+=("${bmpblk_target}") |
| done < <(cros_config_host get-firmware-build-combinations bmpblk) |
| |
| default |
| |
| # if fontconfig's cache is empty, prepare single use cache. |
| # That's still faster than having each process (of which there |
| # are many) re-scan the fonts |
| if find /usr/share/cache/fontconfig -maxdepth 0 -type d -empty \ |
| -exec false {} +; then |
| |
| return |
| fi |
| |
| TMPCACHE=$(mktemp -d) |
| cat > $TMPCACHE/local-conf.xml <<-EOF |
| <?xml version="1.0"?> |
| <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> |
| <fontconfig> |
| <cachedir>$TMPCACHE</cachedir> |
| <include>/etc/fonts/fonts.conf</include> |
| </fontconfig> |
| EOF |
| export FONTCONFIG_FILE=$TMPCACHE/local-conf.xml |
| fc-cache -v |
| } |
| |
| # Compile bmpblk for a certain build target. |
| # $1: bmpblk build target name |
| compile_bmpblk() { |
| local build_target="$1" |
| |
| config_detachable="$(cros_config_host get-key-value \ |
| /firmware/build-targets bmpblk "${build_target}" \ |
| /firmware detachable-ui --ignore-unset)" || \ |
| die "Unable to determine detachable ui config for ${build_target}" |
| if [[ "${config_detachable}" == "True" ]] ; then |
| export DETACHABLE=1 |
| fi |
| |
| recovery_input="$(cros_config_host get-firmware-recovery-input bmpblk "${build_target}")" || \ |
| die "Unable to determine recovery input for ${build_target}" |
| if [[ -n "${recovery_input}" ]] ; then |
| einfo "Using cros_config_host to configure recovery" |
| if [[ "${recovery_input}" == "POWER_BUTTON" ]] ; then |
| export PHYSICAL_PRESENCE="power" |
| elif [[ "${recovery_input}" == "RECOVERY_BUTTON" ]] ; then |
| export PHYSICAL_PRESENCE="recovery" |
| else |
| export PHYSICAL_PRESENCE="keyboard" |
| fi |
| else |
| # TODO(b/229906790) Remove this once USE flag support not longer needed |
| einfo "Recovery input method not found in config. Reverting to deprecated use flags" |
| if use physical_presence_power ; then |
| export PHYSICAL_PRESENCE="power" |
| elif use physical_presence_recovery ; then |
| export PHYSICAL_PRESENCE="recovery" |
| else |
| export PHYSICAL_PRESENCE="keyboard" |
| fi |
| fi |
| |
| emake OUTPUT="${WORKDIR}" BOARD="${build_target}" || \ |
| die "Unable to compile bmpblk for ${build_target}." |
| emake OUTPUT="${WORKDIR}/${build_target}" ARCHIVER="/usr/bin/archive" archive || \ |
| die "Unable to archive bmpblk for ${build_target}." |
| if [[ "${build_target}" == "${ARCH}-generic" ]]; then |
| printf "1" > "${WORKDIR}/${build_target}/vbgfx_not_scaled" |
| fi |
| } |
| |
| src_compile() { |
| local build_target |
| |
| for build_target in "${BMPBLK_BUILD_TARGETS[@]}"; do |
| # Check we haven't already compiled this target. |
| if [[ -e "${WORKDIR}/${build_target}" ]]; then |
| continue |
| fi |
| compile_bmpblk "${build_target}" |
| done |
| } |
| |
| doins_if_exist() { |
| local f |
| for f in "$@"; do |
| if [[ -r "${f}" ]]; then |
| doins "${f}" |
| fi |
| done |
| } |
| |
| # Compile bmpblk for a certain build target. |
| # $1: build combination name |
| # $2: bmpblk build target name |
| install_bmpblk() { |
| local build_combination="$1" |
| local build_target="$2" |
| |
| # Most bitmaps need to reside in the RO CBFS only. Many boards do |
| # not have enough space in the RW CBFS regions to contain all |
| # image files. |
| insinto "/firmware/cbfs-ro-compress/${build_combination}" |
| # These files aren't necessary for debug builds. When these files |
| # are missing, Depthcharge will render text-only screens. They look |
| # obviously not ready for release. |
| doins_if_exist "${WORKDIR}/${build_target}"/vbgfx.bin |
| doins_if_exist "${WORKDIR}/${build_target}"/locales |
| doins_if_exist "${WORKDIR}/${build_target}"/locale/ro/locale_*.bin |
| doins_if_exist "${WORKDIR}/${build_target}"/font.bin |
| # This flag tells the firmware_Bmpblk test to flag this build as |
| # not ready for release. |
| doins_if_exist "${WORKDIR}/${build_target}"/vbgfx_not_scaled |
| |
| # However, if specific bitmaps need to be updated via RW update, |
| # we should also install here. |
| insinto "/firmware/cbfs-rw-compress-override/${build_combination}" |
| doins_if_exist "${WORKDIR}/${build_target}"/locale/rw/rw_locale_*.bin |
| } |
| |
| src_install() { |
| local i |
| local name |
| local target |
| |
| for i in "${!BMPBLK_BUILD_TARGETS[@]}"; do |
| name="${BMPBLK_BUILD_NAMES[${i}]}" |
| target="${BMPBLK_BUILD_TARGETS[${i}]}" |
| |
| install_bmpblk "${name}" "${target}" |
| done |
| } |