
mainmenu "Fiasco configuration"

# generic options that might be selected by platforms etc.
config HAS_FPU_OPTION
	bool

config HAS_LAZY_FPU
	bool

config HAS_VIRT_OBJ_SPACE_OPTION
	bool

config HAS_SERIAL_OPTION
	bool

config HAS_WATCHDOG_OPTION
	bool

config HAS_JDB_DISASM_OPTION
	bool

config HAS_JDB_GZIP_OPTION
	bool

config HAS_IOMMU_OPTION
	bool

config HAS_MP_OPTION
	bool

config HAS_COV_OPTION
	bool

config HAS_PLAT_AMP_OPTION
	bool

config HAS_CPU_VIRT
	bool

config HAS_IRQ_DIRECT_INJECT_OPTION
	bool

config HAS_CPU_AMP_OPTION
	bool

config HAS_CPU_MPU
	bool

config HAS_SYNC_CLOCK
	bool

config HAS_ONE_SHOT
	bool

config HAS_TICKLESS_IDLE
	bool

config HAS_DT_OPTION
	bool

################################################################################
menu "Target configuration"
# Platform-dependent options.
################################################################################

choice
	prompt "Architecture"
	default AMD64

#  ARCH_CHOICE
endchoice

config BIG_ENDIAN
	bool

choice
	prompt "Platform"
# ARCH_DEFAULT_PF

# PF_CHOICE

endchoice

# PF_INCLUDE
# PF_SECTION: GLOBAL

config ABI_VF
	def_bool y

# PF_SECTION: CPU

config MMU
	def_bool y if !HAS_CPU_MPU

config MPU
	def_bool y if HAS_CPU_MPU

config CPU_VIRT
	bool "Virtualization"
	default y
	depends on HAS_CPU_VIRT
	help
	  Support virtualization extensions provided by CPUs, including
	  nested paging. This feature allows you to run a virtual machine
	  monitor (VMM) on top of Fiasco.

config FPU
	bool "Enable FPU co-processor" if HAS_FPU_OPTION
	default y if HAS_FPU_OPTION
	help
	  Enable this if your platform has hardware floating point support.

config LAZY_FPU
	bool "Enable lazy FPU switching" if HAS_LAZY_FPU && FPU
	depends on FPU && HAS_LAZY_FPU
	default y if !AMD64
	help
	  Enable this option to allow lazy context switching of FPU / SIMD
	  processor state. This removes the overhead incurred by eagerly
	  switching the FPU / SIMD state which is needed to mitigate the lazy
	  FPU restore side-channel attack found on Intel processors.

	  It is safe to enable this option on AMD CPUs.

# PF_SECTION: TARGET

config DT
	bool "Device tree support"
	depends on HAS_DT_OPTION
	default y
	help
	  Enable support to discover devices via device tree.

endmenu # target


################################################################################
menu "Kernel options"
# Platform-independent options (mostly).
################################################################################

config MP
	bool "Enable symmetric multi-processor support"
	default y
	depends on HAS_MP_OPTION
	help
	  Enable support for machines with cache-coherent, symmetric multiple
	  processors.

config AMP
	bool "Enable homogeneous asymmetric multi-processor support"
	depends on HAS_CPU_AMP_OPTION && HAS_PLAT_AMP_OPTION
	help
	  Enable support for machines with non-cache-coherent, homogeneous
	  multiple processors.

config MP_MAX_CPUS
	int "Maximal supported number of CPUs"
	depends on MP || AMP
	range 1 8192 if MP
	default 16 if MP
	range 1 16 if AMP
	default 4 if AMP
	help
	  The maximum number of CPUs the kernel supports.

config KMEM_SIZE_AUTO
	bool "Automatically determine kernel memory size"
	default y
	help
	  If set to 'y' (default), the kernel automatically determines the
	  amount of kernel memory using Config::kmem_per_cent(). The size of
	  the kernel memory can be overriden by the kernel command line
	  parameter "-kmemsize" passed to the boot loader.

