Makefile 10.5 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
localyesconfig localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
37
	$(Q)mkdir -p include/generated
38
	$(Q)perl $< --$@ $(srctree) $(Kconfig) > .tmp.config
39
	$(Q)if [ -f .config ]; then 					\
S
Sam Ravnborg 已提交
40 41 42 43 44 45 46 47
			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);	\
48
	fi
49 50
	$(Q)rm -f .tmp.config

E
EGRY Gabor 已提交
51
# Create new linux.pot file
S
Sam Ravnborg 已提交
52 53
# 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
54
update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
E
EGRY Gabor 已提交
55
	$(Q)echo "  GEN config"
56 57 58 59 60
	$(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 已提交
61 62
	    --output $(obj)/config.pot
	$(Q)sed -i s/CHARSET/UTF-8/ $(obj)/config.pot
63
	$(Q)ln -fs Kconfig.x86 arch/um/Kconfig
64
	$(Q)(for i in `ls $(srctree)/arch/*/Kconfig`;    \
E
EGRY Gabor 已提交
65 66
	    do                                           \
		echo "  GEN $$i";                        \
67
		$(obj)/kxgettext $$i                     \
E
EGRY Gabor 已提交
68 69 70
		     >> $(obj)/config.pot;               \
	    done )
	$(Q)msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
S
Sam Ravnborg 已提交
71
	    --output $(obj)/linux.pot
72
	$(Q)rm -f $(srctree)/arch/um/Kconfig
S
Sam Ravnborg 已提交
73
	$(Q)rm -f $(obj)/config.pot
74

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

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

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

82
listnewconfig oldnoconfig: $(obj)/conf
S
Sam Ravnborg 已提交
83
	$< --$@ $(Kconfig)
L
Linus Torvalds 已提交
84

S
Sam Ravnborg 已提交
85 86 87
savedefconfig: $(obj)/conf
	$< --$@=defconfig $(Kconfig)

L
Linus Torvalds 已提交
88 89
defconfig: $(obj)/conf
ifeq ($(KBUILD_DEFCONFIG),)
S
Sam Ravnborg 已提交
90
	$< --defconfig $(Kconfig)
L
Linus Torvalds 已提交
91
else
92
	@echo "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
S
Sam Ravnborg 已提交
93
	$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
L
Linus Torvalds 已提交
94 95 96
endif

%_defconfig: $(obj)/conf
S
Sam Ravnborg 已提交
97
	$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
L
Linus Torvalds 已提交
98 99 100 101

# Help text used by make help
help:
	@echo  '  config	  - Update current config utilising a line-oriented program'
102
	@echo  '  nconfig         - Update current config utilising a ncurses menu based program'
L
Linus Torvalds 已提交
103 104 105 106
	@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'
107
	@echo  '  localmodconfig  - Update current config disabling modules not loaded'
108
	@echo  '  localyesconfig  - Update current config converting local mods to core'
109
	@echo  '  silentoldconfig - Same as oldconfig, but quietly, additionally update deps'
S
Sam Ravnborg 已提交
110
	@echo  '  defconfig	  - New config with default from ARCH supplied defconfig'
S
Sam Ravnborg 已提交
111
	@echo  '  savedefconfig   - Save current config as ./defconfig (minimal config)'
112
	@echo  '  allnoconfig	  - New config where all options are answered with no'
S
Sam Ravnborg 已提交
113 114 115 116
	@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'
117
	@echo  '  listnewconfig   - List new options'
118
	@echo  '  oldnoconfig     - Same as silentoldconfig but set new symbols to n (unset)'
L
Linus Torvalds 已提交
119

120 121 122
# lxdialog stuff
check-lxdialog  := $(srctree)/$(src)/lxdialog/check-lxdialog.sh

123
# Use recursively expanded variables so we do not call gcc unless
124
# we really need to do so. (Do not call gcc as part of make mrproper)
125 126
HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags) \
                    -DLOCALE
127

L
Linus Torvalds 已提交
128 129 130
# ===========================================================================
# Shared Makefile for the various kconfig executables:
# conf:	  Used for defconfig, oldconfig and related targets
131 132
# nconf:  Used for the nconfig target.
#         Utilizes ncurses
133
# mconf:  Used for the menuconfig target
L
Linus Torvalds 已提交
134 135 136 137 138 139 140
#         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

141 142 143
lxdialog := lxdialog/checklist.o lxdialog/util.o lxdialog/inputbox.o
lxdialog += lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o

L
Linus Torvalds 已提交
144
conf-objs	:= conf.o  zconf.tab.o
145 146
mconf-objs     := mconf.o zconf.tab.o $(lxdialog)
nconf-objs     := nconf.o zconf.tab.o nconf.gui.o
147
kxgettext-objs	:= kxgettext.o zconf.tab.o
148
qconf-cxxobjs	:= qconf.o
149 150
qconf-objs	:= zconf.tab.o
gconf-objs	:= gconf.o zconf.tab.o
L
Linus Torvalds 已提交
151

