Makefile 11.9 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4
# ===========================================================================
# Kernel configuration targets
# These targets are used from top-level makefile

5
PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config \
6
	localmodconfig localyesconfig
L
Linus Torvalds 已提交
7

A
Al Viro 已提交
8 9 10
ifdef KBUILD_KCONFIG
Kconfig := $(KBUILD_KCONFIG)
else
11
Kconfig := Kconfig
A
Al Viro 已提交
12
endif
13

L
Linus Torvalds 已提交
14
xconfig: $(obj)/qconf
15
	$< $(Kconfig)
L
Linus Torvalds 已提交
16 17

gconfig: $(obj)/gconf
18
	$< $(Kconfig)
L
Linus Torvalds 已提交
19 20

menuconfig: $(obj)/mconf
21
	$< $(Kconfig)
L
Linus Torvalds 已提交
22 23

config: $(obj)/conf
S
Sam Ravnborg 已提交
24
	$< --oldaskconfig $(Kconfig)
L
Linus Torvalds 已提交
25

26 27 28
nconfig: $(obj)/nconf
	$< $(Kconfig)

L
Linus Torvalds 已提交
29
oldconfig: $(obj)/conf
S
Sam Ravnborg 已提交
30
	$< --$@ $(Kconfig)
L
Linus Torvalds 已提交
31 32

silentoldconfig: $(obj)/conf
33
	$(Q)mkdir -p include/generated
S
Sam Ravnborg 已提交
34
	$< --$@ $(Kconfig)
L
Linus Torvalds 已提交
35

36 37
# if no path is given, then use src directory to find file
ifdef LSMOD
M
Michal Marek 已提交
38 39 40 41
LSMOD_F := $(LSMOD)
ifeq ($(findstring /,$(LSMOD)),)
  LSMOD_F := $(objtree)/$(LSMOD)
endif
42 43
endif

44
localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
45
	$(Q)mkdir -p include/generated
46
	$(Q)perl $< $(srctree) $(Kconfig) $(LSMOD_F) > .tmp.config
47
	$(Q)if [ -f .config ]; then 					\
S
Sam Ravnborg 已提交
48 49 50 51 52 53 54 55
			cmp -s .tmp.config .config ||			\
			(mv -f .config .config.old.1;			\
			 mv -f .tmp.config .config;			\
			 $(obj)/conf --silentoldconfig $(Kconfig);	\
			 mv -f .config.old.1 .config.old)		\
	else								\
			mv -f .tmp.config .config;			\
			$(obj)/conf --silentoldconfig $(Kconfig);	\
56
	fi
57 58
	$(Q)rm -f .tmp.config

59
localyesconfig: $(obj)/streamline_config.pl $(obj)/conf
60
	$(Q)mkdir -p include/generated
61
	$(Q)perl $< $(srctree) $(Kconfig) $(LSMOD_F) > .tmp.config
62
	$(Q)sed -i s/=m/=y/ .tmp.config
S
Sam Ravnborg 已提交
63 64 65 66 67 68 69 70 71
	$(Q)if [ -f .config ]; then					\
			cmp -s .tmp.config .config ||			\
			(mv -f .config .config.old.1;			\
			 mv -f .tmp.config .config;			\
			 $(obj)/conf --silentoldconfig $(Kconfig);	\
			 mv -f .config.old.1 .config.old)		\
	else								\
			mv -f .tmp.config .config;			\
			$(obj)/conf --silentoldconfig $(Kconfig);	\
72
	fi
73 74
	$(Q)rm -f .tmp.config

E
EGRY Gabor 已提交
75
# Create new linux.pot file
S
Sam Ravnborg 已提交
76 77
# Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
# The symlink is used to repair a deficiency in arch/um
78
update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
E
EGRY Gabor 已提交
79
	$(Q)echo "  GEN config"
80 81 82 83 84
	$(Q)xgettext --default-domain=linux                         \
	    --add-comments --keyword=_ --keyword=N_                 \
	    --from-code=UTF-8                                       \
	    --files-from=$(srctree)/scripts/kconfig/POTFILES.in     \
	    --directory=$(srctree) --directory=$(objtree)           \
S
Sam Ravnborg 已提交
85 86
	    --output $(obj)/config.pot
	$(Q)sed -i s/CHARSET/UTF-8/ $(obj)/config.pot
87
	$(Q)ln -fs Kconfig.x86 arch/um/Kconfig
88
	$(Q)(for i in `ls $(srctree)/arch/*/Kconfig`;    \
E
EGRY Gabor 已提交
89 90
	    do                                           \
		echo "  GEN $$i";                        \
91
		$(obj)/kxgettext $$i                     \
E
EGRY Gabor 已提交
92 93 94
		     >> $(obj)/config.pot;               \
	    done )
	$(Q)msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