config KMEM_SIZE_KB
	int "Kernel memory size in KiB"
	depends on !KMEM_SIZE_AUTO
	range 16 4194304
	default 32768 if MMU
	default 256 if !MMU
	help
	  The amount of kernel memory in KiB. The size of the kernel memory can
	  be overridden by the kernel command line parameter "-kmemsize" passed
	  to the boot loader.

choice
	prompt "Thread control block size"
	default CONTEXT_SIZE_AUTO
	help
	  Choose the stack size of each thread in the kernel.

config CONTEXT_SIZE_AUTO
	bool "Automatic"
	help
	  Uses 8k stack size on 64-bit systems, otherwise 4k stacks.

config CONTEXT_SIZE_8K
	bool "8k stacks"
	depends on EXPERIMENTAL
	help
	  Use this option to use 8K kernel stacks. Only choose this option
	  when you know what you're doing.

config CONTEXT_SIZE_4K
	bool "4k stacks"
	depends on EXPERIMENTAL
	help
	  Use this option to use 4K kernel stacks. Only choose this option
	  when you know what you're doing.

config CONTEXT_SIZE_2K
	bool "2k stacks"
	depends on EXPERIMENTAL
	help
	  Use this option to use 2K kernel stacks. Only choose this option
	  when you know what you're doing.

endchoice

config CONTEXT_8K
	bool
	default y if CONTEXT_SIZE_8K || (CONTEXT_SIZE_AUTO && BIT64)

config CONTEXT_4K
	bool
	default y if CONTEXT_SIZE_4K || (CONTEXT_SIZE_AUTO && !BIT64)

config CONTEXT_2K
	bool
	default y if CONTEXT_SIZE_2K

config SYNC_CLOCK
	bool "Synchronize kernel clock with scheduling timer"
	depends on HAS_SYNC_CLOCK
	default y if !(IA32 || AMD64)
	help
	  Synchronize the kernel clock with the timer, i.e. the kernel clock
	  is no longer stored in the KIP and advanced with each timer tick,
	  but instead accessed by directly reading the timer.

	  This allows for high-precision timestamps and is a prerequisite
	  for running the scheduling timer in one-shot mode.

config ONE_SHOT
	bool "Use scheduling timer in one-shot mode"
	depends on HAS_ONE_SHOT
	select FINE_GRAINED_CPUTIME
	imply TICKLESS_IDLE
	help
	  Compared to periodic timer mode, there is a small overhead in
	  processing the timeout queue and accounting consumed CPU time, but
	  one-shot mode allows for more fine-granular scheduling and better
	  utilization of tickless idle.

	  When enabling one-shot timer mode it is highly recommended to also
	  enable "Tickless idle", unless the wakeup latency from idle is
	  critical.

config TICKLESS_IDLE
	bool "Tickless idle"
	depends on HAS_TICKLESS_IDLE
	help
	  When a CPU core is idle, disable the timer tick on that core,
	  detach the core from the RCU subsystem and halt the core until the
	  next timeout or interrupt.

	  Tickless idle works best together with the scheduling timer in
	  one-shot mode, so when enabling tickless idle it is highly
	  recommended to also set the scheduling timer to one-shot mode.

	  Tickless idle is good for saving energy, but can incur a small
	  overhead for waking up from idle.

	  On x86, tickless idle adds a small overhead on each context switch.

config FINE_GRAINED_CPUTIME
	bool "Fine-grained CPU time"
	depends on !PERFORMANCE || ONE_SHOT
	help
	  Measure CPU time consumed by a thread from switching to the thread
	  until switching to another thread. Induces an overhead during each
	  thread switch, so only activate it for debugging.

choice
	prompt "Scheduler"
	default SCHED_FIXED_PRIO

