Makefile 15.7 KB
Newer Older
Linus Torvalds's avatar
Linus Torvalds committed
1
VERSION = 2
Linus Torvalds's avatar
Linus Torvalds committed
2
PATCHLEVEL = 5
3
SUBLEVEL = 17
Linus Torvalds's avatar
Linus Torvalds committed
4
EXTRAVERSION =
Linus Torvalds's avatar
Linus Torvalds committed
5 6 7 8

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/)
9
KERNELPATH=kernel-$(shell echo $(KERNELRELEASE) | sed -e "s/-//g")
Linus Torvalds's avatar
Linus Torvalds committed
10 11 12 13

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
14
TOPDIR	:= $(CURDIR)
Linus Torvalds's avatar
Linus Torvalds committed
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

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

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

CROSS_COMPILE 	=

#
# 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
MODFLAGS	= -DMODULE
41 42
CFLAGS_MODULE   = $(MODFLAGS)
AFLAGS_MODULE   =
Linus Torvalds's avatar
Linus Torvalds committed
43
CFLAGS_KERNEL	=
44
AFLAGS_KERNEL	=
Linus Torvalds's avatar
Linus Torvalds committed
45 46 47 48
PERL		= perl

export	VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION KERNELRELEASE ARCH \
	CONFIG_SHELL TOPDIR HPATH HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \
49
	CPP AR NM STRIP OBJCOPY OBJDUMP MAKE MAKEFILES GENKSYMS PERL
Linus Torvalds's avatar
Linus Torvalds committed
50 51 52 53 54 55 56 57 58 59

all:	do-it-all

#
# Make "config" the default target if there is no configuration file or
# "depend" the target if there is no top-level dependency information.
#

ifeq (.config,$(wildcard .config))
include .config
60
ifeq (.hdepend,$(wildcard .hdepend))
61
do-it-all:	vmlinux
Linus Torvalds's avatar
Linus Torvalds committed
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 88 89 90 91 92
else
CONFIGURATION = depend
do-it-all:	depend
endif
else
CONFIGURATION = config
do-it-all:	config
endif

#
# 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
93
CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -O2 \
Linus Torvalds's avatar
Linus Torvalds committed
94
	  -fomit-frame-pointer -fno-strict-aliasing -fno-common
Linus Torvalds's avatar
Linus Torvalds committed
95 96
AFLAGS := -D__ASSEMBLY__ $(CPPFLAGS)

97
INIT		=init/init.o
Linus Torvalds's avatar
Linus Torvalds committed
98 99
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
100

Linus Torvalds's avatar
Linus Torvalds committed
101
LIBS		=$(TOPDIR)/lib/lib.a
102
SUBDIRS		=init kernel lib drivers mm fs net ipc sound
Linus Torvalds's avatar
Linus Torvalds committed
103 104 105 106 107 108

DRIVERS-n :=
DRIVERS-y :=
DRIVERS-m :=
DRIVERS-  :=

Linus Torvalds's avatar
Linus Torvalds committed
109
DRIVERS-$(CONFIG_ACPI) += drivers/acpi/acpi.o
110
DRIVERS-$(CONFIG_PCI) += drivers/pci/driver.o
Linus Torvalds's avatar
Linus Torvalds committed
111
DRIVERS-$(CONFIG_PARPORT) += drivers/parport/driver.o
Linus Torvalds's avatar
Linus Torvalds committed
112 113
DRIVERS-y += drivers/base/base.o \
	drivers/char/char.o \
Linus Torvalds's avatar
Linus Torvalds committed
114 115 116 117
	drivers/block/block.o \
	drivers/misc/misc.o \
	drivers/net/net.o \
	drivers/media/media.o
