Generate the kernel config choice, rather than having it hard-coded:
author"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue Sep 16 17:39:40 2008 +0000 (2008-09-16)
changeset 8615506fbbad59b
parent 860 3ff8038f904c
child 865 04cf91f13430
Generate the kernel config choice, rather than having it hard-coded:
- change the menu label from 'Target OS' to 'Operating System',
- bare-metal is a kind of kernel (OS), rename to 'bare-metal' from 'none',
- update the kconfig.mk to generate the kernel choice entries,
- update glibc&eglibc kernel version option accordingly.
Update the debug & tools confiog file generation to match with arch & kernel.
Print terse command lines when building in kconfig/ (a-la Linux kernel).
Fix the makefile rules in kconfig/kconfig.mk to be /simple/ rules.

/trunk/kconfig/kconfig.mk | 117 81 36 0 +++++++++++++++++++++----------
/trunk/config/kernel/linux.in | 4 4 0 0 +
/trunk/config/kernel/bare-metal.experimental.in | 15 15 0 0 ++++
/trunk/config/kernel.in | 33 5 28 0 +--------
/trunk/config/libc/glibc-eglibc-common.in | 4 2 2 0
5 files changed, 107 insertions(+), 66 deletions(-)
config/kernel.in
config/kernel/bare-metal.experimental.in
config/kernel/linux.in
config/libc/glibc-eglibc-common.in
kconfig/kconfig.mk
scripts/build/kernel/bare-metal.sh
scripts/build/kernel/none.sh
     1.1 --- a/config/kernel.in	Tue Sep 16 14:32:07 2008 +0000
     1.2 +++ b/config/kernel.in	Tue Sep 16 17:39:40 2008 +0000
     1.3 @@ -1,42 +1,19 @@
     1.4  # Kernel options
     1.5  
     1.6 +menu "Operating System"
     1.7 +
     1.8  config KERNEL
     1.9      string
    1.10 -    default "none"  if BARE_METAL
    1.11 -    default "linux" if KERNEL_LINUX
    1.12  
    1.13 -menu "Target OS"
    1.14 +config KERNEL_VERSION
    1.15 +    string
    1.16  
    1.17  choice
    1.18      bool
    1.19      prompt "Target OS"
    1.20 -    default KERNEL_LINUX
    1.21  
    1.22 -config KERNEL_LINUX
    1.23 -    bool
    1.24 -    prompt "Linux"
    1.25 -    help
    1.26 -      Build a toolchain targeting systems running Linux as a kernel.
    1.27 -
    1.28 -config BARE_METAL
    1.29 -    bool
    1.30 -    prompt "Bare metal (EXPERIMENTAL)"
    1.31 -    depends on EXPERIMENTAL
    1.32 -    help
    1.33 -      Say 'y' here if you want a simple C compiler with no C library.
    1.34 -      
    1.35 -      'Bare metal' also refer to those programs that run without any kernel.
    1.36 -      
    1.37 -      You probably want to say 'y' here if you plan to use your compiler
    1.38 -      to build only kernels or bootloaders
    1.39 +source config.gen/kernel.in
    1.40  
    1.41  endchoice
    1.42  
    1.43 -config KERNEL_VERSION
    1.44 -    string
    1.45 -
    1.46 -if KERNEL_LINUX
    1.47 -source config/kernel/linux.in
    1.48 -endif
    1.49 -
    1.50  endmenu
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/config/kernel/bare-metal.experimental.in	Tue Sep 16 17:39:40 2008 +0000
     2.3 @@ -0,0 +1,15 @@
     2.4 +# Bare metal config options
     2.5 +
     2.6 +config KERNEL_bare_metal
     2.7 +    select BARE_METAL
     2.8 +    help
     2.9 +      Say 'y' here if you want a simple C compiler with no C library.
    2.10 +      
    2.11 +      'Bare metal' also refer to those programs that run without any kernel.
    2.12 +      
    2.13 +      You probably want to say 'y' here if you plan to use your compiler
    2.14 +      to build only kernels or bootloaders.
    2.15 +
    2.16 +config BARE_METAL
    2.17 +    bool
    2.18 +    default n
     3.1 --- a/config/kernel/linux.in	Tue Sep 16 14:32:07 2008 +0000
     3.2 +++ b/config/kernel/linux.in	Tue Sep 16 17:39:40 2008 +0000
     3.3 @@ -1,5 +1,9 @@
     3.4  # Linux kernel options
     3.5  
     3.6 +config KERNEL_linux
     3.7 +    help
     3.8 +      Build a toolchain targeting systems running Linux as a kernel.
     3.9 +
    3.10  choice
    3.11      bool
    3.12      prompt "Get kernel headers from:"
     4.1 --- a/config/libc/glibc-eglibc-common.in	Tue Sep 16 14:32:07 2008 +0000
     4.2 +++ b/config/libc/glibc-eglibc-common.in	Tue Sep 16 17:39:40 2008 +0000
     4.3 @@ -70,7 +70,7 @@
     4.4  
     4.5        Eg.: crypt        (for very old libces)
     4.6  
     4.7 -if KERNEL_LINUX
     4.8 +if KERNEL_linux
     4.9  
    4.10  choice
    4.11      bool
    4.12 @@ -166,4 +166,4 @@
    4.13      default KERNEL_VERSION                if LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS
    4.14      default LIBC_GLIBC_MIN_KERNEL_VERSION if LIBC_GLIBC_USE_HEADERS_MIN_KERNEL
    4.15  
    4.16 -endif # KERNEL_LINUX
    4.17 +endif # KERNEL_linux
     5.1 --- a/kconfig/kconfig.mk	Tue Sep 16 14:32:07 2008 +0000
     5.2 +++ b/kconfig/kconfig.mk	Tue Sep 16 17:39:40 2008 +0000
     5.3 @@ -19,24 +19,31 @@
     5.4  endif
     5.5  
     5.6  # Build a list of all config files
     5.7 -ARCHS              = $(patsubst $(CT_LIB_DIR)/arch/%,%,$(wildcard $(CT_LIB_DIR)/arch/*))
     5.8 -ARCH_CONFIG_FILES  = $(wildcard $(CT_LIB_DIR)/arch/*/*.in)
     5.9 +ARCH_CONFIG_FILES  = $(wildcard $(CT_LIB_DIR)/arch/*/config.in)
    5.10 +KERN_CONFIG_FILES  = $(wildcard $(CT_LIB_DIR)/config/kernel/*.in)
    5.11  DEBUG_CONFIG_FILES = $(wildcard $(CT_LIB_DIR)/config/debug/*.in)
    5.12  TOOLS_CONFIG_FILES = $(wildcard $(CT_LIB_DIR)/config/tools/*.in)
    5.13  
    5.14  STATIC_CONFIG_FILES = $(shell find $(CT_LIB_DIR)/config -type f -name '*.in')
    5.15  GEN_CONFIG_FILES=$(CT_TOP_DIR)/config.gen/arch.in	\
    5.16 +				 $(CT_TOP_DIR)/config.gen/kernel.in	\
    5.17  				 $(CT_TOP_DIR)/config.gen/debug.in	\
    5.18  				 $(CT_TOP_DIR)/config.gen/tools.in
    5.19  
    5.20  CONFIG_FILES=$(STATIC_CONFIG_FILES) $(GEN_CONFIG_FILES)
    5.21  
    5.22 -$(GEN_CONFIG_FILES):: $(CT_TOP_DIR)/config.gen
    5.23 +# Build list of items
    5.24 +ARCHS   = $(patsubst $(CT_LIB_DIR)/arch/%/config.in,%,$(ARCH_CONFIG_FILES))
    5.25 +KERNELS = $(patsubst $(CT_LIB_DIR)/config/kernel/%.in,%,$(KERN_CONFIG_FILES))
    5.26 +
    5.27 +$(GEN_CONFIG_FILES): $(CT_TOP_DIR)/config.gen           \
    5.28 +                     $(CT_LIB_DIR)/kconfig/kconfig.mk
    5.29  
    5.30  $(CT_TOP_DIR)/config.gen:
    5.31  	@mkdir -p $(CT_TOP_DIR)/config.gen
    5.32  
    5.33 -$(CT_TOP_DIR)/config.gen/arch.in:: $(ARCH_CONFIG_FILES)
    5.34 +$(CT_TOP_DIR)/config.gen/arch.in: $(ARCH_CONFIG_FILES)
    5.35 +	@echo '  IN   config.gen/arch.in'
    5.36  	@(echo "# Architectures menu";                                              \
    5.37  	  echo "# Generated file, do not edit!!!";                                  \
    5.38  	  echo "";                                                                  \
    5.39 @@ -57,46 +64,77 @@
    5.40  	    echo "endif";                                                           \
    5.41  	    echo "";                                                                \
    5.42  	  done;                                                                     \
    5.43 -	) >$@
    5.44 +	 ) >$@
    5.45  
    5.46 -$(CT_TOP_DIR)/config.gen/debug.in:: $(DEBUG_CONFIG_FILES)
    5.47 -	@echo "# Debug facilities menu" >$@
    5.48 -	@echo "# Generated file, do not edit!!!" >>$@
    5.49 -	@echo "menu \"Debug facilities\"" >>$@
    5.50 -	@for f in $(patsubst $(CT_TOP_DIR)/%,%,$(wildcard $(CT_TOP_DIR)/config/debug/*.in)); do \
    5.51 -	     echo "source $${f}";                                                               \
    5.52 -	 done >>$@
    5.53 -	@echo "endmenu" >>$@
    5.54 +$(CT_TOP_DIR)/config.gen/kernel.in: $(KERN_CONFIG_FILES)
    5.55 +	@echo '  IN   config.gen/kernel.in'
    5.56 +	@(echo "# Kernel menu";                                         \
    5.57 +	  echo "# Generated file, do not edit!!!";                      \
    5.58 +	  echo "";                                                      \
    5.59 +	  for kern in $(KERNELS); do                                    \
    5.60 +		_exp="$${kern/*./}";                                        \
    5.61 +	    _kern1="$${kern/.experimental/}";                           \
    5.62 +	    _kern2=$$(echo "$${_kern1}" |sed -r -e 's/[ -\/]/_/g;');    \
    5.63 +	    echo "config KERNEL_$${_kern2}";                            \
    5.64 +	    echo "    bool";                                            \
    5.65 +	    printf "    prompt \"$${_kern1}";                           \
    5.66 +	    if [ "$${_exp}" != "$${kern}" ]; then                       \
    5.67 +	        echo " (EXPERIMENTAL)\"";                               \
    5.68 +	        echo "    depends on EXPERIMENTAL";                     \
    5.69 +	    else                                                        \
    5.70 +	        echo "\"";                                              \
    5.71 +		fi;                                                         \
    5.72 +	    echo "if KERNEL_$${_kern2}";                                \
    5.73 +	    echo "config KERNEL";                                       \
    5.74 +	    echo "    default \"$${_kern1}\" if KERNEL_$${_kern2}";     \
    5.75 +	    echo "source config/kernel/$${kern}.in";			        \
    5.76 +	    echo "endif";                                               \
    5.77 +	    echo "";                                                    \
    5.78 +	  done;                                                         \
    5.79 +	 ) >$@
    5.80  
    5.81 -$(CT_TOP_DIR)/config.gen/tools.in:: $(TOOLS_CONFIG_FILES)
    5.82 -	@echo "# Tools facilities menu" >$@
    5.83 -	@echo "# Generated file, do not edit!!!" >>$@
    5.84 -	@echo "menu \"Tools facilities\"" >>$@
    5.85 -	@for f in $(patsubst $(CT_TOP_DIR)/%,%,$(wildcard $(CT_TOP_DIR)/config/tools/*.in)); do \
    5.86 -	     echo "source $${f}";                                                               \
    5.87 -	 done >>$@
    5.88 -	@echo "endmenu" >>$@
    5.89 +$(CT_TOP_DIR)/config.gen/debug.in: $(DEBUG_CONFIG_FILES)
    5.90 +	@echo '  IN   config.gen/debug.in'
    5.91 +	@(echo "# Debug facilities menu";                                   \
    5.92 +	  echo "# Generated file, do not edit!!!";                          \
    5.93 +	  echo "menu \"Debug facilities\"";                                 \
    5.94 +	  for f in $(patsubst $(CT_TOP_DIR)/%,%,$(DEBUG_CONFIG_FILES)); do  \
    5.95 +	     echo "source $${f}";                                           \
    5.96 +	  done;                                                             \
    5.97 +	  echo "endmenu";                                                   \
    5.98 +	 ) >$@
    5.99  
   5.100 -config menuconfig oldconfig defoldconfig extractconfig:: $(KCONFIG_TOP)
   5.101 +$(CT_TOP_DIR)/config.gen/tools.in: $(TOOLS_CONFIG_FILES)
   5.102 +	@echo '  IN   config.gen/tools.in'
   5.103 +	@(echo "# Tools facilities menu";                                   \
   5.104 +	  echo "# Generated file, do not edit!!!";                          \
   5.105 +	  echo "menu \"Tools facilities\"";                                 \
   5.106 +	  for f in $(patsubst $(CT_TOP_DIR)/%,%,$(TOOLS_CONFIG_FILES)); do  \
   5.107 +	     echo "source $${f}";                                           \
   5.108 +	  done;                                                             \
   5.109 +	  echo "endmenu";                                                   \
   5.110 +	 ) >$@
   5.111 +
   5.112 +config menuconfig oldconfig defoldconfig extractconfig: $(KCONFIG_TOP)
   5.113  
   5.114  $(KCONFIG_TOP):
   5.115  	@ln -sf $(CT_LIB_DIR)/config config
   5.116  
   5.117 -menuconfig:: $(obj)/mconf $(CONFIG_FILES)
   5.118 -	@$< $(KCONFIG_TOP)
   5.119 +menuconfig: $(CONFIG_FILES) $(obj)/mconf
   5.120 +	@$(obj)/mconf $(KCONFIG_TOP)
   5.121  
   5.122 -config:: $(obj)/conf $(CONFIG_FILES)
   5.123 -	@$< $(KCONFIG_TOP)
   5.124 +config: $(CONFIG_FILES) $(obj)/conf
   5.125 +	@$(obj)/conf $(KCONFIG_TOP)
   5.126  
   5.127 -oldconfig:: $(obj)/conf $(CONFIG_FILES)
   5.128 -	@$< -s $(KCONFIG_TOP)
   5.129 +oldconfig: $(CONFIG_FILES) $(obj)/conf
   5.130 +	@$(obj)/conf -s $(KCONFIG_TOP)
   5.131  
   5.132 -defoldconfig:: $(obj)/conf $(CONFIG_FILES)
   5.133 -	@yes "" |$< -s $(KCONFIG_TOP) >/dev/null
   5.134 +defoldconfig: $(CONFIG_FILES) $(obj)/conf
   5.135 +	@yes "" |$(obj)/conf -s $(KCONFIG_TOP)
   5.136  
   5.137 -extractconfig:: $(obj)/conf $(CONFIG_FILES)
   5.138 +extractconfig: $(CONFIG_FILES) $(obj)/conf
   5.139  	@$(CT_LIB_DIR)/tools/extract-config.sh >.config
   5.140 -	@$< -s $(KCONFIG_TOP)
   5.141 +	@$(obj)/conf -s $(KCONFIG_TOP)
   5.142  
   5.143  # Help text used by make help
   5.144  help-config::
   5.145 @@ -111,9 +149,10 @@
   5.146  SHIPPED := $(CT_LIB_DIR)/kconfig/zconf.tab.c $(CT_LIB_DIR)/kconfig/lex.zconf.c $(CT_LIB_DIR)/kconfig/zconf.hash.c
   5.147  
   5.148  %.c: %.c_shipped
   5.149 +	@echo '  LN   kconfig/$(notdir $@)'
   5.150  	@ln -s $(notdir $<) $@
   5.151  
   5.152 -$(obj)/conf $(obj)/mconf:: $(obj)
   5.153 +$(obj)/conf $(obj)/mconf: $(obj)
   5.154  
   5.155  $(obj):
   5.156  	@mkdir -p $(obj)
   5.157 @@ -128,12 +167,18 @@
   5.158          $(CT_LIB_DIR)/kconfig/symbol.c      \
   5.159          $(CT_LIB_DIR)/kconfig/util.c
   5.160  
   5.161 -$(obj)/mconf:: $(SHIPPED) $(CT_LIB_DIR)/kconfig/mconf.c $(HEADERS) $(FILES)
   5.162 +$(obj)/mconf: $(SHIPPED) $(CT_LIB_DIR)/kconfig/mconf.c  \
   5.163 +              $(HEADERS) $(FILES)                       \
   5.164 +              $(CT_LIB_DIR)/kconfig/kconfig.mk
   5.165 +	@echo '  LNK  kconfig/mconf'
   5.166  	@$(HOST_CC) $(CFLAGS) -o $@ $(CT_LIB_DIR)/kconfig/{mconf.c,zconf.tab.c,lxdialog/*.c} \
   5.167  	     $(shell $(CT_LIB_DIR)/kconfig/lxdialog/check-lxdialog.sh -ccflags)              \
   5.168  	     $(shell $(CT_LIB_DIR)/kconfig/lxdialog/check-lxdialog.sh -ldflags $(HOST_CC))
   5.169  
   5.170 -$(obj)/conf:: $(SHIPPED) $(CT_LIB_DIR)/kconfig/conf.c $(HEADERS) $(FILES)
   5.171 +$(obj)/conf: $(SHIPPED) $(CT_LIB_DIR)/kconfig/conf.c    \
   5.172 +             $(HEADERS) $(FILES)                        \
   5.173 +             $(CT_LIB_DIR)/kconfig/kconfig.mk
   5.174 +	@echo '  LNK  kconfig/conf'
   5.175  	@$(HOST_CC) $(CFLAGS) -o $@ $(CT_LIB_DIR)/kconfig/{conf.c,zconf.tab.c}
   5.176  
   5.177  clean::
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/scripts/build/kernel/bare-metal.sh	Tue Sep 16 17:39:40 2008 +0000
     6.3 @@ -0,0 +1,19 @@
     6.4 +# This file declares functions for bare metal kernel (IE. none)
     6.5 +# Copyright 2008 Yann E. MORIN
     6.6 +# Licensed under the GPL v2. See COPYING in the root of this package
     6.7 +
     6.8 +do_print_filename() {
     6.9 +    :
    6.10 +}
    6.11 +
    6.12 +do_kernel_get() {
    6.13 +    :
    6.14 +}
    6.15 +
    6.16 +do_kernel_extract() {
    6.17 +    :
    6.18 +}
    6.19 +
    6.20 +do_kernel_headers() {
    6.21 +    :
    6.22 +}
     7.1 --- a/scripts/build/kernel/none.sh	Tue Sep 16 14:32:07 2008 +0000
     7.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.3 @@ -1,19 +0,0 @@
     7.4 -# This file declares functions for bare metal kernel (IE. none)
     7.5 -# Copyright 2008 Yann E. MORIN
     7.6 -# Licensed under the GPL v2. See COPYING in the root of this package
     7.7 -
     7.8 -do_print_filename() {
     7.9 -    :
    7.10 -}
    7.11 -
    7.12 -do_kernel_get() {
    7.13 -    :
    7.14 -}
    7.15 -
    7.16 -do_kernel_extract() {
    7.17 -    :
    7.18 -}
    7.19 -
    7.20 -do_kernel_headers() {
    7.21 -    :
    7.22 -}