config SCHED_FIXED_PRIO
	bool "Fixed priority scheduler"
	help
	  Choose this for the standard fixed priority scheduler with
	  256 priority levels.

config SCHED_WFQ
	bool "Weighted fair queueing scheduler"
	depends on EXPERIMENTAL
	help
	  Choose this scheduler for a weighted fair queueing scheduler
	  running with dynamic priorities.

config SCHED_FP_WFQ
	bool "Combined fixed priority RT and WFQ scheduler"
	depends on EXPERIMENTAL
	help
	  Combination of Fixed priority and weighted fair queueing
	  scheduler.

endchoice

config SCHED_GRANULARITY
	int "Scheduler granularity"
	depends on !PF_PC || SCHED_APIC
	default 1000
	range 10 1000000
	help
	  Scheduler tick granularity in microseconds.

config SCHED_DEF_TIME_SLICE
	int "Default thread time slice"
	depends on !PF_PC || SCHED_APIC
	default 10
	range 1 1000000
	help
	  Default thread time slice in scheduler ticks.

config IOMMU
	bool "Enable IOMMU support" if HAS_IOMMU_OPTION
	depends on HAS_IOMMU_OPTION
	help
	  This option enables support for DMA remapping (IOMMUs).
          When this option is enabled and the platform has a supported
          IOMMU, by default all DMA will be blocked.
	  User-level must use kernel DMA spaces in combination with
	  the IOMMU kernel object to allow DMA.

config IRQ_DIRECT_INJECT
	bool "Support direct interrupt forwarding to guests"
	depends on CPU_VIRT && HAS_IRQ_DIRECT_INJECT_OPTION
	default y
	help
	  Adds support in the kernel to allow the VMM to let Fiasco directly
	  forward hardware interrupts to a guest. This enables just the
	  infrastructure. The virtual machine monitor needs to support this
	  feature as well and manage the hardware interrupts accordingly.

config DISABLE_VIRT_OBJ_SPACE
	bool "No virtually mapped array for cap tables" if HAS_VIRT_OBJ_SPACE_OPTION
	depends on HAS_VIRT_OBJ_SPACE_OPTION && EXPERIMENTAL && MMU

config VIRT_OBJ_SPACE
	def_bool y
	depends on HAS_VIRT_OBJ_SPACE_OPTION
	depends on !DISABLE_VIRT_OBJ_SPACE
	depends on !KERNEL_ISOLATION
	depends on MMU

config PHYS_OBJ_SPACE_AVL
	bool "Use AVL tree for object space"
	depends on EXPERIMENTAL
	help
	  Usually objects in a space are stored in a page-based two-level
	  tree. Depending on the distribution of the capabilites this might
	  waste some memory but is always O(1).

	  By enabling this option the object space is stored in an AVL tree.
	  This allocates less memory at the expense of an O(log n) lookup
	  time.

config DISABLE_MAPDB
	bool "Disable mapdb"
	depends on EXPERIMENTAL
	help
	  This option disables the mapping database that tracks memory resource
	  delegation in the system. This saves kernel memory that is normally
	  required to find the task and the location where memory has been
	  mapped. Enabling this option will make unmap only work on the
	  affected task and child mappings cannot be (recursively) revoked any
	  more!

	  Say N unless you really know what you're doing.

config MAPDB
	def_bool y
	depends on !DISABLE_MAPDB

config ALIEN
	bool "Support alien threads"
	default y
	help
	  If this feature is enabled then the kernel produces an exception IPC
	  for each IPC and exception caused by a thread in alien mode instead
	  of handling these events regularly.

	  This feature can be used to attach a debugger to a thread and trace
	  all object invocations and their results. It could also be used to
	  handle other systems that use the same syscall instruction as L4Re.

	  If unsure say N.

