| # Copyright 2019 The Chromium OS Authors. All rights reserved. |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| # @ECLASS: cros-ec-release.eclass |
| # @MAINTAINER: |
| # Chromium OS Firmware Team |
| # @BUGREPORTS: |
| # Please report bugs via http://crbug.com/new (with label Build) |
| # @VCSURL: https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/master/eclass/@ECLASS@ |
| # @BLURB: helper eclass for building Chromium OS release firmware |
| # @DESCRIPTION: |
| # Release firmware using the EC code base needs to be built from specific |
| # branches/commits and must be signed by the signing daemon. This eclass |
| # provides a standardized mechanism for that process by building for a specific |
| # EC "board" and installing it into /build/<board>/<FPMCU_board>/release |
| # so that the signer can pick it up. Note that this doesn't install the |
| # firmware into the rootfs; that has to be done by a separate ebuild since the |
| # signer runs after the build. |
| # |
| # NOTE: When making changes to this class, make sure to modify all the -9999 |
| # ebuilds that inherit it (e.g., chromeos-fpmcu-release*) to work around |
| # http://crbug.com/220902. |
| |
| if [[ -z "${_ECLASS_CROS_EC_RELEASE}" ]]; then |
| _ECLASS_CROS_EC_RELEASE="1" |
| |
| # Check for EAPI 6+. |
| case "${EAPI:-0}" in |
| 0|1|2|3|4|5) die "unsupported EAPI (${EAPI}) in eclass (${ECLASS})" ;; |
| *) ;; |
| esac |
| |
| # @ECLASS-VARIABLE: FIRMWARE_EC_BOARD |
| # @DEFAULT_UNSET |
| # @DESCRIPTION: |
| # EC "board" to build. |
| : "${FIRMWARE_EC_BOARD:=}" |
| |
| if [[ -z "${FIRMWARE_EC_BOARD}" ]]; then |
| die "FIRMWARE_EC_BOARD must be specified in ebuild." |
| fi |
| |
| # @ECLASS-VARIABLE: FIRMWARE_EC_RELEASE_REPLACE_RO |
| # @DEFAULT_UNSET |
| # @DESCRIPTION: |
| # By default the RO version in the binary will match the RW version. Use this |
| # variable to tell the build to replace the RO version with the factory-shipped |
| # version. |
| : "${FIRMWARE_EC_RELEASE_REPLACE_RO:="no"}" |
| |
| inherit cros-ec cros-ec-merge-ro |
| |
| DESCRIPTION="Chrome OS EC release firmware for ${FIRMWARE_EC_BOARD}." |
| |
| # Avoid all modification of the firmware binaries; the binaries installed on |
| # the rootfs by this ebuild must exactly match the binaries copied from git. |
| # |
| # binchecks: disable all QA checks for binaries |
| # strip: final binaries will not be stripped of debug symbols |
| RESTRICT+="binchecks strip" |
| |
| # @FUNCTION: get_ec_boards |
| # @INTERNAL |
| # @DESCRIPTION: |
| # This function overrides the get_ec_boards in cros-ec-board.eclass. |
| get_ec_boards() { |
| EC_BOARDS=("${FIRMWARE_EC_BOARD}") |
| einfo "Building for board: ${EC_BOARDS[*]}" |
| } |
| |
| # @FUNCTION: cros-ec-release_src_prepare |
| # @DESCRIPTION: |
| # Override src_prepare in cros-ec-board.eclass. |
| # Set compilation to EC source directory and make sure private |
| # source files are in source directory (if private source is available). |
| cros-ec-release_src_prepare() { |
| debug-print-function "${FUNCNAME[0]}" "$@" |
| |
| eapply_user |
| |
| # We want compilation to happen in the EC source directory. |
| S+="/platform/ec" |
| |
| # Link the private sources in the private/ sub-directory. |
| ln -sfT "${SYSROOT}/firmware/${FIRMWARE_EC_BOARD}/release/ec-private" \ |
| "${S}/private" || die |
| } |
| |
| # @FUNCTION: cros-ec-release_src_install |
| # @DESCRIPTION: |
| # Override install in cros-ec-board.eclass so that we only install |
| # FIRMWARE_EC_BOARD into release directory. |
| cros-ec-release_src_install() { |
| debug-print-function "${FUNCNAME[0]}" "$@" |
| |
| # Run the RO replacement process if requested. |
| if [[ "${FIRMWARE_EC_RELEASE_REPLACE_RO}" == "yes" ]]; then |
| cros-ec-merge-ro_src_install |
| fi |
| |
| cros-ec_set_build_env |
| |
| # Use our specified board. |
| local target="${FIRMWARE_EC_BOARD}" |
| |
| cros-ec_board_install "${target}" "${WORKDIR}/build_${target}" \ |
| "/firmware/${target}/release" "" \ |
| || die "Couldn't install ${target}" |
| } |
| |
| EXPORT_FUNCTIONS src_prepare src_install |
| |
| fi # _ECLASS_CROS_EC_RELEASE |