#@TYPE: Machine
#@NAME: system-zcu102
#@DESCRIPTION: Machine supporting the architectures in the ZCU102 evaluation board.

# This machine sets up a build for a heterogeneous architecture board.
# In this specific case, this refers to a zcu102-zynqmp board, which
# should build artifacts for the hard microblaze architecture, and the
# cortex-a53.

# This is meant to be used as a base case and adapting it to
# other boards should be fairly simple.

# To build a full system, simply invoke the command:
# $ bitbake <image>
# which is analogous to
# $ bitbake mc::<image>
# Where image can be core-image-minimal for example
# If a user wants to build a package for a certain architecture
# a similar command can be invoked, just changing the parameter
# between : and : to the desired multiconfig from one of the
# declared values below.
# For example, to build the xilstandalone library for the microblaze:
# $ bitbake mc:pmumc:xilstandalone
# or to build fsbl for cortexa53:
# $ bitbake mc:fsblmc:zyqmp-fsbl


# These artifacts are the pmu firmware along with the fsbl and the
# Linux OS respectively

# Keep in mind that there would still be a wiring required to merge
# the artifacts from their respective deploy directories using bootgen.
BBMULTICONFIG = "fsblmc pmumc"

# The following should be changed to the machine which corresponds to
# the architecture of a specific device, in this case cortexa53
# But there are several hard coded expected values from several
# repos, e.g. linux-xlnx which expects a defconfig depending on
# the machine that is being used, as a TEMPORARY solution and
# to prove how multiconfig can be used to build a full system
# with heterogeneous architectures we'll use MACHINE=zcu102-zynqmp.

# The downside is that this stills needs xsct and would technically
# build two pmu firmwrares and two fsbls, one coming from our
# multiconfig and one that uses xsct respectively, once the values
# mentioned above are fixed, this should work properly with:
# MACHINE = "cortexa53-zynqmp"

MACHINE = "zcu102-zynqmp"
require conf/machine/${MACHINE}.conf

# Use the same format for TMPDIR  as in the other multiconfigs so its less confusing.
TMPDIR = "${TOPDIR}/tmp-${MACHINE}-${TCLIBC}"

# Create dependencies for Linux only, other multiconfig applications,
# can be built separately, e.g. bitbake mc:pmumc:pmufw
# in this case, linux cannot, also worth mentioning that these should
# eventually be set on a recipe level and would probably be useful to
# create a chain of dependencies: pmufw<-fsbl<-Linux
do_image[mcdepends] += "multiconfig::fsblmc:zynqmp-fsbl:do_deploy"
do_image[mcdepends] += "multiconfig::pmumc:pmufw:do_deploy"