# SPDX-License-Identifier: Apache-2.0

if BOARD_NATIVE_POSIX

config BUILD_OUTPUT_BIN
	default n

config BUILD_OUTPUT_EXE
	default y

config OUTPUT_PRINT_MEMORY_USAGE
	default n

config BOARD
	default "native_posix_64" if BOARD_NATIVE_POSIX_64BIT
	default "native_posix"

if NETWORKING

config NET_L2_ETHERNET
	default y if !NET_LOOPBACK && !NET_TEST

config ETH_NATIVE_POSIX
	default y if NET_L2_ETHERNET

endif # NETWORKING

if ENTROPY_GENERATOR

config FAKE_ENTROPY_NATIVE_POSIX
	default y

endif # ENTROPY_GENERATOR

if BT_HCI

choice BT_HCI_BUS_TYPE
	default BT_USERCHAN
endchoice

endif # BT_HCI

if SERIAL

config UART_NATIVE_POSIX
	default y

endif # SERIAL

if LOG

config LOG_BACKEND_NATIVE_POSIX
	default y if !SERIAL

# For native_posix we can log immediately without any problem
# Doing so will be nicer for debugging
config LOG_IMMEDIATE
	default y

# If we set LOG_IMMEDIATE, there is no need to have the logging thread
# running
config LOG_PROCESS_THREAD
	default n

endif # LOG

if CONSOLE

config NATIVE_POSIX_CONSOLE
	default y if !SERIAL

config UART_CONSOLE
	default y if SERIAL

endif # CONSOLE

if DISPLAY

config SDL_DISPLAY
	default y

endif # DISPLAY

if TRACING_CTF

config TRACING_CTF_BOTTOM_POSIX
	default y

endif # TRACING_CTF

if FLASH

config FLASH_SIMULATOR
	default y

endif # FLASH

if USB

config USB_NATIVE_POSIX
	default y

endif # USB

if EEPROM

config EEPROM_NATIVE_POSIX
	default y

endif # EEPROM

endif # BOARD_NATIVE_POSIX