S
Sam Ravnborg 已提交
95
	    --output $(obj)/linux.pot
96
	$(Q)rm -f $(srctree)/arch/um/Kconfig
S
Sam Ravnborg 已提交
97
	$(Q)rm -f $(obj)/config.pot
98

S
Sam Ravnborg 已提交
99
PHONY += allnoconfig allyesconfig allmodconfig alldefconfig randconfig
L
Linus Torvalds 已提交
100

S
Sam Ravnborg 已提交
101
allnoconfig allyesconfig allmodconfig alldefconfig randconfig: $(obj)/conf
S
Sam Ravnborg 已提交
102
	$< --$@ $(Kconfig)
L
Linus Torvalds 已提交
103

S
Sam Ravnborg 已提交
104
PHONY += listnewconfig oldnoconfig savedefconfig defconfig
L
Linus Torvalds 已提交
105

106
listnewconfig oldnoconfig: $(obj)/conf
S
Sam Ravnborg 已提交
107
	$< --$@ $(Kconfig)
L
Linus Torvalds 已提交
108

S
Sam Ravnborg 已提交
109 110 111
savedefconfig: $(obj)/conf
	$< --$@=defconfig $(Kconfig)

L
Linus Torvalds 已提交
112 113
defconfig: $(obj)/conf
ifeq ($(KBUILD_DEFCONFIG),)
S
Sam Ravnborg 已提交
114
	$< --defconfig $(Kconfig)
L
Linus Torvalds 已提交
115
else
116
	@echo "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
S
Sam Ravnborg 已提交
117
	$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
L
Linus Torvalds 已提交
118 119 120
endif

%_defconfig: $(obj)/conf
S
Sam Ravnborg 已提交
121
	$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
L
Linus Torvalds 已提交
122 123 124 125

# Help text used by make help
help:
	@echo  '  config	  - Update current config utilising a line-oriented program'
126
	@echo  '  nconfig         - Update current config utilising a ncurses menu based program'
L
Linus Torvalds 已提交
127 128 129 130
	@echo  '  menuconfig	  - Update current config utilising a menu based program'
	@echo  '  xconfig	  - Update current config utilising a QT based front-end'
	@echo  '  gconfig	  - Update current config utilising a GTK based front-end'
	@echo  '  oldconfig	  - Update current config utilising a provided .config as base'
131
	@echo  '  localmodconfig  - Update current config disabling modules not loaded'
132
	@echo  '  localyesconfig  - Update current config converting local mods to core'
133
	@echo  '  silentoldconfig - Same as oldconfig, but quietly, additionally update deps'
S
Sam Ravnborg 已提交
134
	@echo  '  defconfig	  - New config with default from ARCH supplied defconfig'
S
Sam Ravnborg 已提交
135
	@echo  '  savedefconfig   - Save current config as ./defconfig (minimal config)'
136
	@echo  '  allnoconfig	  - New config where all options are answered with no'
S
Sam Ravnborg 已提交
137 138 139 140
	@echo  '  allyesconfig	  - New config where all options are accepted with yes'
	@echo  '  allmodconfig	  - New config selecting modules when possible'
	@echo  '  alldefconfig    - New config with all symbols set to default'
	@echo  '  randconfig	  - New config with random answer to all options'
141
	@echo  '  listnewconfig   - List new options'
142
	@echo  '  oldnoconfig     - Same as silentoldconfig but set new symbols to n (unset)'
L
Linus Torvalds 已提交
143

144 145 146
# lxdialog stuff
check-lxdialog  := $(srctree)/$(src)/lxdialog/check-lxdialog.sh

147
# Use recursively expanded variables so we do not call gcc unless
148
# we really need to do so. (Do not call gcc as part of make mrproper)
149 150
HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags) \
                    -DLOCALE
151

L
Linus Torvalds 已提交
152 153 154
# ===========================================================================
# Shared Makefile for the various kconfig executables:
# conf:	  Used for defconfig, oldconfig and related targets
155 156
# nconf:  Used for the nconfig target.
#         Utilizes ncurses
157
# mconf:  Used for the menuconfig target
L
Linus Torvalds 已提交
158 159 160 161 162 163 164
#         Utilizes the lxdialog package
# qconf:  Used for the xconfig target
#         Based on QT which needs to be installed to compile it
# gconf:  Used for the gconfig target
#         Based on GTK which needs to be installed to compile it
# object files used by all kconfig flavours

165 166 167
lxdialog := lxdialog/checklist.o lxdialog/util.o lxdialog/inputbox.o
lxdialog += lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o