Linus Torvalds's avatar
Linus Torvalds committed
118 119 120
DRIVERS-$(CONFIG_NUBUS) += drivers/nubus/nubus.a
DRIVERS-$(CONFIG_ATM) += drivers/atm/atm.o
DRIVERS-$(CONFIG_IDE) += drivers/ide/idedriver.o
Linus Torvalds's avatar
Linus Torvalds committed
121
DRIVERS-$(CONFIG_FC4) += drivers/fc4/fc4.a
Linus Torvalds's avatar
Linus Torvalds committed
122
DRIVERS-$(CONFIG_SCSI) += drivers/scsi/scsidrv.o
123
DRIVERS-$(CONFIG_FUSION) += drivers/message/message.o
Linus Torvalds's avatar
Linus Torvalds committed
124 125 126 127 128 129
DRIVERS-$(CONFIG_IEEE1394) += drivers/ieee1394/ieee1394drv.o

ifneq ($(CONFIG_CD_NO_IDESCSI)$(CONFIG_BLK_DEV_IDECD)$(CONFIG_BLK_DEV_SR)$(CONFIG_PARIDE_PCD),)
DRIVERS-y += drivers/cdrom/driver.o
endif

130
DRIVERS-$(CONFIG_SOUND) += sound/sound.o
Linus Torvalds's avatar
Linus Torvalds committed
131 132 133 134 135 136 137
DRIVERS-$(CONFIG_MTD) += drivers/mtd/mtdlink.o
DRIVERS-$(CONFIG_PCMCIA) += drivers/pcmcia/pcmcia.o
DRIVERS-$(CONFIG_DIO) += drivers/dio/dio.a
DRIVERS-$(CONFIG_SBUS) += drivers/sbus/sbus_all.o
DRIVERS-$(CONFIG_ZORRO) += drivers/zorro/driver.o
DRIVERS-$(CONFIG_ALL_PPC) += drivers/macintosh/macintosh.o
DRIVERS-$(CONFIG_MAC) += drivers/macintosh/macintosh.o
Linus Torvalds's avatar
Linus Torvalds committed
138
DRIVERS-$(CONFIG_PNP) += drivers/pnp/pnp.o
Linus Torvalds's avatar
Linus Torvalds committed
139 140 141 142 143 144
DRIVERS-$(CONFIG_SGI_IP22) += drivers/sgi/sgi.a
DRIVERS-$(CONFIG_VT) += drivers/video/video.o
DRIVERS-$(CONFIG_PARIDE) += drivers/block/paride/paride.a
DRIVERS-$(CONFIG_TC) += drivers/tc/tc.a
DRIVERS-$(CONFIG_USB) += drivers/usb/usbdrv.o
DRIVERS-$(CONFIG_INPUT) += drivers/input/inputdrv.o
Vojtech Pavlik's avatar
Vojtech Pavlik committed
145 146
DRIVERS-$(CONFIG_GAMEPORT) += drivers/input/gameport/gamedrv.o
DRIVERS-$(CONFIG_SERIO) += drivers/input/serio/seriodrv.o
147
DRIVERS-$(CONFIG_I2O) += drivers/message/message.o
Linus Torvalds's avatar
Linus Torvalds committed
148 149 150
DRIVERS-$(CONFIG_I2C) += drivers/i2c/i2c.o
DRIVERS-$(CONFIG_PHONE) += drivers/telephony/telephony.o
DRIVERS-$(CONFIG_MD) += drivers/md/mddev.o
Linus Torvalds's avatar
Linus Torvalds committed
151
DRIVERS-$(CONFIG_BLUEZ) += drivers/bluetooth/bluetooth.o
Linus Torvalds's avatar
Linus Torvalds committed
152
DRIVERS-$(CONFIG_HOTPLUG_PCI) += drivers/hotplug/vmlinux-obj.o
153
DRIVERS-$(CONFIG_ISDN) += drivers/isdn/vmlinux-obj.o
Linus Torvalds's avatar
Linus Torvalds committed
154

Linus Torvalds's avatar
Linus Torvalds committed
155
DRIVERS := $(DRIVERS-y)
Linus Torvalds's avatar
Linus Torvalds committed
156 157 158 159


include arch/$(ARCH)/Makefile

160 161 162
export CPPFLAGS
export CFLAGS CFLAGS_KERNEL CFLAGS_MODULE 
export AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
Linus Torvalds's avatar
Linus Torvalds committed
163 164 165

export	NETWORKS DRIVERS LIBS HEAD LDFLAGS LINKFLAGS MAKEBOOT ASFLAGS

