## This file is part of the coreboot project.
##
## Copyright (C) 2017 Facebook Inc.
## Copyright (C) 2018 9elements Cyber Security
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; version 2 of the License.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##

if PAYLOAD_LINUXBOOT

choice
	prompt "Architecture"
	depends on LINUXBOOT_COMPILE_KERNEL || LINUXBOOT_BUILD_INITRAMFS
	default LINUXBOOT_X86_64

config LINUXBOOT_X86_64
	bool "x86_64"
	depends on ARCH_X86
	help
	  AMD64 kernel and initramfs

config LINUXBOOT_X86
	bool "x86"
	depends on ARCH_X86
	help
	  X86 kernel and initramfs

config LINUXBOOT_ARM64
	bool "arm64"
	depends on ARCH_ARM64
	select PAYLOAD_FIT_SUPPORT
	help
	  AARCH64 kernel and initramfs

endchoice

comment "Linux kernel"

config LINUXBOOT_COMPILE_KERNEL
	bool "Compile kernel"
	default n

if LINUXBOOT_COMPILE_KERNEL
comment "parse linux crosscompiler with: LINUXBOOT_CROSS_COMPILE"
endif

config LINUXBOOT_KERNEL_PATH
	string "Path to kernel"
	default "Image"
	depends on !LINUXBOOT_COMPILE_KERNEL

if LINUXBOOT_COMPILE_KERNEL

choice
	prompt "Kernel release"
	default LINUXBOOT_KERNEL_STABLE
	help
	  Choose the kernel release.

	  Select 'custom' if your want to define the kernel version.
	  For more information about the current 'mainline', 'stable' or 'longterm'
	  version, visit: https://www.kernel.org/

config LINUXBOOT_KERNEL_MAINLINE
	bool "mainline"
	help
	  Mainline kernel version

config LINUXBOOT_KERNEL_STABLE
	bool "stable"
	help
	  Stable kernel version

config LINUXBOOT_KERNEL_LONGTERM
	bool "longterm"
	help
	  Longterm (LTS) kernel version

config LINUXBOOT_KERNEL_CUSTOM
	bool "custom"
	help
	  Custom kernel version

endchoice

config LINUXBOOT_KERNEL_CUSTOM_VERSION
	string "kernel version"
	default ""
	depends on LINUXBOOT_KERNEL_CUSTOM
	help
	  Choose the Linux kernel version number. (x.x.x)
	  Release candidate kernels (rc) are currently are not supported.

choice
	prompt "Kernel configuration"
	default LINUXBOOT_KERNEL_ARCH_DEFAULT_CONFIG

config LINUXBOOT_KERNEL_ARCH_DEFAULT_CONFIG
	bool "Default architecture configuration"
	help
	  This option will use the default configuration for the
	  selected architecture.

config LINUXBOOT_KERNEL_CUSTOM_CONFIG
	bool "Custom (def)config file"
	help

endchoice

config LINUXBOOT_KERNEL_CONFIGFILE
	string "Config file path"
	default "defconfig"
	depends on LINUXBOOT_KERNEL_CUSTOM_CONFIG
	help
	  Path to the kernel configuration file.

	  Note: this can be a defconfig file or a complete .config file.

choice
	prompt "Kernel binary format"
	default LINUXBOOT_KERNEL_BZIMAGE if LINUXBOOT_X86 || LINUXBOOT_X86_64
	default LINUXBOOT_KERNEL_UIMAGE if LINUXBOOT_ARM64

config LINUXBOOT_KERNEL_BZIMAGE
	bool "bzImage"
	depends on LINUXBOOT_X86 || LINUXBOOT_X86_64

config LINUXBOOT_KERNEL_UIMAGE
	bool "uImage"
	depends on LINUXBOOT_ARM64

endchoice


config LINUXBOOT_DTB_FILE
	string "Compiled devicetree file"
	depends on LINUXBOOT_ARM64
	default ""

endif #LINUXBOOT_COMPILE_KERNEL

config LINUX_COMMAND_LINE
	string "Kernel command-line"
	default ""
	help
	  Add your own kernel command-line arguments.

config PAYLOAD_FILE
	default "payloads/external/LinuxBoot/linuxboot/bzImage" if LINUXBOOT_COMPILE_KERNEL && ( LINUXBOOT_X86 || LINUXBOOT_X86_64 )
	default "payloads/external/LinuxBoot/linuxboot/uImage" if LINUXBOOT_COMPILE_KERNEL && LINUXBOOT_ARM64
	default LINUXBOOT_KERNEL_PATH if !LINUXBOOT_COMPILE_KERNEL

