kconfig/kconfig.mk
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Fri Dec 31 00:16:19 2010 +0100 (2010-12-31)
changeset 2251 1bd55a223113
parent 1973 20f02d426e15
child 2448 a103abae1560
permissions -rw-r--r--
samples: update i686-nptl-linux-gnu

Enable Java and Fortran frontends.

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