blob: 29f4d86f4d723892acf6513c184e94e3ce94a059 [file] [log] [blame]
Hung-Te Lin5febb1e2013-03-12 17:56:35 +08001# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
Dave Parker515cdcd2011-03-08 17:58:43 -08002# Distributed under the terms of the GNU General Public License v2
Dave Parker515cdcd2011-03-08 17:58:43 -08003#
4# Original Author: The Chromium OS Authors <chromium-os-dev@chromium.org>
5# Purpose: Generate shell script containing firmware update bundle.
6#
7
Hung-Te Lin2ef30542013-06-04 14:12:59 -07008inherit cros-workon
Dave Parkerd7d4c402011-04-15 08:01:34 -07009
Hung-Te Lin5febb1e2013-03-12 17:56:35 +080010# @ECLASS-VARIABLE: CROS_FIRMWARE_BCS_OVERLAY
11# @DESCRIPTION: (Optional) Name of board overlay on Binary Component Server
12: ${CROS_FIRMWARE_BCS_OVERLAY:=${BOARD_OVERLAY##*/}}
13
Dave Parker914ef512011-05-10 09:55:05 -070014# @ECLASS-VARIABLE: CROS_FIRMWARE_MAIN_IMAGE
Hung-Te Linc8c15d92013-01-10 16:19:40 +080015# @DESCRIPTION: (Optional) Location of system firmware (BIOS) image
Dave Parker914ef512011-05-10 09:55:05 -070016: ${CROS_FIRMWARE_MAIN_IMAGE:=}
Dave Parker515cdcd2011-03-08 17:58:43 -080017
Hung-Te Linc8c15d92013-01-10 16:19:40 +080018# @ECLASS-VARIABLE: CROS_FIRMWARE_MAIN_RW_IMAGE
19# @DESCRIPTION: (Optional) Location of RW system firmware image
20: ${CROS_FIRMWARE_MAIN_RW_IMAGE:=}
21
Hung-Te Lin716ff012014-06-07 01:24:12 +080022# @ECLASS-VARIABLE: CROS_FIRMWARE_STABLE_MAIN_VERSION
23# @DESCRIPTION: (Optional) Version name of stabled system firmware
24: ${CROS_FIRMWARE_STABLE_MAIN_VERSION:=}
Hung-Te Linaeed5992013-09-27 21:28:23 +080025
Hung-Te Lin20c51232013-05-02 12:44:11 +080026# @ECLASS-VARIABLE: CROS_FIRMWARE_BUILD_MAIN_RW_IMAGE
27# @DESCRIPTION: (Optional) Re-sign and generate a RW system firmware image.
28: ${CROS_FIRMWARE_BUILD_MAIN_RW_IMAGE:=}
29
Dave Parker914ef512011-05-10 09:55:05 -070030# @ECLASS-VARIABLE: CROS_FIRMWARE_EC_IMAGE
Dave Parker515cdcd2011-03-08 17:58:43 -080031# @DESCRIPTION: (Optional) Location of EC firmware image
Dave Parker914ef512011-05-10 09:55:05 -070032: ${CROS_FIRMWARE_EC_IMAGE:=}
Dave Parker515cdcd2011-03-08 17:58:43 -080033
Dave Parkerd7d4c402011-04-15 08:01:34 -070034# @ECLASS-VARIABLE: CROS_FIRMWARE_EC_VERSION
Dave Parker914ef512011-05-10 09:55:05 -070035# @DESCRIPTION: (Optional) Version name of EC firmware
Hung-Te Lin0cde8bf2012-08-07 18:22:26 +080036: ${CROS_FIRMWARE_EC_VERSION:=}
Dave Parker515cdcd2011-03-08 17:58:43 -080037
Hung-Te Lin716ff012014-06-07 01:24:12 +080038# @ECLASS-VARIABLE: CROS_FIRMWARE_STABLE_EC_VERSION
39# @DESCRIPTION: (Optional) Version name of stabled EC firmware
40: ${CROS_FIRMWARE_STABLE_EC_VERSION:=}
Hung-Te Linaeed5992013-09-27 21:28:23 +080041
Duncan Laurie119f1d82014-08-18 09:31:39 -070042# @ECLASS-VARIABLE: CROS_FIRMWARE_PD_IMAGE
43# @DESCRIPTION: (Optional) Location of PD firmware image
44: ${CROS_FIRMWARE_PD_IMAGE:=}
45
46# @ECLASS-VARIABLE: CROS_FIRMWARE_PD_VERSION
47# @DESCRIPTION: (Optional) Version name of PD firmware
48: ${CROS_FIRMWARE_PD_VERSION:=}
49
50# @ECLASS-VARIABLE: CROS_FIRMWARE_STABLE_PD_VERSION
51# @DESCRIPTION: (Optional) Version name of stabled PD firmware
52: ${CROS_FIRMWARE_STABLE_PD_VERSION:=}
53
Hung-Te Lin890a2262011-05-19 20:22:41 +080054# @ECLASS-VARIABLE: CROS_FIRMWARE_PLATFORM
55# @DESCRIPTION: (Optional) Platform name of firmware
56: ${CROS_FIRMWARE_PLATFORM:=}
57
Hung-Te Lin35cf1a12011-07-21 23:16:35 +080058# @ECLASS-VARIABLE: CROS_FIRMWARE_SCRIPT
59# @DESCRIPTION: (Optional) Entry script file name of updater
60: ${CROS_FIRMWARE_SCRIPT:=}
61
Dave Parker515cdcd2011-03-08 17:58:43 -080062# @ECLASS-VARIABLE: CROS_FIRMWARE_BINARY
63# @DESCRIPTION: (Optional) location of custom flashrom tool
64: ${CROS_FIRMWARE_FLASHROM_BINARY:=}
65
66# @ECLASS-VARIABLE: CROS_FIRMWARE_EXTRA_LIST
Hung-Te Line2e4a6b2011-08-31 18:57:26 +080067# @DESCRIPTION: (Optional) Semi-colon separated list of additional resources
Dave Parker515cdcd2011-03-08 17:58:43 -080068: ${CROS_FIRMWARE_EXTRA_LIST:=}
69
Hung-Te Lin0c59d0a2012-08-16 13:18:09 +080070# @ECLASS-VARIABLE: CROS_FIRMWARE_FORCE_UPDATE
71# @DESCRIPTION: (Optional) Always add "force update firmware" tag.
72: ${CROS_FIRMWARE_FORCE_UPDATE:=}
73
Hung-Te Lin5febb1e2013-03-12 17:56:35 +080074# Check for EAPI 2+
75case "${EAPI:-0}" in
76 4|3|2) ;;
77 *) die "unsupported EAPI" ;;
78esac
79
Hung-Te Lin0cde8bf2012-08-07 18:22:26 +080080# $board-overlay/make.conf may contain these flags to always create "firmware
81# from source".
Gabe Black15156612013-03-16 02:47:57 -070082IUSE="bootimage cros_ec depthcharge"
Hung-Te Lin0cde8bf2012-08-07 18:22:26 +080083
Dave Parker515cdcd2011-03-08 17:58:43 -080084# Some tools (flashrom, iotools, mosys, ...) were bundled in the updater so we
85# don't write RDEPEND=$DEPEND. RDEPEND should have an explicit list of what it
86# needs to extract and execute the updater.
Dave Parkerd7d4c402011-04-15 08:01:34 -070087DEPEND="
Dave Parkerd7d4c402011-04-15 08:01:34 -070088 >=chromeos-base/vboot_reference-1.0-r230
Mike Frysinger2d94c622012-09-13 23:59:17 -040089 chromeos-base/vpd
Mike Frysinger877662c2011-10-19 10:45:46 -040090 dev-util/shflags
Doug Anderson5b9cb862013-06-18 09:21:43 -070091 >=sys-apps/flashrom-0.9.4-r269
Dave Parker914ef512011-05-10 09:55:05 -070092 sys-apps/mosys
Dave Parkerd7d4c402011-04-15 08:01:34 -070093 "
Dave Parker515cdcd2011-03-08 17:58:43 -080094
Hung-Te Lin0cde8bf2012-08-07 18:22:26 +080095# Build firmware from source.
96DEPEND="$DEPEND
97 bootimage? ( sys-boot/chromeos-bootimage )
98 cros_ec? ( chromeos-base/chromeos-ec )
99 "
100
J. Richard Barnette7a4385c2011-05-03 16:54:57 -0700101# Maintenance note: The factory install shim downloads and executes
102# the firmware updater. Consequently, runtime dependencies for the
103# updater are also runtime dependencies for the install shim.
104#
105# The contents of RDEPEND below must also be present in the
106# chromeos-base/chromeos-factoryinstall ebuild in PROVIDED_DEPEND.
107# If you make any change to the list below, you may need to make a
108# matching change in the factory install ebuild.
109#
Dave Parker515cdcd2011-03-08 17:58:43 -0800110# TODO(hungte) remove gzip/tar if we have busybox
111RDEPEND="
112 app-arch/gzip
113 app-arch/sharutils
J. Richard Barnette7a4385c2011-05-03 16:54:57 -0700114 app-arch/tar
115 chromeos-base/vboot_reference
J. Richard Barnette7a4385c2011-05-03 16:54:57 -0700116 sys-apps/util-linux"
Dave Parker515cdcd2011-03-08 17:58:43 -0800117
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800118RESTRICT="mirror"
119
120# Local variables.
Dave Parker515cdcd2011-03-08 17:58:43 -0800121
122UPDATE_SCRIPT="chromeos-firmwareupdate"
Dave Parker914ef512011-05-10 09:55:05 -0700123FW_IMAGE_LOCATION=""
Hung-Te Linc8c15d92013-01-10 16:19:40 +0800124FW_RW_IMAGE_LOCATION=""
Dave Parker914ef512011-05-10 09:55:05 -0700125EC_IMAGE_LOCATION=""
Duncan Laurie119f1d82014-08-18 09:31:39 -0700126PD_IMAGE_LOCATION=""
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800127EXTRA_LOCATIONS=()
Hung-Te Linbcecb3e2013-03-13 13:42:56 +0800128
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800129# New SRC_URI based approach.
Dave Parkerd7d4c402011-04-15 08:01:34 -0700130
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800131_add_source() {
Hung-Te Linbcecb3e2013-03-13 13:42:56 +0800132 local var="$1"
133 local input="${!var}"
134 local protocol="${input%%://*}"
135 local uri="${input#*://}"
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800136 local overlay="${CROS_FIRMWARE_BCS_OVERLAY#overlay-}"
137 local user="bcs-${overlay#variant-*-}"
138 local bcs_url="gs://chromeos-binaries/HOME/${user}/overlay-${overlay}"
Dave Parkerd7d4c402011-04-15 08:01:34 -0700139
Hung-Te Linbcecb3e2013-03-13 13:42:56 +0800140 # Input without ${protocol} are local files (ex, ${FILESDIR}/file).
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800141 case "${protocol}" in
142 bcs)
143 SRC_URI+=" ${bcs_url}/${CATEGORY}/${PN}/${uri}"
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800144 ;;
Jay Kimf4058d62014-02-04 16:03:34 -0800145 http|https|gs)
Hung-Te Linbcecb3e2013-03-13 13:42:56 +0800146 SRC_URI+=" ${input}"
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800147 ;;
148 esac
149}
150
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800151_unpack_archive() {
Hung-Te Linbcecb3e2013-03-13 13:42:56 +0800152 local var="$1"
153 local input="${!var}"
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800154 local archive="${input##*/}"
155 local folder="${S}/.dist/${archive}"
Hung-Te Linbcecb3e2013-03-13 13:42:56 +0800156
157 # Remote source files (bcs://, http://, ...) are downloaded into
158 # ${DISTDIR}, which is the default location for command 'unpack'.
159 # For any other files (ex, ${FILESDIR}/file), use complete file path.
160 local unpack_name="${input}"
161 if [[ "${unpack_name}" =~ "://" ]]; then
162 input="${DISTDIR}/${archive}"
163 unpack_name="${archive}"
164 fi
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800165
166 case "${input##*.}" in
167 tar|tbz2|tbz|bz|gz|tgz|zip|xz) ;;
168 *)
Hung-Te Linbcecb3e2013-03-13 13:42:56 +0800169 eval ${var}="'${input}'"
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800170 return
171 ;;
172 esac
173
174 mkdir -p "${folder}" || die "Not able to create ${folder}"
175 (cd "${folder}" && unpack "${unpack_name}") ||
176 die "Failed to unpack ${unpack_name}."
177 local contents=($(ls "${folder}"))
178 if [[ ${#contents[@]} -gt 1 ]]; then
179 # Currently we can only serve one file (or directory).
180 ewarn "WARNING: package ${input} contains multiple files."
181 fi
Hung-Te Linbcecb3e2013-03-13 13:42:56 +0800182 eval ${var}="'${folder}/${contents}'"
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800183}
184
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800185cros-firmware_src_unpack() {
186 cros-workon_src_unpack
Hung-Te Linbcecb3e2013-03-13 13:42:56 +0800187 local i
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800188
Duncan Laurie119f1d82014-08-18 09:31:39 -0700189 for i in {FW,FW_RW,EC,PD}_IMAGE_LOCATION; do
Hung-Te Linbcecb3e2013-03-13 13:42:56 +0800190 _unpack_archive ${i}
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800191 done
Hung-Te Linbcecb3e2013-03-13 13:42:56 +0800192
193 for ((i = 0; i < ${#EXTRA_LOCATIONS[@]}; i++)); do
194 _unpack_archive "EXTRA_LOCATIONS[$i]"
195 done
Dave Parkerd7d4c402011-04-15 08:01:34 -0700196}
197
Hung-Te Lin0cde8bf2012-08-07 18:22:26 +0800198_add_param() {
199 local prefix="$1"
200 local value="$2"
201
202 if [[ -n "$value" ]]; then
203 echo "$prefix '$value' "
204 fi
205}
206
207_add_bool_param() {
208 local prefix="$1"
209 local value="$2"
210
211 if [[ -n "$value" ]]; then
212 echo "$prefix "
213 fi
214}
215
Dave Parker515cdcd2011-03-08 17:58:43 -0800216cros-firmware_src_compile() {
Hung-Te Lin0cde8bf2012-08-07 18:22:26 +0800217 local image_cmd="" ext_cmd="" local_image_cmd=""
218 local root="${ROOT%/}"
Dave Parkerd7d4c402011-04-15 08:01:34 -0700219
Dave Parker914ef512011-05-10 09:55:05 -0700220 # Prepare images
Hung-Te Lin0cde8bf2012-08-07 18:22:26 +0800221 image_cmd+="$(_add_param -b "${FW_IMAGE_LOCATION}")"
222 image_cmd+="$(_add_param -e "${EC_IMAGE_LOCATION}")"
Duncan Laurie119f1d82014-08-18 09:31:39 -0700223 image_cmd+="$(_add_param -p "${PD_IMAGE_LOCATION}")"
Hung-Te Linc8c15d92013-01-10 16:19:40 +0800224 image_cmd+="$(_add_param -w "${FW_RW_IMAGE_LOCATION}")"
Hung-Te Lin0cde8bf2012-08-07 18:22:26 +0800225 image_cmd+="$(_add_param --ec_version "${CROS_FIRMWARE_EC_VERSION}")"
Duncan Laurie119f1d82014-08-18 09:31:39 -0700226 image_cmd+="$(_add_param --pd_version "${CROS_FIRMWARE_PD_VERSION}")"
Hung-Te Lin20c51232013-05-02 12:44:11 +0800227 image_cmd+="$(_add_bool_param --create_bios_rw_image \
228 "${CROS_FIRMWARE_BUILD_MAIN_RW_IMAGE}")"
Dave Parker515cdcd2011-03-08 17:58:43 -0800229
Dave Parker914ef512011-05-10 09:55:05 -0700230 # Prepare extra commands
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800231 ext_cmd+="$(_add_param --extra "$(IFS=:; echo "${EXTRA_LOCATIONS[*]}")")"
Hung-Te Lin0cde8bf2012-08-07 18:22:26 +0800232 ext_cmd+="$(_add_param --script "${CROS_FIRMWARE_SCRIPT}")"
233 ext_cmd+="$(_add_param --platform "${CROS_FIRMWARE_PLATFORM}")"
234 ext_cmd+="$(_add_param --flashrom "${CROS_FIRMWARE_FLASHROM_BINARY}")"
235 ext_cmd+="$(_add_param --tool_base \
236 "$root/firmware/utils:$root/usr/sbin:$root/usr/bin")"
Hung-Te Lin716ff012014-06-07 01:24:12 +0800237 ext_cmd+="$(_add_param --stable_main_version \
238 "${CROS_FIRMWARE_STABLE_MAIN_VERSION}")"
239 ext_cmd+="$(_add_param --stable_ec_version \
240 "${CROS_FIRMWARE_STABLE_EC_VERSION}")"
Duncan Laurie119f1d82014-08-18 09:31:39 -0700241 ext_cmd+="$(_add_param --stable_pd_version \
242 "${CROS_FIRMWARE_STABLE_PD_VERSION}")"
Dave Parker515cdcd2011-03-08 17:58:43 -0800243
Dave Parker914ef512011-05-10 09:55:05 -0700244 # Pack firmware update script!
Dave Parker515cdcd2011-03-08 17:58:43 -0800245 if [ -z "$image_cmd" ]; then
Dave Parker914ef512011-05-10 09:55:05 -0700246 # Create an empty update script for the generic case
Dave Parker515cdcd2011-03-08 17:58:43 -0800247 # (no need to update)
248 einfo "Building empty firmware update script"
249 echo -n > ${UPDATE_SCRIPT}
250 else
251 # create a new script
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800252 einfo "Build ${BOARD_USE} firmware updater: $image_cmd $ext_cmd"
Hung-Te Lin0cde8bf2012-08-07 18:22:26 +0800253 ./pack_firmware.sh $image_cmd $ext_cmd -o $UPDATE_SCRIPT ||
Dave Parker914ef512011-05-10 09:55:05 -0700254 die "Cannot pack firmware."
Dave Parker515cdcd2011-03-08 17:58:43 -0800255 fi
Hung-Te Lin0cde8bf2012-08-07 18:22:26 +0800256
257 # Create local updaters
258 local local_image_cmd="" output_bom output_file
259 if use cros_ec; then
260 local_image_cmd+="-e $root/firmware/ec.bin "
261 fi
262 if use bootimage; then
Gabe Black15156612013-03-16 02:47:57 -0700263 if use depthcharge; then
264 einfo "Updater for local fw"
Hung-Te Lin5d051c02013-06-04 18:34:57 -0700265 output_file="updater.sh"
Gabe Black15156612013-03-16 02:47:57 -0700266 ./pack_firmware.sh -b $root/firmware/image.bin \
Hung-Te Lin5d051c02013-06-04 18:34:57 -0700267 -o $output_file $local_image_cmd $ext_cmd ||
Hung-Te Lin0cde8bf2012-08-07 18:22:26 +0800268 die "Cannot pack local firmware."
Hung-Te Lin5d051c02013-06-04 18:34:57 -0700269 if [[ -z "$image_cmd" ]]; then
270 # When no pre-built binaries are available,
271 # dupe local updater to system updater.
272 cp -f "$output_file" "$UPDATE_SCRIPT"
273 fi
Gabe Black15156612013-03-16 02:47:57 -0700274 else
275 for fw_file in $root/firmware/image-*.bin; do
276 einfo "Updater for local fw - $fw_file"
277 output_bom=${fw_file##*/image-}
278 output_bom=${output_bom%%.bin}
279 output_file=updater-$output_bom.sh
280 ./pack_firmware.sh -b $fw_file -o $output_file \
281 $local_image_cmd $ext_cmd ||
282 die "Cannot pack local firmware."
283 done
284 fi
Hung-Te Lin0cde8bf2012-08-07 18:22:26 +0800285 elif use cros_ec; then
286 # TODO(hungte) Deal with a platform that has only EC and no
287 # BIOS, which is usually incorrect configuration.
Bernie Thompson56bc05b2014-02-03 14:26:02 -0800288 # We only warn here to allow for BCS based firmware to still generate
289 # a proper chromeos-firmwareupdate update script.
290 ewarn "WARNING: platform has no local BIOS, EC only is not supported."
291 ewarn "Not generating a locally built firmware update script."
Hung-Te Lin0cde8bf2012-08-07 18:22:26 +0800292 fi
Dave Parker515cdcd2011-03-08 17:58:43 -0800293}
294
295cros-firmware_src_install() {
296 # install the main updater program
Dave Parker914ef512011-05-10 09:55:05 -0700297 dosbin $UPDATE_SCRIPT || die "Failed to install update script."
Dave Parker515cdcd2011-03-08 17:58:43 -0800298
Dave Parkerd7d4c402011-04-15 08:01:34 -0700299 # install factory wipe script
300 dosbin firmware-factory-wipe
Hung-Te Lin0cde8bf2012-08-07 18:22:26 +0800301
302 # install updaters for firmware-from-source archive.
303 if use bootimage; then
304 exeinto /firmware
Gabe Black15156612013-03-16 02:47:57 -0700305 doexe updater*.sh
Hung-Te Lin0cde8bf2012-08-07 18:22:26 +0800306 fi
Hung-Te Lin0c59d0a2012-08-16 13:18:09 +0800307
308 # The "force_update_firmware" tag file is used by chromeos-installer.
309 if [ -n "$CROS_FIRMWARE_FORCE_UPDATE" ]; then
310 insinto /root
311 touch .force_update_firmware
312 doins .force_update_firmware
313 fi
Dave Parker515cdcd2011-03-08 17:58:43 -0800314}
315
Hung-Te Linbcecb3e2013-03-13 13:42:56 +0800316# @FUNCTION: _expand_list
317# @USAGE <var> <ifs> <string>
318# @DESCRIPTION:
319# Internal function to expand a string (separated by ifs) into bash array.
320_expand_list() {
321 local var="$1" ifs="$2"
322 IFS="${ifs}" read -r -a ${var} <<<"${*:3}"
323}
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800324
Hung-Te Linbcecb3e2013-03-13 13:42:56 +0800325# @FUNCTION: cros-firmware_setup_source
326# @DESCRIPTION:
327# Configures all firmware binary source files to SRC_URI, and updates local
328# destination mapping (*_LOCATION). Must be invoked after CROS_FIRMWARE_*_IMAGE
329# are set.
330cros-firmware_setup_source() {
331 local i
332
333 FW_IMAGE_LOCATION="${CROS_FIRMWARE_MAIN_IMAGE}"
334 FW_RW_IMAGE_LOCATION="${CROS_FIRMWARE_MAIN_RW_IMAGE}"
335 EC_IMAGE_LOCATION="${CROS_FIRMWARE_EC_IMAGE}"
Duncan Laurie119f1d82014-08-18 09:31:39 -0700336 PD_IMAGE_LOCATION="${CROS_FIRMWARE_PD_IMAGE}"
Hung-Te Linbcecb3e2013-03-13 13:42:56 +0800337 _expand_list EXTRA_LOCATIONS ";" "${CROS_FIRMWARE_EXTRA_LIST}"
338
Duncan Laurie119f1d82014-08-18 09:31:39 -0700339 for i in {FW,FW_RW,EC,PD}_IMAGE_LOCATION; do
Hung-Te Linbcecb3e2013-03-13 13:42:56 +0800340 _add_source ${i}
341 done
342
343 for ((i = 0; i < ${#EXTRA_LOCATIONS[@]}; i++)); do
344 _add_source "EXTRA_LOCATIONS[$i]"
Hung-Te Lin5febb1e2013-03-12 17:56:35 +0800345 done
346}
347
348# If "inherit cros-firmware" appears at end of ebuild file, build source URI
349# automatically. Otherwise, you have to put an explicit call to
350# "cros-firmware_setup_source" at end of ebuild file.
351[[ -n "${CROS_FIRMWARE_MAIN_IMAGE}" ]] && cros-firmware_setup_source
352
Dave Parkerd7d4c402011-04-15 08:01:34 -0700353EXPORT_FUNCTIONS src_unpack src_compile src_install