# Copyright (c) 2017 Oticon A/S
# 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

if NETWORKING

config NET_L2_ETHERNET
	default y if !NET_LOOPBACK && !NET_TEST

config ETH_NATIVE_POSIX
	default y if NET_L2_ETHERNET && ETH_DRIVER

endif # NETWORKING

choice BT_HCI_BUS_TYPE
	default BT_USERCHAN
	depends on BT_HCI
endchoice

if LOG

# For native_posix we can log synchronously without any problem
# Doing so will be nicer for debugging
choice LOG_MODE
	default LOG_MODE_IMMEDIATE
endchoice

endif # LOG

if CONSOLE

config POSIX_ARCH_CONSOLE
	default y if !SERIAL

config UART_CONSOLE
	default y if SERIAL

endif # CONSOLE

config FLASH_SIMULATOR
	default y
	depends on FLASH

config USB_NATIVE_POSIX
	default y
	depends on USB_DEVICE_DRIVER

config EEPROM_SIMULATOR
	default y
	depends on EEPROM

if I2C

config EMUL
	default y

endif # I2C

endif # BOARD_NATIVE_POSIX
