| # Copyright (C) 2021 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE.makefile file. |
| |
| EAPI=7 |
| |
| CROS_WORKON_COMMIT=("bfdc3dda56217570f94e31820b2b3741848f0ce4" "fba71496973aed801e2965a8cd1be7b0329ef7cd" "32a21483d6586851edfa1d8491beb3df442e90c6" "ebe1007d3dc274b2f7eb34cdae12ab7b1de41553" "d6dc60401c7e408646c07d3094751cb0ce00c044") |
| CROS_WORKON_TREE=("0ae11b7eabea480cedbd8344f4974ebe775f63ac" "22779a02b73465f680f11024fa834ba7cb868470" "719a42d9d98358f9123acf2d8916ed9c1821d60b" "487f8c8dfadd10d92f8b7667566bda64d9e36726" "d218554c2693811a352986f225e1f87cb3972913") |
| ZEPHYR_VERSIONS=( v2.7 ) |
| |
| CROS_WORKON_USE_VCSID=1 |
| CROS_WORKON_PROJECT=( |
| "chromiumos/third_party/zephyr/cmsis" |
| "chromiumos/third_party/zephyr/hal_stm32" |
| "chromiumos/third_party/zephyr/nanopb" |
| "chromiumos/platform/ec" |
| ) |
| for v in "${ZEPHYR_VERSIONS[@]}"; do |
| CROS_WORKON_PROJECT+=("chromiumos/third_party/zephyr") |
| done |
| |
| CROS_WORKON_LOCALNAME=( |
| "third_party/zephyr/cmsis" |
| "third_party/zephyr/hal_stm32" |
| "third_party/zephyr/nanopb" |
| "platform/ec" |
| ) |
| for v in "${ZEPHYR_VERSIONS[@]}"; do |
| CROS_WORKON_LOCALNAME+=("third_party/zephyr/main/${v}") |
| done |
| |
| CROS_WORKON_DESTDIR=( |
| "${S}/modules/cmsis" |
| "${S}/modules/hal_stm32" |
| "${S}/modules/nanopb" |
| "${S}/modules/ec" |
| ) |
| for v in "${ZEPHYR_VERSIONS[@]}"; do |
| CROS_WORKON_DESTDIR+=("${S}/zephyr-base/${v}") |
| done |
| |
| inherit cros-workon cros-unibuild coreboot-sdk toolchain-funcs |
| |
| DESCRIPTION="Zephyr based Embedded Controller firmware" |
| KEYWORDS="*" |
| LICENSE="Apache-2.0 BSD-Google" |
| IUSE="unibuild" |
| REQUIRED_USE="unibuild" |
| |
| # Add instances of vX.Y as 'zephyr_vX_Y' to IUSE |
| IUSE="${IUSE} $(for v in "${ZEPHYR_VERSIONS[@]}"; do echo "zephyr_${v//./_}"; done)" |
| |
| BDEPEND=" |
| chromeos-base/zephyr-build-tools |
| dev-python/docopt |
| dev-python/pykwalify |
| dev-util/ninja |
| " |
| |
| DEPEND=" |
| chromeos-base/chromeos-config |
| " |
| RDEPEND="${DEPEND}" |
| |
| ZEPHYR_EC_BUILD_DIRECTORIES=() |
| |
| get_zephyr_version() { |
| local v |
| for v in "${ZEPHYR_VERSIONS[@]}"; do |
| if use "zephyr_${v//./_}"; then |
| echo "${v}" |
| return 0 |
| fi |
| done |
| |
| die "Please specify a zephyr_vX_X USE flag." |
| } |
| |
| # Run zmake from the EC source directory, with default arguments for |
| # modules and Zephyr base location for this ebuild. |
| run_zmake() { |
| PYTHONPATH="${S}/modules/ec/zephyr/zmake" python3 -m zmake -D \ |
| --modules-dir="${S}/modules" \ |
| --zephyr-base="${S}/zephyr-base/$(get_zephyr_version)" \ |
| "$@" |
| } |
| |
| src_configure() { |
| tc-export CC |
| |
| while read -r board && read -r path; do |
| if [[ -z "${path}" ]]; then |
| continue |
| fi |
| if [[ ! -d "${S}/modules/ec/zephyr/${path}" ]]; then |
| die "Specified path for Zephyr project does not exist." |
| fi |
| local build_dir="build-${board}" |
| |
| run_zmake configure "modules/ec/zephyr/${path}" -B "${build_dir}" \ |
| || die "Failed to configure ${build_dir}." |
| |
| ZEPHYR_EC_BUILD_DIRECTORIES+=("${build_dir}") |
| done < <(cros_config_host "get-firmware-build-combinations" zephyr-ec || die) |
| } |
| |
| src_compile() { |
| tc-export CC |
| |
| for build_dir in "${ZEPHYR_EC_BUILD_DIRECTORIES[@]}"; do |
| run_zmake build "${build_dir}" || die "Failed to build ${build_dir}." |
| done |
| } |
| |
| src_install() { |
| for build_dir in "${ZEPHYR_EC_BUILD_DIRECTORIES[@]}"; do |
| board="$(echo "${build_dir}" |cut -d/ -f1)" |
| board="${board#build-}" |
| |
| insinto "/firmware/${board}" |
| doins "${build_dir}"/output/* |
| done |
| } |