kconfig/kconfig.mk
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Thu Jan 29 22:09:55 2009 +0000 (2009-01-29)
changeset 1176 8508ec77df4c
parent 1087 5be36a4b304d
child 1254 90a099a0e902
permissions -rw-r--r--
If compiling the Java frontend, we'll require a native gcj, but only in this case.

/trunk/scripts/crosstool-NG.sh.in | 8 7 1 0 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
     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 $(ALL_OBJS) $(ALL_DEPS)
   157 	$(SILENT)rmdir --ignore-fail-on-non-empty kconfig{/lxdialog,} 2>/dev/null || true