From c36b92179069933060d51f408e079c49eb47f281 Mon Sep 17 00:00:00 2001 From: "Yann E. MORIN\"" Date: Tue, 16 Sep 2008 17:39:40 +0000 Subject: 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(-) diff --git a/config/kernel.in b/config/kernel.in index db7b802..1ae8b2e 100644 --- a/config/kernel.in +++ b/config/kernel.in @@ -1,42 +1,19 @@ # Kernel options +menu "Operating System" + config KERNEL string - default "none" if BARE_METAL - default "linux" if KERNEL_LINUX -menu "Target OS" +config KERNEL_VERSION + string choice bool prompt "Target OS" - default KERNEL_LINUX - -config KERNEL_LINUX - bool - prompt "Linux" - help - Build a toolchain targeting systems running Linux as a kernel. -config BARE_METAL - bool - prompt "Bare metal (EXPERIMENTAL)" - depends on EXPERIMENTAL - help - Say 'y' here if you want a simple C compiler with no C library. - - 'Bare metal' also refer to those programs that run without any kernel. - - You probably want to say 'y' here if you plan to use your compiler - to build only kernels or bootloaders +source config.gen/kernel.in endchoice -config KERNEL_VERSION - string - -if KERNEL_LINUX -source config/kernel/linux.in -endif - endmenu diff --git a/config/kernel/bare-metal.experimental.in b/config/kernel/bare-metal.experimental.in new file mode 100644 index 0000000..7a4b574 --- /dev/null +++ b/config/kernel/bare-metal.experimental.in @@ -0,0 +1,15 @@ +# Bare metal config options + +config KERNEL_bare_metal + select BARE_METAL + help + Say 'y' here if you want a simple C compiler with no C library. + + 'Bare metal' also refer to those programs that run without any kernel. + + You probably want to say 'y' here if you plan to use your compiler + to build only kernels or bootloaders. + +config BARE_METAL + bool + default n diff --git a/config/kernel/linux.in b/config/kernel/linux.in index 18881d7..7fd0523 100644 --- a/config/kernel/linux.in +++ b/config/kernel/linux.in @@ -1,5 +1,9 @@ # Linux kernel options +config KERNEL_linux + help + Build a toolchain targeting systems running Linux as a kernel. + choice bool prompt "Get kernel headers from:" diff --git a/config/libc/glibc-eglibc-common.in b/config/libc/glibc-eglibc-common.in index 007c524..61becfb 100644 --- a/config/libc/glibc-eglibc-common.in +++ b/config/libc/glibc-eglibc-common.in @@ -70,7 +70,7 @@ config LIBC_ADDONS_LIST Eg.: crypt (for very old libces) -if KERNEL_LINUX +if KERNEL_linux choice bool @@ -166,4 +166,4 @@ config LIBC_GLIBC_MIN_KERNEL default KERNEL_VERSION if LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS default LIBC_GLIBC_MIN_KERNEL_VERSION if LIBC_GLIBC_USE_HEADERS_MIN_KERNEL -endif # KERNEL_LINUX +endif # KERNEL_linux diff --git a/kconfig/kconfig.mk b/kconfig/kconfig.mk index 4bde05a..a1d1d7c 100644 --- a/kconfig/kconfig.mk +++ b/kconfig/kconfig.mk @@ -19,24 +19,31 @@ CFLAGS += -DKBUILD_NO_NLS endif # Build a list of all config files -ARCHS = $(patsubst $(CT_LIB_DIR)/arch/%,%,$(wildcard $(CT_LIB_DIR)/arch/*)) -ARCH_CONFIG_FILES = $(wildcard $(CT_LIB_DIR)/arch/*/*.in) +ARCH_CONFIG_FILES = $(wildcard $(CT_LIB_DIR)/arch/*/config.in) +KERN_CONFIG_FILES = $(wildcard $(CT_LIB_DIR)/config/kernel/*.in) DEBUG_CONFIG_FILES = $(wildcard $(CT_LIB_DIR)/config/debug/*.in) TOOLS_CONFIG_FILES = $(wildcard $(CT_LIB_DIR)/config/tools/*.in) STATIC_CONFIG_FILES = $(shell find $(CT_LIB_DIR)/config -type f -name '*.in') GEN_CONFIG_FILES=$(CT_TOP_DIR)/config.gen/arch.in \ + $(CT_TOP_DIR)/config.gen/kernel.in \ $(CT_TOP_DIR)/config.gen/debug.in \ $(CT_TOP_DIR)/config.gen/tools.in CONFIG_FILES=$(STATIC_CONFIG_FILES) $(GEN_CONFIG_FILES) -$(GEN_CONFIG_FILES):: $(CT_TOP_DIR)/config.gen +# Build list of items +ARCHS = $(patsubst $(CT_LIB_DIR)/arch/%/config.in,%,$(ARCH_CONFIG_FILES)) +KERNELS = $(patsubst $(CT_LIB_DIR)/config/kernel/%.in,%,$(KERN_CONFIG_FILES)) + +$(GEN_CONFIG_FILES): $(CT_TOP_DIR)/config.gen \ + $(CT_LIB_DIR)/kconfig/kconfig.mk $(CT_TOP_DIR)/config.gen: @mkdir -p $(CT_TOP_DIR)/config.gen -$(CT_TOP_DIR)/config.gen/arch.in:: $(ARCH_CONFIG_FILES) +$(CT_TOP_DIR)/config.gen/arch.in: $(ARCH_CONFIG_FILES) + @echo ' IN config.gen/arch.in' @(echo "# Architectures menu"; \ echo "# Generated file, do not edit!!!"; \ echo ""; \ @@ -57,46 +64,77 @@ $(CT_TOP_DIR)/config.gen/arch.in:: $(ARCH_CONFIG_FILES) echo "endif"; \ echo ""; \ done; \ - ) >$@ - -$(CT_TOP_DIR)/config.gen/debug.in:: $(DEBUG_CONFIG_FILES) - @echo "# Debug facilities menu" >$@ - @echo "# Generated file, do not edit!!!" >>$@ - @echo "menu \"Debug facilities\"" >>$@ - @for f in $(patsubst $(CT_TOP_DIR)/%,%,$(wildcard $(CT_TOP_DIR)/config/debug/*.in)); do \ - echo "source $${f}"; \ - done >>$@ - @echo "endmenu" >>$@ - -$(CT_TOP_DIR)/config.gen/tools.in:: $(TOOLS_CONFIG_FILES) - @echo "# Tools facilities menu" >$@ - @echo "# Generated file, do not edit!!!" >>$@ - @echo "menu \"Tools facilities\"" >>$@ - @for f in $(patsubst $(CT_TOP_DIR)/%,%,$(wildcard $(CT_TOP_DIR)/config/tools/*.in)); do \ - echo "source $${f}"; \ - done >>$@ - @echo "endmenu" >>$@ - -config menuconfig oldconfig defoldconfig extractconfig:: $(KCONFIG_TOP) + ) >$@ + +$(CT_TOP_DIR)/config.gen/kernel.in: $(KERN_CONFIG_FILES) + @echo ' IN config.gen/kernel.in' + @(echo "# Kernel menu"; \ + echo "# Generated file, do not edit!!!"; \ + echo ""; \ + for kern in $(KERNELS); do \ + _exp="$${kern/*./}"; \ + _kern1="$${kern/.experimental/}"; \ + _kern2=$$(echo "$${_kern1}" |sed -r -e 's/[ -\/]/_/g;'); \ + echo "config KERNEL_$${_kern2}"; \ + echo " bool"; \ + printf " prompt \"$${_kern1}"; \ + if [ "$${_exp}" != "$${kern}" ]; then \ + echo " (EXPERIMENTAL)\""; \ + echo " depends on EXPERIMENTAL"; \ + else \ + echo "\""; \ + fi; \ + echo "if KERNEL_$${_kern2}"; \ + echo "config KERNEL"; \ + echo " default \"$${_kern1}\" if KERNEL_$${_kern2}"; \ + echo "source config/kernel/$${kern}.in"; \ + echo "endif"; \ + echo ""; \ + done; \ + ) >$@ + +$(CT_TOP_DIR)/config.gen/debug.in: $(DEBUG_CONFIG_FILES) + @echo ' IN config.gen/debug.in' + @(echo "# Debug facilities menu"; \ + echo "# Generated file, do not edit!!!"; \ + echo "menu \"Debug facilities\""; \ + for f in $(patsubst $(CT_TOP_DIR)/%,%,$(DEBUG_CONFIG_FILES)); do \ + echo "source $${f}"; \ + done; \ + echo "endmenu"; \ + ) >$@ + +$(CT_TOP_DIR)/config.gen/tools.in: $(TOOLS_CONFIG_FILES) + @echo ' IN config.gen/tools.in' + @(echo "# Tools facilities menu"; \ + echo "# Generated file, do not edit!!!"; \ + echo "menu \"Tools facilities\""; \ + for f in $(patsubst $(CT_TOP_DIR)/%,%,$(TOOLS_CONFIG_FILES)); do \ + echo "source $${f}"; \ + done; \ + echo "endmenu"; \ + ) >$@ + +config menuconfig oldconfig defoldconfig extractconfig: $(KCONFIG_TOP) $(KCONFIG_TOP): @ln -sf $(CT_LIB_DIR)/config config -menuconfig:: $(obj)/mconf $(CONFIG_FILES) - @$< $(KCONFIG_TOP) +menuconfig: $(CONFIG_FILES) $(obj)/mconf + @$(obj)/mconf $(KCONFIG_TOP) -config:: $(obj)/conf $(CONFIG_FILES) - @$< $(KCONFIG_TOP) +config: $(CONFIG_FILES) $(obj)/conf + @$(obj)/conf $(KCONFIG_TOP) -oldconfig:: $(obj)/conf $(CONFIG_FILES) - @$< -s $(KCONFIG_TOP) +oldconfig: $(CONFIG_FILES) $(obj)/conf + @$(obj)/conf -s $(KCONFIG_TOP) -defoldconfig:: $(obj)/conf $(CONFIG_FILES) - @yes "" |$< -s $(KCONFIG_TOP) >/dev/null +defoldconfig: $(CONFIG_FILES) $(obj)/conf + @yes "" |$(obj)/conf -s $(KCONFIG_TOP) -extractconfig:: $(obj)/conf $(CONFIG_FILES) +extractconfig: $(CONFIG_FILES) $(obj)/conf @$(CT_LIB_DIR)/tools/extract-config.sh >.config - @$< -s $(KCONFIG_TOP) + @$(obj)/conf -s $(KCONFIG_TOP) # Help text used by make help help-config:: @@ -111,9 +149,10 @@ help-config:: SHIPPED := $(CT_LIB_DIR)/kconfig/zconf.tab.c $(CT_LIB_DIR)/kconfig/lex.zconf.c $(CT_LIB_DIR)/kconfig/zconf.hash.c %.c: %.c_shipped + @echo ' LN kconfig/$(notdir $@)' @ln -s $(notdir $<) $@ -$(obj)/conf $(obj)/mconf:: $(obj) +$(obj)/conf $(obj)/mconf: $(obj) $(obj): @mkdir -p $(obj) @@ -128,12 +167,18 @@ FILES = $(CT_LIB_DIR)/kconfig/confdata.c \ $(CT_LIB_DIR)/kconfig/symbol.c \ $(CT_LIB_DIR)/kconfig/util.c -$(obj)/mconf:: $(SHIPPED) $(CT_LIB_DIR)/kconfig/mconf.c $(HEADERS) $(FILES) +$(obj)/mconf: $(SHIPPED) $(CT_LIB_DIR)/kconfig/mconf.c \ + $(HEADERS) $(FILES) \ + $(CT_LIB_DIR)/kconfig/kconfig.mk + @echo ' LNK kconfig/mconf' @$(HOST_CC) $(CFLAGS) -o $@ $(CT_LIB_DIR)/kconfig/{mconf.c,zconf.tab.c,lxdialog/*.c} \ $(shell $(CT_LIB_DIR)/kconfig/lxdialog/check-lxdialog.sh -ccflags) \ $(shell $(CT_LIB_DIR)/kconfig/lxdialog/check-lxdialog.sh -ldflags $(HOST_CC)) -$(obj)/conf:: $(SHIPPED) $(CT_LIB_DIR)/kconfig/conf.c $(HEADERS) $(FILES) +$(obj)/conf: $(SHIPPED) $(CT_LIB_DIR)/kconfig/conf.c \ + $(HEADERS) $(FILES) \ + $(CT_LIB_DIR)/kconfig/kconfig.mk + @echo ' LNK kconfig/conf' @$(HOST_CC) $(CFLAGS) -o $@ $(CT_LIB_DIR)/kconfig/{conf.c,zconf.tab.c} clean:: diff --git a/scripts/build/kernel/bare-metal.sh b/scripts/build/kernel/bare-metal.sh new file mode 100644 index 0000000..2dfda41 --- /dev/null +++ b/scripts/build/kernel/bare-metal.sh @@ -0,0 +1,19 @@ +# This file declares functions for bare metal kernel (IE. none) +# Copyright 2008 Yann E. MORIN +# Licensed under the GPL v2. See COPYING in the root of this package + +do_print_filename() { + : +} + +do_kernel_get() { + : +} + +do_kernel_extract() { + : +} + +do_kernel_headers() { + : +} diff --git a/scripts/build/kernel/none.sh b/scripts/build/kernel/none.sh deleted file mode 100644 index 2dfda41..0000000 --- a/scripts/build/kernel/none.sh +++ /dev/null @@ -1,19 +0,0 @@ -# This file declares functions for bare metal kernel (IE. none) -# Copyright 2008 Yann E. MORIN -# Licensed under the GPL v2. See COPYING in the root of this package - -do_print_filename() { - : -} - -do_kernel_get() { - : -} - -do_kernel_extract() { - : -} - -do_kernel_headers() { - : -} -- cgit v0.10.2-6-g49f6