# Platform build configurations for Linaro EDK2 builds
# ====================================================
# The configuration file format is extremely simplistic:
# - Each platform has a short name.
# - A platform entry starts by the short name held in square brackets, '[]'
# - Within each entry, all options are described in a NAME=VALUE scheme,
#   with the name being whatever comes before the first '=' on the line,
#   and the value being everything that comes after it.
#
# Mandatory options:
# - LONGNAME		A more descriptive name of the platform.
# - DSC			Pointer to the EDK2 build description file. (The
#			pandaboard is excused, all other ports must have this.)
# - ARCH		String describing the architecture to build for.
#			Currently supported are AARCH32 and AARCH64.
# - UEFI_BIN		Name of executable image produced.
# - UEFI_IMAGE_DIR	Build output directory name, relative to 'Build'.
#
# Options for Trusted OS
# Note that OP-TEE (https://github.com/OP-TEE/optee_os) is the only currently
# supported Trusted OS
# - BUILD_TOS		Set to "yes" if the build should automatically build
#   			Trusted OS, mainly for ARM Trusted Firmware.
#			If this is set, you must also set ATF_SPD!
#			Else we will not know which specific Trusted OS to
#			build.
#			Set to "debug" to create a debug build.
# - TOS_PLATFORM	Platform name for Trusted OS build, if
#   			different from ARM Trusted Firmware platform
#			or UEFI platform name.
# - TOS_PLATFORM_FLAVOR	If a core platform has multiple flavors, specify which
#			flavor here.
#
# Options for ARM Trusted Firmware platforms
# - BUILD_ATF		Set to "yes" if the build should automatically build
#   			ARM Trusted Firmware and a fip containing UEFI image.
#			Set to "debug" to create a debug build.
# - ATF_PLATFORM	Platform name for ARM Trusted Firmware build, if
#   			different from UEFI platform name.
# - SCP_BIN		SCP image to pass to ARM Trusted Firmware.
# - TOS_BIN		Trusted OS image to pass to ARM Trusted Firmware.
#			The path is relative to
#			$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/.
#			To actually build the Trusted OS, you must also set
#			ATF_SPD.
# - ATF_SPD		Name of Secure Payload Dispatcher
#			To actually build the Trusted OS, you must also set
#			TOS_BIN.
#
# Optional options:
# - BUILDFLAGS		Any special flags you want to pass to the build command.
# - ATF_BUILDFLAGS	Any special flags you want to pass to the ARM Trusted
#			Firmware build command.
# - TOS_BUILDFLAGS	Any special flags you want to pass to the Trusted OS
#			build command.
# - EXTRA_FILES		Any additional files to be copied to output dir.
# - PREBUILD_CMDS	Any commands you want to execute before the build step.
# - POSTBUILD_CMDS	Any commands you want to execute after the build step.
# - PACKAGES_PATH	Additional directories to search for packages under.
# - INF                 Point to a .inf (in addition to a .dsc) in order to
#                       build a single component (standalone driver/app).
#

[juno]
LONGNAME=aarch64 Juno
DSC=Platform/ARM/JunoPkg/ArmJuno.dsc
BUILDFLAGS=
ARCH=AARCH64
BUILD_ATF=yes
SCP_BIN=Platform/ARM/Juno/bl30.bin
UEFI_BIN=BL33_AP_UEFI.fd
UEFI_IMAGE_DIR=ArmJuno

# ARM FVP BASE AEMv8-A model
[fvp]
LONGNAME=aarch64 FVP RTSM
DSC=Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc
BUILDFLAGS=-D EDK2_ENABLE_SMSC_91X=1 -D EDK2_ENABLE_PL111=1
ARCH=AARCH64
BUILD_ATF=yes
UEFI_BIN=FVP_AARCH64_EFI.fd
UEFI_IMAGE_DIR=ArmVExpress-FVP-AArch64

[tc2]
LONGNAME=Versatile Express TC2
BUILDFLAGS=-D ARM_BIGLITTLE_TC2=1
DSC=Platform/ARM/VExpressPkg/ArmVExpress-CTA15-A7.dsc
ARCH=ARM

[overdrive]
LONGNAME=AMD Overdrive
DSC=Platform/AMD/OverdriveBoard/OverdriveBoard.dsc
ARCH=AARCH64

[overdrive1000]
LONGNAME=SoftIron Overdrive 1000
DSC=Platform/SoftIron/Overdrive1000Board/Overdrive1000Board.dsc
ARCH=AARCH64

[cello]
LONGNAME=LeMaker Cello
DSC=Platform/LeMaker/CelloBoard/CelloBoard.dsc
ARCH=AARCH64

[hikey]
LONGNAME=HiKey
DSC=Platform/Hisilicon/HiKey/HiKey.dsc
ARCH=AARCH64

[d02]
LONGNAME=Hisilicon D02
DSC=Platform/Hisilicon/D02/Pv660D02.dsc
ARCH=AARCH64

[d03]
LONGNAME=Hisilicon D03
DSC=Platform/Hisilicon/D03/D03.dsc
ARCH=AARCH64

[d05]
LONGNAME=HiSilicon D05
DSC=Platform/Hisilicon/D05/D05.dsc
ARCH=AARCH64

[armada70x0]
LONGNAME=Marvell Armada 70x0
DSC=Platform/Marvell/Armada/Armada70x0.dsc
ARCH=AARCH64

[chaoskey]
LONGNAME=Altus Metrum ChaosKey RNG
DSC=Silicon/Openmoko/Openmoko.dsc
ARCH=AARCH64

[beagle]
LONGNAME=Beagleboard (original)
DSC=BeagleBoardPkg/BeagleBoardPkg.dsc
ARCH=ARM