L
Linus Torvalds 已提交
168
conf-objs	:= conf.o  zconf.tab.o
169 170
mconf-objs     := mconf.o zconf.tab.o $(lxdialog)
nconf-objs     := nconf.o zconf.tab.o nconf.gui.o
171
kxgettext-objs	:= kxgettext.o zconf.tab.o
172 173
qconf-cxxobjs	:= qconf.o
qconf-objs	:= kconfig_load.o zconf.tab.o
174
gconf-objs	:= gconf.o kconfig_load.o zconf.tab.o
L
Linus Torvalds 已提交
175

176
hostprogs-y := conf
177

178 179 180 181
ifeq ($(MAKECMDGOALS),nconfig)
	hostprogs-y += nconf
endif

182 183 184 185
ifeq ($(MAKECMDGOALS),menuconfig)
	hostprogs-y += mconf
endif

186 187 188 189
ifeq ($(MAKECMDGOALS),update-po-config)
	hostprogs-y += kxgettext
endif

L
Linus Torvalds 已提交
190 191 192 193 194 195 196 197 198
ifeq ($(MAKECMDGOALS),xconfig)
	qconf-target := 1
endif
ifeq ($(MAKECMDGOALS),gconfig)
	gconf-target := 1
endif


ifeq ($(qconf-target),1)
199
	hostprogs-y += qconf
L
Linus Torvalds 已提交
200 201 202
endif

ifeq ($(gconf-target),1)
203
	hostprogs-y += gconf
L
Linus Torvalds 已提交
204 205
endif

P
Peter Foley 已提交
206 207
clean-files	:= lkc_defs.h qconf.moc .tmp_qtcheck .tmp_gtkcheck
clean-files	+= zconf.tab.c lex.zconf.c zconf.hash.c gconf.glade.h
208
clean-files     += mconf qconf gconf nconf
E
EGRY Gabor 已提交
209
clean-files     += config.pot linux.pot
L
Linus Torvalds 已提交
210

211 212 213 214
# Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
PHONY += $(obj)/dochecklxdialog
$(addprefix $(obj)/,$(lxdialog)): $(obj)/dochecklxdialog
$(obj)/dochecklxdialog:
215
	$(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTLOADLIBES_mconf)
216 217 218

always := dochecklxdialog

219 220
# Add environment specific flags
HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(srctree)/$(src)/check.sh $(HOSTCC) $(HOSTCFLAGS))
221

L
Linus Torvalds 已提交
222 223 224 225
# generated files seem to need this to find local include files
HOSTCFLAGS_lex.zconf.o	:= -I$(src)
HOSTCFLAGS_zconf.tab.o	:= -I$(src)

226 227
HOSTLOADLIBES_qconf	= $(KC_QT_LIBS) -ldl
HOSTCXXFLAGS_qconf.o	= $(KC_QT_CFLAGS) -D LKC_DIRECT_LINK
L
Linus Torvalds 已提交
228