config KERNEL_ISOLATION
	bool "Enable Kernel Address-Space Isolation" if AMD64
	depends on AMD64
	select NO_LDT
	select NO_IO_PAGEFAULT
	select CPU_LOCAL_MAP
	help
	  Use an extra address space (page table) for the microkernel.
	  Only map a small trampoline and some static code and data into
	  each user address space and keep the kernel in its own address
	  space. This mitigates the deferred access rights check of some
	  Intel CPUs during speculative execution. However, there is the
	  extra TLB penalty for each system call.

config INTEL_IA32_BRANCH_BARRIERS
	bool "Enable strict prediction barriers (IBRS,IBPB,STIBP)" if AMD64 && KERNEL_ISOLATION
	depends on AMD64 && KERNEL_ISOLATION
	help
	  Use indirect branch prediction barriers to prevent
	  speculation-based cache timing side-channels.
	  This option enables Intel specific indirect branch control
	  mitigation:
	    (a) IBRS on all kernel entries to prevent in-kernel
	        prediction attacks.
	    (b) STIBP to prevent cross hyper-thread attacks.
	    (c) IBPB after address space switches to prevent cross
	        application attacks.

config INTEL_ITS_MITIGATION
	bool "Enable ITS mitigation" if AMD64 && KERNEL_ISOLATION
	default y if AMD64 && KERNEL_ISOLATION
	depends on INTEL_IA32_BRANCH_BARRIERS
	help
	  Perform mitigation for Indirect Target Selection (ITS) by forcing the
	  compiler to locate any indirect branch instructions in the last 32
	  bytes of a 64-byte cache line.

	  Due to the performance impact, this option should be only enabled if
	  the kernel is executed on CPUs affected by the vulnerability.

config INTEL_MDS_MITIGATION
	bool "Enable MDS mitigation" if AMD64 && KERNEL_ISOLATION
	default y if AMD64 && KERNEL_ISOLATION
	help
	  Use CPU buffer clearing to prevent forwarding of speculative data to
	  a disclosure gadget which allows to infer the value via a cache side
	  channel attack.

config KERNEL_NX
	bool "Enable support for kernel RO and non-executable mappings" \
		if AMD64 || (ARM && BIT64 && MMU)
	depends on AMD64 || (ARM && BIT64 && MMU)
	help
	  Make kernel mappings either writable or executable, but not
	  writable and executable at the same time. This makes certain
	  classes of programming errors more difficult to exploit by a potential
	  attacker.

config IA32_PCID
	bool "Enable usage of Intel PCID feature"
	depends on AMD64
	depends on KERNEL_ISOLATION
	help
	  Use Intel PCID to implement address space IDs on x86. This should
	  reduce the amount of TLB flushes needed during address space switches
	  or user/kernel switches with kernel page table isolation.

config CPU_LOCAL_MAP
	bool "Enable CPU local page-tables for kernel mappings" if AMD64 \
		&& !KERNEL_ISOLATION && EXPERIMENTAL
	depends on AMD64
	help
	  Enable to use per CPU page directories to allow CPU-local
	  mapping of kernel memory. This is used for kernel isolation
	  etc.

	  If unsure say N.

config NO_IO_PAGEFAULT
	bool "Disable IO-Port fault IPC" if (IA32 || AMD64) && !KERNEL_ISOLATION
	depends on IA32 || AMD64
	default y if IA32 || AMD64
	help
	  Disable page-fault IPC for IO-Port accesses. If this option is
	  enabled, the kernel does not generate page-fault IPC for failed
	  IO-Port accesses. An exception IPC with a #GP is generated instead.

# PF_SECTION: KERNEL

endmenu # kernel options


################################################################################
menu "Debugging"
# Options relevant for improving the debugging experience.
# Changing these options different from default could make the kernel slower!
################################################################################

menuconfig COV
	bool "Coverage support"
	depends on HAS_COV_OPTION && (!AMP || MP_MAX_CPUS = 1)
	help
	  Adds coverage support using gcov or llvm depending on the compiler that
	  is used. Do not enable this on production systems.

	  For now this option works only for a single AMP node.

