Makefile 4.67 KB
Newer Older
Linus Torvalds's avatar
Linus Torvalds committed
1
#
Thomas Gleixner's avatar
Thomas Gleixner committed
2
# arch/x86/boot/Makefile
Linus Torvalds's avatar
Linus Torvalds committed
3 4 5 6 7 8
#
# This file is subject to the terms and conditions of the GNU General Public
# License.  See the file "COPYING" in the main directory of this archive
# for more details.
#
# Copyright (C) 1994 by Linus Torvalds
H. Peter Anvin's avatar
H. Peter Anvin committed
9
# Changed by many, many contributors over the years.
Linus Torvalds's avatar
Linus Torvalds committed
10 11 12 13 14 15 16
#

# If you want to preset the SVGA mode, uncomment the next line and
# set SVGA_MODE to whatever number you want.
# Set it to -DSVGA_MODE=NORMAL_VGA if you just want the EGA/VGA mode.
# The number is the same as you would ordinarily press at bootup.

H. Peter Anvin's avatar
H. Peter Anvin committed
17
SVGA_MODE	:= -DSVGA_MODE=NORMAL_VGA
Linus Torvalds's avatar
Linus Torvalds committed
18

H. Peter Anvin's avatar
H. Peter Anvin committed
19
targets		:= vmlinux.bin setup.bin setup.elf bzImage
20
targets		+= fdimage fdimage144 fdimage288 image.iso hdimage
21
subdir-		:= compressed
Linus Torvalds's avatar
Linus Torvalds committed
22

23
setup-y		+= a20.o bioscall.o cmdline.o copy.o cpu.o cpuflags.o cpucheck.o
24
setup-y		+= early_serial_console.o edd.o header.o main.o memory.o
25 26
setup-y		+= pm.o pmjump.o printf.o regs.o string.o tty.o video.o
setup-y		+= video-mode.o version.o
27
setup-$(CONFIG_X86_APM_BOOT) += apm.o
28 29 30 31 32 33 34 35

# The link order of the video-*.o modules can matter.  In particular,
# video-vga.o *must* be listed first, followed by video-vesa.o.
# Hardware-specific drivers should follow in the order they should be
# probed, and video-bios.o should typically be last.
setup-y		+= video-vga.o
setup-y		+= video-vesa.o
setup-y		+= video-bios.o
36

37
targets		+= $(setup-y)
38 39
hostprogs	:= tools/build
hostprogs	+= mkcpustr
Linus Torvalds's avatar
Linus Torvalds committed
40

41 42
HOST_EXTRACFLAGS += -I$(srctree)/tools/include \
		    -include include/generated/autoconf.h \
43 44
	            -D__EXPORTED_HEADERS__

45 46 47 48 49 50
$(obj)/cpu.o: $(obj)/cpustr.h

quiet_cmd_cpustr = CPUSTR  $@
      cmd_cpustr = $(obj)/mkcpustr > $@
$(obj)/cpustr.h: $(obj)/mkcpustr FORCE
	$(call if_changed,cpustr)
51
targets += cpustr.h
Linus Torvalds's avatar
Linus Torvalds committed
52 53 54

# ---------------------------------------------------------------------------

55
KBUILD_CFLAGS	:= $(REALMODE_CFLAGS) -D_SETUP
56
KBUILD_AFLAGS	:= $(KBUILD_CFLAGS) -D__ASSEMBLY__
57
KBUILD_CFLAGS	+= $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
58
KBUILD_CFLAGS	+= -fno-asynchronous-unwind-tables
59
KBUILD_CFLAGS	+= $(CONFIG_CC_IMPLICIT_FALLTHROUGH)
60

H. Peter Anvin's avatar
H. Peter Anvin committed
61
$(obj)/bzImage: asflags-y  := $(SVGA_MODE)
Linus Torvalds's avatar
Linus Torvalds committed
62 63

quiet_cmd_image = BUILD   $@
64
silent_redirect_image = >/dev/null
65
cmd_image = $(obj)/tools/build $(obj)/setup.bin $(obj)/vmlinux.bin \
66
			       $(obj)/zoffset.h $@ $($(quiet)redirect_image)
Linus Torvalds's avatar
Linus Torvalds committed
67

H. Peter Anvin's avatar
H. Peter Anvin committed
68
$(obj)/bzImage: $(obj)/setup.bin $(obj)/vmlinux.bin $(obj)/tools/build FORCE
Linus Torvalds's avatar
Linus Torvalds committed
69
	$(call if_changed,image)
70
	@$(kecho) 'Kernel: $@ is ready' ' (#'$(or $(KBUILD_BUILD_VERSION),`cat .version`)')'
