From 6f5afbdf82698ab0f91d5a36e7f171dd2829ec10 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Thu, 12 Jan 2017 16:53:28 -0800 Subject: Allow 'make V=1' to see the commands. Signed-off-by: Alexey Neyman diff --git a/Makefile.in b/Makefile.in index 3d2c607..693e62d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -35,6 +35,12 @@ endif # No rR endif # No -Rr endif # No Rr +# Helper: print abbreviation of the command by default, or full command +# if doing 'make V=1'. +__silent = $(if $(V),,@printf ' %-7s %s\n' '$1' '$(if $2,$2,$(strip $<))' && ) +__silent_rm = $(call __silent,RM,$1)rm -f $1 +__silent_rmdir = $(call __silent,RMDIR,$1)rm -rf $1 + # Remove any suffix rules .SUFFIXES: @@ -98,7 +104,7 @@ PROG_NAME := $(shell echo 'ct-ng' |$(sed) -r -e '$(PROG_SED)' ) # Check if Makefile is up to date: Makefile: Makefile.in - @echo "$< did changed: you must re-run './configure'" + @echo "$< changed: you must re-run './configure'" @false # If installing with DESTDIR, check it's an absolute path @@ -142,12 +148,11 @@ install: build real-install clean: $(patsubst %,clean-%,$(TARGETS)) distclean: clean - @echo " RM 'Makefile'" - @rm -f Makefile + $(call __silent_rm,Makefile) mrproper: distclean - @echo " RM 'autostuff'" - @ rm -rf autom4te.cache config.log config.status configure + $(call __silent_rmdir,autom4te.cache) + $(call __silent_rm,config.log config.status configure) uninstall: real-uninstall @@ -162,26 +167,26 @@ build-bin: $(PROG_NAME) \ scripts/crosstool-NG.sh \ scripts/saveSample.sh \ scripts/showConfig.sh - @chmod 755 $^ + $(call __silent,CHMOD,$^)chmod 755 $^ build-lib: config/configure.in \ paths.mk \ paths.sh build-lib-kconfig: - @$(MAKE) -C kconfig + $(call __silent,ENTER,kconfig)$(MAKE) -C kconfig + $(call __silent,LEAVE,kconfig): build-doc: build-man: docs/$(PROG_NAME).1.gz docs/$(PROG_NAME).1.gz: docs/$(PROG_NAME).1 - @echo " GZIP '$@'" - @gzip -c9 $< >$@ + $(call __silent,GZIP)gzip -c9 $< >$@ define sed_it - @echo " SED '$@'" - @$(sed) -r -e 's,@@CT_BINDIR@@,$(bindir),g;' \ + $(call __silent,SED,$@)$(sed) -r \ + -e 's,@@CT_BINDIR@@,$(bindir),g;' \ -e 's,@@CT_LIBDIR@@,$(libdir),g;' \ -e 's,@@CT_DOCDIR@@,$(docdir),g;' \ -e 's,@@CT_MANDIR@@,$(mandir),g;' \ @@ -212,16 +217,14 @@ __paths_vars = install bash awk grep make sed libtool \ # We create a script fragment that is parseable from inside a Makefile, # and one from inside a shell script. paths.mk: FORCE - @echo " GEN '$@'" - @{ $(foreach w,$(__paths_vars),$(if $($w),echo 'export $w=$(subst ','\'',$($w))';)) :; } >$@ + $(call __silent,GEN,$@){ $(foreach w,$(__paths_vars),$(if $($w),echo 'export $w=$(subst ','\'',$($w))';)) :; } >$@ paths.sh: FORCE - @echo " GEN '$@'" - @{ $(foreach w,$(__paths_vars),$(if $($w),echo 'export $w="$(subst ','\'',$($w))"';)) :; } >$@ + $(call __silent,GEN,$@){ $(foreach w,$(__paths_vars),$(if $($w),echo 'export $w="$(subst ','\'',$($w))"';)) :; } >$@ config/configure.in: FORCE - @echo " GEN '$@'" - @{ printf "# Generated file, do not edit\n"; \ + $(call __silent,GEN,$@) \ + { printf "# Generated file, do not edit\n"; \ printf "# Default values as found by ./configure\n"; \ for var in $(KCONFIG); do \ printf "\n"; \ @@ -240,33 +243,25 @@ FORCE: # Clean rules clean-bin: - @echo " RM '$(PROG_NAME)'" - @rm -f $(PROG_NAME) - @echo " RM 'scripts/scripts.mk'" - @rm -f scripts/scripts.mk - @echo " RM 'scripts/crosstool-NG.sh'" - @rm -f scripts/crosstool-NG.sh - @echo " RM 'scripts/saveSample.sh'" - @rm -f scripts/saveSample.sh - @echo " RM 'scripts/showConfig.sh'" - @rm -f scripts/showConfig.sh + $(call __silent_rm,$(PROG_NAME)) + $(call __silent_rm,scripts/scripts.mk) + $(call __silent_rm,scripts/crosstool-NG.sh) + $(call __silent_rm,scripts/scripts/saveSample.sh) + $(call __silent_rm,scripts/scripts/showConfig.sh) clean-lib: - @echo " RM 'paths'" - @rm -f paths.mk paths.sh - @echo " RM 'config/configure.in'" - @rm -f config/configure.in + $(call __silent_rm,paths.mk paths.sh) + $(call __silent_rm,config/configure.in) clean-lib-kconfig: - @$(MAKE) -C kconfig clean + $(call __silent,ENTER,kconfig)$(MAKE) -C kconfig clean + $(call __silent,LEAVE,kconfig): clean-doc: clean-man: - @echo " RM 'docs/$(PROG_NAME).1'" - @rm -f docs/$(PROG_NAME).1 - @echo " RM 'docs/$(PROG_NAME).1.gz'" - @rm -f docs/$(PROG_NAME).1.gz + $(call __silent_rm,docs/$(PROG_NAME).1) + $(call __silent_rm,docs/$(PROG_NAME).1.gz) #-------------------------------------- # Check for --local setup @@ -287,8 +282,7 @@ else real-install: $(patsubst %,install-%,$(TARGETS)) install-post install-bin: $(DESTDIR)$(bindir) - @echo " INST '$(PROG_NAME)'" - @$(install) -m 755 $(PROG_NAME) "$(DESTDIR)$(bindir)/$(PROG_NAME)" + $(call __silent,INST,$(PROG_NAME))$(install) -m 755 $(PROG_NAME) "$(DESTDIR)$(bindir)/$(PROG_NAME)" # If one is hacking crosstool-NG, the patch set might change between any two # installations of the same VERSION, thus the patches must be removed prior @@ -299,30 +293,22 @@ install-lib: $(DESTDIR)$(libdir) \ install-lib-samples LIB_SUB_DIR := config contrib patches scripts -$(patsubst %,install-lib-%-copy,$(LIB_SUB_DIR)): $(DESTDIR)$(libdir) - @echo " INSTDIR '$(patsubst install-lib-%-copy,%,$(@))/'" - @tar cf - --exclude='*.sh.in' $(patsubst install-lib-%-copy,%,$(@)) \ +$(patsubst %,install-lib-%-copy,$(LIB_SUB_DIR)): install-lib-%-copy: $(DESTDIR)$(libdir) + $(call __silent,INSTDIR,$*)tar cf - --exclude='*.sh.in' $* \ |(cd "$(DESTDIR)$(libdir)"; tar xf -) -# We need at least one command to make this rule kick-in. -install-lib-%: install-lib-%-copy - @true - -install-lib-scripts: install-lib-scripts-copy - @chmod a+x $(DESTDIR)$(libdir)/scripts/crosstool-NG.sh - @chmod a+x $(DESTDIR)$(libdir)/scripts/saveSample.sh +# Dependency-only by default. +$(patsubst %,install-lib-%,$(LIB_SUB_DIR)): install-lib-%: install-lib-%-copy install-lib-main: $(DESTDIR)$(libdir) $(patsubst %,install-lib-%,$(LIB_SUB_DIR)) - @echo " INST 'steps.mk'" - @$(install) -m 644 steps.mk "$(DESTDIR)$(libdir)/steps.mk" - @echo " INST 'paths'" - @$(install) -m 644 paths.mk paths.sh "$(DESTDIR)$(libdir)" + $(call __silent,INST,steps.mk)$(install) -m 644 steps.mk "$(DESTDIR)$(libdir)/steps.mk" + $(call __silent,INST,paths.mk)$(install) -m 644 paths.mk "$(DESTDIR)$(libdir)" + $(call __silent,INST,paths.sh)$(install) -m 644 paths.sh "$(DESTDIR)$(libdir)" # Samples need a little love: # - change every occurrence of CT_TOP_DIR to CT_LIB_DIR install-lib-samples: $(DESTDIR)$(libdir) install-lib-main - @echo " INSTDIR 'samples/'" - @for samp_dir in samples/*/; do \ + $(call __silent,INSTDIR,samples)for samp_dir in samples/*/; do \ mkdir -p "$(DESTDIR)$(libdir)/$${samp_dir}"; \ $(sed) -r -e 's:\$$\{CT_TOP_DIR\}:\$$\{CT_LIB_DIR\}:;' \ -e 's:^(CT_WORK_DIR)=.*:\1="\$${CT_TOP_DIR}/.build":;' \ @@ -341,13 +327,11 @@ install-lib-samples: $(DESTDIR)$(libdir) install-lib-main done @$(install) -m 644 samples/samples.mk "$(DESTDIR)$(libdir)/samples/samples.mk" -KCONFIG_FILES := conf mconf nconf kconfig.mk install-lib-kconfig: $(DESTDIR)$(libdir) install-lib-main - @echo " INST 'kconfig/'" - @mkdir -p "$(DESTDIR)$(libdir)/kconfig" - @for f in $(KCONFIG_FILES); do \ - install "kconfig/$${f}" "$(DESTDIR)$(libdir)/kconfig/$${f}"; \ - done + $(call __silent,MKDIR,$@)$(install) -m 755 -d "$(libdir)/kconfig" + $(call __silent,ENTER,kconfig)$(MAKE) -C kconfig install \ + DESTDIR=$(DESTDIR)$(libdir)/kconfig + $(call __silent,LEAVE,kconfig): install-doc: install-doc-$(if $(wildcard docs/MANUAL_ONLINE),message,real) @@ -358,20 +342,16 @@ install-doc-message: @echo " http://crosstool-ng.github.io/docs" @echo "********************************************************************" - install-doc-real: $(DESTDIR)$(docdir) - @echo " INST 'docs/manual/*.md'" - @for doc_file in docs/manual/*.md; do \ + $(call __silent,INST,docs)for doc_file in docs/manual/*.md; do \ $(install) -m 644 "$${doc_file}" "$(DESTDIR)$(docdir)"; \ - done + done install-man: $(DESTDIR)$(mandir)$(MAN_SUBDIR) - @echo " INST '$(PROG_NAME).1.gz'" - @$(install) -m 644 docs/$(PROG_NAME).1.gz "$(DESTDIR)$(mandir)$(MAN_SUBDIR)" + $(call __silent,INST,$(PROG_NAME).1.gz)$(install) -m 644 docs/$(PROG_NAME).1.gz "$(DESTDIR)$(mandir)$(MAN_SUBDIR)" $(sort $(DESTDIR)$(bindir) $(DESTDIR)$(libdir) $(DESTDIR)$(docdir) $(DESTDIR)$(mandir)$(MAN_SUBDIR)): - @echo " MKDIR '$@/'" - @$(install) -m 755 -d "$@" + $(call __silent,MKDIR,$@)$(install) -m 755 -d "$@" install-post: @echo @@ -384,20 +364,16 @@ install-post: real-uninstall: $(patsubst %,uninstall-%,$(filter-out lib-kconfig,$(TARGETS))) uninstall-bin: - @echo " RM '$(DESTDIR)$(bindir)/$(PROG_NAME)'" - @rm -f "$(DESTDIR)$(bindir)/$(PROG_NAME)" + $(call __silent_rm,$(DESTDIR)$(bindir)/$(PROG_NAME)) uninstall-lib: - @echo " RMDIR '$(DESTDIR)$(libdir)/'" - @rm -rf "$(DESTDIR)$(libdir)" + $(call __silent_rmdir,$(DESTDIR)$(libdir)) uninstall-doc: - @echo " RMDIR '$(DESTDIR)$(docdir)/'" - @rm -rf "$(DESTDIR)$(docdir)" + $(call __silent_rmdir,$(DESTDIR)$(docdir)) uninstall-man: - @echo " RM '$(DESTDIR)$(mandir)$(MAN_SUBDIR)/$(PROG_NAME).1.gz'" - @rm -f "$(DESTDIR)$(mandir)$(MAN_SUBDIR)/$(PROG_NAME).1"{,.gz} + $(call __silent_rm,$(DESTDIR)$(mandir)$(MAN_SUBDIR)/$(PROG_NAME).1.gz) endif # Not --local diff --git a/kconfig/Makefile b/kconfig/Makefile index ee838aa..4a33ac8 100644 --- a/kconfig/Makefile +++ b/kconfig/Makefile @@ -2,7 +2,12 @@ # Hmmm! Cheesy build! # Or: where I can unveil my make-fu... :-] -all: conf mconf nconf +__silent = $(if $(V),,@printf ' %-7s %s\n' '$1' '$(if $2,$2,$(strip $<))' && ) +__silent_rm = $(call __silent,RM,$1)rm -f $1 + +PROGS = conf mconf nconf + +all: $(PROGS) @true # Just be silent, you fscking son of a fscking beach... # Build flags @@ -64,8 +69,7 @@ DEPS += $(nconf_DEP) # Build the dependency for C files %.dep: %.c - @echo " DEP '$@'" - @$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -MM $< |$(sed) -r -e 's|([^:]+.o)( *:+)|$(<:.c=.o) $@\2|;' >$@ + $(call __silent,DEP,$@)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -MM $< |$(sed) -r -e 's|([^:]+.o)( *:+)|$(<:.c=.o) $@\2|;' >$@ # Generate the grammar parser zconf.tab.o: zconf.tab.c zconf.hash.c zconf.lex.c @@ -73,39 +77,39 @@ zconf.tab.dep: zconf.tab.c zconf.hash.c zconf.lex.c .PRECIOUS: zconf.tab.c zconf.tab.c: zconf.y - @echo " BISON '$@'" - @bison -l -b zconf -p zconf $< + $(call __silent,BISON)bison -l -b zconf -p zconf $< zconf.hash.c: zconf.gperf - @echo " GPERF '$@'" - @$(gperf) -C < $< > $@ + $(call __silent,GPERF)$(gperf) -C < $< > $@ zconf.lex.c: zconf.l - @echo " LEX '$@'" - @flex -L -Pzconf -o$@ $< + $(call __silent,LEX)flex -L -Pzconf -o$@ $< # Build C files %.o: %.c - @echo " CC '$@'" - @$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $< + $(call __silent,CC)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $< # Actual link mconf: $(COMMON_OBJ) $(LX_OBJ) $(mconf_OBJ) - @echo " LD '$@'" - @$(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS) + $(call __silent,LD,$@)$(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS) nconf: $(COMMON_OBJ) $(nconf_OBJ) - @echo " LD '$@'" - @$(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS) + $(call __silent,LD,$@)$(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS) conf: $(COMMON_OBJ) $(conf_OBJ) - @echo " LD '$@'" - @$(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS) + $(call __silent,LD,$@)$(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS) + +#----------------------------------------------------------- +# Installation +install: $(patsubst %,install-%,$(PROGS)) install-kconfig.mk + +install-%: % + $(call __silent,INSTALL,$<)install $< $(DESTDIR)/$< #----------------------------------------------------------- # Cleaning up the mess... clean: - @echo " RM 'kconfig'" - @rm -f conf mconf nconf $(ALL_OBJS) $(ALL_DEPS) - @rm -f rm -f zconf.tab.c zconf.hash.c zconf.lex.c lex.backup + $(call __silent,RM,objs)rm -f $(ALL_OBJS) $(ALL_DEPS) + $(call __silent_rm,$(PROGS)) + $(call __silent_rm,zconf.tab.c zconf.hash.c zconf.lex.c lex.backup) -- cgit v0.10.2-6-g49f6 From 2c0fb226419507583a736818346a7d6f07eba983 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Sat, 22 Apr 2017 12:28:50 -0700 Subject: Generate config/configure.in directly from configure rather than substitute it from Makefile. Eventually we might want to get rid of configure.in completely, doing on-the-fly checks at the time of `ct-ng build`, but that is left for another day. Signed-off-by: Alexey Neyman diff --git a/Makefile.in b/Makefile.in index 693e62d..4c33343 100644 --- a/Makefile.in +++ b/Makefile.in @@ -89,9 +89,6 @@ export curses_hdr := @ac_ct_curses_hdr@ export gettext := @gettext@ export CPU_COUNT := @CPU_COUNT@ -# config options to push down to kconfig -KCONFIG:= @kconfig_options@ - ############################################################################### # Non-configure variables MAN_SECTION := 1 @@ -169,8 +166,7 @@ build-bin: $(PROG_NAME) \ scripts/showConfig.sh $(call __silent,CHMOD,$^)chmod 755 $^ -build-lib: config/configure.in \ - paths.mk \ +build-lib: paths.mk \ paths.sh build-lib-kconfig: @@ -222,21 +218,6 @@ paths.mk: FORCE paths.sh: FORCE $(call __silent,GEN,$@){ $(foreach w,$(__paths_vars),$(if $($w),echo 'export $w="$(subst ','\'',$($w))"';)) :; } >$@ -config/configure.in: FORCE - $(call __silent,GEN,$@) \ - { printf "# Generated file, do not edit\n"; \ - printf "# Default values as found by ./configure\n"; \ - for var in $(KCONFIG); do \ - printf "\n"; \ - printf "config CONFIGURE_$${var%%=*}\n"; \ - if [ "$${var#*=}" = "y" ]; then \ - printf " def_bool y\n"; \ - else \ - printf " bool\n"; \ - fi; \ - done; \ - } >$@ - FORCE: #-------------------------------------- @@ -251,7 +232,6 @@ clean-bin: clean-lib: $(call __silent_rm,paths.mk paths.sh) - $(call __silent_rm,config/configure.in) clean-lib-kconfig: $(call __silent,ENTER,kconfig)$(MAKE) -C kconfig clean diff --git a/config/configure.in.in b/config/configure.in.in new file mode 100644 index 0000000..aaebbde --- /dev/null +++ b/config/configure.in.in @@ -0,0 +1,46 @@ +# Default values as found by ./configure + +config CONFIGURE_has_static_link + @KCONFIG_static_link@ + +config CONFIGURE_has_wget + @KCONFIG_wget@ + +config CONFIGURE_has_curl + @KCONFIG_curl@ + +config CONFIGURE_has_stat_flavor_BSD + @KCONFIG_stat_flavor_BSD@ + +config CONFIGURE_has_stat_flavor_GNU + @KCONFIG_stat_flavor_GNU@ + +config CONFIGURE_has_make_3_81_or_newer + @KCONFIG_make_3_81_or_newer@ + +config CONFIGURE_has_libtool_2_4_or_newer + @KCONFIG_libtool_2_4_or_newer@ + +config CONFIGURE_has_libtoolize_2_4_or_newer + @KCONFIG_libtoolize_2_4_or_newer@ + +config CONFIGURE_has_autoconf_2_63_or_newer + @KCONFIG_autoconf_2_63_or_newer@ + +config CONFIGURE_has_autoreconf_2_63_or_newer + @KCONFIG_autoreconf_2_63_or_newer@ + +config CONFIGURE_has_automake_1_15_or_newer + @KCONFIG_automake_1_15_or_newer@ + +config CONFIGURE_has_gnu_m4_1_4_12_or_newer + @KCONFIG_gnu_m4_1_4_12_or_newer@ + +config CONFIGURE_has_cvs + @KCONFIG_cvs@ + +config CONFIGURE_has_svn + @KCONFIG_svn@ + +config CONFIGURE_has_git + @KCONFIG_git@ diff --git a/configure.ac b/configure.ac index d10bf71..869226c 100644 --- a/configure.ac +++ b/configure.ac @@ -65,10 +65,9 @@ AC_DEFUN( AC_DEFUN( [ACX_SET_KCONFIG_OPTION], [AS_IF( - [test -n "$$1"], - [kconfig_options="$kconfig_options has_$1=y"], - [kconfig_options="$kconfig_options has_$1"]) - ]) + [test -n "$$1"], + [AC_SUBST([KCONFIG_$1], ["def_bool y"])], + [AC_SUBST([KCONFIG_$1], ["bool"])])]) # Check if a given program is available with a particular version. # ACX_PROG_VERSION(VAR, HELP, PROG, SRCH, VERSION_CHECK[, CONFIG_OPT]) @@ -466,5 +465,5 @@ AS_IF( #-------------------------------------------------------------------- # Finally, generate the output file(s) #-------------------------------------------------------------------- -AC_CONFIG_FILES([Makefile]) +AC_CONFIG_FILES([Makefile config/configure.in]) AC_OUTPUT -- cgit v0.10.2-6-g49f6 From 105e4b59b7989e9898795273e4064791fdfa056c Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Sat, 22 Apr 2017 18:41:50 -0700 Subject: Get rid of config.gen Instead, prepare the files as a part of bootstrap and install them. This avoids rebuilding these files in each working directory; they don't change anyway as they are generated from the same installed source. Signed-off-by: Alexey Neyman diff --git a/.gitignore b/.gitignore index daedcdd..1bdd197 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,7 @@ config.status !ct-ng.in paths.* !paths.in -config.gen/ +config/gen/ .config # Temporaries diff --git a/bootstrap b/bootstrap index 1260830..ab493dd 100755 --- a/bootstrap +++ b/bootstrap @@ -4,4 +4,7 @@ set -e printf "Running autoconf...\n" autoconf -Wall --force +printf "Generating kconfig files...\n" +./maintainer/gen-kconfig.sh + printf "Done. You may now run:\n ./configure\n" diff --git a/config/binutils.in b/config/binutils.in index 99b8b9f..0c6d5c0 100644 --- a/config/binutils.in +++ b/config/binutils.in @@ -36,7 +36,7 @@ endchoice config BINUTILS string -source "config.gen/binutils.in" -source "config.gen/binutils.in.2" +source "config/gen/binutils.in" +source "config/gen/binutils.in.2" endmenu diff --git a/config/cc.in b/config/cc.in index 5603738..81f168c 100644 --- a/config/cc.in +++ b/config/cc.in @@ -20,7 +20,7 @@ config CC_CORE_PASS_1_NEEDED config CC_CORE_PASS_2_NEEDED bool -source "config.gen/cc.in" +source "config/gen/cc.in" config CC_SUPPORT_CXX bool diff --git a/config/companion_tools.in b/config/companion_tools.in index 5291f46..e5ef3fc 100644 --- a/config/companion_tools.in +++ b/config/companion_tools.in @@ -10,6 +10,6 @@ config COMP_TOOLS_FOR_HOST tools into the final toolchain (rather than just using them to build it). -source "config.gen/companion_tools.in" +source "config/gen/companion_tools.in" endmenu diff --git a/config/config.mk b/config/config.mk index 670ecba..e0ca3d2 100644 --- a/config/config.mk +++ b/config/config.mk @@ -1,9 +1,5 @@ -# =========================================================================== -# crosstool-NG genererated config files -# These targets are used from top-level makefile - #----------------------------------------------------------- -# List all config files, wether sourced or generated +# List all config files # The top-level config file to be used be configurators # We need it to savedefconfig in scripts/saveSample.sh @@ -14,38 +10,6 @@ STATIC_CONFIG_FILES = $(patsubst $(CT_LIB_DIR)/%,%,$(shell find $(CT_LIB_DIR)/co # ... and how to access them: $(STATIC_CONFIG_FILES): config -# Build a list of per-component-type source config files -ARCH_CONFIG_FILES = $(patsubst $(CT_LIB_DIR)/%,%,$(sort $(wildcard $(CT_LIB_DIR)/config/arch/*.in))) -ARCH_CONFIG_FILES_2 = $(patsubst $(CT_LIB_DIR)/%,%,$(sort $(wildcard $(CT_LIB_DIR)/config/arch/*.in.2))) -KERNEL_CONFIG_FILES = $(patsubst $(CT_LIB_DIR)/%,%,$(sort $(wildcard $(CT_LIB_DIR)/config/kernel/*.in))) -KERNEL_CONFIG_FILES_2 = $(patsubst $(CT_LIB_DIR)/%,%,$(sort $(wildcard $(CT_LIB_DIR)/config/kernel/*.in.2))) -CC_CONFIG_FILES = $(patsubst $(CT_LIB_DIR)/%,%,$(sort $(wildcard $(CT_LIB_DIR)/config/cc/*.in))) -CC_CONFIG_FILES_2 = $(patsubst $(CT_LIB_DIR)/%,%,$(sort $(wildcard $(CT_LIB_DIR)/config/cc/*.in.2))) -BINUTILS_CONFIG_FILES = $(patsubst $(CT_LIB_DIR)/%,%,$(sort $(wildcard $(CT_LIB_DIR)/config/binutils/*.in))) -BINUTILS_CONFIG_FILES_2 = $(patsubst $(CT_LIB_DIR)/%,%,$(sort $(wildcard $(CT_LIB_DIR)/config/binutils/*.in.2))) -LIBC_CONFIG_FILES = $(patsubst $(CT_LIB_DIR)/%,%,$(sort $(wildcard $(CT_LIB_DIR)/config/libc/*.in))) -LIBC_CONFIG_FILES_2 = $(patsubst $(CT_LIB_DIR)/%,%,$(sort $(wildcard $(CT_LIB_DIR)/config/libc/*.in.2))) -DEBUG_CONFIG_FILES = $(patsubst $(CT_LIB_DIR)/%,%,$(sort $(wildcard $(CT_LIB_DIR)/config/debug/*.in))) -COMP_TOOLS_CONFIG_FILES = $(patsubst $(CT_LIB_DIR)/%,%,$(sort $(wildcard $(CT_LIB_DIR)/config/companion_tools/*.in))) - -# Build the list of generated config files -GEN_CONFIG_FILES = config.gen/arch.in \ - config.gen/kernel.in \ - config.gen/cc.in \ - config.gen/binutils.in \ - config.gen/libc.in \ - config.gen/debug.in \ - config.gen/companion_tools.in -# ... and how to access them: -# Generated files depends on the gen_in_frags script because it has the -# functions needed to build the genrated files, and thus they might need -# re-generation if it changes. -# They also depends on config.mk (this file) because it has the dependency -# rules, and thus they might need re-generation if the deps change. -$(GEN_CONFIG_FILES): config.gen \ - $(CT_LIB_DIR)/scripts/gen_in_frags.sh \ - $(CT_LIB_DIR)/config/config.mk - # Helper entry for the configurators PHONY += config_files config_files: $(STATIC_CONFIG_FILES) $(GEN_CONFIG_FILES) @@ -55,60 +19,9 @@ config: @$(CT_ECHO) " LN config" $(SILENT)ln -s $(CT_LIB_DIR)/config config -# Where to store the generated config files into -config.gen: - @$(CT_ECHO) " MKDIR config.gen" - $(SILENT)mkdir -p config.gen - -#----------------------------------------------------------- -# Build list of per-component-type items to easily build generated files - -ARCHS = $(patsubst config/arch/%.in,%,$(ARCH_CONFIG_FILES)) -KERNELS = $(patsubst config/kernel/%.in,%,$(KERNEL_CONFIG_FILES)) -CCS = $(patsubst config/cc/%.in,%,$(CC_CONFIG_FILES)) -BINUTILSS = $(patsubst config/binutils/%.in,%,$(BINUTILS_CONFIG_FILES)) -LIBCS = $(patsubst config/libc/%.in,%,$(LIBC_CONFIG_FILES)) -DEBUGS = $(patsubst config/debug/%.in,%,$(DEBUG_CONFIG_FILES)) -COMP_TOOLS= $(patsubst config/companion_tools/%.in,%,$(COMP_TOOLS_CONFIG_FILES)) - -#----------------------------------------------------------- -# The rules for the generated config files - -# WARNING! If a .in file disapears between two runs, that will NOT be detected! - -config.gen/arch.in: $(ARCH_CONFIG_FILES) $(ARCH_CONFIG_FILES_2) - @$(CT_ECHO) ' IN $(@)' - $(SILENT)$(CT_LIB_DIR)/scripts/gen_in_frags.sh choice "$@" "Target Architecture" "ARCH" "config/arch" "Y" $(ARCHS) - -config.gen/kernel.in: $(KERNEL_CONFIG_FILES) $(KERNEL_CONFIG_FILES_2) - @$(CT_ECHO) ' IN $(@)' - $(SILENT)$(CT_LIB_DIR)/scripts/gen_in_frags.sh choice "$@" "Target OS" "KERNEL" "config/kernel" "Y" $(KERNELS) - -config.gen/cc.in: $(CC_CONFIG_FILES) $(CC_CONFIG_FILES_2) - @$(CT_ECHO) ' IN $(@)' - $(SILENT)$(CT_LIB_DIR)/scripts/gen_in_frags.sh choice "$@" "C compiler" "CC" "config/cc" "N" $(CCS) - -config.gen/binutils.in: $(CC_BINUTILS_FILES) $(CC_BINUTILS_FILES_2) - @$(CT_ECHO) ' IN $(@)' - $(SILENT)$(CT_LIB_DIR)/scripts/gen_in_frags.sh choice "$@" "Binutils" "BINUTILS" "config/binutils" "N" $(BINUTILSS) - -config.gen/libc.in: $(LIBC_CONFIG_FILES) $(LIBC_CONFIG_FILES_2) - @$(CT_ECHO) ' IN $(@)' - $(SILENT)$(CT_LIB_DIR)/scripts/gen_in_frags.sh choice "$@" "C library" "LIBC" "config/libc" "Y" $(LIBCS) - -config.gen/debug.in: $(DEBUG_CONFIG_FILES) - @$(CT_ECHO) ' IN $(@)' - $(SILENT)$(CT_LIB_DIR)/scripts/gen_in_frags.sh menu "$@" "Debug facilities" "DEBUG" "config/debug" $(DEBUGS) - -config.gen/companion_tools.in: $(COMP_TOOLS_CONFIG_FILES) - @$(CT_ECHO) ' IN $(@)' - $(SILENT)$(CT_LIB_DIR)/scripts/gen_in_frags.sh menu "$@" "Companion tools" "COMP_TOOLS" "config/companion_tools" $(COMP_TOOLS) - #----------------------------------------------------------- # Cleaning up the mess... clean:: @$(CT_ECHO) " CLEAN config" $(SILENT)rm -f config 2>/dev/null || true - @$(CT_ECHO) " CLEAN config.gen" - $(SILENT)rm -rf config.gen diff --git a/config/debug.in b/config/debug.in index 9fd99ef..8fc549b 100644 --- a/config/debug.in +++ b/config/debug.in @@ -1,3 +1,3 @@ menu "Debug facilities" -source "config.gen/debug.in" +source "config/gen/debug.in" endmenu diff --git a/config/kernel.in b/config/kernel.in index 64b69c6..c04f2cb 100644 --- a/config/kernel.in +++ b/config/kernel.in @@ -22,7 +22,7 @@ config KERNEL config KERNEL_VERSION string -source "config.gen/kernel.in" +source "config/gen/kernel.in" comment "Common kernel options" @@ -37,6 +37,6 @@ config SHARED_LIBS You might not want shared libraries if you're building for a target that don't support it (maybe some nommu targets, for example, or bare metal). -source "config.gen/kernel.in.2" +source "config/gen/kernel.in.2" endmenu diff --git a/config/libc.in b/config/libc.in index 0566212..708c3b6 100644 --- a/config/libc.in +++ b/config/libc.in @@ -19,7 +19,7 @@ config LIBC_VERSION So if you want to be able to re-build your toolchain later, you will have to save your C library tarball by yourself. -source "config.gen/libc.in" +source "config/gen/libc.in" config LIBC_SUPPORT_THREADS_ANY bool @@ -123,7 +123,7 @@ config LIBC_XLDD for the native ldd. Please see the help, by running it with '--help' for more explanations. -source "config.gen/libc.in.2" +source "config/gen/libc.in.2" endif # ! LIBC_none diff --git a/config/target.in b/config/target.in index af010c0..7e4e837 100644 --- a/config/target.in +++ b/config/target.in @@ -5,7 +5,7 @@ menu "Target options" config ARCH string -source "config.gen/arch.in" +source "config/gen/arch.in" config ARCH_SUFFIX string @@ -392,6 +392,6 @@ config ARCH_FLOAT default "soft" if ARCH_FLOAT_SW default "softfp" if ARCH_FLOAT_SOFTFP -source "config.gen/arch.in.2" +source "config/gen/arch.in.2" endmenu diff --git a/maintainer/gen-kconfig.sh b/maintainer/gen-kconfig.sh new file mode 100755 index 0000000..4cb6567 --- /dev/null +++ b/maintainer/gen-kconfig.sh @@ -0,0 +1,180 @@ +#!/bin/bash + +set -e + +# Accept overrides from command line if needed +sed=${SED:-sed} +grep=${GREP:-grep} + +# Generate either a choice or a menuconfig with the specified entries. +# +# Usage: +# generate a choice: +# gen_choice