comment "Linux initramfs"

config LINUXBOOT_BUILD_INITRAMFS
	bool "Build initramfs"
	default n

config LINUXBOOT_INITRAMFS_PATH
	string "Path to initramfs"
	depends on !LINUXBOOT_BUILD_INITRAMFS

if LINUXBOOT_BUILD_INITRAMFS

choice
	prompt "Payload Mode"
	default LINUXBOOT_UROOT

config LINUXBOOT_UROOT
	bool "u-root"
	help
	  Enable u-root linuxboot mode.
	  See http://u-root.tk/ for more information.

endchoice

if LINUXBOOT_UROOT

choice
	prompt "U-root version"
	default LINUXBOOT_UROOT_MASTER

config LINUXBOOT_UROOT_CUSTOM
	bool "custom"
	help
	  choose a custom u-root branch

config LINUXBOOT_UROOT_MASTER
	bool "master"
	help
	  Latest u-root version

config LINUXBOOT_UROOT_V3_0_0
	bool "v3.0.0"

config LINUXBOOT_UROOT_V2_0_0
	bool "v2.0.0"

config LINUXBOOT_UROOT_V1_0_0
	bool "v1.0.0"

endchoice

config LINUXBOOT_UROOT_CHECKOUT
	string "U-root custom branch"
	depends on LINUXBOOT_UROOT_CUSTOM

config LINUXBOOT_UROOT_VERSION
	string
	default LINUXBOOT_UROOT_CHECKOUT if LINUXBOOT_UROOT_CUSTOM
	default "master" if LINUXBOOT_UROOT_MASTER
	default "v3.0.0" if LINUXBOOT_UROOT_V3_0_0
	default "v2.0.0" if LINUXBOOT_UROOT_V2_0_0
	default "v1.0.0" if LINUXBOOT_UROOT_V1_0_0

choice
	prompt "Build format"
	default LINUXBOOT_UROOT_BB
	help
	  u-root build format (e.g. bb or source). (default "bb")

config LINUXBOOT_UROOT_BB
	bool "bb"

config LINUXBOOT_UROOT_SOURCE
	bool "source (experimental)"

endchoice

config LINUXBOOT_UROOT_FORMAT
	string
	default "bb" if LINUXBOOT_UROOT_BB
	default "source" if LINUXBOOT_UROOT_SOURCE

config LINUXBOOT_UROOT_FILES
	string "Add files to u-root base"
	help
	  Additional files, directories, and binaries (with their ldd dependencies) to add to archive.
	  Can be speficified multiple times.

config LINUXBOOT_UROOT_INITCMD
	string "Init target"
	default "init"
	help
	  Symlink target for /init.
	  Can be an absolute path or a u-root command name. (default "init")

config LINUXBOOT_UROOT_SHELL
	string "default shell"
	default "elvish"
	help
	  Default shell.
	  Can be an absolute path or a u-root command name. (default "elvish")

config LINUXBOOT_UROOT_COMMANDS
	string "U-root commands"
	default "coreboot-app"
	help
	  List of additional modules to include,
	  separated by space. (default "coreboot-app")

endif #LINUXBOOT_UROOT

endif #LINUXBOOT_BUILD_INITRAMFS

choice
	prompt "Initramfs compression format"
	default LINUXBOOT_INITRAMFS_COMPRESSION_XZ

config LINUXBOOT_INITRAMFS_COMPRESSION_NONE
	bool "none"

config LINUXBOOT_INITRAMFS_COMPRESSION_XZ
	bool "xz compression"

endchoice

config LINUX_INITRD
	string
	default "payloads/external/LinuxBoot/linuxboot/initramfs_u-root.cpio" if LINUXBOOT_UROOT
	default LINUXBOOT_INITRAMFS_PATH if !LINUXBOOT_BUILD_INITRAMFS

config LINUXBOOT_INITRAMFS_SUFFIX
	string
	default "" if LINUXBOOT_INITRAMFS_COMPRESSION_NONE
	default ".xz" if LINUXBOOT_INITRAMFS_COMPRESSION_XZ

endif #PAYLOAD_LINUXBOOT