Makefile 19.9 KB
Newer Older
Linus Torvalds's avatar
Linus Torvalds committed
1
VERSION = 2
Linus Torvalds's avatar
Linus Torvalds committed
2
PATCHLEVEL = 5
Linus Torvalds's avatar
Linus Torvalds committed
3
SUBLEVEL = 20
Linus Torvalds's avatar
Linus Torvalds committed
4
EXTRAVERSION =
Linus Torvalds's avatar
Linus Torvalds committed
5

6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
# We are using a recursive build, so we need to do a little thinking
# to get the ordering right.
#
# Most importantly: sub-Makefiles should only ever modify files in
# their own directory. If in some directory we have a dependency on
# a file in another dir (which doesn't happen often, but it's of
# unavoidable when linking the built-in.o targets which finally
# turn into vmlinux), we will call a sub make in that other dir, and
# after that we are sure that everything which is in that other dir
# is now up to date.
#
# The only cases where we need to modify files which have global
# effects are thus separated out and done before the recursive
# descending is started. They are now explicitly listed as the
# prepare rule.

Linus Torvalds's avatar
Linus Torvalds committed
22 23 24
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)

ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
25
KERNELPATH=kernel-$(shell echo $(KERNELRELEASE) | sed -e "s/-//g")
Linus Torvalds's avatar
Linus Torvalds committed
26 27 28 29

CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
	  else if [ -x /bin/bash ]; then echo /bin/bash; \
	  else echo sh; fi ; fi)
Kai Germaschewski's avatar
Kai Germaschewski committed
30
TOPDIR	:= $(CURDIR)
Linus Torvalds's avatar
Linus Torvalds committed
31 32 33 34 35 36 37 38 39

HPATH   	= $(TOPDIR)/include
FINDHPATH	= $(HPATH)/asm $(HPATH)/linux $(HPATH)/scsi $(HPATH)/net

HOSTCC  	= gcc
HOSTCFLAGS	= -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer

CROSS_COMPILE 	=

40 41 42 43
# 	That's our default target when none is given on the command line

all:	vmlinux

44 45 46 47 48
#	Print entire command lines instead of short version
#	For now, leave the default

#KBUILD_VERBOSE := 1

49 50 51 52 53 54 55
# 	Decide whether to build built-in, modular, or both

KBUILD_MODULES :=
KBUILD_BUILTIN := 1

export KBUILD_MODULES KBUILD_BUILTIN

56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
# Beautify output
# ---------------------------------------------------------------------------
#
# Normally, we echo the whole command before executing it. By making
# that echo $($(quiet)$(cmd)), we now have the possibility to set
# $(quiet) to choose other forms of output instead, e.g.
#
#         quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
#         cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<
#
# If $(quiet) is empty, the whole command will be printed.
# If it is set to "quiet_", only the short version will be printed. 
# If it is set to "silent_", nothing wil be printed at all, since
# the variable $(silent_cmd_cc_o_c) doesn't exist.

#	If the user wants quiet mode, echo short versions of the commands 
#	only and suppress the 'Entering/Leaving directory' messages

ifneq ($(KBUILD_VERBOSE),1)
  quiet=quiet_
  MAKEFLAGS += --no-print-directory
endif

#	If the user is running make -s (silent mode), suppress echoing of
#	commands

ifneq ($(findstring s,$(MAKEFLAGS)),)
  quiet=silent_
endif

export quiet

Linus Torvalds's avatar
Linus Torvalds committed
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
#
# Include the make variables (CC, etc...)
#

AS		= $(CROSS_COMPILE)as
LD		= $(CROSS_COMPILE)ld
CC		= $(CROSS_COMPILE)gcc
CPP		= $(CC) -E
AR		= $(CROSS_COMPILE)ar
NM		= $(CROSS_COMPILE)nm
STRIP		= $(CROSS_COMPILE)strip
OBJCOPY		= $(CROSS_COMPILE)objcopy
OBJDUMP		= $(CROSS_COMPILE)objdump
MAKEFILES	= $(TOPDIR)/.config
GENKSYMS	= /sbin/genksyms
DEPMOD		= /sbin/depmod
Kai Germaschewski's avatar
Kai Germaschewski committed
104
PERL		= perl
Linus Torvalds's avatar
Linus Torvalds committed
105
MODFLAGS	= -DMODULE
106 107
CFLAGS_MODULE   = $(MODFLAGS)
AFLAGS_MODULE   =
Linus Torvalds's avatar
Linus Torvalds committed
108
CFLAGS_KERNEL	=
109
AFLAGS_KERNEL	=
Kai Germaschewski's avatar
Kai Germaschewski committed
110
EXPORT_FLAGS    =
Linus Torvalds's avatar
Linus Torvalds committed
111 112 113

