kconfig/kconfig.mk
author Arnaud Lacombe <lacombar@gmail.com>
Tue Aug 03 06:17:51 2010 +0200 (2010-08-03)
changeset 2064 f5ebe8c429dc
parent 1803 2c0ed9ec9a8c
child 2125 4009fc9c47d5
permissions -rw-r--r--
libc/uClibc: add uClibc 0.9.30.3

This version has been released a couple of month ago, but it never reached
crosstool-ng tree. This may be linked to the fact that the current 0.9.30.2,
once patched, has nothing much different from 0.9.30.3, released.

I'm not including any patch with this upgrade, on purpose.

Signed-off-by: Arnaud Lacombe <lacombar@gmail.com>
     1 # ===========================================================================
     2 # crosstool-NG configuration targets
     3 # These targets are used from top-level makefile
     4 
     5 # Derive the project version from, well, the project version:
     6 export PROJECTVERSION=$(CT_VERSION)
     7 
     8 # The place where the kconfig stuff lies
     9 obj = kconfig
    10 
    11 #-----------------------------------------------------------
    12 # The configurators rules
    13 
    14 configurators = menuconfig oldconfig
    15 PHONY += $(configurators)
    16 
    17 $(configurators): config_files
    18 
    19 menuconfig: $(obj)/mconf
    20 	@$(ECHO) "  CONF  $(KCONFIG_TOP)"
    21 	$(SILENT)$< $(KCONFIG_TOP)
    22 
    23 oldconfig: $(obj)/conf .config
    24 	@$(ECHO) "  CONF  $(KCONFIG_TOP)"
    25 	$(SILENT)$< -s $(KCONFIG_TOP)
    26 
    27 # Always be silent, the stdout an be >.config
    28 extractconfig:
    29 	@awk 'BEGIN { dump=0; }                                                 \
    30 	      dump==1 && $$0~/^\[.....\][[:space:]]+(# |)CT_/ {                 \
    31 	          $$1="";                                                       \
    32 	          gsub("^[[:space:]]","");                                      \
    33 	          print;                                                        \
    34 	      }                                                                 \
    35 	      $$0~/Dumping user-supplied crosstool-NG configuration: done in/ { \
    36 	          dump=0;                                                       \
    37 	      }                                                                 \
    38 	      $$0~/Dumping user-supplied crosstool-NG configuration$$/ {        \
    39 	          dump=1;                                                       \
    40 	      }'
    41 
    42 #-----------------------------------------------------------
    43 # Help text used by make help
    44 
    45 help-config::
    46 	@echo  '  menuconfig         - Update current config using a menu based program'
    47 	@echo  '  oldconfig          - Update current config using a provided .config as base'
    48 	@echo  '  extractconfig      - Extract to stdout the configuration items from a'
    49 	@echo  '                       build.log file piped to stdin'
    50 
    51 #-----------------------------------------------------------
    52 # Hmmm! Cheesy build!
    53 # Or: where I can unveil my make-fu... :-]
    54 
    55 # Oh! Files not here are there, in fact! :-)
    56 vpath %.c $(CT_LIB_DIR)
    57 vpath %.h $(CT_LIB_DIR)
    58 
    59 # What is the compiler?
    60 HOST_CC ?= gcc -funsigned-char
    61 HOST_LD ?= gcc
    62 
    63 # Helpers
    64 check_gettext = $(CT_LIB_DIR)/kconfig/check-gettext.sh
    65 check_lxdialog = $(CT_LIB_DIR)/kconfig/lxdialog/check-lxdialog.sh
    66 
    67 # Build flags
    68 CFLAGS =
    69 LDFLAGS =
    70 
    71 # Compiler flags to use gettext
    72 INTL_CFLAGS = $(shell $(SHELL) $(check_gettext) $(HOST_CC) $(EXTRA_CFLAGS))
    73 
    74 # Compiler and linker flags to use ncurses
    75 NCURSES_CFLAGS = $(shell $(SHELL) $(check_lxdialog) -ccflags)
    76 NCURSES_LDFLAGS = $(shell $(SHELL) $(check_lxdialog) -ldflags $(HOST_CC) $(LX_FLAGS) $(EXTRA_CFLAGS))
    77 
    78 # Common source files
    79 COMMON_SRC = kconfig/zconf.tab.c
    80 COMMON_OBJ = $(patsubst %.c,%.o,$(COMMON_SRC))
    81 COMMON_DEP = $(patsubst %.o,%.dep,$(COMMON_OBJ))
    82 $(COMMON_OBJ) $(COMMON_DEP): CFLAGS += $(INTL_CFLAGS)
    83 
    84 # lxdialog source files
    85 LX_SRC = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/kconfig/lxdialog/*.c))
    86 LX_OBJ = $(patsubst %.c,%.o,$(LX_SRC))
    87 LX_DEP = $(patsubst %.o,%.dep,$(LX_OBJ))
    88 $(LX_OBJ) $(LX_DEP): CFLAGS += $(NCURSES_CFLAGS) $(INTL_CFLAGS)
    89 
    90 # What's needed to build 'conf'
    91 conf_SRC = kconfig/conf.c
    92 conf_OBJ = $(patsubst %.c,%.o,$(conf_SRC))
    93 conf_DEP = $(patsubst %.o,%.dep,$(conf_OBJ))
    94 $(conf_OBJ) $(conf_DEP): CFLAGS += $(INTL_CFLAGS)
    95 
    96 # What's needed to build 'mconf'
    97 mconf_SRC = kconfig/mconf.c
    98 mconf_OBJ = $(patsubst %.c,%.o,$(mconf_SRC))
    99 mconf_DEP = $(patsubst %.c,%.dep,$(mconf_SRC))
   100 $(mconf_OBJ) $(mconf_DEP): CFLAGS += $(NCURSES_CFLAGS) $(INTL_CFLAGS)
   101 $(obj)/mconf: LDFLAGS += $(NCURSES_LDFLAGS)
   102 ifeq ($(shell uname -o 2>/dev/null || echo unknown),Cygwin)
   103 $(obj)/mconf: LDFLAGS += -Wl,--enable-auto-import
   104 endif
   105 
   106 # These are generated files:
   107 ALL_OBJS = $(sort $(COMMON_OBJ) $(LX_OBJ) $(conf_OBJ) $(mconf_OBJ))
   108 ALL_DEPS = $(sort $(COMMON_DEP) $(LX_DEP) $(conf_DEP) $(mconf_DEP))
   109 
   110 # Cheesy auto-dependencies
   111 # Only parse the following if a configurator was called, to avoid building
   112 # dependencies when not needed (eg. list-steps, list-samples...)
   113 # We must be carefull what we enclose, because we need some of the variable
   114 # definitions for clean (and distclean) at least.
   115 # Just protecting the "-include $(DEPS)" line should be sufficient.
   116 
   117 ifneq ($(strip $(MAKECMDGOALS)),)
   118 ifneq ($(strip $(filter $(configurators),$(MAKECMDGOALS))),)
   119 
   120 DEPS = $(COMMON_DEP)
   121 ifneq ($(strip $(filter oldconfig,$(MAKECMDGOALS))),)
   122 DEPS += $(conf_DEP)
   123 endif
   124 ifneq ($(strip $(filter menuconfig,$(MAKECMDGOALS))),)
   125 DEPS += $(mconf_DEP) $(LX_DEP)
   126 endif
   127 
   128 -include $(DEPS)
   129 
   130 endif # MAKECMDGOALS contains a configurator rule
   131 endif # MAKECMDGOALS != ""
   132 
   133 # Each .o or .dep *can not* directly depend on kconfig/, because kconfig can
   134 # be touched during the build (who's touching it, btw?) so each .o or .dep
   135 # would be re-built when it sould not be.
   136 # So manually check for presence of $(obj) (ie. kconfig), and only mkdir
   137 # if needed. After all, that's not so bad...
   138 # mkdir $(obj)/lxdialog, because we need it, and incidentally, that
   139 # also creates $(obj).
   140 define check_kconfig_dir
   141 	$(SILENT)if [ ! -d $(obj)/lxdialog ]; then  \
   142 	   $(ECHO) "  MKDIR $(obj)";           \
   143 	   mkdir -p $(obj)/lxdialog;        \
   144 	 fi
   145 endef
   146 
   147 # Build the dependency for C files
   148 %.dep: %.c $(CT_LIB_DIR)/kconfig/kconfig.mk
   149 	$(check_kconfig_dir)
   150 	@$(ECHO) "  DEP   $@"
   151 	$(SILENT)$(HOST_CC) $(CFLAGS) $(EXTRA_CFLAGS) -MM $< |$(sed) -r -e 's|([^:]+.o)( *:+)|$(<:.c=.o) $@\2|;' >$@
   152 
   153 # Build C files
   154 %.o: %.c $(CT_LIB_DIR)/kconfig/kconfig.mk
   155 	$(check_kconfig_dir)
   156 	@$(ECHO) "  CC    $@"
   157 	$(SILENT)$(HOST_CC) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $<
   158 
   159 # Actual link
   160 $(obj)/mconf: $(COMMON_OBJ) $(LX_OBJ) $(mconf_OBJ)
   161 	@$(ECHO) '  LD    $@'
   162 	$(SILENT)$(HOST_LD) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS)
   163 
   164 $(obj)/conf: $(COMMON_OBJ) $(conf_OBJ)
   165 	@$(ECHO) '  LD    $@'
   166 	$(SILENT)$(HOST_LD) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS)
   167 
   168 #-----------------------------------------------------------
   169 # Cleaning up the mess...
   170 
   171 clean::
   172 	@$(ECHO) "  CLEAN kconfig"
   173 	$(SILENT)rm -f kconfig/{,m}conf{,.exe} $(ALL_OBJS) $(ALL_DEPS)
   174 	$(SILENT)rmdir --ignore-fail-on-non-empty kconfig{/lxdialog,} 2>/dev/null || true