blob: 507235ef6b9bbe9a611b6061a86c647016f62644 [file] [log] [blame]
# 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
}