export	VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION KERNELRELEASE ARCH \
	CONFIG_SHELL TOPDIR HPATH HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \
114
	CPP AR NM STRIP OBJCOPY OBJDUMP MAKE MAKEFILES GENKSYMS PERL
Linus Torvalds's avatar
Linus Torvalds committed
115

Kai Germaschewski's avatar
Kai Germaschewski committed
116 117 118 119
export CPPFLAGS EXPORT_FLAGS
export CFLAGS CFLAGS_KERNEL CFLAGS_MODULE 
export AFLAGS AFLAGS_KERNEL AFLAGS_MODULE

120 121
noconfig_targets := oldconfig xconfig menuconfig config clean mrproper \
		    distclean
Linus Torvalds's avatar
Linus Torvalds committed
122

123 124 125 126
ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),)

# Here goes the main Makefile
# ===========================================================================
Linus Torvalds's avatar
Linus Torvalds committed
127
#
128 129 130 131
# If the user gave a *config target, it'll be handled in another
# section below, since in this case we cannot include .config
# Same goes for other targets like clean/mrproper etc, which
# don't need .config, either
Linus Torvalds's avatar
Linus Torvalds committed
132

133 134 135 136 137 138 139 140 141 142 143 144
#	In this section, we need .config

-include .config

#	If .config doesn't exist - tough luck

.config:
	@echo '***'
	@echo '*** You have not yet configured your kernel!'
	@echo '*** Please run "make xconfig/menuconfig/config/oldconfig"'
	@echo '***'
	@exit 1
Linus Torvalds's avatar
Linus Torvalds committed
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167

#
# INSTALL_PATH specifies where to place the updated kernel and system map
# images.  Uncomment if you want to place them anywhere other than root.
#

#export	INSTALL_PATH=/boot

#
# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
# relocations required by build roots.  This is not defined in the
# makefile but the arguement can be passed to make if needed.
#

MODLIB	:= $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
export MODLIB

#
# standard CFLAGS
#

CPPFLAGS := -D__KERNEL__ -I$(HPATH)

Linus Torvalds's avatar
Linus Torvalds committed
168
CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -O2 \
Linus Torvalds's avatar
Linus Torvalds committed
169
	  -fomit-frame-pointer -fno-strict-aliasing -fno-common
Linus Torvalds's avatar
Linus Torvalds committed
170 171
AFLAGS := -D__ASSEMBLY__ $(CPPFLAGS)

Kai Germaschewski's avatar
Kai Germaschewski committed
172 173 174 175
ifdef CONFIG_MODULES
EXPORT_FLAGS := -DEXPORT_SYMTAB
endif

176
INIT		=init/init.o
Linus Torvalds's avatar
Linus Torvalds committed
177 178
CORE_FILES	=kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o
NETWORKS	=net/network.o
Linus Torvalds's avatar
Linus Torvalds committed
179

Linus Torvalds's avatar
Linus Torvalds committed
180
LIBS		=$(TOPDIR)/lib/lib.a
181
SUBDIRS		=init kernel lib drivers mm fs net ipc sound
Linus Torvalds's avatar
Linus Torvalds committed
182

183
DRIVERS-y 	= drivers/built-in.o
184
DRIVERS-$(CONFIG_SOUND) += sound/sound.o
Linus Torvalds's avatar
Linus Torvalds committed
185

Linus Torvalds's avatar
Linus Torvalds committed
186
DRIVERS := $(DRIVERS-y)
Linus Torvalds's avatar
Linus Torvalds committed
187 188 189 190 191 192


include arch/$(ARCH)/Makefile

export	NETWORKS DRIVERS LIBS HEAD LDFLAGS LINKFLAGS MAKEBOOT ASFLAGS

