1 # ===========================================================================
2 # Kernel configuration targets
3 # These targets are used from top-level makefile
5 PHONY
+= oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config \
6 localmodconfig localyesconfig
8 _OS
=$(shell uname
-s |cut
-c-7
)
14 Kconfig
:= src
/Kconfig
16 xconfig
: $(objk
)/qconf
19 gconfig
: $(objk
)/gconf
20 cp
-f
$(srck
)/gconf.glade
$(objk
)/gconf.glade
23 menuconfig
: $(objk
)/mconf
27 $< --oldaskconfig
$(Kconfig
)
29 nconfig
: $(objk
)/nconf
32 oldconfig
: $(objk
)/conf
34 $< --silentoldconfig
$(Kconfig
)
36 silentoldconfig
: $(objk
)/conf
39 # --- UNUSED, ignore ----------------------------------------------------------
40 localyesconfig localmodconfig
: $(obj
)/streamline_config.pl
$(obj
)/conf
41 $(Q
)mkdir
-p
include/generated
42 $(Q
)perl
$< --$@
$(srctree
) $(Kconfig
) > .tmp.config
43 $(Q
)if
[ -f .config
]; then \
44 cmp
-s .tmp.config .config || \
45 (mv
-f .config .config.old
.1; \
46 mv
-f .tmp.config .config
; \
47 $(obj
)/conf
--silentoldconfig
$(Kconfig
); \
48 mv
-f .config.old
.1 .config.old
) \
50 mv
-f .tmp.config .config
; \
51 $(obj
)/conf
--silentoldconfig
$(Kconfig
); \
55 # Create new linux.pot file
56 # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
57 update-po-config
: $(obj
)/kxgettext
$(obj
)/gconf.glade.h
58 $(Q
)echo
" GEN config.pot"
59 $(Q
)xgettext
--default-domain
=linux \
60 --add-comments
--keyword
=_
--keyword
=N_ \
62 --files-from
=$(srctree
)/scripts
/kconfig
/POTFILES.in \
63 --directory
=$(srctree
) --directory
=$(objtree
) \
64 --output
$(obj
)/config.pot
65 $(Q
)sed
-i s
/CHARSET
/UTF-8
/ $(obj
)/config.pot
66 $(Q
)(for i in
`ls $(srctree)/arch/*/Kconfig \
67 $(srctree)/arch/*/um/Kconfig`; \
70 $(obj
)/kxgettext
$$i \
71 >> $(obj
)/config.pot
; \
73 $(Q
)echo
" GEN linux.pot"
74 $(Q
)msguniq
--sort-by-file
--to-code
=UTF-8
$(obj
)/config.pot \
75 --output
$(obj
)/linux.pot
76 $(Q
)rm -f
$(obj
)/config.pot
77 # --- UNUSED, ignore ----------------------------------------------------------
79 PHONY
+= allnoconfig allyesconfig allmodconfig alldefconfig randconfig
81 allnoconfig allyesconfig allmodconfig alldefconfig randconfig
: $(objk
)/conf
84 defconfig
: $(objk
)/conf
85 ifeq ($(KBUILD_DEFCONFIG
),)
88 @echo
"*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
89 $< -D
$(KBUILD_DEFCONFIG
) $(Kconfig
)
92 %_defconfig
: $(objk
)/conf
93 $< -D configs
/$@
$(Kconfig
)
95 # Help text used by make help
97 @echo
' config - Update current config utilising a line-oriented program'
98 @echo
' nconfig - Update current config utilising a ncurses menu based program'
99 @echo
' menuconfig - Update current config utilising a menu based program'
100 @echo
' xconfig - Update current config utilising a QT based front-end'
101 @echo
' gconfig - Update current config utilising a GTK based front-end'
102 @echo
' oldconfig - Update current config utilising a provided .config as base'
103 @echo
' localmodconfig - Update current config disabling modules not loaded'
104 @echo
' localyesconfig - Update current config converting local mods to core'
105 @echo
' silentoldconfig - Same as oldconfig, but quietly, additionally update deps'
106 @echo
' defconfig - New config with default answer to all options'
107 @echo
' allnoconfig - New config where all options are answered with no'
108 @echo
' allyesconfig - New config where all options are accepted with yes'
109 @echo
' allmodconfig - New config selecting modules when possible'
110 @echo
' randconfig - New config with random answer to all options'
113 check-lxdialog
:= $(srck
)/lxdialog
/check-lxdialog.sh
115 # Use recursively expanded variables so we do not call gcc unless
116 # we really need to do so. (Do not call gcc as part of make mrproper)
117 HOST_EXTRACFLAGS
+= $(shell $(CONFIG_SHELL
) $(check-lxdialog
) -ccflags
) \
119 HOST_LOADLIBES
= $(shell $(CONFIG_SHELL
) $(check-lxdialog
) -ldflags $(HOSTCC
))
122 # ===========================================================================
123 # Shared Makefile for the various kconfig executables:
124 # conf: Used for defconfig, oldconfig and related targets
125 # nconf: Used for the nconfig target.
127 # mconf: Used for the menuconfig target
128 # Utilizes the lxdialog package
129 # qconf: Used for the xconfig target
130 # Based on QT which needs to be installed to compile it
131 # gconf: Used for the gconfig target
132 # Based on GTK which needs to be installed to compile it
133 # object files used by all kconfig flavours
135 lxdialog
:= lxdialog
/checklist.o lxdialog
/util.o lxdialog
/inputbox.o
136 lxdialog
+= lxdialog
/textbox.o lxdialog
/yesno.o lxdialog
/menubox.o
138 conf-objs
:= conf.o zconf.tab.o
$(regex-objs
)
139 mconf-objs
:= mconf.o zconf.tab.o
$(lxdialog
) $(regex-objs
)
140 nconf-objs
:= nconf.o zconf.tab.o nconf.gui.o
141 kxgettext-objs
:= kxgettext.o zconf.tab.o
142 qconf-cxxobjs
:= qconf.o
143 qconf-objs
:= zconf.tab.o
144 gconf-objs
:= gconf.o zconf.tab.o
148 ifeq ($(MAKECMDGOALS
),nconfig
)
152 ifeq ($(MAKECMDGOALS
),menuconfig
)
156 ifeq ($(MAKECMDGOALS
),update-po-config
)
157 hostprogs-y
+= kxgettext
160 ifeq ($(MAKECMDGOALS
),xconfig
)
163 ifeq ($(MAKECMDGOALS
),gconfig
)
168 ifeq ($(qconf-target
),1)
172 ifeq ($(gconf-target
),1)
176 clean-files
:= qconf.moc .tmp_qtcheck .tmp_gtkcheck
177 clean-files
+= zconf.tab.c zconf.
lex.c zconf.hash.c gconf.glade.h
178 clean-files
+= mconf qconf gconf nconf
179 clean-files
+= config.pot linux.pot
181 # Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
182 PHONY
+= $(objk
)/dochecklxdialog
183 $(addprefix $(obj
)/,$(lxdialog
)): $(objk
)/dochecklxdialog
184 $(objk
)/dochecklxdialog
:
185 $(CONFIG_SHELL
) $(check-lxdialog
) -check $(HOSTCC
) $(HOST_EXTRACFLAGS
) $(HOST_LOADLIBES
)
187 always
:= dochecklxdialog
189 # Add environment specific flags
190 HOST_EXTRACFLAGS
+= $(shell $(CONFIG_SHELL
) $(srck
)/check.sh
$(HOSTCC
) $(HOSTCFLAGS
))
192 # generated files seem to need this to find local include files
193 HOSTCFLAGS_zconf.
lex.o
:= -I
$(src
)
194 HOSTCFLAGS_zconf.tab.o
:= -I
$(src
)
196 LEX_PREFIX_zconf
:= zconf
197 YACC_PREFIX_zconf
:= zconf
199 HOSTLOADLIBES_qconf
= $(KC_QT_LIBS
) -ldl
200 HOSTCXXFLAGS_qconf.o
= $(KC_QT_CFLAGS
)
202 HOSTLOADLIBES_gconf
= `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0`
203 HOSTCFLAGS_gconf.o
= `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
204 -Wno-missing-prototypes
206 HOSTLOADLIBES_mconf
= $(shell $(CONFIG_SHELL
) $(check-lxdialog
) -ldflags $(HOSTCC
))
208 HOSTLOADLIBES_nconf
= $(shell \
209 pkg-config
--libs menu panel ncurses
2>/dev
/null \
210 || echo
"-lmenu -lpanel -lncurses" )
212 $(objk
)/qconf.o
: $(objk
)/.tmp_qtcheck
214 ifeq ($(qconf-target
),1)
215 $(objk
)/.tmp_qtcheck
: $(srck
)/Makefile
216 -include $(objk
)/.tmp_qtcheck
218 # QT needs some extra effort...
219 $(objk
)/.tmp_qtcheck
:
220 @set
-e
; echo
" CHECK qt"; dir=""; pkg
=""; \
221 if
! pkg-config
--exists QtCore
2> /dev
/null
; then \
222 echo
"* Unable to find the QT4 tool qmake. Trying to use QT3"; \
223 pkg-config
--exists qt
2> /dev
/null
&& pkg
=qt
; \
224 pkg-config
--exists qt-mt
2> /dev
/null
&& pkg
=qt-mt
; \
225 if
[ -n
"$$pkg" ]; then \
226 cflags="\$$(shell pkg-config $$pkg --cflags)"; \
227 libs
="\$$(shell pkg-config $$pkg --libs)"; \
228 moc
="\$$(shell pkg-config $$pkg --variable=prefix)/bin/moc"; \
229 dir="$$(pkg-config $$pkg --variable=prefix)"; \
231 for d in
$$QTDIR /usr
/share
/qt
* /usr
/lib
/qt
*; do \
232 if
[ -f
$$d/include/qconfig.h
]; then
dir=$$d; break
; fi
; \
234 if
[ -z
"$$dir" ]; then \
236 echo
>&2 "* Unable to find any QT installation. Please make sure that"; \
237 echo
>&2 "* the QT4 or QT3 development package is correctly installed and"; \
238 echo
>&2 "* either qmake can be found or install pkg-config or set"; \
239 echo
>&2 "* the QTDIR environment variable to the correct location."; \
243 libpath
=$$dir/lib
; lib
=qt
; osdir
=""; \
244 $(HOSTCXX
) -print-multi-os-directory
> /dev
/null
2>&1 && \
245 osdir
=x
$$($(HOSTCXX
) -print-multi-os-directory
); \
246 test -d
$$libpath/$$osdir && libpath
=$$libpath/$$osdir; \
247 test -f
$$libpath/libqt-mt.so
&& lib
=qt-mt
; \
248 cflags="-I$$dir/include"; \
249 libs
="-L$$libpath -Wl,-rpath,$$libpath -l$$lib"; \
250 moc
="$$dir/bin/moc"; \
252 if
[ ! -x
$$dir/bin
/moc
-a
-x
/usr
/bin
/moc
]; then \
254 echo
"* Unable to find $$dir/bin/moc, using /usr/bin/moc instead."; \
256 moc
="/usr/bin/moc"; \
259 cflags="\$$(shell pkg-config QtCore QtGui Qt3Support --cflags)"; \
260 libs
="\$$(shell pkg-config QtCore QtGui Qt3Support --libs)"; \
261 moc
="\$$(shell pkg-config QtCore --variable=moc_location)"; \
262 [ -n
"$$moc" ] || moc
="\$$(shell pkg-config QtCore --variable=prefix)/bin/moc"; \
264 echo
"KC_QT_CFLAGS=$$cflags" > $@
; \
265 echo
"KC_QT_LIBS=$$libs" >> $@
; \
266 echo
"KC_QT_MOC=$$moc" >> $@
269 $(objk
)/gconf.o
: $(objk
)/.tmp_gtkcheck
271 ifeq ($(gconf-target
),1)
272 -include $(objk
)/.tmp_gtkcheck
274 # GTK needs some extra effort, too...
275 $(objk
)/.tmp_gtkcheck
:
276 @if
`pkg-config --exists gtk+-2.0 gmodule-2.0 libglade-2.0`; then \
277 if
`pkg-config --atleast-version=2.0.0 gtk+-2.0`; then \
281 echo
>&2 "* GTK+ is present but version >= 2.0.0 is required."; \
287 echo
>&2 "* Unable to find the GTK+ installation. Please make sure that"; \
288 echo
>&2 "* the GTK+ 2.0 development package is correctly installed..."; \
289 echo
>&2 "* You need gtk+-2.0, glib-2.0 and libglade-2.0."; \
295 # --- UNUSED, ignore ----------------------------------------------------------
297 $(obj
)/zconf.tab.o
: $(obj
)/zconf.
lex.c
$(obj
)/zconf.hash.c
299 $(obj
)/qconf.o
: $(obj
)/qconf.moc
$(obj
)/lkc_defs.h
301 $(obj
)/gconf.o
: $(obj
)/lkc_defs.h
303 $(obj
)/%.moc
: $(srck
)/%.h
304 $(KC_QT_MOC
) -i
$< -o
$@
306 $(obj
)/lkc_defs.h
: $(src
)/lkc_proto.h
307 sed
< $< > $@
's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
309 # Extract gconf menu items for I18N support
310 $(obj
)/gconf.glade.h
: $(obj
)/gconf.glade
311 intltool-extract
--type
=gettext
/glade
$(obj
)/gconf.glade
313 # --- UNUSED, ignore ----------------------------------------------------------
316 # The following requires flex/bison/gperf
317 # By default we use the _shipped versions, uncomment the following line if
318 # you are modifying the flex/bison src.
323 # --- UNUSED, ignore ----------------------------------------------------------
324 $(obj
)/zconf.tab.c
: $(src
)/zconf.y
325 $(obj
)/zconf.
lex.c
: $(src
)/zconf.l
326 $(obj
)/zconf.hash.c
: $(src
)/zconf.gperf
329 bison
-l
-b
$* -p
$(notdir $*) $<
333 flex
-L
-P
$(notdir $*) -o
$@
$<
339 # --- UNUSED, ignore ----------------------------------------------------------
343 $(objk
)/qconf
: $(patsubst %,$(objk
)/%,$(qconf-cxxobjs
)) \
344 $(patsubst %,$(objk
)/%,$(qconf-objs
))
345 $(HOSTCXX
) $(HOSTCXXFLAGS
) -o
$@
$^
$(HOSTLOADLIBES_qconf
)
346 $(objk
)/gconf
: $(patsubst %,$(objk
)/%,$(gconf-objs
))
347 $(HOSTCC
) $(HOSTCFLAGS
) -o
$@
$^
$(HOSTLOADLIBES_gconf
)
348 $(objk
)/mconf
: $(patsubst %,$(objk
)/%,$(mconf-objs
))
349 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) $^
-o
$@
$(HOST_LOADLIBES
)
350 $(objk
)/nconf
: $(patsubst %,$(objk
)/%,$(nconf-objs
))
351 $(HOSTCC
) $(HOSTCFLAGS
) -o
$@
$^
$(HOSTLOADLIBES_nconf
)
352 $(objk
)/conf
: $(patsubst %,$(objk
)/%,$(conf-objs
))
353 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) -o
$@
$^
355 $(objk
)/mconf.o
: $(srck
)/mconf.c
356 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) -c
-o
$@
$<
357 $(objk
)/nconf.o
: $(srck
)/nconf.c
358 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) -c
-o
$@
$<
359 $(objk
)/nconf.gui.o
: $(srck
)/nconf.gui.c
360 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) -c
-o
$@
$<
361 $(objk
)/conf.o
: $(srck
)/conf.c
362 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) -c
-o
$@
$<
363 $(objk
)/regex.o
: $(srck
)/regex.c
364 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) -DHAVE_STRING_H
-c
-o
$@
$<
366 $(objk
)/zconf.tab.o
: $(objk
)/zconf.tab.c
$(objk
)/zconf.
lex.c \
368 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) -c
-o
$@
$(objk
)/zconf.tab.c
369 $(objk
)/qconf.o
: $(srck
)/qconf.
cc $(objk
)/qconf.moc
$(objk
)/lkc_defs.h
370 $(HOSTCXX
) $(HOSTCXXFLAGS
) $(HOSTCXXFLAGS_qconf.o
) -c
-o
$@
$<
371 $(objk
)/gconf.o
: $(srck
)/gconf.c
$(objk
)/lkc_defs.h
372 $(HOSTCC
) $(HOSTCFLAGS
) $(HOSTCFLAGS_gconf.o
) -c
-o
$@
$<
373 $(objk
)/%.moc
: $(srck
)/%.h
374 $(KC_QT_MOC
) -i
$< -o
$@
375 $(objk
)/lkc_defs.h
: $(srck
)/lkc_proto.h
376 sed
< $< > $@
's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
378 $(objk
)/zconf.
lex.c
: $(srck
)/zconf.
lex.c_shipped
380 $(objk
)/zconf.hash.c
: $(srck
)/zconf.hash.c_shipped
382 $(objk
)/zconf.tab.c
: $(srck
)/zconf.tab.c_shipped
385 $(objk
)/lxdialog
/lxdialog
: $(objk
)/dochecklxdialog \
386 $(patsubst %,$(objk
)/lxdialog
/%,$(lxdialog
))
387 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) \
388 $(patsubst %,$(objk
)/lxdialog
/%,$(lxdialog
)) $(HOST_LOADLIBES
) -o
$@
389 $(objk
)/lxdialog
/%.o
: $(srck
)/lxdialog
/%.c
390 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) $^
-c
-o
$@
392 $(objk
)/%.o
: HOSTCFLAGS
+=-I
$(srck
) -I
$(objk
)
393 $(objk
)/%.o
: HOSTCXXFLAGS
+=-I
$(srck
) -I
$(objk
)