166
# boot target
167
# ---------------------------------------------------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
168 169

boot: vmlinux
170
	@$(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" AFLAGS="$(AFLAGS) $(AFLAGS_KERNEL)" -C arch/$(ARCH)/boot
Linus Torvalds's avatar
Linus Torvalds committed
171

172 173 174 175 176 177 178 179 180 181 182 183 184
# 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)

cmd_link_vmlinux = $(LD) $(LINKFLAGS) $(HEAD) $(INIT) \
Linus Torvalds's avatar
Linus Torvalds committed
185 186
		--start-group \
		$(CORE_FILES) \
Linus Torvalds's avatar
Linus Torvalds committed
187
		$(LIBS) \
Linus Torvalds's avatar
Linus Torvalds committed
188 189 190 191
		$(DRIVERS) \
		$(NETWORKS) \
		--end-group \
		-o vmlinux
192 193 194 195 196 197 198 199 200 201 202 203

#	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
	$(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" AFLAGS="$(AFLAGS) $(AFLAGS_KERNEL)" -C init
	echo $(cmd_link_vmlinux)
	$(cmd_link_vmlinux)
	echo 'cmd_$@ := $(cmd_link_vmlinux)' > $(@D)/.$(@F).cmd
Linus Torvalds's avatar
Linus Torvalds committed
204
	$(NM) vmlinux | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map
205 206 207 208 209 210 211 212 213 214
endef

vmlinux: $(CONFIGURATION) $(vmlinux-objs) dummy
	$(call if_changed_rule,link_vmlinux)

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

$(sort $(vmlinux-objs)): linuxsubdirs
	@
Linus Torvalds's avatar
Linus Torvalds committed
215

216 217
# 	Handle descending into subdirectories listed in $(SUBDIRS)

218
.PHONY: linuxsubdirs
219 220 221
linuxsubdirs: $(patsubst %, _dir_%, $(SUBDIRS))

$(patsubst %, _dir_%, $(SUBDIRS)) : dummy include/linux/version.h include/config/MARKER
222
	@$(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" AFLAGS="$(AFLAGS) $(AFLAGS_KERNEL)" -C $(patsubst _dir_%, %, $@)
223 224 225

# Configuration
# ---------------------------------------------------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
226 227 228 229 230

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

xconfig: symlinks
231
	@$(MAKE) -C scripts kconfig.tk
Linus Torvalds's avatar
Linus Torvalds committed
232 233 234
	wish -f scripts/kconfig.tk

menuconfig: include/linux/version.h symlinks
235
	@$(MAKE) -C scripts/lxdialog all
Linus Torvalds's avatar
Linus Torvalds committed
236 237 238 239 240
	$(CONFIG_SHELL) scripts/Menuconfig arch/$(ARCH)/config.in

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

241 242 243 244 245 246 247 248 249 250 251
# make asm->asm-$(ARCH) symlink

symlinks:
	rm -f include/asm
	( cd include ; ln -sf asm-$(ARCH) asm)
	@if [ ! -d include/linux/modules ]; then \
		mkdir include/linux/modules; \
	fi

# split autoconf.h into include/linux/config/*

Linus Torvalds's avatar
Linus Torvalds committed
252 253 254 255
include/config/MARKER: scripts/split-include include/linux/autoconf.h
	scripts/split-include include/linux/autoconf.h include/config
	@ touch include/config/MARKER

256
# Generate some files
Linus Torvalds's avatar
Linus Torvalds committed
257 258 259 260

$(TOPDIR)/include/linux/version.h: include/linux/version.h

include/linux/version.h: ./Makefile
261 262
	@echo Generating $@
	@. scripts/mkversion_h $@ $(KERNELRELEASE) $(VERSION) $(PATCHLEVEL) $(SUBLEVEL)
Linus Torvalds's avatar
Linus Torvalds committed
263

264 265
comma	:= ,

266 267
# ---------------------------------------------------------------------------
# Generate dependencies
Linus Torvalds's avatar
Linus Torvalds committed
268

269
depend dep: dep-files
Linus Torvalds's avatar
Linus Torvalds committed
270

271 272 273 274 275 276 277 278 279
dep-files: scripts/mkdep archdep include/linux/version.h
	scripts/mkdep -- `find $(FINDHPATH) -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` > .hdepend
	$(MAKE) $(patsubst %,_sfdep_%,$(SUBDIRS)) _FASTDEP_ALL_SUB_DIRS="$(SUBDIRS)"
ifdef CONFIG_MODVERSIONS
	$(MAKE) update-modverfile
endif

# ---------------------------------------------------------------------------
# Modules
Linus Torvalds's avatar
Linus Torvalds committed
280 281

ifdef CONFIG_MODULES
282 283 284

#	Build modules

Linus Torvalds's avatar
Linus Torvalds committed
285 286 287 288 289 290 291 292 293
ifdef CONFIG_MODVERSIONS
MODFLAGS += -DMODVERSIONS -include $(HPATH)/linux/modversions.h
endif

.PHONY: modules
modules: $(patsubst %, _mod_%, $(SUBDIRS))

.PHONY: $(patsubst %, _mod_%, $(SUBDIRS))
$(patsubst %, _mod_%, $(SUBDIRS)) : include/linux/version.h include/config/MARKER
294
	@$(MAKE) -C $(patsubst _mod_%, %, $@) CFLAGS="$(CFLAGS) $(CFLAGS_MODULE)" AFLAGS="$(AFLAGS) $(AFLAGS_MODULE)" modules
Linus Torvalds's avatar
Linus Torvalds committed
295

296 297
#	Install modules

Linus Torvalds's avatar
Linus Torvalds committed
298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318
.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
319
_modinst_post:
Linus Torvalds's avatar
Linus Torvalds committed
320 321 322 323
	if [ -r System.map ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) $(KERNELRELEASE); fi

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

326 327 328 329
else # CONFIG_MODULES

# ---------------------------------------------------------------------------
# Modules not configured
Linus Torvalds's avatar
Linus Torvalds committed
330 331 332 333 334 335 336 337 338

modules modules_install: dummy
	@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

339
endif # CONFIG_MODULES
Linus Torvalds's avatar
Linus Torvalds committed
340

341
# ---------------------------------------------------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
342 343 344

include Rules.make

345 346
# Build helpers in scripts/
# FIXME: do that in scripts/Makefile?
Linus Torvalds's avatar
Linus Torvalds committed
347 348 349 350 351 352

scripts/mkdep: scripts/mkdep.c
	$(HOSTCC) $(HOSTCFLAGS) -o scripts/mkdep scripts/mkdep.c

scripts/split-include: scripts/split-include.c
	$(HOSTCC) $(HOSTCFLAGS) -o scripts/split-include scripts/split-include.c
Linus Torvalds's avatar
Linus Torvalds committed
353

354 355 356 357 358 359 360 361 362 363 364 365 366 367 368
# 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} \
369 370
	drivers/scsi/aic7xxx/aic7xxx_seq.h \
	drivers/scsi/aic7xxx/aic7xxx_reg.h \
371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410
	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 \
	.hdepend scripts/mkdep scripts/split-include scripts/docproc \
	$(TOPDIR)/include/linux/modversions.h \
	kernel.spec

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

Linus Torvalds's avatar
Linus Torvalds committed
411 412

clean:	archclean
413
	find . \( -name '*.[oas]' -o -name core -o -name '.*.cmd' \) -type f -print \
Linus Torvalds's avatar
Linus Torvalds committed
414 415 416
		| grep -v lxdialog/ | xargs rm -f
	rm -f $(CLEAN_FILES)
	rm -rf $(CLEAN_DIRS)
417
	@$(MAKE) -C Documentation/DocBook clean
Linus Torvalds's avatar
Linus Torvalds committed
418 419 420 421 422

mrproper: clean archmrproper
	find . \( -size 0 -o -name .depend \) -type f -print | xargs rm -f
	rm -f $(MRPROPER_FILES)
	rm -rf $(MRPROPER_DIRS)
423
	@$(MAKE) -C Documentation/DocBook mrproper
Linus Torvalds's avatar
Linus Torvalds committed
424 425

distclean: mrproper
Linus Torvalds's avatar
Linus Torvalds committed
426 427
	rm -f core `find . \( -not -type d \) -and \
		\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
Linus Torvalds's avatar
Linus Torvalds committed
428
		-o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
Linus Torvalds's avatar
Linus Torvalds committed
429
		-o -name '.*.rej' -o -name '.SUMS' -o -size 0 \) -type f -print` TAGS tags
Linus Torvalds's avatar
Linus Torvalds committed
430

431 432
# Assorted miscellaneous targets
# ---------------------------------------------------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
433

434
# Documentation targets
Linus Torvalds's avatar
Linus Torvalds committed
435

436
sgmldocs psdocs pdfdocs htmldocs:
437
	@$(MAKE) -C Documentation/DocBook $@
Linus Torvalds's avatar
Linus Torvalds committed
438 439


Linus Torvalds's avatar
Linus Torvalds committed
440 441 442
# RPM target
#
#	If you do a make spec before packing the tarball you can rpm -ta it
Linus Torvalds's avatar
Linus Torvalds committed
443

Linus Torvalds's avatar
Linus Torvalds committed
444 445
spec:
	. scripts/mkspec >kernel.spec
Linus Torvalds's avatar
Linus Torvalds committed
446

Linus Torvalds's avatar
Linus Torvalds committed
447 448 449 450 451
#	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
Linus Torvalds's avatar
Linus Torvalds committed
452

Linus Torvalds's avatar
Linus Torvalds committed
453 454 455 456 457 458 459 460 461 462 463
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
Linus Torvalds's avatar
Linus Torvalds committed
464

465
# Scripts to check various things for consistency
Linus Torvalds's avatar
Linus Torvalds committed
466 467

checkconfig:
Linus Torvalds's avatar
Linus Torvalds committed
468
	find * -name '*.[hcS]' -type f -print | sort | xargs $(PERL) -w scripts/checkconfig.pl
Linus Torvalds's avatar
Linus Torvalds committed
469 470 471 472 473 474 475

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

476
# Generate tags for editors
Linus Torvalds's avatar
Linus Torvalds committed
477

478 479 480 481
TAGS: dummy
	{ find include/asm-${ARCH} -name '*.h' -print ; \
	find include -type d \( -name "asm-*" -o -name config \) -prune -o -name '*.h' -print ; \
	find $(SUBDIRS) init -name '*.[ch]' ; } | grep -v SCCS | etags -
Linus Torvalds's avatar
Linus Torvalds committed
482

483 484 485 486 487 488
# 	Exuberant ctags works better with -I
tags: dummy
	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
Linus Torvalds's avatar
Linus Torvalds committed
489

490 491 492
# Targets which will only descend into one subdir, not trying
# to link vmlinux afterwards
# FIXME: anybody still using this?
Linus Torvalds's avatar
Linus Torvalds committed
493

494
fs lib mm ipc kernel drivers net sound: dummy
Kai Germaschewski's avatar
Kai Germaschewski committed
495
	$(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" AFLAGS="$(AFLAGS) $(AFLAGS_KERNEL)" $(subst $@, _dir_$@, $@)
Linus Torvalds's avatar
Linus Torvalds committed
496

497 498
# Make a backup
# FIXME anybody still using this?
Linus Torvalds's avatar
Linus Torvalds committed
499

500 501 502
backup: mrproper
	cd .. && tar cf - linux/ | gzip -9 > backup.gz
	sync
Linus Torvalds's avatar
Linus Torvalds committed
503

504 505
# Make checksums
# FIXME anybody still using this?
Linus Torvalds's avatar
Linus Torvalds committed
506

507 508
sums:
	find . -type f -print | sort | xargs sum > .SUMS
509 510 511 512 513 514 515 516 517

# FIXME Should go into a make.lib or something 
# ---------------------------------------------------------------------------

if_changed_rule = $(if $(strip $? \
		               $(filter-out $(cmd_$(1)),$(cmd_$(@F)))\
			       $(filter-out $(cmd_$(@F)),$(cmd_$(1)))),\
	               @$(rule_$(1)))