193
# boot target
194
# ---------------------------------------------------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
195 196

boot: vmlinux
197
	@$(MAKE) -C arch/$(ARCH)/boot
Linus Torvalds's avatar
Linus Torvalds committed
198

199 200 201 202 203 204 205 206 207 208 209 210
# Build vmlinux
# ---------------------------------------------------------------------------

#	This is a bit tricky: If we need to relink vmlinux, we want
#	the version number incremented, which means recompile init/version.o
#	and relink init/init.o. However, we cannot do this during the
#       normal descending-into-subdirs phase, since at that time
#       we cannot yet know if we will need to relink vmlinux.
#	So we descend into init/ inside the rule for vmlinux again.

vmlinux-objs := $(HEAD) $(INIT) $(CORE_FILES) $(LIBS) $(DRIVERS) $(NETWORKS)

211
quiet_cmd_link_vmlinux = LD     $@
212
cmd_link_vmlinux = $(LD) $(LINKFLAGS) $(HEAD) $(INIT) \
Linus Torvalds's avatar
Linus Torvalds committed
213 214
		--start-group \
		$(CORE_FILES) \
Linus Torvalds's avatar
Linus Torvalds committed
215
		$(LIBS) \
Linus Torvalds's avatar
Linus Torvalds committed
216 217 218 219
		$(DRIVERS) \
		$(NETWORKS) \
		--end-group \
		-o vmlinux
220 221 222 223 224 225 226 227

#	set -e makes the rule exit immediately on error

define rule_link_vmlinux
	set -e
	echo Generating build number
	. scripts/mkversion > .tmpversion
	mv -f .tmpversion .version
228
	$(MAKE) -C init
229
	$(call cmd,cmd_link_vmlinux)
230 231
	$(cmd_link_vmlinux)
	echo 'cmd_$@ := $(cmd_link_vmlinux)' > $(@D)/.$(@F).cmd
Linus Torvalds's avatar
Linus Torvalds committed
232
	$(NM) vmlinux | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map
233 234
endef

235
vmlinux: $(vmlinux-objs) FORCE
236 237
	$(call if_changed_rule,link_vmlinux)

238 239
#	The actual objects are generated when descending, 
#	make sure no implicit rule kicks in
240

241
$(sort $(vmlinux-objs)): $(SUBDIRS) ;
Linus Torvalds's avatar
Linus Torvalds committed
242

243 244
# 	Handle descending into subdirectories listed in $(SUBDIRS)

245
.PHONY: $(SUBDIRS)
246
$(SUBDIRS): prepare
247
	@$(MAKE) -C $@
248

249 250 251
#	Things we need done before we even start the actual build.
#	The dependency on .hdepend will in turn take care of
#	include/asm, include/linux/version etc.
252 253

.PHONY: prepare
254
prepare: .hdepend include/config/MARKER
255

256 257 258 259 260 261 262 263 264
# Single targets
# ---------------------------------------------------------------------------

%.s: %.c FORCE
	@$(MAKE) -C $(@D) $(@F)
%.i: %.c FORCE
	@$(MAKE) -C $(@D) $(@F)
%.o: %.c FORCE
	@$(MAKE) -C $(@D) $(@F)
265 266
%.lst: %.c FORCE
	@$(MAKE) -C $(@D) $(@F)
267 268 269 270 271
%.s: %.S FORCE
	@$(MAKE) -C $(@D) $(@F)
%.o: %.S FORCE
	@$(MAKE) -C $(@D) $(@F)

272 273 274
# 	FIXME: The asm symlink changes when $(ARCH) changes. That's
#	hard to detect, but I suppose "make mrproper" is a good idea
#	before switching between archs anyway.
275

276 277 278
include/asm:
	@echo 'Making asm->asm-$(ARCH) symlink'
	@ln -s asm-$(ARCH) $@
279

280
# 	Split autoconf.h into include/linux/config/*
281

Linus Torvalds's avatar
Linus Torvalds committed
282 283 284 285
include/config/MARKER: scripts/split-include include/linux/autoconf.h
	scripts/split-include include/linux/autoconf.h include/config
	@ touch include/config/MARKER

286 287 288 289 290 291 292 293 294 295
# 	if .config is newer than include/linux/autoconf.h, someone tinkered
# 	with it and forgot to run make oldconfig

