1 # ===========================================================================
2 # Kernel configuration targets
3 # These targets are used from top-level makefile
10 PHONY
+= oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config \
11 localmodconfig localyesconfig
13 _OS
=$(shell uname
-s |cut
-c-7
)
19 Kconfig ?
= src
/Kconfig
21 xconfig
: $(objk
)/qconf
24 gconfig
: $(objk
)/gconf
25 cp
-f
$(srck
)/gconf.glade
$(objk
)/gconf.glade
28 menuconfig
: $(objk
)/mconf
32 $< --oldaskconfig
$(Kconfig
)
34 nconfig
: $(objk
)/nconf
37 # Disable strict mode because oldconfig is typically used to clean up
38 # templates and the like. The second invocation should already have sane data.
39 oldconfig
: $(objk
)/conf
40 KCONFIG_STRICT
= $< --$@
$(Kconfig
)
41 $< --silentoldconfig
$(Kconfig
)
43 silentoldconfig
: $(objk
)/conf
46 # --- UNUSED, ignore ----------------------------------------------------------
47 localyesconfig localmodconfig
: $(obj
)/streamline_config.pl
$(obj
)/conf
48 $(Q
)mkdir
-p
include/generated
49 $(Q
)perl
$< --$@
$(srctree
) $(Kconfig
) > .tmp.config
50 $(Q
)if
[ -f .config
]; then \
51 cmp
-s .tmp.config .config || \
52 (mv
-f .config .config.old
.1; \
53 mv
-f .tmp.config .config
; \
54 $(obj
)/conf
--silentoldconfig
$(Kconfig
); \
55 mv
-f .config.old
.1 .config.old
) \
57 mv
-f .tmp.config .config
; \
58 $(obj
)/conf
--silentoldconfig
$(Kconfig
); \
62 # Create new linux.pot file
63 # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
64 update-po-config
: $(obj
)/kxgettext
$(obj
)/gconf.glade.h
65 $(Q
)echo
" GEN config.pot"
66 $(Q
)xgettext
--default-domain
=linux \
67 --add-comments
--keyword
=_
--keyword
=N_ \
69 --files-from
=$(srctree
)/scripts
/kconfig
/POTFILES.in \
70 --directory
=$(srctree
) --directory
=$(objtree
) \
71 --output
$(obj
)/config.pot
72 $(Q
)sed
-i s
/CHARSET
/UTF-8
/ $(obj
)/config.pot
73 $(Q
)(for i in
`ls $(srctree)/arch/*/Kconfig \
74 $(srctree)/arch/*/um/Kconfig`; \
77 $(obj
)/kxgettext
$$i \
78 >> $(obj
)/config.pot
; \
80 $(Q
)echo
" GEN linux.pot"
81 $(Q
)msguniq
--sort-by-file
--to-code
=UTF-8
$(obj
)/config.pot \
82 --output
$(obj
)/linux.pot
83 $(Q
)rm -f
$(obj
)/config.pot
84 # --- UNUSED, ignore ----------------------------------------------------------
86 PHONY
+= allnoconfig allyesconfig allmodconfig alldefconfig randconfig savedefconfig
88 allnoconfig allyesconfig allmodconfig alldefconfig randconfig
: $(objk
)/conf
91 savedefconfig
: $(objk
)/conf
92 $< --$@
=$(DEFCONFIG
) $(Kconfig
)
94 defconfig
: $(objk
)/conf
95 ifeq ($(KBUILD_DEFCONFIG
),)
96 $< --defconfig
$(Kconfig
)
98 @echo
"*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
99 $< --defconfig
=$(KBUILD_DEFCONFIG
) $(Kconfig
)
102 olddefconfig
: $(objk
)/conf
103 $< --olddefconfig
$(Kconfig
)
105 %_defconfig
: $(objk
)/conf
106 $< --defconfig
=configs
/$@
$(Kconfig
)
108 # Help text used by make help
110 @echo
'*** Kconfig Targets ***'
111 @echo
' config - Update current config utilising a line-oriented program'
112 @echo
' nconfig - Update current config utilising a ncurses menu based program'
113 @echo
' menuconfig - Update current config utilising a menu based program'
114 @echo
' xconfig - Update current config utilising a QT based front-end'
115 @echo
' gconfig - Update current config utilising a GTK based front-end'
116 @echo
' oldconfig - Update current config utilising a provided .config as base'
117 @echo
' olddefconfig - Same as oldconfig, but with default answer to all new options'
118 #@echo ' localmodconfig - Update current config disabling modules not loaded'
119 #@echo ' localyesconfig - Update current config converting local mods to core'
120 @echo
' silentoldconfig - Same as oldconfig, but quietly, additionally update deps'
121 @echo
' defconfig - New config with default answer to all options'
122 @echo
' savedefconfig - Save current config as ./defconfig (minimal config)'
123 #@echo ' allnoconfig - New config where all options are answered with no'
124 #@echo ' allyesconfig - New config where all options are accepted with yes'
125 #@echo ' allmodconfig - New config selecting modules when possible'
126 #@echo ' randconfig - New config with random answer to all options'
130 check-lxdialog
:= $(srck
)/lxdialog
/check-lxdialog.sh
132 # Use recursively expanded variables so we do not call gcc unless
133 # we really need to do so. (Do not call gcc as part of make mrproper)
134 HOST_EXTRACFLAGS
+= $(shell $(CONFIG_SHELL
) $(check-lxdialog
) -ccflags
) \
136 HOST_LOADLIBES
= $(shell $(CONFIG_SHELL
) $(check-lxdialog
) -ldflags $(HOSTCC
))
139 # ===========================================================================
140 # Shared Makefile for the various kconfig executables:
141 # conf: Used for defconfig, oldconfig and related targets
142 # nconf: Used for the nconfig target.
144 # mconf: Used for the menuconfig target
145 # Utilizes the lxdialog package
146 # qconf: Used for the xconfig target
147 # Based on QT which needs to be installed to compile it
148 # gconf: Used for the gconfig target
149 # Based on GTK which needs to be installed to compile it
150 # object files used by all kconfig flavours
152 lxdialog
:= lxdialog
/checklist.o lxdialog
/util.o lxdialog
/inputbox.o
153 lxdialog
+= lxdialog
/textbox.o lxdialog
/yesno.o lxdialog
/menubox.o
155 conf-objs
:= conf.o zconf.tab.o
$(regex-objs
)
156 mconf-objs
:= mconf.o zconf.tab.o
$(lxdialog
) $(regex-objs
)
157 nconf-objs
:= nconf.o zconf.tab.o nconf.gui.o
158 kxgettext-objs
:= kxgettext.o zconf.tab.o
159 qconf-cxxobjs
:= qconf.o
160 qconf-objs
:= zconf.tab.o
161 gconf-objs
:= gconf.o zconf.tab.o
165 ifeq ($(MAKECMDGOALS
),nconfig
)
169 ifeq ($(MAKECMDGOALS
),menuconfig
)
173 ifeq ($(MAKECMDGOALS
),update-po-config
)
174 hostprogs-y
+= kxgettext
177 ifeq ($(MAKECMDGOALS
),xconfig
)
180 ifeq ($(MAKECMDGOALS
),gconfig
)
185 ifeq ($(qconf-target
),1)
189 ifeq ($(gconf-target
),1)
193 clean-files
:= qconf.moc .tmp_qtcheck .tmp_gtkcheck
194 clean-files
+= zconf.tab.c zconf.
lex.c zconf.hash.c gconf.glade.h
195 clean-files
+= mconf qconf gconf nconf
196 clean-files
+= config.pot linux.pot
198 # Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
199 PHONY
+= $(objk
)/dochecklxdialog
200 $(addprefix $(obj
)/,$(lxdialog
)): $(objk
)/dochecklxdialog
201 $(objk
)/dochecklxdialog
:
202 $(CONFIG_SHELL
) $(check-lxdialog
) -check $(HOSTCC
) $(HOST_EXTRACFLAGS
) $(HOST_LOADLIBES
)
204 always
:= dochecklxdialog
206 # Add environment specific flags
207 HOST_EXTRACFLAGS
+= $(shell $(CONFIG_SHELL
) $(srck
)/check.sh
$(HOSTCC
) $(HOSTCFLAGS
))
209 # generated files seem to need this to find local include files
210 HOSTCFLAGS_zconf.
lex.o
:= -I
$(src
)
211 HOSTCFLAGS_zconf.tab.o
:= -I
$(src
)
213 LEX_PREFIX_zconf
:= zconf
214 YACC_PREFIX_zconf
:= zconf
216 HOSTLOADLIBES_qconf
= $(KC_QT_LIBS
) -ldl
217 HOSTCXXFLAGS_qconf.o
= $(KC_QT_CFLAGS
)
219 HOSTLOADLIBES_gconf
= `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0`
220 HOSTCFLAGS_gconf.o
= `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
221 -Wno-missing-prototypes
223 HOSTLOADLIBES_mconf
= $(shell $(CONFIG_SHELL
) $(check-lxdialog
) -ldflags $(HOSTCC
))
225 HOSTLOADLIBES_nconf
= $(shell \
226 pkg-config
--libs menu panel ncurses
2>/dev
/null \
227 || echo
"-lmenu -lpanel -lncurses" )
229 $(objk
)/qconf.o
: $(objk
)/.tmp_qtcheck
231 ifeq ($(qconf-target
),1)
232 $(objk
)/.tmp_qtcheck
: $(srck
)/Makefile
233 -include $(objk
)/.tmp_qtcheck
235 # QT needs some extra effort...
236 $(objk
)/.tmp_qtcheck
:
237 @set
-e
; echo
" CHECK qt"; dir=""; pkg
=""; \
238 if pkg-config
--exists Qt5Core
; then \
239 cflags="-std=c++11 -fPIC `pkg-config --cflags Qt5Core Qt5Gui Qt5Widgets`"; \
240 libs
=`pkg-config --libs Qt5Core Qt5Gui Qt5Widgets`; \
241 moc
=`pkg-config --variable=host_bins Qt5Core`/moc
; \
242 elif pkg-config
--exists QtCore
; then \
243 cflags=`pkg-config --cflags QtCore QtGui`; \
244 libs
=`pkg-config --libs QtCore QtGui`; \
245 moc
=`pkg-config --variable=moc_location QtCore`; \
248 echo
>&2 "* Could not find Qt via pkg-config."; \
249 echo
>&2 "* Please install either Qt 4.8 or 5.x. and make sure it's in PKG_CONFIG_PATH"; \
253 echo
"KC_QT_CFLAGS=$$cflags" > $@
; \
254 echo
"KC_QT_LIBS=$$libs" >> $@
; \
255 echo
"KC_QT_MOC=$$moc" >> $@
258 $(objk
)/gconf.o
: $(objk
)/.tmp_gtkcheck
260 ifeq ($(gconf-target
),1)
261 -include $(objk
)/.tmp_gtkcheck
263 # GTK needs some extra effort, too...
264 $(objk
)/.tmp_gtkcheck
:
265 @if
`pkg-config --exists gtk+-2.0 gmodule-2.0 libglade-2.0`; then \
266 if
`pkg-config --atleast-version=2.0.0 gtk+-2.0`; then \
270 echo
>&2 "* GTK+ is present but version >= 2.0.0 is required."; \
276 echo
>&2 "* Unable to find the GTK+ installation. Please make sure that"; \
277 echo
>&2 "* the GTK+ 2.0 development package is correctly installed..."; \
278 echo
>&2 "* You need gtk+-2.0, glib-2.0 and libglade-2.0."; \
284 # --- UNUSED, ignore ----------------------------------------------------------
286 $(obj
)/zconf.tab.o
: $(obj
)/zconf.
lex.c
$(obj
)/zconf.hash.c
288 $(obj
)/qconf.o
: $(obj
)/qconf.moc
$(obj
)/lkc_defs.h
290 $(obj
)/gconf.o
: $(obj
)/lkc_defs.h
292 $(obj
)/%.moc
: $(srck
)/%.h
293 $(KC_QT_MOC
) -i
$< -o
$@
295 $(obj
)/lkc_defs.h
: $(src
)/lkc_proto.h
296 sed
< $< > $@
's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
298 # Extract gconf menu items for I18N support
299 $(obj
)/gconf.glade.h
: $(obj
)/gconf.glade
300 intltool-extract
--type
=gettext
/glade
$(obj
)/gconf.glade
302 # --- UNUSED, ignore ----------------------------------------------------------
305 # The following requires flex/bison/gperf
306 # By default we use the _shipped versions, uncomment the following line if
307 # you are modifying the flex/bison src.
312 # --- UNUSED, ignore ----------------------------------------------------------
313 $(obj
)/zconf.tab.c
: $(src
)/zconf.y
314 $(obj
)/zconf.
lex.c
: $(src
)/zconf.l
315 $(obj
)/zconf.hash.c
: $(src
)/zconf.gperf
318 bison
-t
-l
-b
$* -p
$(notdir $*) $<
320 %.tab.c_shipped
: %.tab.c
324 flex
-L
-P
$(notdir $*) -o
$@
$<
326 %.
lex.c_shipped
: %.
lex.c
332 # --- UNUSED, ignore ----------------------------------------------------------
336 $(objk
)/qconf
: $(patsubst %,$(objk
)/%,$(qconf-cxxobjs
)) \
337 $(patsubst %,$(objk
)/%,$(qconf-objs
))
338 $(HOSTCXX
) $(HOSTCXXFLAGS
) -o
$@
$^
$(HOSTLOADLIBES_qconf
)
339 $(objk
)/gconf
: $(patsubst %,$(objk
)/%,$(gconf-objs
))
340 $(HOSTCC
) $(HOSTCFLAGS
) -o
$@
$^
$(HOSTLOADLIBES_gconf
)
341 $(objk
)/mconf
: $(patsubst %,$(objk
)/%,$(mconf-objs
))
342 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) $^
-o
$@
$(HOST_LOADLIBES
)
343 $(objk
)/nconf
: $(patsubst %,$(objk
)/%,$(nconf-objs
))
344 $(HOSTCC
) $(HOSTCFLAGS
) -o
$@
$^
$(HOSTLOADLIBES_nconf
)
345 $(objk
)/conf
: $(patsubst %,$(objk
)/%,$(conf-objs
))
346 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) -o
$@
$^
348 $(objk
)/mconf.o
: $(srck
)/mconf.c
349 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) -c
-o
$@
$<
350 $(objk
)/nconf.o
: $(srck
)/nconf.c
351 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) -c
-o
$@
$<
352 $(objk
)/nconf.gui.o
: $(srck
)/nconf.gui.c
353 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) -c
-o
$@
$<
354 $(objk
)/conf.o
: $(srck
)/conf.c
355 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) -c
-o
$@
$<
356 $(objk
)/regex.o
: $(srck
)/regex.c
357 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) -DHAVE_STRING_H
-c
-o
$@
$<
359 $(objk
)/zconf.tab.o
: $(objk
)/zconf.tab.c
$(objk
)/zconf.
lex.c \
361 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) -c
-o
$@
$(objk
)/zconf.tab.c
362 $(objk
)/qconf.o
: $(srck
)/qconf.
cc $(objk
)/qconf.moc
$(objk
)/lkc_defs.h
363 $(HOSTCXX
) $(HOSTCXXFLAGS
) $(HOSTCXXFLAGS_qconf.o
) -c
-o
$@
$<
364 $(objk
)/gconf.o
: $(srck
)/gconf.c
$(objk
)/lkc_defs.h
365 $(HOSTCC
) $(HOSTCFLAGS
) $(HOSTCFLAGS_gconf.o
) -c
-o
$@
$<
366 $(objk
)/%.moc
: $(srck
)/%.h
367 $(KC_QT_MOC
) -i
$< -o
$@
368 $(objk
)/lkc_defs.h
: $(srck
)/lkc_proto.h
369 sed
< $< > $@
's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
371 $(objk
)/zconf.
lex.c
: $(srck
)/zconf.
lex.c_shipped
373 $(objk
)/zconf.hash.c
: $(srck
)/zconf.hash.c_shipped
375 $(objk
)/zconf.tab.c
: $(srck
)/zconf.tab.c_shipped
378 $(objk
)/lxdialog
/lxdialog
: $(objk
)/dochecklxdialog \
379 $(patsubst %,$(objk
)/lxdialog
/%,$(lxdialog
))
380 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) \
381 $(patsubst %,$(objk
)/lxdialog
/%,$(lxdialog
)) $(HOST_LOADLIBES
) -o
$@
382 $(objk
)/lxdialog
/%.o
: $(srck
)/lxdialog
/%.c
383 $(HOSTCC
) $(HOSTCFLAGS
) $(HOST_EXTRACFLAGS
) $^
-c
-o
$@
385 $(objk
)/%.o
: HOSTCFLAGS
+=-I
$(srck
) -I
$(objk
)
386 $(objk
)/%.o
: HOSTCXXFLAGS
+=-I
$(srck
) -I
$(objk
)