if COV

choice
    prompt "Coverage output mode"
    default COV_OUTPUT_SERIAL

config COV_OUTPUT_SERIAL
    bool "Output via serial"

config COV_OUTPUT_MEMBUF
    bool "Output via memory buffer"
    help
      With this mode coverage output is accumulated in a memory buffer.
      This is useful for simulators which have the option to dump a section
      of memory into a file.

endchoice

config COV_OUTPUT_MEMBUF_START
    hex "Coverage output buffer start address"
    depends on COV_OUTPUT_MEMBUF
    default 0x94000000 if PF_FVP_BASE_R
    default 0x0
    help
      Physical address of the beginning of the memory buffer, where Fiasco
      shall dump its coverage data.

config COV_OUTPUT_MEMBUF_SIZE
    hex "Coverage output buffer size"
    depends on COV_OUTPUT_MEMBUF
    default 0x800000 if PF_FVP_BASE_R
    default 0x1000000
    help
      Length of the memory buffer, where Fiasco shall dump its coverage
      data.

endif

config PERFORMANCE
	bool "Performance configuration"
	select INLINE
	select NDEBUG
	select NO_FRAME_PTR
	select LAZY_FPU
	help
	  Setup the kernel such that performance is chosen over
	  being friendly for debugging. With this option, no
	  assertions are included and additional run-time functionality
	  is de-selected.

config PERF_CNT
	bool "Support for performance counters"
	depends on (IA32 || AMD64 || ARM || ARM64 || MIPS)
	default y if JDB
	help
	  Enable support for performance counters. On IA32/AMD64, enable support
	  for fixed-function counters if supported by the target allowing to
	  read these counters from all privilege levels.

config PERF_CNT_COUNT_CPL0
	bool "Enable performance counter to count while CPL=0"
	depends on (IA32 || AMD64)
	depends on PERF_CNT
	help
	  Enable the fixed counters (if available) to count while CPL=0. Be
	  careful enabling this option because it generates overhead which
	  could worsen the timing of guest kernels in particular on QEMU.

config PERF_CNT_USER
	bool "Allow user-level access to performance counters"
	depends on PERF_CNT && EXPERT
	depends on IA32 || AMD64 || ARM || ARM64
	help
	  Allows user-level to access performance counters.

	  Do ONLY enable this when debugging, experimenting or evaluating!

config INLINE
	bool "Generate inline code"
	default y
	help
	  Inlining specifies that it is desirable for the compiler to
	  integrate functions declared 'inline' into the calling routine.
	  This usually leads to faster code, so unless you want to debug the
	  kernel you should say 'Y' here.

config NDEBUG
	bool "Do not compile assertions"
	help
	  Don't insert assertions into the code. Should be enabled for
	  kernels which are used for measurements.

config NO_FRAME_PTR
	bool "Compile without frame pointer"
	default y
	help
	  Enabling this option optimizes for speed but makes debugging more
	  difficult.

config STACK_DEPTH
	bool "Measure stack depth of threads"
	depends on !PERFORMANCE
	help
	  When this option is enabled, each thread control block is marked
	  with magic numbers while creation. The function ``show thread
	  lists'' scans the TCB for these magic numbers and shows the
	  currently used depth of each thread.

config BEFORE_IRET_SANITY
	bool "Sanity checks at syscall entry/exit"
	depends on PF_PC
	depends on !PERFORMANCE
	help
	  Perform the following additional sanity checks before returning to
	  usermode:
	    - Does the thread hold any locks?
	    - Is the thread locked by any other thread?
	    - Does the thread have the right state:
	      * Thread_ready must be set.
	      * Thread_cancel and Thread_fpu_owner might be set.
	      * Any other state bit must not be set.
	  Don't use Fiasco compiled with this option for performance analysis!

config IRQ_SPINNER
	bool "Display IRQ activity on VGA screen"
	depends on PF_PC
	help
	  Display IRQ activity on VGA screen.

config WATCHDOG
	bool "Enable Watchdog support" if HAS_WATCHDOG_OPTION
	default y if HAS_WATCHDOG_OPTION
	depends on HAS_WATCHDOG_OPTION
	help
	  Enable support for watchdog using the builtin Local APIC and a
	  performance counter. The watchdog can be enabled using the
	  -watchdog command line option.

config SERIAL
	bool "Support for debugging over serial line" if HAS_SERIAL_OPTION
	depends on HAS_SERIAL_OPTION
	default y if HAS_SERIAL_OPTION
	help
	  This option enables support for input/output over serial interface.

config UNIT_TEST
	bool "Compile unit tests"
	select TEST_SUPPORT_CODE
	help
	  Compile fiasco unit tests.

config TEST_SUPPORT_CODE
	bool "Compile test support code"
	help
	  Include test support code when compiling Fiasco.

config CODE_RULES_TEST
	bool "Build tests checking coding rules"
	help
	  Builds files that are expected to generate warnings to check that
	  the coding rules are adhered to in a warning-free build. The
	  warnings are stored and can be evaluated by scripts generated into
	  the selftest directory inside the build directory. These scripts
	  then generate TAP output usable by prove.

	  The tests currently only work when using clang. When building with
	  gcc the test sources are not built and a test script that always
	  generates a SKIP is created.

config RT_DBG
	bool "Runtime debug information"
	default y
	help
	  Adds support for the debugger kernel object, e.g. to set the name of
	  objects. This information may be used by a debugger to enable OS
	  aware debugging.

config JDB_KMEM_STATS
	bool "Support kernel memory statistics dump"
	default y
	depends on RT_DBG
	help
	  Support dumping kernel memory statistics to the console. This must be
	  triggered from user space and requires the JDB capability.

config INPUT
	bool "Console input support"
	default y if HAS_SERIAL_OPTION
	help
	  Enable input specific code in the kernel. Disable this option if you
	  do not require input support.

menuconfig JDB
	bool "JDB kernel debugger"
	default y
	select RT_DBG
	select INPUT
	depends on !AMP
	help
	  The powerful Fiasco kernel debugger.

if JDB

config JDB_LOGGING
	bool "JDB extended logging"
	default y
	help
	  There are two classes of logging events: Basic events don't
	  consume any time if they are disabled (ipc, ipc result,
	  pagefaults, unmap). Extended logging events add an additional
	  overhead of most probably less than 10 cycles if they are
	  disabled. These events can be activated/deactivated by the 'O'
	  command in jdb.

	  Should be disabled for kernels which are used for measurements.

config JDB_DISASM
	bool "JDB disassembler" if HAS_JDB_DISASM_OPTION
	default y if HAS_JDB_DISASM_OPTION && !ARM && !MIPS
	help
	  Add support for disassembly. Increases memory foot-print, only
	  enable when needed.

config JDB_GZIP
	bool "GZIP compressed dumps" if HAS_JDB_GZIP_OPTION
	default y if HAS_JDB_GZIP_OPTION
	help
	  Add support for gzip compressed dumps of the trace buffer.
	  Increases memory foot-print, only enabled when needed.

config JDB_ACCOUNTING
	bool "JDB accounting"
	help
	  Enable accounting information about IPCs, context switches, page
	  faults, and other events. The counters are accessible from
	  userland through the tbuf status page.

	  Should be disabled for kernels which are used for measurements.

endif # JDB


config POWERSAVE_GETCHAR
	bool "Save power in getchar()"
	default y
	depends on PF_PC
	help
	  This option uses a processor HALT in getchar() to save power and
	  prevent some P4 processors from being overheated. This option
	  requires a working timer IRQ to wakeup getchar periodically.

config MBT_COUNTER
	bool "Enable model-based testing counter"
	depends on EXPERIMENTAL && BIT64

choice
	prompt "Warn levels"
	default WARN_WARNING