include/linux/autoconf.h: .config
	@echo '***'
	@echo '*** You changed .config w/o running make *config?'
	@echo '*** Please run "make oldconfig"'
	@echo '***'
	@exit 1

296
# Generate some files
297
# ---------------------------------------------------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
298

299 300
#	version.h changes when $(KERNELRELEASE) etc change, as defined in
#	this Makefile
Linus Torvalds's avatar
Linus Torvalds committed
301

302
include/linux/version.h: Makefile
303
	@scripts/mkversion_h $@ $(KERNELRELEASE) $(VERSION) $(PATCHLEVEL) $(SUBLEVEL)
Linus Torvalds's avatar
Linus Torvalds committed
304

305 306
# Helpers built in scripts/
# ---------------------------------------------------------------------------
307

308
scripts/fixdep scripts/split-include : scripts ;
309 310 311

.PHONY: scripts
scripts:
312 313
	@$(MAKE) -C scripts

314
# Generate module versions
315 316
# ---------------------------------------------------------------------------

317 318 319 320 321
# 	The targets are still named depend / dep for traditional
#	reasons, but the only thing we do here is generating
#	the module version checksums.
#	FIXME: For now, we are also calling "archdep" from here,
#	which should be replaced by a more sensible solution.
322

323 324 325
.PHONY: depend dep $(patsubst %,_sfdep_%,$(SUBDIRS))

depend dep: .hdepend
Linus Torvalds's avatar
Linus Torvalds committed
326

327 328 329 330 331
ifdef CONFIG_MODVERSIONS

#	Before descending for the actual build, we need module
#	versions done. - Still using the old, illogical name
#	.hdepend
Linus Torvalds's avatar
Linus Torvalds committed
332

333 334 335 336
#	.hdepend only indicates if we have generated module
#	version checksums before now. For now, if they've
#	been generated once, no rechecking will be done unless
#	explicitly asked for using "make dep".
337

338
.hdepend: scripts/fixdep include/linux/version.h include/asm \
339
	  $(if $(filter dep depend,$(MAKECMDGOALS)),FORCE)
340
	touch $@
341
	@$(MAKE) $(patsubst %,_sfdep_%,$(SUBDIRS))
342
	@$(MAKE) include/linux/modversions.h
343
	@$(MAKE) archdep
344

345 346 347
$(patsubst %,_sfdep_%,$(SUBDIRS)): FORCE
	@$(MAKE) -C $(patsubst _sfdep_%, %, $@) fastdep

348 349 350
# 	Update modversions.h, but only if it would change.

include/linux/modversions.h: FORCE
351 352 353
	@(echo "#ifndef _LINUX_MODVERSIONS_H";\
	  echo "#define _LINUX_MODVERSIONS_H"; \
	  echo "#include <linux/modsetver.h>"; \
354 355 356
	  cd $(TOPDIR)/include/linux; \
	  for f in `find modules -name \*.ver`; do \
	    echo "#include <linux/$${f}>"; \
357 358
	  done; \
	  echo "#endif"; \
359 360 361 362
	) > $@.tmp
	@if [ -r $@ ] && cmp -s $@ $@.tmp; then \
		echo $@ was not updated; \
		rm -f $@.tmp; \
363
	else \
364 365
		echo $@ was updated; \
		mv -f $@.tmp $@; \
366 367
	fi

368 369 370 371 372 373 374 375 376
else # !CONFIG_MODVERSIONS

.hdepend: include/linux/version.h include/asm \
	  $(if $(filter dep depend,$(MAKECMDGOALS)),FORCE)
	touch $@
	@$(MAKE) archdep

endif # CONFIG_MODVERSIONS

377 378
# ---------------------------------------------------------------------------
# Modules
Linus Torvalds's avatar
Linus Torvalds committed
379 380

ifdef CONFIG_MODULES
381 382 383

#	Build modules

Linus Torvalds's avatar
Linus Torvalds committed
384
ifdef CONFIG_MODVERSIONS
385
MODFLAGS += -include $(HPATH)/linux/modversions.h
Linus Torvalds's avatar
Linus Torvalds committed
386 387 388
endif

