diff options
author | Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> | 2012-01-14 18:22:06 +0100 |
---|---|---|
committer | Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> | 2012-01-14 18:22:06 +0100 |
commit | cb7fcbe1ef4ffba4c3041c4d4414d5b41856691c (patch) | |
tree | e39c790b713682f98e3fcb67a139bd4a4464695b /kconfig | |
parent | c8e39d6d298f921b8b510bb88bc210fb30f0bd10 (diff) | |
download | crosstool-ng-cb7fcbe1ef4ffba4c3041c4d4414d5b41856691c.tar.gz crosstool-ng-cb7fcbe1ef4ffba4c3041c4d4414d5b41856691c.tar.bz2 crosstool-ng-cb7fcbe1ef4ffba4c3041c4d4414d5b41856691c.zip |
kconfig: install compiled frontends
The kconfig frontends are currently instaleld as source files. This is
a remnant of the early times, when I wanted a single installation of
crosstool-NG to be shared across multiple machines, potentially of
different architectures.
This does not really make sense, and it's been a long time since it
was las tpossible in practice.
So, just build the kconfig frontends at make-time, and install them
as we do for all other crosstool-NG dependent files.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Diffstat (limited to 'kconfig')
-rw-r--r-- | kconfig/Makefile | 99 | ||||
-rw-r--r-- | kconfig/kconfig.mk | 171 |
2 files changed, 109 insertions, 161 deletions
diff --git a/kconfig/Makefile b/kconfig/Makefile new file mode 100644 index 00000000..091d5681 --- /dev/null +++ b/kconfig/Makefile @@ -0,0 +1,99 @@ +#----------------------------------------------------------- +# Hmmm! Cheesy build! +# Or: where I can unveil my make-fu... :-] + +all: conf mconf nconf + @true # Just be silent, you fscking son of a fscking beach... + +# Build flags +CFLAGS = -DCONFIG_=\"CT_\" -DPACKAGE="\"crosstool-NG $(VERSION)\"" +LDFLAGS = + +# Compiler flags to use gettext +ifeq ($(gettext),) +INTL_CFLAGS = -DKBUILD_NO_NLS +endif + +# Compiler and linker flags to use ncurses +NCURSES_CFLAGS = -DCURSES_LOC="\"$(curses_hdr)\"" +NCURSES_LDFLAGS = $(LIBS) + +# Common source files +COMMON_SRC = zconf.tab.c +COMMON_OBJ = $(patsubst %.c,%.o,$(COMMON_SRC)) +COMMON_DEP = $(patsubst %.o,%.dep,$(COMMON_OBJ)) +$(COMMON_OBJ) $(COMMON_DEP): CFLAGS += $(INTL_CFLAGS) + +# lxdialog source files +LX_SRC = $(wildcard lxdialog/*.c) +LX_OBJ = $(patsubst %.c,%.o,$(LX_SRC)) +LX_DEP = $(patsubst %.o,%.dep,$(LX_OBJ)) +$(LX_OBJ) $(LX_DEP): CFLAGS += $(NCURSES_CFLAGS) $(INTL_CFLAGS) + +# What's needed to build 'conf' +conf_SRC = conf.c +conf_OBJ = $(patsubst %.c,%.o,$(conf_SRC)) +conf_DEP = $(patsubst %.o,%.dep,$(conf_OBJ)) +$(conf_OBJ) $(conf_DEP): CFLAGS += $(INTL_CFLAGS) + +# What's needed to build 'mconf' +mconf_SRC = mconf.c +mconf_OBJ = $(patsubst %.c,%.o,$(mconf_SRC)) +mconf_DEP = $(patsubst %.c,%.dep,$(mconf_SRC)) +$(mconf_OBJ) $(mconf_DEP): CFLAGS += $(NCURSES_CFLAGS) $(INTL_CFLAGS) +mconf: LDFLAGS += $(NCURSES_LDFLAGS) + +# What's needed to build 'nconf' +nconf_SRC = nconf.c nconf.gui.c +nconf_OBJ = $(patsubst %.c,%.o,$(nconf_SRC)) +nconf_DEP = $(patsubst %.c,%.dep,$(nconf_SRC)) +$(nconf_OBJ) $(nconf_DEP): CFLAGS += $(INTL_CFLAGS) +nconf: LDFLAGS += -lmenu -lpanel -lncurses + +# Under Cygwin, we need to auto-import some libs (which ones, exactly?) +# for mconf and nconf to lin properly. +ifeq ($(shell uname -o 2>/dev/null || echo unknown),Cygwin) +mconf: LDFLAGS += -Wl,--enable-auto-import +nconf: LDFLAGS += -Wl,--enable-auto-import +endif + +# These are generated files: +ALL_OBJS = $(sort $(COMMON_OBJ) $(LX_OBJ) $(conf_OBJ) $(mconf_OBJ) $(nconf_OBJ)) +ALL_DEPS = $(sort $(COMMON_DEP) $(LX_DEP) $(conf_DEP) $(mconf_DEP) $(nconf_DEP)) + +# Cheesy auto-dependencies +DEPS = $(COMMON_DEP) +DEPS += $(conf_DEP) +DEPS += $(mconf_DEP) $(LX_DEP) +DEPS += $(nconf_DEP) +-include $(DEPS) + +# Build the dependency for C files +%.dep: %.c + @echo " DEP '$@'" + @$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -MM $< |$(sed) -r -e 's|([^:]+.o)( *:+)|$(<:.c=.o) $@\2|;' >$@ + +# Build C files +%.o: %.c + @echo " CC '$@'" + @$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $< + +# Actual link +mconf: $(COMMON_OBJ) $(LX_OBJ) $(mconf_OBJ) + @echo " LD '$@'" + @$(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS) + +nconf: $(COMMON_OBJ) $(nconf_OBJ) + @echo " LD '$@'" + @$(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS) + +conf: $(COMMON_OBJ) $(conf_OBJ) + @echo " LD '$@'" + @$(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS) + +#----------------------------------------------------------- +# Cleaning up the mess... + +clean: + @echo " RM 'kconfig'" + @rm -f conf mconf nconf $(ALL_OBJS) $(ALL_DEPS) diff --git a/kconfig/kconfig.mk b/kconfig/kconfig.mk index ab29e488..d930d376 100644 --- a/kconfig/kconfig.mk +++ b/kconfig/kconfig.mk @@ -2,9 +2,6 @@ # crosstool-NG configuration targets # These targets are used from top-level makefile -# The place where the kconfig stuff lies -obj = kconfig - #----------------------------------------------------------- # The configurators rules @@ -13,17 +10,21 @@ PHONY += $(configurators) $(configurators): config_files -menuconfig: $(obj)/mconf +CONF := $(CT_LIB_DIR)/kconfig/conf +MCONF := $(CT_LIB_DIR)/kconfig/mconf +NCONF := $(CT_LIB_DIR)/kconfig/nconf + +menuconfig: @$(ECHO) " CONF $(KCONFIG_TOP)" - $(SILENT)$< $(KCONFIG_TOP) + $(SILENT)$(MCONF) $(KCONFIG_TOP) -nconfig: $(obj)/nconf +nconfig: @$(ECHO) " CONF $(KCONFIG_TOP)" - $(SILENT)$< $(KCONFIG_TOP) + $(SILENT)$(NCONF) $(KCONFIG_TOP) -oldconfig: $(obj)/conf .config +oldconfig: .config @$(ECHO) " CONF $(KCONFIG_TOP)" - $(SILENT)$< --silent$@ $(KCONFIG_TOP) + $(SILENT)$(CONF) --silent$@ $(KCONFIG_TOP) # Always be silent, the stdout an be >.config extractconfig: @@ -48,155 +49,3 @@ help-config:: @echo ' oldconfig - Update current config using a provided .config as base' @echo ' extractconfig - Extract to stdout the configuration items from a' @echo ' build.log file piped to stdin' - -#----------------------------------------------------------- -# Hmmm! Cheesy build! -# Or: where I can unveil my make-fu... :-] - -# Oh! Files not here are there, in fact! :-) -vpath %.c $(CT_LIB_DIR) -vpath %.h $(CT_LIB_DIR) - -# What is the compiler? -HOST_CC ?= gcc -funsigned-char -HOST_LD ?= gcc - -# Helpers -check_gettext = $(CT_LIB_DIR)/kconfig/check.sh -check_lxdialog = $(CT_LIB_DIR)/kconfig/lxdialog/check-lxdialog.sh - -# Build flags -CFLAGS = -DCONFIG_=\"CT_\" -DPACKAGE="\"crosstool-NG $(CT_VERSION)\"" -LDFLAGS = - -# Compiler flags to use gettext -INTL_CFLAGS = $(shell $(SHELL) $(check_gettext) $(HOST_CC) $(EXTRA_CFLAGS)) - -# Compiler and linker flags to use ncurses -NCURSES_CFLAGS = $(shell $(SHELL) $(check_lxdialog) -ccflags) -NCURSES_LDFLAGS = $(shell $(SHELL) $(check_lxdialog) -ldflags $(HOST_CC)) - -# Check that we have the required ncurses stuff installed for lxdialog (menuconfig) -dochecklxdialog: - $(SILENT)$(SHELL) $(check_lxdialog) -check $(HOST_CC) $(NCURSES_CFLAGS) $(NCURSES_LDFLAGS) - -# Common source files -COMMON_SRC = kconfig/zconf.tab.c -COMMON_OBJ = $(patsubst %.c,%.o,$(COMMON_SRC)) -COMMON_DEP = $(patsubst %.o,%.dep,$(COMMON_OBJ)) -$(COMMON_OBJ) $(COMMON_DEP): CFLAGS += $(INTL_CFLAGS) - -# lxdialog source files -LX_SRC = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/kconfig/lxdialog/*.c)) -LX_OBJ = $(patsubst %.c,%.o,$(LX_SRC)) -LX_DEP = $(patsubst %.o,%.dep,$(LX_OBJ)) -$(LX_OBJ) $(LX_DEP): CFLAGS += $(NCURSES_CFLAGS) $(INTL_CFLAGS) - -# What's needed to build 'conf' -conf_SRC = kconfig/conf.c -conf_OBJ = $(patsubst %.c,%.o,$(conf_SRC)) -conf_DEP = $(patsubst %.o,%.dep,$(conf_OBJ)) -$(conf_OBJ) $(conf_DEP): CFLAGS += $(INTL_CFLAGS) - -# What's needed to build 'mconf' -mconf_SRC = kconfig/mconf.c -mconf_OBJ = $(patsubst %.c,%.o,$(mconf_SRC)) -mconf_DEP = $(patsubst %.c,%.dep,$(mconf_SRC)) -$(mconf_OBJ) $(mconf_DEP): CFLAGS += $(NCURSES_CFLAGS) $(INTL_CFLAGS) -$(obj)/mconf: LDFLAGS += $(NCURSES_LDFLAGS) - -# What's needed to build 'nconf' -nconf_SRC = kconfig/nconf.c kconfig/nconf.gui.c -nconf_OBJ = $(patsubst %.c,%.o,$(nconf_SRC)) -nconf_DEP = $(patsubst %.c,%.dep,$(nconf_SRC)) -$(nconf_OBJ) $(nconf_DEP): CFLAGS += $(INTL_CFLAGS) -$(obj)/nconf: LDFLAGS += -lmenu -lpanel -lncurses - -# Under Cygwin, we need to auto-import some libs (which ones, exactly?) -# for mconf and nconf to lin properly. -ifeq ($(shell uname -o 2>/dev/null || echo unknown),Cygwin) -$(obj)/mconf: LDFLAGS += -Wl,--enable-auto-import -$(obj)/nconf: LDFLAGS += -Wl,--enable-auto-import -endif - -# These are generated files: -ALL_OBJS = $(sort $(COMMON_OBJ) $(LX_OBJ) $(conf_OBJ) $(mconf_OBJ) $(nconf_OBJ)) -ALL_DEPS = $(sort $(COMMON_DEP) $(LX_DEP) $(conf_DEP) $(mconf_DEP) $(nconf_DEP)) - -# Cheesy auto-dependencies -# Only parse the following if a configurator was called, to avoid building -# dependencies when not needed (eg. list-steps, list-samples...) -# We must be careful what we enclose, because we need some of the variable -# definitions for clean (and distclean) at least. -# Just protecting the "-include $(DEPS)" line should be sufficient. -# And in case we want menuconfig, we have to check that lxdialog -# can find a curses lib. - -ifneq ($(strip $(MAKECMDGOALS)),) -ifneq ($(strip $(filter $(configurators),$(MAKECMDGOALS))),) - -DEPS = $(COMMON_DEP) -ifneq ($(strip $(filter oldconfig,$(MAKECMDGOALS))),) -DEPS += $(conf_DEP) -endif -ifneq ($(strip $(filter menuconfig,$(MAKECMDGOALS))),) -DEPS += $(mconf_DEP) $(LX_DEP) -$(COMMON_OBJ) $(COMMON_DEP): |dochecklxdialog -$(LX_OBJ) $(LX_DEP): |dochecklxdialog -$(mconf_OBJ) $(mconf_DEP): |dochecklxdialog -endif -ifneq ($(strip $(filter nconfig,$(MAKECMDGOALS))),) -DEPS += $(nconf_DEP) -endif - --include $(DEPS) - -endif # MAKECMDGOALS contains a configurator rule -endif # MAKECMDGOALS != "" - -# Each .o or .dep *can not* directly depend on kconfig/, because kconfig can -# be touched during the build (who's touching it, btw?) so each .o or .dep -# would be re-built when it should not be. -# So manually check for presence of $(obj) (ie. kconfig), and only mkdir -# if needed. After all, that's not so bad... -# mkdir $(obj)/lxdialog, because we need it, and incidentally, that -# also creates $(obj). -define check_kconfig_dir - $(SILENT)if [ ! -d $(obj)/lxdialog ]; then \ - $(ECHO) " MKDIR $(obj)"; \ - mkdir -p $(obj)/lxdialog; \ - fi -endef - -# Build the dependency for C files -%.dep: %.c $(CT_LIB_DIR)/kconfig/kconfig.mk - $(check_kconfig_dir) - @$(ECHO) " DEP $@" - $(SILENT)$(HOST_CC) $(CFLAGS) $(EXTRA_CFLAGS) -MM $< |$(sed) -r -e 's|([^:]+.o)( *:+)|$(<:.c=.o) $@\2|;' >$@ - -# Build C files -%.o: %.c $(CT_LIB_DIR)/kconfig/kconfig.mk - $(check_kconfig_dir) - @$(ECHO) " CC $@" - $(SILENT)$(HOST_CC) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $< - -# Actual link -$(obj)/mconf: $(COMMON_OBJ) $(LX_OBJ) $(mconf_OBJ) - @$(ECHO) ' LD $@' - $(SILENT)$(HOST_LD) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS) - -$(obj)/nconf: $(COMMON_OBJ) $(nconf_OBJ) - @$(ECHO) ' LD $@' - $(SILENT)$(HOST_LD) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS) - -$(obj)/conf: $(COMMON_OBJ) $(conf_OBJ) - @$(ECHO) ' LD $@' - $(SILENT)$(HOST_LD) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS) - -#----------------------------------------------------------- -# Cleaning up the mess... - -clean:: - @$(ECHO) " CLEAN kconfig" - $(SILENT)rm -f kconfig/{,m,n}conf{,.exe} $(ALL_OBJS) $(ALL_DEPS) - $(SILENT)rmdir --ignore-fail-on-non-empty kconfig{/lxdialog,} 2>/dev/null || true |