config WARN_NONE
	bool "Do not show show any kernel warning"

config WARN_WARNING
	bool "Show messages of warning level"

config WARN_ANY
	bool "Show all kernel warnings"

endchoice # warn levels

config UART_CHECKSUM
	bool "UART checksumming"
	help
	  Ensure serial output integrity by adding checksums to it. This
	  ensures that the output transmitted over a serial line is not
	  accidentally altered, thus potentially turning a failing test
	  into a passing test, etc.

	  If enabled, the UART output is checksummed continously using
	  a CRC32 algorithm and the current checksum is printed periodically
	  with each newline using a checksum tag. A counterpart decoding
	  filter that checks the consistency of the checksums and removes
	  the checksum tags from the output is available.

	  The checksum tag size is 12 characters and it has the following
	  format:

	    "\n{hhhhhhhh} "

	  In this template, the 'h' characters represent lower-case
	  hexadecimal characters that encode the CRC32 checksum of all the
	  previous characters in the output (including newline characters,
	  but excluding the actual checksum tag, i.e. the curly brackets,
	  the hexadecimal characters in between them and the tailing space
	  character).

	  The checksumming starts only after the first checksum tag which
	  is:

	    "\n{00000000} "

config FB_CONSOLE
	bool "Enable kernel framebuffer console"
	depends on IA32 || AMD64 || ARM || ARM64
	help
	  This enables the kernel framebuffer console and, if a framebuffer
	  is available, will output kernel messages.

# PF_SECTION: DEBUG

endmenu # debugging


################################################################################
menu "Compiling"
# Build-related options (tools, compiler optimizations).
################################################################################

config CC
	string "C compiler"
	default "gcc"
	help
	  Use this option to override the default C compiler (gcc).

config CXX
	string "C++ compiler"
	default "g++"
	help
	  Use this option to override the default C++ compiler (g++).

config LD
	string "LD linker"
	default "ld"
	help
	  Use this operation to override the default linker (ld).
	  It's especially useful to use the LLVM linker (lld) when using
	  Clang/Clang++ for compilation.

config HOST_CC
	string "C host compiler"
	default "gcc"
	help
	  Use this option to override the default C host compiler (gcc).

config HOST_CXX
	string "C++ host compiler"
	default "g++"
	help
	  Use this option to override the default C++ host compiler (g++).

config OPTIMIZE_FOR_SIZE
	bool "Optimize for size (-Os)"

config MAINTAINER_MODE
	bool "Do additional checks at build time"
	help
	  This enables the circular dependency and initcall checks.
	  Say 'Yes' here if you do kernel hacking.

config NO_VERSION
	bool "Do not provide build version info"
	depends on EXPERT
	help
	  Do not provide build version info to avoid the need to relink all
	  kernel unit tests on each build.

config LABEL
	string "Configuration label"
	help
	  Text string with a name for this configuration. To be displayed in
	  the kernel boot-up.

# PF_SECTION: COMPILING

endmenu


################################################################################
config EXPERIMENTAL
	bool "Prompt for experimental features"
	help
	  Experimental features are available when enabling this option.
	  Enabling these features might be less than fully secure and may
	  disrupt the stability of your kernel.

	  Use with caution!

config EXPERT
	bool "Prompt for expert features"
	help
	  Expert features are available when enabling this option. Enabling
	  these features may pose security risks and may disrupt the stability
	  of your kernel.

	  Enable ONLY when you know what you are doing!
	  Do NOT enable for production builds!

################################################################################

config BIT32
	bool

config BIT64
	bool

config WARN_LEVEL
	int
	default 2 if WARN_ANY
	default 1 if WARN_WARNING
	default 0 if WARN_NONE

config XARCH
	string
	default "amd64" if AMD64 && PF_PC
	default "ia32" if IA32 && PF_PC
# ARCH_NAME

config ABI
	string
	default "vf"