.PHONY: modules
389 390
modules:
	@$(MAKE) KBUILD_BUILTIN= KBUILD_MODULES=1 $(SUBDIRS)
Linus Torvalds's avatar
Linus Torvalds committed
391

392 393
#	Install modules

Linus Torvalds's avatar
Linus Torvalds committed
394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414
.PHONY: modules_install
modules_install: _modinst_ $(patsubst %, _modinst_%, $(SUBDIRS)) _modinst_post

.PHONY: _modinst_
_modinst_:
	@rm -rf $(MODLIB)/kernel
	@rm -f $(MODLIB)/build
	@mkdir -p $(MODLIB)/kernel
	@ln -s $(TOPDIR) $(MODLIB)/build

# If System.map exists, run depmod.  This deliberately does not have a
# dependency on System.map since that would run the dependency tree on
# vmlinux.  This depmod is only for convenience to give the initial
# boot a modules.dep even before / is mounted read-write.  However the
# boot script depmod is the master version.
ifeq "$(strip $(INSTALL_MOD_PATH))" ""
depmod_opts	:=
else
depmod_opts	:= -b $(INSTALL_MOD_PATH) -r
endif
.PHONY: _modinst_post
415
_modinst_post:
Linus Torvalds's avatar
Linus Torvalds committed
416 417 418 419
	if [ -r System.map ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) $(KERNELRELEASE); fi

.PHONY: $(patsubst %, _modinst_%, $(SUBDIRS))
$(patsubst %, _modinst_%, $(SUBDIRS)) :
420
	@$(MAKE) -C $(patsubst _modinst_%, %, $@) modules_install
Linus Torvalds's avatar
Linus Torvalds committed
421

422 423 424 425
else # CONFIG_MODULES

# ---------------------------------------------------------------------------
# Modules not configured
Linus Torvalds's avatar
Linus Torvalds committed
426

427
modules modules_install: FORCE
Linus Torvalds's avatar
Linus Torvalds committed
428 429 430 431 432 433 434
	@echo
	@echo "The present kernel configuration has modules disabled."
	@echo "Type 'make config' and enable loadable module support."
	@echo "Then build a kernel with module support enabled."
	@echo
	@exit 1

435
endif # CONFIG_MODULES
Linus Torvalds's avatar
Linus Torvalds committed
436

437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454
# Scripts to check various things for consistency
# ---------------------------------------------------------------------------

checkconfig:
	find * -name '*.[hcS]' -type f -print | sort | xargs $(PERL) -w scripts/checkconfig.pl

checkhelp:
	find * -name [cC]onfig.in -print | sort | xargs $(PERL) -w scripts/checkhelp.pl

checkincludes:
	find * -name '*.[hcS]' -type f -print | sort | xargs $(PERL) -w scripts/checkincludes.pl

# Generate tags for editors
# ---------------------------------------------------------------------------

TAGS: FORCE
	{ find include/asm-${ARCH} -name '*.h' -print ; \
	find include -type d \( -name "asm-*" -o -name config \) -prune -o -name '*.h' -print ; \
455
	find $(SUBDIRS) init arch/${ARCH} -name '*.[chS]' ; } | grep -v SCCS | etags -
456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497

# 	Exuberant ctags works better with -I
tags: FORCE
	CTAGSF=`ctags --version | grep -i exuberant >/dev/null && echo "-I __initdata,__exitdata,EXPORT_SYMBOL,EXPORT_SYMBOL_NOVERS"`; \
	ctags $$CTAGSF `find include/asm-$(ARCH) -name '*.h'` && \
	find include -type d \( -name "asm-*" -o -name config \) -prune -o -name '*.h' -print | xargs ctags $$CTAGSF -a && \
	find $(SUBDIRS) init -name '*.[ch]' | xargs ctags $$CTAGSF -a

# Assorted miscellaneous targets
# ---------------------------------------------------------------------------

# Documentation targets

sgmldocs psdocs pdfdocs htmldocs:
	@$(MAKE) -C Documentation/DocBook $@


# RPM target
#
#	If you do a make spec before packing the tarball you can rpm -ta it

spec:
	. scripts/mkspec >kernel.spec

#	Build a tar ball, generate an rpm from it and pack the result
#	There arw two bits of magic here
#	1) The use of /. to avoid tar packing just the symlink
#	2) Removing the .dep files as they have source paths in them that
#	   will become invalid

