Makefile 11.0 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
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

51
localyesconfig: $(obj)/streamline_config.pl $(obj)/conf
52
	$(Q)mkdir -p include/generated
53
	$(Q)perl $< --$@ $(srctree) $(Kconfig) > .tmp.config
54
	$(Q)sed -i s/=m/=y/ .tmp.config
S
Sam Ravnborg 已提交
55 56 57 58 59 60 61 62 63
	$(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);	\
64
	fi
65 66
	$(Q)rm -f .tmp.config

E
EGRY Gabor 已提交
67
# Create new linux.pot file
S
Sam Ravnborg 已提交
68 69
# 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
70
update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
E
EGRY Gabor 已提交
71
	$(Q)echo "  GEN config"
72 73 74 75 76
	$(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 已提交
77 78
	    --output $(obj)/config.pot
	$(Q)sed -i s/CHARSET/UTF-8/ $(obj)/config.pot
79
	$(Q)ln -fs Kconfig.x86 arch/um/Kconfig
80
	$(Q)(for i in `ls $(srctree)/arch/*/Kconfig`;    \
E
EGRY Gabor 已提交
81 82
	    do                                           \
		echo "  GEN $$i";                        \
83
		$(obj)/kxgettext $$i                     \
E
EGRY Gabor 已提交
84 85 86
		     >> $(obj)/config.pot;               \
	    done )
	$(Q)msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
S
Sam Ravnborg 已提交
87
	    --output $(obj)/linux.pot
88
	$(Q)rm -f $(srctree)/arch/um/Kconfig
S
Sam Ravnborg 已提交
89
	$(Q)rm -f $(obj)/config.pot
90

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

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

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

98
listnewconfig oldnoconfig: $(obj)/conf
S
Sam Ravnborg 已提交
99
	$< --$@ $(Kconfig)
L
Linus Torvalds 已提交
100

S
Sam Ravnborg 已提交
101 102 103
savedefconfig: $(obj)/conf
	$< --$@=defconfig $(Kconfig)

L
Linus Torvalds 已提交
104 105
defconfig: $(obj)/conf
ifeq ($(KBUILD_DEFCONFIG),)
S
Sam Ravnborg 已提交
106
	$< --defconfig $(Kconfig)
L
Linus Torvalds 已提交
107
else
108
	@echo "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
S
Sam Ravnborg 已提交
109
	$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
L
Linus Torvalds 已提交
110 111 112
endif

%_defconfig: $(obj)/conf
S
Sam Ravnborg 已提交
113
	$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
L
Linus Torvalds 已提交
114 115 116 117

# Help text used by make help
help:
	@echo  '  config	  - Update current config utilising a line-oriented program'
118
	@echo  '  nconfig         - Update current config utilising a ncurses menu based program'
L
Linus Torvalds 已提交
119 120 121 122
	@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'
123
	@echo  '  localmodconfig  - Update current config disabling modules not loaded'
124
	@echo  '  localyesconfig  - Update current config converting local mods to core'
125
	@echo  '  silentoldconfig - Same as oldconfig, but quietly, additionally update deps'
S
Sam Ravnborg 已提交
126
	@echo  '  defconfig	  - New config with default from ARCH supplied defconfig'
S
Sam Ravnborg 已提交
127
	@echo  '  savedefconfig   - Save current config as ./defconfig (minimal config)'
128
	@echo  '  allnoconfig	  - New config where all options are answered with no'
S
Sam Ravnborg 已提交
129 130 131 132
	@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'
133
	@echo  '  listnewconfig   - List new options'
134
	@echo  '  oldnoconfig     - Same as silentoldconfig but set new symbols to n (unset)'
L
Linus Torvalds 已提交
135

136 137 138
# lxdialog stuff
check-lxdialog  := $(srctree)/$(src)/lxdialog/check-lxdialog.sh

139
# Use recursively expanded variables so we do not call gcc unless
140
# we really need to do so. (Do not call gcc as part of make mrproper)
141 142
HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags) \
                    -DLOCALE
143

L
Linus Torvalds 已提交
144 145 146
# ===========================================================================
# Shared Makefile for the various kconfig executables:
# conf:	  Used for defconfig, oldconfig and related targets
147 148
# nconf:  Used for the nconfig target.
#         Utilizes ncurses
149
# mconf:  Used for the menuconfig target
L
Linus Torvalds 已提交
150 151 152 153 154 155 156
#         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

157 158 159
lxdialog := lxdialog/checklist.o lxdialog/util.o lxdialog/inputbox.o
lxdialog += lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o

