#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#

config EXAMPLES_MODULE
	tristate "Module Example"
	default n
	depends on MODULE && LIB_BOARDCTL
	select BOARDCTL_OS_SYMTAB
	---help---
		Enable the module example

if EXAMPLES_MODULE

config EXAMPLES_MODULE_BUILTINFS
	bool "Built-in File System"
	default y
	depends on (FS_ROMFS || FS_CROMFS) && BUILD_FLAT
	---help---
		This example supports a very, non-standard but also very convenient
		way of testing with example using CONFIG_EXAMPLES_MODULE_BUILTINFS.
		If this option is selected, the test modules will be built,
		installed in the module/lib/fsroot, then converted to a built-in
		ROMFS file system.

		When the test runs, it will automatically create the ROMFS block
		device and mount the test modules for testing.

		If this option is not selected, then the modules will be left in
		the fsroot/ directory.  You can then copy them to, say an SD card,
		for testing on the target.  That file system will need to be mounted
		such that CONFIG_EXAMPLES_MODULE_BINDIR refers to the directory
		containing the module binaries (unless the file system is auto-
		mounted)

		NOTE: This option can only be used in the FLAT build mode because
		it makes an illegal OS call to ramdisk_register().

choice
	prompt "Built-in file system type"
	default EXAMPLES_MODULE_ROMFS  if  FS_ROMFS
	default EXAMPLES_MODULE_CROMFS if !FS_ROMFS && FS_CROMFS
	depends on EXAMPLES_MODULE_BUILTINFS

config EXAMPLES_MODULE_ROMFS
	bool "ROMFS"
	depends on FS_ROMFS && BUILD_FLAT
	---help---
		Automatically generates and mounts an internal ROMFS file
		system

config EXAMPLES_MODULE_CROMFS
	bool "CROMFS"
	depends on FS_CROMFS && BUILD_FLAT
	---help---
		Automatically generates and mounts an internal CROMFS file
		system

endchoice # Built-in file system type

config EXAMPLES_MODULE_DEVMINOR
	int "ROMFS Minor Device Number"
	default 0
	depends on EXAMPLES_MODULE_ROMFS
	---help---
		The minor device number of the ROMFS block. For example, the N in /dev/ramN.
		Used for registering the RAM block driver that will hold the ROMFS file system
		containing the MODULE executables to be tested.  Default: 0

config EXAMPLES_MODULE_FSMOUNT
	bool "Mount external file system"
	default y
	depends on !EXAMPLES_MODULE_BUILTINFS
	---help---
		Automatically mount the external file system using the block
		device provided by CONFIG_EXAMPLES_MODULE_DEVPATH and the file
		system type specified by CONFIG_EXAMPLES_MODULE_FSTYPE.

config EXAMPLES_MODULE_FSREMOVEABLE
	bool "Removable file system"
	default n
	depends on EXAMPLES_MODULE_FSMOUNT
	---help---
		If the external file system is on removable media such as an
		SD card or a USB FLASH driver, then this option may be selected
		to build in logic to wait for the media to be installed and
		initialized before trying to mount it.

config EXAMPLES_MODULE_FSTYPE
	string "External file system type"
	default "vfat"
	depends on EXAMPLES_MODULE_FSMOUNT
	---help---
		The type of the external file system as will be used in the mount()
		command.  Default: "vfat"

config EXAMPLES_MODULE_DEVPATH
	string "Block driver device path"
	default "/dev/ram0" if EXAMPLES_MODULE_ROMFS
	default "/dev/mmcsd0" if EXAMPLES_MODULE_FSMOUNT
	depends on EXAMPLES_MODULE_ROMFS || EXAMPLES_MODULE_FSMOUNT
	---help---
		The path to the ROMFS/External block driver device.  This must match
		EXAMPLES_MODULE_DEVMINOR for the case of ROMFS.  Used for mounting the
		file system containing the ELF executables to be tested.  Default:
		"/dev/ram0" for ROMFS, "/dev/mmcsd0" for the external file system.

config EXAMPLES_MODULE_BINDIR
	string "Path to binaries"
	default "/mnt/moddata"
	depends on !EXAMPLES_MODULE_BUILTINFS && !EXAMPLES_MODULE_FSMOUNT
	---help---
		The full, absolute path to the location for the binaries can be
		located in a pre-mounted external file system.

config EXAMPLES_MODULE_LIBC
	bool "Link with LIBC"
	default n
	depends on EXPERIMENTAL
	---help---
		Link with the C library (and also math library if it was built).
		By default, all undefined symbols must be provided via a symbol
		table.  But if this option is selected, then each MODULE test program
		will link with the C library and will not require symbol table
		entries.  You probably will NOT want this option, however,
		because it will substantially increase the size of code.  For
		example, a separate copy of printf() would be linked with every
		program greatly increasing the total code size.  This option is
		primarily intended only for testing.

		WARNING:  Libc will not be built with -mlong-calls and this may
		result in runtime linking failures due to out-of-range functions
		calls.

config EXAMPLES_MODULE_LIBGCC
	bool "Link with LIBGCC"
	default n
	depends on EXPERIMENTAL

endif