rpm:	clean spec
	find . \( -size 0 -o -name .depend -o -name .hdepend \) -type f -print | xargs rm -f
	set -e; \
	cd $(TOPDIR)/.. ; \
	ln -sf $(TOPDIR) $(KERNELPATH) ; \
	tar -cvz --exclude CVS -f $(KERNELPATH).tar.gz $(KERNELPATH)/. ; \
	rm $(KERNELPATH) ; \
	cd $(TOPDIR) ; \
	. scripts/mkversion > .version ; \
	rpm -ta $(TOPDIR)/../$(KERNELPATH).tar.gz ; \
	rm $(TOPDIR)/../$(KERNELPATH).tar.gz

498 499
else # ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),)

500 501
# Targets which don't need .config
# ===========================================================================
502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521
#
# These targets basically have their own Makefile - not quite, but at
# least its own exclusive section in the same Makefile. The reason for
# this is the following:
# To know the configuration, the main Makefile has to include
# .config. That's a obviously a problem when .config doesn't exist
# yet, but that could be kludged around with only including it if it
# exists.
# However, the larger problem is: If you run make *config, make will
# include the old .config, then execute your *config. It will then
# notice that a piece it included (.config) did change and restart from
# scratch. Which will cause execution of *config again. You get the
# picture.
# If we don't explicitly let the Makefile know that .config is changed
# by *config (the old way), it won't reread .config after *config,
# thus working with possibly stale values - we don't that either.
#
# So we divide things: This part here is for making *config targets,
# and other targets which should work when no .config exists yet.
# The main part above takes care of the rest after a .config exists.
522 523 524 525

# Kernel configuration
# ---------------------------------------------------------------------------

526 527
.PHONY: oldconfig xconfig menuconfig config \
	make_with_config
528 529 530 531 532 533 534 535 536 537 538 539 540 541 542

oldconfig:
	$(CONFIG_SHELL) scripts/Configure -d arch/$(ARCH)/config.in

xconfig:
	@$(MAKE) -C scripts kconfig.tk
	wish -f scripts/kconfig.tk

menuconfig:
	@$(MAKE) -C scripts/lxdialog all
	$(CONFIG_SHELL) scripts/Menuconfig arch/$(ARCH)/config.in

config:
	$(CONFIG_SHELL) scripts/Configure arch/$(ARCH)/config.in

543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558
#	How we generate .config depends on which *config the
#	user chose when calling make

.config: $(filter oldconfig xconfig menuconfig config,$(MAKECMDGOALS)) ;

#	If the user gave commands from both the need / need not
#	.config sections, we need to call make again after
#	.config is generated, now to take care of the remaining
#	targets we know nothing about in this section

remaining_targets := $(filter-out $(noconfig_targets),$(MAKECMDGOALS))

$(remaining_targets) : make_with_config

make_with_config: .config
	@$(MAKE) $(remaining_targets)
559

560 561 562 563 564 565 566 567 568 569 570 571 572 573 574
# Cleaning up
# ---------------------------------------------------------------------------

