From 1d3dd328dd9b153ee6dcdc18b9946de88e217bc6 Mon Sep 17 00:00:00 2001 From: xuxin19 Date: Fri, 15 Mar 2024 11:19:34 +0800 Subject: [PATCH] modify BUILD_LOADABLE to MODULES which backwards-compatible Kernel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit maintains the same semantics as Kernel’s module build and compatible with Kconfiglib implementation. The problem of kconfiglib not being able to use tri-states is this: linux is here torvalds/linux@6dd85ff The module option is extracted from one of the triate three states into a MODULE keyword. Kconfiglib supports the default implementation of module to be MODULE for compatibility with the linux kernel, and triate degenerates into bool two states Refer to this code: https://github.com/ulfalizer/Kconfiglib/blob/061e71f7d78cb057762d88de088055361863deff/kconfiglib.py#L4274-L4284 Signed-off-by: xuxin19 --- CMakeLists.txt | 12 ++------ Documentation/components/libs/libc/index.rst | 2 +- Documentation/quickstart/install.rst | 5 ---- Kconfig | 15 ++++++---- binfmt/Kconfig | 2 +- cmake/nuttx_add_application.cmake | 2 +- tools/Unix.mk | 29 ++++++++------------ 7 files changed, 27 insertions(+), 40 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 63455d5583..702215b1a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -335,15 +335,9 @@ if(NOT EXISTS ${CMAKE_BINARY_DIR}/.config OR NOT "${NUTTX_DEFCONFIG}" STREQUAL # store original expanded .config configure_file(${CMAKE_BINARY_DIR}/.config ${CMAKE_BINARY_DIR}/.config.orig COPYONLY) - - string(REPLACE "\n" ";" KCONFIG_ESTRING ${KCONFIG_ERROR}) - foreach(estring ${KCONFIG_ESTRING}) - string(REGEX MATCH "the 'modules' option is not supported" result - ${estring}) - if(NOT result) - message(WARNING "Kconfig Configuration Error: ${estring}") - endif() - endforeach() + if(KCONFIG_ERROR) + message(WARNING "Kconfig Configuration Error: ${KCONFIG_ERROR}") + endif() if(KCONFIG_STATUS AND NOT KCONFIG_STATUS EQUAL 0) message( diff --git a/Documentation/components/libs/libc/index.rst b/Documentation/components/libs/libc/index.rst index 0d8966e5be..d9594c0a79 100644 --- a/Documentation/components/libs/libc/index.rst +++ b/Documentation/components/libs/libc/index.rst @@ -127,7 +127,7 @@ Symbol tables have differing usefulness in different NuttX build modes: share resources with other user code (but should use system calls to interact with the OS). -#. But in the kernel build mode (``CONFIG_BUILD_LOADABLE``), only fully linked +#. But in the kernel build mode (``CONFIG_MODULES``), only fully linked executables loadable via ``execl()``, ``execv()``, or ``posix_spawan()`` can be used. There is no use for a symbol table with the kernel build since all diff --git a/Documentation/quickstart/install.rst b/Documentation/quickstart/install.rst index 7388d267a5..d7cb13ae2f 100644 --- a/Documentation/quickstart/install.rst +++ b/Documentation/quickstart/install.rst @@ -132,11 +132,6 @@ If you are a working on Windows, which also need the support of windows-curses: pip install windows-curses -.. tip:: - It should be noted that kconfiglib does not support **modules** attributes. - (https://github.com/ulfalizer/Kconfiglib/blob/master/kconfiglib.py#L3239-L3254, - the community seems to have stopped updating), if the features depends on - ``CONFIG_BUILD_LOADABLE``, kconfiglib may not be a good choice. Toolchain ========= diff --git a/Kconfig b/Kconfig index 2df36e5ba1..5fb1892547 100644 --- a/Kconfig +++ b/Kconfig @@ -273,14 +273,17 @@ config BASE_DEFCONFIG current configuration. It is useful for getting the current configuration on runtime. -config BUILD_LOADABLE +config MODULES bool - option modules ---help--- Automatically selected if KERNEL build is selected. - This selection only effects the behavior of the 'make export' - target and currently has no effect unless you wish to build - loadable applications in a FLAT build. + This selection marks the implementation of Kconfig + to enable the module build function, and is used to + enable 'm' in the triate state. Its semantics are + consistent with Kernel. This selection also effects + the behavior of the 'make export' target and currently + has no effect unless you wish to build loadable applications + in a FLAT build. choice prompt "Memory organization" @@ -312,8 +315,8 @@ config BUILD_PROTECTED config BUILD_KERNEL bool "NuttX kernel build" depends on ARCH_USE_MMU && ARCH_ADDRENV - select BUILD_LOADABLE select LIB_SYSCALL + select MODULES ---help--- Builds NuttX as a separately compiled kernel. No applications are built. All user applications must reside in a file system where diff --git a/binfmt/Kconfig b/binfmt/Kconfig index 7f6e3cfbfc..95d50b130f 100644 --- a/binfmt/Kconfig +++ b/binfmt/Kconfig @@ -22,7 +22,7 @@ config PATH_INITIAL config BINFMT_LOADABLE bool - select BUILD_LOADABLE + select MODULES default n ---help--- Automatically selected if a loadable binary format is selected. diff --git a/cmake/nuttx_add_application.cmake b/cmake/nuttx_add_application.cmake index 307f0d29d1..f9efc03bed 100644 --- a/cmake/nuttx_add_application.cmake +++ b/cmake/nuttx_add_application.cmake @@ -157,7 +157,7 @@ function(nuttx_add_application) # loadable build requires applying ELF flags to all applications - if(CONFIG_BUILD_LOADABLE) + if(CONFIG_MODULES) target_compile_options( ${TARGET} PRIVATE diff --git a/tools/Unix.mk b/tools/Unix.mk index 4bd7dad9e1..467dd685a3 100644 --- a/tools/Unix.mk +++ b/tools/Unix.mk @@ -638,10 +638,7 @@ pass2dep: context tools/mkdeps$(HOSTEXEEXT) tools/cnvwindeps$(HOSTEXEEXT) KCONFIG_ENV = APPSDIR=${CONFIG_APPS_DIR} EXTERNALDIR=$(EXTERNALDIR) KCONFIG_ENV += APPSBINDIR=${CONFIG_APPS_DIR} BINDIR=${TOPDIR} -LOADABLE = $(shell grep "=m$$" $(TOPDIR)/.config) -ifeq ($(CONFIG_BUILD_LOADABLE)$(LOADABLE),) - KCONFIG_LIB = $(shell command -v menuconfig 2> /dev/null) -endif +KCONFIG_LIB = $(shell command -v menuconfig 2> /dev/null) # Prefer "kconfiglib" if host OS supports it @@ -657,21 +654,19 @@ define kconfig_tweak_disable kconfig-tweak --file $1 -u $2 endef else - KCONFIG_WARNING = if [ -s kwarning ]; \ - then rm kwarning; \ - exit 1; \ - else \ - rm kwarning; \ - fi - MODULE_WARNING = "warning: the 'modules' option is not supported" - PURGE_MODULE_WARNING = 2> >(grep -v ${MODULE_WARNING} | tee kwarning) | cat && ${KCONFIG_WARNING} - KCONFIG_OLDCONFIG = oldconfig ${PURGE_MODULE_WARNING} - KCONFIG_OLDDEFCONFIG = olddefconfig ${PURGE_MODULE_WARNING} - KCONFIG_MENUCONFIG = menuconfig $(subst | cat,,${PURGE_MODULE_WARNING}) - KCONFIG_NCONFIG = guiconfig ${PURGE_MODULE_WARNING} + KCONFIG_WARNING = 2> >(tee kwarning) | cat && if [ -s kwarning ]; \ + then rm kwarning; \ + exit 1; \ + else \ + rm kwarning; \ + fi + KCONFIG_OLDCONFIG = oldconfig ${KCONFIG_WARNING} + KCONFIG_OLDDEFCONFIG = olddefconfig ${KCONFIG_WARNING} + KCONFIG_MENUCONFIG = menuconfig $(subst | cat,,${KCONFIG_WARNING}) + KCONFIG_NCONFIG = guiconfig ${KCONFIG_WARNING} KCONFIG_QCONFIG = ${KCONFIG_NCONFIG} KCONFIG_GCONFIG = ${KCONFIG_NCONFIG} - KCONFIG_SAVEDEFCONFIG = savedefconfig --out defconfig.tmp ${PURGE_MODULE_WARNING} + KCONFIG_SAVEDEFCONFIG = savedefconfig --out defconfig.tmp ${KCONFIG_WARNING} define kconfig_tweak_disable $(Q) sed -i'.orig' '/$2/d' $1 $(Q) rm -f $1.orig