diff options
-rw-r--r-- | config/kernel.in | 33 | ||||
-rw-r--r-- | config/kernel/bare-metal.experimental.in | 15 | ||||
-rw-r--r-- | config/kernel/linux.in | 4 | ||||
-rw-r--r-- | config/libc/glibc-eglibc-common.in | 4 | ||||
-rw-r--r-- | kconfig/kconfig.mk | 121 | ||||
-rw-r--r-- | scripts/build/kernel/bare-metal.sh (renamed from scripts/build/kernel/none.sh) | 0 |
6 files changed, 109 insertions, 68 deletions
diff --git a/config/kernel.in b/config/kernel.in index db7b802e..1ae8b2e6 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 00000000..7a4b5740 --- /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 18881d71..7fd05238 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 007c524e..61becfb4 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 4bde05ac..a1d1d7c6 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/none.sh b/scripts/build/kernel/bare-metal.sh index 2dfda41d..2dfda41d 100644 --- a/scripts/build/kernel/none.sh +++ b/scripts/build/kernel/bare-metal.sh |