kconfig/kconfig.mk
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed Jan 13 20:46:01 2010 +0100 (2010-01-13)
changeset 1732 6b2ae7804c6f
parent 1155 21e86e18f344
child 1803 2c0ed9ec9a8c
permissions -rw-r--r--
debug/gdb: staticaly link to ncurses for the native gdb

Staticaly link the native gdb (the one that runs on the target,
not the cross one that runs on the host) to ncurses.
     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 #-----------------------------------------------------------
    28 # Help text used by make help
    29 
    30 help-config::
    31 	@echo  '  menuconfig         - Update current config using a menu based program'
    32 	@echo  '  oldconfig          - Update current config using a provided .config as base'
    33 
    34 #-----------------------------------------------------------
    35 # Hmmm! Cheesy build!
    36 # Or: where I can unveil my make-fu... :-]
    37 
    38 # Oh! Files not here are there, in fact! :-)
    39 vpath %.c $(CT_LIB_DIR)
    40 vpath %.h $(CT_LIB_DIR)
    41 
    42 # What is the compiler?
    43 HOST_CC ?= gcc -funsigned-char
    44 HOST_LD ?= gcc
    45 
    46 # Helpers
    47 check_gettext = $(CT_LIB_DIR)/kconfig/check-gettext.sh
    48 check_lxdialog = $(CT_LIB_DIR)/kconfig/lxdialog/check-lxdialog.sh
    49 
    50 # Build flags
    51 CFLAGS = 
    52 LDFLAGS =
    53 
    54 # Compiler flags to use gettext
    55 INTL_CFLAGS = $(shell $(SHELL) $(check_gettext) $(HOST_CC) $(EXTRA_CFLAGS))
    56 
    57 # Compiler and linker flags to use ncurses
    58 NCURSES_CFLAGS = $(shell $(SHELL) $(check_lxdialog) -ccflags)
    59 NCURSES_LDFLAGS = $(shell $(SHELL) $(check_lxdialog) -ldflags $(HOST_CC) $(LX_FLAGS) $(EXTRA_CFLAGS))
    60 
    61 # Common source files
    62 COMMON_SRC = kconfig/zconf.tab.c
    63 COMMON_OBJ = $(patsubst %.c,%.o,$(COMMON_SRC))
    64 COMMON_DEP = $(patsubst %.o,%.dep,$(COMMON_OBJ))
    65 $(COMMON_OBJ) $(COMMON_DEP): CFLAGS += $(INTL_CFLAGS)
    66 
    67 # lxdialog source files
    68 LX_SRC = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/kconfig/lxdialog/*.c))
    69 LX_OBJ = $(patsubst %.c,%.o,$(LX_SRC))
    70 LX_DEP = $(patsubst %.o,%.dep,$(LX_OBJ))
    71 $(LX_OBJ) $(LX_DEP): CFLAGS += $(NCURSES_CFLAGS) $(INTL_CFLAGS)
    72 
    73 # What's needed to build 'conf'
    74 conf_SRC = kconfig/conf.c
    75 conf_OBJ = $(patsubst %.c,%.o,$(conf_SRC))
    76 conf_DEP = $(patsubst %.o,%.dep,$(conf_OBJ))
    77 $(conf_OBJ) $(conf_DEP): CFLAGS += $(INTL_CFLAGS)
    78 
    79 # What's needed to build 'mconf'
    80 mconf_SRC = kconfig/mconf.c
    81 mconf_OBJ = $(patsubst %.c,%.o,$(mconf_SRC))
    82 mconf_DEP = $(patsubst %.c,%.dep,$(mconf_SRC))
    83 $(mconf_OBJ) $(mconf_DEP): CFLAGS += $(NCURSES_CFLAGS) $(INTL_CFLAGS)
    84 $(obj)/mconf: LDFLAGS += $(NCURSES_LDFLAGS)
    85 ifeq ($(shell uname -o 2>/dev/null || echo unknown),Cygwin)
    86 $(obj)/mconf: LDFLAGS += -Wl,--enable-auto-import
    87 endif
    88 
    89 # These are generated files:
    90 ALL_OBJS = $(sort $(COMMON_OBJ) $(LX_OBJ) $(conf_OBJ) $(mconf_OBJ))
    91 ALL_DEPS = $(sort $(COMMON_DEP) $(LX_DEP) $(conf_DEP) $(mconf_DEP))
    92 
    93 # Cheesy auto-dependencies
    94 # Only parse the following if a configurator was called, to avoid building
    95 # dependencies when not needed (eg. list-steps, list-samples...)
    96 # We must be carefull what we enclose, because we need some of the variable
    97 # definitions for clean (and distclean) at least.
    98 # Just protecting the "-include $(DEPS)" line should be sufficient.
    99 
   100 ifneq ($(strip $(MAKECMDGOALS)),)
   101 ifneq ($(strip $(filter $(configurators),$(MAKECMDGOALS))),)
   102 
   103 DEPS = $(COMMON_DEP)
   104 ifneq ($(strip $(filter oldconfig,$(MAKECMDGOALS))),)
   105 DEPS += $(conf_DEP)
   106 endif
   107 ifneq ($(strip $(filter menuconfig,$(MAKECMDGOALS))),)
   108 DEPS += $(mconf_DEP) $(LX_DEP)
   109 endif
   110 
   111 -include $(DEPS)
   112 
   113 endif # MAKECMDGOALS contains a configurator rule
   114 endif # MAKECMDGOALS != ""
   115 
   116 # Each .o or .dep *can not* directly depend on kconfig/, because kconfig can
   117 # be touched during the build (who's touching it, btw?) so each .o or .dep
   118 # would be re-built when it sould not be.
   119 # So manually check for presence of $(obj) (ie. kconfig), and only mkdir
   120 # if needed. After all, that's not so bad...
   121 # mkdir $(obj)/lxdialog, because we need it, and incidentally, that
   122 # also creates $(obj).
   123 define check_kconfig_dir
   124 	$(SILENT)if [ ! -d $(obj)/lxdialog ]; then  \
   125 	   $(ECHO) "  MKDIR $(obj)";           \
   126 	   mkdir -p $(obj)/lxdialog;        \
   127 	 fi
   128 endef
   129 
   130 # Build the dependency for C files
   131 %.dep: %.c $(CT_LIB_DIR)/kconfig/kconfig.mk
   132 	$(check_kconfig_dir)
   133 	@$(ECHO) "  DEP   $@"
   134 	$(SILENT)$(HOST_CC) $(CFLAGS) $(EXTRA_CFLAGS) -MM $< |$(sed) -r -e 's|([^:]+.o)( *:+)|$(<:.c=.o) $@\2|;' >$@
   135 
   136 # Build C files
   137 %.o: %.c $(CT_LIB_DIR)/kconfig/kconfig.mk
   138 	$(check_kconfig_dir)
   139 	@$(ECHO) "  CC    $@"
   140 	$(SILENT)$(HOST_CC) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $<
   141 
   142 # Actual link
   143 $(obj)/mconf: $(COMMON_OBJ) $(LX_OBJ) $(mconf_OBJ)
   144 	@$(ECHO) '  LD    $@'
   145 	$(SILENT)$(HOST_LD) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS)
   146 
   147 $(obj)/conf: $(COMMON_OBJ) $(conf_OBJ)
   148 	@$(ECHO) '  LD    $@'
   149 	$(SILENT)$(HOST_LD) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS)
   150 
   151 #-----------------------------------------------------------
   152 # Cleaning up the mess...
   153 
   154 clean::
   155 	@$(ECHO) "  CLEAN kconfig"
   156 	$(SILENT)rm -f kconfig/{,m}conf{,.exe} $(ALL_OBJS) $(ALL_DEPS)
   157 	$(SILENT)rmdir --ignore-fail-on-non-empty kconfig{/lxdialog,} 2>/dev/null || true