summaryrefslogtreecommitdiff
path: root/kconfig
diff options
context:
space:
mode:
Diffstat (limited to 'kconfig')
-rw-r--r--kconfig/Makefile99
-rw-r--r--kconfig/kconfig.mk171
2 files changed, 109 insertions, 161 deletions
diff --git a/kconfig/Makefile b/kconfig/Makefile
new file mode 100644
index 0000000..091d568
--- /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 ab29e48..d930d37 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