Linus Torvalds's avatar
Linus Torvalds committed
71

72
OBJCOPYFLAGS_vmlinux.bin := -O binary -R .note -R .comment -S
Linus Torvalds's avatar
Linus Torvalds committed
73 74 75
$(obj)/vmlinux.bin: $(obj)/compressed/vmlinux FORCE
	$(call if_changed,objcopy)

76
SETUP_OBJS = $(addprefix $(obj)/,$(setup-y))
Linus Torvalds's avatar
Linus Torvalds committed
77

78
sed-zoffset := -e 's/^\([0-9a-fA-F]*\) [a-zA-Z] \(startup_32\|efi.._stub_entry\|efi\(32\)\?_pe_entry\|input_data\|kernel_info\|_end\|_ehead\|_text\|_e\?data\|z_.*\)$$/\#define ZO_\2 0x\1/p'
79 80 81 82 83 84 85

quiet_cmd_zoffset = ZOFFSET $@
      cmd_zoffset = $(NM) $< | sed -n $(sed-zoffset) > $@

targets += zoffset.h
$(obj)/zoffset.h: $(obj)/compressed/vmlinux FORCE
	$(call if_changed,zoffset)
86 87


88
AFLAGS_header.o += -I$(objtree)/$(obj)
89
$(obj)/header.o: $(obj)/zoffset.h
90

91
LDFLAGS_setup.elf	:= -m elf_i386 -z noexecstack -T
92
$(obj)/setup.elf: $(src)/setup.ld $(SETUP_OBJS) FORCE
Linus Torvalds's avatar
Linus Torvalds committed
93 94
	$(call if_changed,ld)

95 96 97 98
OBJCOPYFLAGS_setup.bin	:= -O binary
$(obj)/setup.bin: $(obj)/setup.elf FORCE
	$(call if_changed,objcopy)

Linus Torvalds's avatar
Linus Torvalds committed
99
$(obj)/compressed/vmlinux: FORCE
Paul Bolle's avatar
Paul Bolle committed
100
	$(Q)$(MAKE) $(build)=$(obj)/compressed $@
Linus Torvalds's avatar
Linus Torvalds committed
101

102
# Set this if you want to pass append arguments to the
103
# bzdisk/fdimage/hdimage/isoimage kernel
104
FDARGS =
105
# Set this if you want one or more initrds included in the image
106 107
FDINITRD =

108
imgdeps = $(obj)/bzImage $(obj)/mtools.conf $(src)/genimage.sh
Linus Torvalds's avatar
Linus Torvalds committed
109 110 111 112

$(obj)/mtools.conf: $(src)/mtools.conf.in
	sed -e 's|@OBJ@|$(obj)|g' < $< > $@

113 114 115 116
targets += mtools.conf

# genimage.sh requires bash, but it also has a bunch of other
# external dependencies.
117
quiet_cmd_genimage = GENIMAGE $3
118
      cmd_genimage = $(BASH) $(src)/genimage.sh $2 $3 $(obj)/bzImage \
119
		$(obj)/mtools.conf '$(FDARGS)' $(FDINITRD)
120

121
PHONY += bzdisk fdimage fdimage144 fdimage288 hdimage isoimage
122

Linus Torvalds's avatar
Linus Torvalds committed
123
# This requires write access to /dev/fd0
124 125 126
# All images require syslinux to be installed; hdimage also requires
# EDK2/OVMF if the kernel is compiled with the EFI stub.
bzdisk: $(imgdeps)
127
	$(call cmd,genimage,bzdisk,/dev/fd0)
Linus Torvalds's avatar
Linus Torvalds committed
128

129
fdimage fdimage144: $(imgdeps)
130 131
	$(call cmd,genimage,fdimage144,$(obj)/fdimage)
	@$(kecho) 'Kernel: $(obj)/fdimage is ready'
Linus Torvalds's avatar
Linus Torvalds committed
132

133
fdimage288: $(imgdeps)
134 135
	$(call cmd,genimage,fdimage288,$(obj)/fdimage)
	@$(kecho) 'Kernel: $(obj)/fdimage is ready'
Linus Torvalds's avatar
Linus Torvalds committed
136

137 138 139 140 141
hdimage: $(imgdeps)
	$(call cmd,genimage,hdimage,$(obj)/hdimage)
	@$(kecho) 'Kernel: $(obj)/hdimage is ready'

isoimage: $(imgdeps)
142 143
	$(call cmd,genimage,isoimage,$(obj)/image.iso)
	@$(kecho) 'Kernel: $(obj)/image.iso is ready'