152
hostprogs-y := conf
153

154 155 156 157
ifeq ($(MAKECMDGOALS),nconfig)
	hostprogs-y += nconf
endif

158 159 160 161
ifeq ($(MAKECMDGOALS),menuconfig)
	hostprogs-y += mconf
endif

162 163 164 165
ifeq ($(MAKECMDGOALS),update-po-config)
	hostprogs-y += kxgettext
endif

L
Linus Torvalds 已提交
166 167 168 169 170 171 172 173 174
ifeq ($(MAKECMDGOALS),xconfig)
	qconf-target := 1
endif
ifeq ($(MAKECMDGOALS),gconfig)
	gconf-target := 1
endif


ifeq ($(qconf-target),1)
175
	hostprogs-y += qconf
L
Linus Torvalds 已提交
176 177 178
endif

ifeq ($(gconf-target),1)
179
	hostprogs-y += gconf
L
Linus Torvalds 已提交
180 181
endif

182
clean-files	:= qconf.moc .tmp_qtcheck .tmp_gtkcheck
A
Arnaud Lacombe 已提交
183
clean-files	+= zconf.tab.c zconf.lex.c zconf.hash.c gconf.glade.h
184
clean-files     += mconf qconf gconf nconf
E
EGRY Gabor 已提交
185
clean-files     += config.pot linux.pot
L
Linus Torvalds 已提交
186

187 188 189 190
# Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
PHONY += $(obj)/dochecklxdialog
$(addprefix $(obj)/,$(lxdialog)): $(obj)/dochecklxdialog
$(obj)/dochecklxdialog:
191
	$(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTLOADLIBES_mconf)
192 193 194

always := dochecklxdialog

195 196
# Add environment specific flags
HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(srctree)/$(src)/check.sh $(HOSTCC) $(HOSTCFLAGS))
197

L
Linus Torvalds 已提交
198
# generated files seem to need this to find local include files
A
Arnaud Lacombe 已提交
199
HOSTCFLAGS_zconf.lex.o	:= -I$(src)
L
Linus Torvalds 已提交
200 201
HOSTCFLAGS_zconf.tab.o	:= -I$(src)

202 203 204
LEX_PREFIX_zconf	:= zconf
YACC_PREFIX_zconf	:= zconf

205 206
HOSTLOADLIBES_qconf	= $(KC_QT_LIBS)
HOSTCXXFLAGS_qconf.o	= $(KC_QT_CFLAGS)
L
Linus Torvalds 已提交
207

208
HOSTLOADLIBES_gconf	= `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0`
209
HOSTCFLAGS_gconf.o	= `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
210
                          -Wno-missing-prototypes
L
Linus Torvalds 已提交
211

212 213
HOSTLOADLIBES_mconf   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))

214
HOSTLOADLIBES_nconf	= -lmenu -lpanel -lncurses
L
Linus Torvalds 已提交
215 216 217
$(obj)/qconf.o: $(obj)/.tmp_qtcheck

ifeq ($(qconf-target),1)
218
$(obj)/.tmp_qtcheck: $(src)/Makefile
L
Linus Torvalds 已提交
219 220 221 222
-include $(obj)/.tmp_qtcheck

# QT needs some extra effort...
$(obj)/.tmp_qtcheck:
223
	@set -e; echo "  CHECK   qt"; dir=""; pkg=""; \
A
Alexander Stein 已提交
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
	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; \
261
	else \
262 263
	  cflags="\$$(shell pkg-config QtCore QtGui Qt3Support --cflags)"; \
	  libs="\$$(shell pkg-config QtCore QtGui Qt3Support --libs)"; \
264 265
	  binpath="\$$(shell pkg-config QtCore --variable=prefix)"; \
	  moc="$$binpath/bin/moc"; \
266 267 268 269
	fi; \
	echo "KC_QT_CFLAGS=$$cflags" > $@; \
	echo "KC_QT_LIBS=$$libs" >> $@; \
	echo "KC_QT_MOC=$$moc" >> $@
L
Linus Torvalds 已提交
270 271 272 273 274 275 276 277 278
endif

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

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

# GTK needs some extra effort, too...
$(obj)/.tmp_gtkcheck:
279 280
	@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 已提交
281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297
			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

A
Arnaud Lacombe 已提交
298
$(obj)/zconf.tab.o: $(obj)/zconf.lex.c $(obj)/zconf.hash.c
L
Linus Torvalds 已提交
299

300
$(obj)/qconf.o: $(obj)/qconf.moc
L
Linus Torvalds 已提交
301 302

$(obj)/%.moc: $(src)/%.h
303
	$(KC_QT_MOC) -i $< -o $@
L
Linus Torvalds 已提交
304

305 306
# Extract gconf menu items for I18N support
$(obj)/gconf.glade.h: $(obj)/gconf.glade
P
Peter Foley 已提交
307
	$(Q)intltool-extract --type=gettext/glade --srcdir=$(srctree) \
308
	$(obj)/gconf.glade
L
Linus Torvalds 已提交
309