# General configuration options

# Copyright (c) 2017 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menu "POSIX (native) Options"
	depends on ARCH_POSIX

config ARCH
	default "posix"

config ARCH_POSIX_RECOMMENDED_STACK_SIZE
	int
	default 44 if 64BIT && STACK_SENTINEL
	default 40 if 64BIT
	default 28 if STACK_SENTINEL
	default 24
	help
	  In bytes, stack size for Zephyr threads meant only for the POSIX
	  architecture.
	  (In this architecture only part of the thread status is kept in the Zephyr
	  thread stack, the real stack is the native underlying pthread stack.
	  Therefore the allocated stack can be limited to this size)

menuconfig ARCH_POSIX_LIBFUZZER
	bool "Build fuzz test target"
	help
	  Build the posix app as a LLVM libfuzzer target.  Requires
	  support from the toolchain (currently only clang works, and
	  only on native_posix_64), and should normally be used in
	  concert with some of CONFIG_ASAN/UBSAN/MSAN for validation.
	  The application needs to implement the
	  LLVMFuzzerTestOneInput() entry point, which runs in the host
	  environment "outside" the OS.  See Zephyr documentation and
	  sample and https://llvm.org/docs/LibFuzzer.html for more
	  information.

if ARCH_POSIX_LIBFUZZER

config ARCH_POSIX_FUZZ_IRQ
	int "OS interrupt via which to deliver fuzz cases"
	default 3
	help
	  When using libfuzzer, new fuzz cases are delivered to Zephyr
	  via interrupts.  The IRQ should be otherwise unused, but can
	  be any value desired by the app.

config ARCH_POSIX_FUZZ_TICKS
	int "Ticks to allow for fuzz case processing"
	default 2
	help
	  Fuzz interrupts are delivered, from the perspective of the
	  OS, at a steady cadence in simulated time.  In general most
	  apps won't require much time to reach an idle state
	  following a unit-test style case, so the default is short to
	  prevent interaction with regular timer workloads.

endif # CONFIG_ARCH_POSIX_LIBFUZZER

config ARCH_POSIX_TRAP_ON_FATAL
	bool "Raise a SIGTRAP on fatal error"
	help
	  Raise a SIGTRAP signal on fatal error before exiting.
	  This automatically suspends the target if a debugger is attached.

endmenu