L
Linus Torvalds 已提交
160
conf-objs	:= conf.o  zconf.tab.o
161 162
mconf-objs     := mconf.o zconf.tab.o $(lxdialog)
nconf-objs     := nconf.o zconf.tab.o nconf.gui.o
163
kxgettext-objs	:= kxgettext.o zconf.tab.o
164
qconf-cxxobjs	:= qconf.o
165 166
qconf-objs	:= zconf.tab.o
gconf-objs	:= gconf.o zconf.tab.o
L
Linus Torvalds 已提交
167

168
hostprogs-y := conf
169

170 171 172 173
ifeq ($(MAKECMDGOALS),nconfig)
	hostprogs-y += nconf
endif

174 175 176 177
ifeq ($(MAKECMDGOALS),menuconfig)
	hostprogs-y += mconf
endif

178 179 180 181
ifeq ($(MAKECMDGOALS),update-po-config)
	hostprogs-y += kxgettext
endif

L
Linus Torvalds 已提交
182 183 184 185 186 187 188 189 190
ifeq ($(MAKECMDGOALS),xconfig)
	qconf-target := 1
endif
ifeq ($(MAKECMDGOALS),gconfig)
	gconf-target := 1
endif


ifeq ($(qconf-target),1)
191
	hostprogs-y += qconf
L
Linus Torvalds 已提交
192 193 194
endif

ifeq ($(gconf-target),1)
195
	hostprogs-y += gconf
L
Linus Torvalds 已提交
196 197
endif

198
clean-files	:= qconf.moc .tmp_qtcheck .tmp_gtkcheck
A
Arnaud Lacombe 已提交
199
clean-files	+= zconf.tab.c zconf.lex.c zconf.hash.c gconf.glade.h
200
clean-files     += mconf qconf gconf nconf
E
EGRY Gabor 已提交
201
clean-files     += config.pot linux.pot
L
Linus Torvalds 已提交
202

203 204 205 206
# Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
PHONY += $(obj)/dochecklxdialog
$(addprefix $(obj)/,$(lxdialog)): $(obj)/dochecklxdialog
$(obj)/dochecklxdialog:
207
	$(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTLOADLIBES_mconf)
208 209 210

always := dochecklxdialog

211 212
# Add environment specific flags
HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(srctree)/$(src)/check.sh $(HOSTCC) $(HOSTCFLAGS))
213

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

218 219 220
LEX_PREFIX_zconf	:= zconf
YACC_PREFIX_zconf	:= zconf

221 222
HOSTLOADLIBES_qconf	= $(KC_QT_LIBS)
HOSTCXXFLAGS_qconf.o	= $(KC_QT_CFLAGS)
L
Linus Torvalds 已提交
223

224
HOSTLOADLIBES_gconf	= `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0`
225
HOSTCFLAGS_gconf.o	= `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
226
                          -Wno-missing-prototypes
L
Linus Torvalds 已提交
227

228 229
HOSTLOADLIBES_mconf   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))

230
HOSTLOADLIBES_nconf	= -lmenu -lpanel -lncurses
L
Linus Torvalds 已提交
231 232 233
$(obj)/qconf.o: $(obj)/.tmp_qtcheck

ifeq ($(qconf-target),1)
234
$(obj)/.tmp_qtcheck: $(src)/Makefile
L
Linus Torvalds 已提交
235 236 237 238
-include $(obj)/.tmp_qtcheck

# QT needs some extra effort...
$(obj)/.tmp_qtcheck:
239
	@set -e; echo "  CHECK   qt"; dir=""; pkg=""; \
A
Alexander Stein 已提交
240 241 242 243 244 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
	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; \
277
	else \
278 279
	  cflags="\$$(shell pkg-config QtCore QtGui Qt3Support --cflags)"; \
	  libs="\$$(shell pkg-config QtCore QtGui Qt3Support --libs)"; \
280 281
	  binpath="\$$(shell pkg-config QtCore --variable=prefix)"; \
	  moc="$$binpath/bin/moc"; \
282 283 284 285
	fi; \
	echo "KC_QT_CFLAGS=$$cflags" > $@; \
	echo "KC_QT_LIBS=$$libs" >> $@; \
	echo "KC_QT_MOC=$$moc" >> $@
L
Linus Torvalds 已提交
286 287 288 289 290 291 292 293 294
endif

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

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

# GTK needs some extra effort, too...
$(obj)/.tmp_gtkcheck:
295 296
	@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 已提交
297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313
			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 已提交
314
$(obj)/zconf.tab.o: $(obj)/zconf.lex.c $(obj)/zconf.hash.c
L
Linus Torvalds 已提交
315

316
$(obj)/qconf.o: $(obj)/qconf.moc
L
Linus Torvalds 已提交
317 318

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

321 322
# Extract gconf menu items for I18N support
$(obj)/gconf.glade.h: $(obj)/gconf.glade
P
Peter Foley 已提交
323
	$(Q)intltool-extract --type=gettext/glade --srcdir=$(srctree) \
324
	$(obj)/gconf.glade
L
Linus Torvalds 已提交
325