229
HOSTLOADLIBES_gconf	= `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0` -ldl
230
HOSTCFLAGS_gconf.o	= `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
L
Linus Torvalds 已提交
231 232
                          -D LKC_DIRECT_LINK

233 234
HOSTLOADLIBES_mconf   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))

235
HOSTLOADLIBES_nconf	= -lmenu -lpanel -lncurses
L
Linus Torvalds 已提交
236 237 238
$(obj)/qconf.o: $(obj)/.tmp_qtcheck

ifeq ($(qconf-target),1)
239
$(obj)/.tmp_qtcheck: $(src)/Makefile
L
Linus Torvalds 已提交
240 241 242 243
-include $(obj)/.tmp_qtcheck

# QT needs some extra effort...
$(obj)/.tmp_qtcheck:
244
	@set -e; echo "  CHECK   qt"; dir=""; pkg=""; \
A
Alexander Stein 已提交
245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281
	if ! pkg-config --exists QtCore 2> /dev/null; then \
	    echo "* Unable to find the QT4 tool qmake. Trying to use QT3"; \
	    pkg-config --exists qt 2> /dev/null && pkg=qt; \
	    pkg-config --exists qt-mt 2> /dev/null && pkg=qt-mt; \
	    if [ -n "$$pkg" ]; then \
	      cflags="\$$(shell pkg-config $$pkg --cflags)"; \
	      libs="\$$(shell pkg-config $$pkg --libs)"; \
	      moc="\$$(shell pkg-config $$pkg --variable=prefix)/bin/moc"; \
	      dir="$$(pkg-config $$pkg --variable=prefix)"; \
	    else \
	      for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \
	        if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \
	      done; \
	      if [ -z "$$dir" ]; then \
	        echo "*"; \
	        echo "* Unable to find any QT installation. Please make sure that"; \
	        echo "* the QT4 or QT3 development package is correctly installed and"; \
	        echo "* either qmake can be found or install pkg-config or set"; \
	        echo "* the QTDIR environment variable to the correct location."; \
	        echo "*"; \
	        false; \
	      fi; \
	      libpath=$$dir/lib; lib=qt; osdir=""; \
	      $(HOSTCXX) -print-multi-os-directory > /dev/null 2>&1 && \
	        osdir=x$$($(HOSTCXX) -print-multi-os-directory); \
	      test -d $$libpath/$$osdir && libpath=$$libpath/$$osdir; \
	      test -f $$libpath/libqt-mt.so && lib=qt-mt; \
	      cflags="-I$$dir/include"; \
	      libs="-L$$libpath -Wl,-rpath,$$libpath -l$$lib"; \
	      moc="$$dir/bin/moc"; \
	    fi; \
	    if [ ! -x $$dir/bin/moc -a -x /usr/bin/moc ]; then \
	      echo "*"; \
	      echo "* Unable to find $$dir/bin/moc, using /usr/bin/moc instead."; \
	      echo "*"; \
	      moc="/usr/bin/moc"; \
	    fi; \
282
	else \
283 284
	  cflags="\$$(shell pkg-config QtCore QtGui Qt3Support --cflags)"; \
	  libs="\$$(shell pkg-config QtCore QtGui Qt3Support --libs)"; \
285 286
	  binpath="\$$(shell pkg-config QtCore --variable=prefix)"; \
	  moc="$$binpath/bin/moc"; \
287 288 289 290
	fi; \
	echo "KC_QT_CFLAGS=$$cflags" > $@; \
	echo "KC_QT_LIBS=$$libs" >> $@; \
	echo "KC_QT_MOC=$$moc" >> $@
L
Linus Torvalds 已提交
291 292 293 294 295 296 297 298 299
endif

$(obj)/gconf.o: $(obj)/.tmp_gtkcheck

ifeq ($(gconf-target),1)
-include $(obj)/.tmp_gtkcheck

# GTK needs some extra effort, too...
$(obj)/.tmp_gtkcheck:
300 301
	@if `pkg-config --exists gtk+-2.0 gmodule-2.0 libglade-2.0`; then		\
		if `pkg-config --atleast-version=2.0.0 gtk+-2.0`; then			\
L
Linus Torvalds 已提交
302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318
			touch $@;								\
		else									\
			echo "*"; 							\
			echo "* GTK+ is present but version >= 2.0.0 is required.";	\
			echo "*";							\
			false;								\
		fi									\
	else										\
		echo "*"; 								\
		echo "* Unable to find the GTK+ installation. Please make sure that"; 	\
		echo "* the GTK+ 2.0 development package is correctly installed..."; 	\
		echo "* You need gtk+-2.0, glib-2.0 and libglade-2.0."; 		\
		echo "*"; 								\
		false;									\
	fi
endif

319
$(obj)/zconf.tab.o: $(obj)/lex.zconf.c $(obj)/zconf.hash.c
L
Linus Torvalds 已提交
320 321 322 323 324 325 326 327

$(obj)/kconfig_load.o: $(obj)/lkc_defs.h

$(obj)/qconf.o: $(obj)/qconf.moc $(obj)/lkc_defs.h

$(obj)/gconf.o: $(obj)/lkc_defs.h

$(obj)/%.moc: $(src)/%.h
328
	$(KC_QT_MOC) -i $< -o $@
L
Linus Torvalds 已提交
329 330 331 332

$(obj)/lkc_defs.h: $(src)/lkc_proto.h
	sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'

333 334
# Extract gconf menu items for I18N support
$(obj)/gconf.glade.h: $(obj)/gconf.glade
335 336
	intltool-extract --type=gettext/glade --srcdir=$(srctree) \
	$(obj)/gconf.glade
L
Linus Torvalds 已提交
337 338

###
339
# The following requires flex/bison/gperf
L
Linus Torvalds 已提交
340 341 342 343 344 345
# By default we use the _shipped versions, uncomment the following line if
# you are modifying the flex/bison src.
# LKC_GENPARSER := 1

ifdef LKC_GENPARSER

346 347
$(obj)/zconf.tab.c: $(src)/zconf.y
$(obj)/lex.zconf.c: $(src)/zconf.l
348
$(obj)/zconf.hash.c: $(src)/zconf.gperf
L
Linus Torvalds 已提交
349 350

%.tab.c: %.y
351 352
	bison -l -b $* -p $(notdir $*) $<
	cp $@ $@_shipped
L
Linus Torvalds 已提交
353 354

lex.%.c: %.l
355 356
	flex -L -P$(notdir $*) -o$@ $<
	cp $@ $@_shipped
L
Linus Torvalds 已提交
357

358 359 360 361
%.hash.c: %.gperf
	gperf < $< > $@
	cp $@ $@_shipped

L
Linus Torvalds 已提交
362
endif