#	files removed with 'make clean'
CLEAN_FILES += \
	kernel/ksyms.lst include/linux/compile.h \
	vmlinux System.map \
	.tmp* \
	drivers/char/consolemap_deftbl.c drivers/video/promcon_tbl.c \
	drivers/char/conmakehash \
	drivers/char/drm/*-mod.c \
	drivers/pci/devlist.h drivers/pci/classlist.h drivers/pci/gen-devlist \
	drivers/zorro/devlist.h drivers/zorro/gen-devlist \
	sound/oss/bin2hex sound/oss/hex2hex \
	drivers/atm/fore200e_mkfirm drivers/atm/{pca,sba}*{.bin,.bin1,.bin2} \
575 576
	drivers/scsi/aic7xxx/aic7xxx_seq.h \
	drivers/scsi/aic7xxx/aic7xxx_reg.h \
577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607
	drivers/scsi/aic7xxx/aicasm/aicasm_gram.c \
	drivers/scsi/aic7xxx/aicasm/aicasm_scan.c \
	drivers/scsi/aic7xxx/aicasm/y.tab.h \
	drivers/scsi/aic7xxx/aicasm/aicasm \
	drivers/scsi/53c700_d.h \
	net/khttpd/make_times_h \
	net/khttpd/times.h \
	submenu*

# 	directories removed with 'make clean'
CLEAN_DIRS += \
	modules

# 	files removed with 'make mrproper'
MRPROPER_FILES += \
	include/linux/autoconf.h include/linux/version.h \
	drivers/net/hamradio/soundmodem/sm_tbl_{afsk1200,afsk2666,fsk9600}.h \
	drivers/net/hamradio/soundmodem/sm_tbl_{hapn4800,psk4800}.h \
	drivers/net/hamradio/soundmodem/sm_tbl_{afsk2400_7,afsk2400_8}.h \
	drivers/net/hamradio/soundmodem/gentbl \
	sound/oss/*_boot.h sound/oss/.*.boot \
	sound/oss/msndinit.c \
	sound/oss/msndperm.c \
	sound/oss/pndsperm.c \
	sound/oss/pndspini.c \
	drivers/atm/fore200e_*_fw.c drivers/atm/.fore200e_*.fw \
	.version .config* config.in config.old \
	scripts/tkparse scripts/kconfig.tk scripts/kconfig.tmp \
	scripts/lxdialog/*.o scripts/lxdialog/lxdialog \
	.menuconfig.log \
	include/asm \
608 609
	.hdepend scripts/split-include scripts/docproc \
	scripts/fixdep $(TOPDIR)/include/linux/modversions.h \
610
	tags TAGS kernel.spec \
611 612 613 614 615 616

# 	directories removed with 'make mrproper'
MRPROPER_DIRS += \
	include/config \
	$(TOPDIR)/include/linux/modules

617 618 619
#	That's our way to know about arch specific cleanup.

include arch/$(ARCH)/Makefile
Linus Torvalds's avatar
Linus Torvalds committed
620 621

clean:	archclean
622
	@echo 'Cleaning up'
623 624
	@find . \( -name \*.[oas] -o -name core -o -name .\*.cmd -o \
		   -name .\*.tmp -o -name .\*.d \) -type f -print \
Linus Torvalds's avatar
Linus Torvalds committed
625
		| grep -v lxdialog/ | xargs rm -f
626 627
	@rm -f $(CLEAN_FILES)
	@rm -rf $(CLEAN_DIRS)
628
	@$(MAKE) -C Documentation/DocBook clean
Linus Torvalds's avatar
Linus Torvalds committed
629 630

mrproper: clean archmrproper
631 632 633 634
	@echo 'Making mrproper'
	@find . \( -size 0 -o -name .depend \) -type f -print | xargs rm -f
	@rm -f $(MRPROPER_FILES)
	@rm -rf $(MRPROPER_DIRS)
635
	@$(MAKE) -C Documentation/DocBook mrproper
Linus Torvalds's avatar
Linus Torvalds committed
636 637

distclean: mrproper
638 639 640
	@echo 'Making distclean'
	@find . \( -not -type d \) -and \
	 	\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
Linus Torvalds's avatar
Linus Torvalds committed
641
		-o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
642 643
	 	-o -name '.*.rej' -o -name '.SUMS' -o -size 0 \) -type f \
		-print | xargs rm -f
Linus Torvalds's avatar
Linus Torvalds committed
644

645 646
endif # ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),)

647
# FIXME Should go into a make.lib or something 
648
# ===========================================================================
649

650 651 652 653 654 655 656 657 658 659 660
# read all saved command lines

cmd_files := $(wildcard .*.cmd)
ifneq ($(cmd_files),)
  include $(cmd_files)
endif

# Usage: $(call if_changed_rule,foo)
# will check if $(cmd_foo) changed, or any of the prequisites changed,
# and if so will execute $(rule_foo)

661 662 663 664 665
if_changed_rule = $(if $(strip $? \
		               $(filter-out $(cmd_$(1)),$(cmd_$(@F)))\
			       $(filter-out $(cmd_$(@F)),$(cmd_$(1)))),\
	               @$(rule_$(1)))

666 667 668 669 670
# If quiet is set, only print short version of rule

cmd = @$(if $($(quiet)$(1)),echo '  $($(quiet)$(1))' &&) $($(1))


671
FORCE: