start main_menu

#############
#  SYMBOLS  #
#############
symbols

ARCH_ARM		'ARM'

arm_cpu_type		'ARM Processor Type'
CPU_ARM1136		'ARM1136 - To be added'
CPU_ARM11MPCORE		'ARM11 MPCore - To be added'
CPU_ARM926		'ARM926EJ-S'
CPU_CORTEXA8		'ARM Cortex-A8 - Not supported'

arm_subarch_type	'ARM Architecture Family'
SUBARCH_V5		'ARM v5 Architecture'
SUBARCH_V6		'ARM v6 Architecture, To be added'
SUBARCH_V7		'ARM v7 Architecture, To be added'

arm_platform_type	'ARM Platform Type'
PLATFORM_EB		'Realview EB Platform, Unsupported yet'
PLATFORM_AB926		'Versatile AB926 Platform, Unsupported yet'
PLATFORM_PB926		'Versatile PB926 Platform'
PLATFORM_PB11MPCORE	'Realview PB11MPCore Platform'
PLATFORM_PBA8		'Realview PB-A8 Platform'

main_menu		'Codezero Microkernel Configurator'
arm_menu		'ARM Architecture Configuration'
arm_cpu_menu		'ARM CPU type'
arm_platform_menu	'ARM Platform Type'
toolchain_menu		'Toolchain Prefix'
containers_menu		'Container Setup'
arch_type		'Main architecture'

TOOLCHAIN_KERNEL	'Toolchain prefix for kernel'
TOOLCHAIN_USER		'Toolchain prefix for userspace'

CONTAINERS		'Number of containers'
CAPABILITIES		'Enable capability checking'

#############
#  CHOICES  #
#############

choices arch_type
	ARCH_ARM
	default ARCH_ARM

choices arm_subarch_type
	SUBARCH_V5
	SUBARCH_V6
	SUBARCH_V7
	default SUBARCH_V5

choices arm_cpu_type
	CPU_ARM926
	CPU_ARM1136
	CPU_ARM11MPCORE
	CPU_CORTEXA8
        default CPU_ARM926

choices arm_platform_type
        PLATFORM_EB
	PLATFORM_AB926
	PLATFORM_PB926
	PLATFORM_PB11MPCORE
	PLATFORM_PBA8
        default PLATFORM_PB926

#############
#   MENUS   #
#############

menu arm_cpu_menu
	arm_cpu_type

menu arm_platform_menu
	arm_platform_type

menu arm_menu
	arm_subarch_type
	arm_cpu_menu
	arm_platform_menu

menu toolchain_menu
	TOOLCHAIN_KERNEL$
	TOOLCHAIN_USER$

menu main_menu
	arch_type
	arm_menu
	toolchain_menu
	CONTAINERS%
	containers_menu

#############`
#   RULES   #
#############
#Capability rules:
default CAPABILITIES from y

#Platform rules:
unless SUBARCH_V5 suppress PLATFORM_PB926
unless SUBARCH_V5 suppress PLATFORM_AB926
unless SUBARCH_V6 suppress PLATFORM_PB11MPCORE
unless SUBARCH_V7 suppress PLATFORM_PBA8

#CPU rules:
unless SUBARCH_V5 suppress CPU_ARM926
unless SUBARCH_V6 suppress CPU_ARM1136
unless SUBARCH_V6 suppress CPU_ARM11MPCORE
unless SUBARCH_V7 suppress CPU_CORTEXA8

# NOTE: Unlike menus, choices dont take { sym } model of visibility
# dependencies. Instead, a choice symbol is declared in a menu, and
# suppress statement is used to make sym visible, instead of a
# { sym } model under the choices. (See manual for { sym } usage).

unless SUBARCH_V5 suppress PLATFORM_PB926
unless ARCH_ARM suppress arm_menu
unless PLATFORM_EB suppress CPU_ARM1136
derive DRIVER_UART_PL011 from SUBARCH_V5 or SUBARCH_V6 or SUBARCH_V7
derive DRIVER_TIMER_SP804 from SUBARCH_V5 or SUBARCH_V6 or SUBARCH_V7
derive DRIVER_IRQ_PL190 from PLATFORM_PB926 or PLATFORM_AB926
derive DRIVER_IRQ_GIC from PLATFORM_PB11MPCORE or PLATFORM_PBA8 or PLATFORM_EB


# Toolchains:
default TOOLCHAIN_KERNEL from 'arm-none-eabi-'
default TOOLCHAIN_USER from 'arm-none-linux-gnueabi-'

prefix CONFIG_

# Checklist for correct CML2
# 1) Have you defined a prompt for each menu, choice_type?
# 2) Have you defined a default for each symbol?
# 3) Have you put 'symbols' keyword before each symbol, menu and choice?


# Important note on derived symbols
# DO NOT place any declaration for derived symbols like normal symbols,
# otherwise the derivation will be silently ignored, and you will be left
# wondering why.
