kconfig/kconfig.mk
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Jan 22 23:20:18 2011 +0100 (2011-01-22)
changeset 2305 2ed26c646568
parent 1973 20f02d426e15
child 2448 a103abae1560
permissions -rw-r--r--
scripts: create the makeinfo wrapper before we set PATH

If we set PATH to the tools wrappers before we create the
makeinfo wrapper, then we may well wrap an existing wrapper
from a previous run.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
     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))
    77 
    78 # Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
    79 dochecklxdialog:
    80 	$(SILENT)$(SHELL) $(check_lxdialog) -check $(HOST_CC) $(NCURSES_CFLAGS) $(NCURSES_LDFLAGS)
    81 
    82 # Common source files
    83 COMMON_SRC = kconfig/zconf.tab.c
    84 COMMON_OBJ = $(patsubst %.c,%.o,$(COMMON_SRC))
    85 COMMON_DEP = $(patsubst %.o,%.dep,$(COMMON_OBJ))
    86 $(COMMON_OBJ) $(COMMON_DEP): CFLAGS += $(INTL_CFLAGS)
    87 
    88 # lxdialog source files
    89 LX_SRC = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/kconfig/lxdialog/*.c))
    90 LX_OBJ = $(patsubst %.c,%.o,$(LX_SRC))
    91 LX_DEP = $(patsubst %.o,%.dep,$(LX_OBJ))
    92 $(LX_OBJ) $(LX_DEP): CFLAGS += $(NCURSES_CFLAGS) $(INTL_CFLAGS)
    93 
    94 # What's needed to build 'conf'
    95 conf_SRC = kconfig/conf.c
    96 conf_OBJ = $(patsubst %.c,%.o,$(conf_SRC))
    97 conf_DEP = $(patsubst %.o,%.dep,$(conf_OBJ))
    98 $(conf_OBJ) $(conf_DEP): CFLAGS += $(INTL_CFLAGS)
    99 
   100 # What's needed to build 'mconf'
   101 mconf_SRC = kconfig/mconf.c
   102 mconf_OBJ = $(patsubst %.c,%.o,$(mconf_SRC))
   103 mconf_DEP = $(patsubst %.c,%.dep,$(mconf_SRC))
   104 $(mconf_OBJ) $(mconf_DEP): CFLAGS += $(NCURSES_CFLAGS) $(INTL_CFLAGS)
   105 $(obj)/mconf: LDFLAGS += $(NCURSES_LDFLAGS)
   106 ifeq ($(shell uname -o 2>/dev/null || echo unknown),Cygwin)
   107 $(obj)/mconf: LDFLAGS += -Wl,--enable-auto-import
   108 endif
   109 
   110 # These are generated files:
   111 ALL_OBJS = $(sort $(COMMON_OBJ) $(LX_OBJ) $(conf_OBJ) $(mconf_OBJ))
   112 ALL_DEPS = $(sort $(COMMON_DEP) $(LX_DEP) $(conf_DEP) $(mconf_DEP))
   113 
   114 # Cheesy auto-dependencies
   115 # Only parse the following if a configurator was called, to avoid building
   116 # dependencies when not needed (eg. list-steps, list-samples...)
   117 # We must be carefull what we enclose, because we need some of the variable
   118 # definitions for clean (and distclean) at least.
   119 # Just protecting the "-include $(DEPS)" line should be sufficient.
   120 # And in case we want menuconfig, we have to check that lxdialog
   121 # can find a curses lib.
   122 
   123 ifneq ($(strip $(MAKECMDGOALS)),)
   124 ifneq ($(strip $(filter $(configurators),$(MAKECMDGOALS))),)
   125 
   126 DEPS = $(COMMON_DEP)
   127 ifneq ($(strip $(filter oldconfig,$(MAKECMDGOALS))),)
   128 DEPS += $(conf_DEP)
   129 endif
   130 ifneq ($(strip $(filter menuconfig,$(MAKECMDGOALS))),)
   131 DEPS += $(mconf_DEP) $(LX_DEP)
   132 $(COMMON_OBJ) $(COMMON_DEP): |dochecklxdialog
   133 $(LX_OBJ) $(LX_DEP): |dochecklxdialog
   134 $(mconf_OBJ) $(mconf_DEP): |dochecklxdialog
   135 endif
   136 
   137 -include $(DEPS)
   138 
   139 endif # MAKECMDGOALS contains a configurator rule
   140 endif # MAKECMDGOALS != ""
   141 
   142 # Each .o or .dep *can not* directly depend on kconfig/, because kconfig can
   143 # be touched during the build (who's touching it, btw?) so each .o or .dep
   144 # would be re-built when it sould not be.
   145 # So manually check for presence of $(obj) (ie. kconfig), and only mkdir
   146 # if needed. After all, that's not so bad...
   147 # mkdir $(obj)/lxdialog, because we need it, and incidentally, that
   148 # also creates $(obj).
   149 define check_kconfig_dir
   150 	$(SILENT)if [ ! -d $(obj)/lxdialog ]; then  \
   151 	   $(ECHO) "  MKDIR $(obj)";           \
   152 	   mkdir -p $(obj)/lxdialog;        \
   153 	 fi
   154 endef
   155 
   156 # Build the dependency for C files
   157 %.dep: %.c $(CT_LIB_DIR)/kconfig/kconfig.mk
   158 	$(check_kconfig_dir)
   159 	@$(ECHO) "  DEP   $@"
   160 	$(SILENT)$(HOST_CC) $(CFLAGS) $(EXTRA_CFLAGS) -MM $< |$(sed) -r -e 's|([^:]+.o)( *:+)|$(<:.c=.o) $@\2|;' >$@
   161 
   162 # Build C files
   163 %.o: %.c $(CT_LIB_DIR)/kconfig/kconfig.mk
   164 	$(check_kconfig_dir)
   165 	@$(ECHO) "  CC    $@"
   166 	$(SILENT)$(HOST_CC) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $<
   167 
   168 # Actual link
   169 $(obj)/mconf: $(COMMON_OBJ) $(LX_OBJ) $(mconf_OBJ)
   170 	@$(ECHO) '  LD    $@'
   171 	$(SILENT)$(HOST_LD) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS)
   172 
   173 $(obj)/conf: $(COMMON_OBJ) $(conf_OBJ)
   174 	@$(ECHO) '  LD    $@'
   175 	$(SILENT)$(HOST_LD) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS)
   176 
   177 #-----------------------------------------------------------
   178 # Cleaning up the mess...
   179 
   180 clean::
   181 	@$(ECHO) "  CLEAN kconfig"
   182 	$(SILENT)rm -f kconfig/{,m}conf{,.exe} $(ALL_OBJS) $(ALL_DEPS)
   183 	$(SILENT)rmdir --ignore-fail-on-non-empty kconfig{/lxdialog,} 2>/dev/null || true