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