PageRenderTime 12ms CodeModel.GetById 1ms app.highlight 9ms RepoModel.GetById 1ms app.codeStats 0ms

/arch/ppc64/boot/Makefile

https://bitbucket.org/evzijst/gittest
Makefile | 117 lines | 69 code | 24 blank | 24 comment | 1 complexity | 2039d7b3fbc3a9d7073f0c91decd624b MD5 | raw file
  1# Makefile for making ELF bootable images for booting on CHRP
  2# using Open Firmware.
  3#
  4# Geert Uytterhoeven	September 1997
  5#
  6# Based on coffboot by Paul Mackerras
  7# Simplified for ppc64 by Todd Inglett
  8#
  9# NOTE:	this code is built for 32 bit in ELF32 format even though
 10#	it packages a 64 bit kernel.  We do this to simplify the
 11#	bootloader and increase compatibility with OpenFirmware.
 12#
 13#	To this end we need to define BOOTCC, etc, as the tools
 14#	needed to build the 32 bit image.  These are normally HOSTCC,
 15#	but may be a third compiler if, for example, you are cross
 16#	compiling from an intel box.  Once the 64bit ppc gcc is
 17#	stable it will probably simply be a compiler switch to
 18#	compile for 32bit mode.
 19#	To make it easier to setup a cross compiler,
 20#	CROSS32_COMPILE is setup as a prefix just like CROSS_COMPILE
 21#	in the toplevel makefile.
 22
 23
 24HOSTCC		:= gcc
 25BOOTCFLAGS	:= $(HOSTCFLAGS) $(LINUXINCLUDE) -fno-builtin 
 26BOOTAFLAGS	:= -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional
 27BOOTLFLAGS	:= -Ttext 0x00400000 -e _start -T $(srctree)/$(src)/zImage.lds
 28OBJCOPYFLAGS    := contents,alloc,load,readonly,data
 29
 30src-boot := crt0.S string.S prom.c main.c zlib.c imagesize.c div64.S
 31src-boot := $(addprefix $(obj)/, $(src-boot))
 32obj-boot := $(addsuffix .o, $(basename $(src-boot)))
 33
 34quiet_cmd_bootcc = BOOTCC  $@
 35      cmd_bootcc = $(CROSS32CC) -Wp,-MD,$(depfile) $(BOOTCFLAGS) -c -o $@ $<
 36
 37quiet_cmd_bootas = BOOTAS  $@
 38      cmd_bootas = $(CROSS32CC) -Wp,-MD,$(depfile) $(BOOTAFLAGS) -c -o $@ $<
 39
 40$(patsubst %.c,%.o, $(filter %.c, $(src-boot))): %.o: %.c
 41	$(call if_changed_dep,bootcc)
 42$(patsubst %.S,%.o, $(filter %.S, $(src-boot))): %.o: %.S
 43	$(call if_changed_dep,bootas)
 44
 45#-----------------------------------------------------------
 46# ELF sections within the zImage bootloader/wrapper
 47#-----------------------------------------------------------
 48required := vmlinux.strip
 49initrd   := initrd
 50
 51obj-sec = $(foreach section, $(1), $(patsubst %,$(obj)/kernel-%.o, $(section)))
 52src-sec = $(foreach section, $(1), $(patsubst %,$(obj)/kernel-%.c, $(section)))
 53gz-sec  = $(foreach section, $(1), $(patsubst %,$(obj)/kernel-%.gz, $(section)))
 54
 55hostprogs-y		:= piggy addnote addRamDisk
 56targets 		+= zImage zImage.initrd imagesize.c \
 57			   $(patsubst $(obj)/%,%, $(call obj-sec, $(required) $(initrd))) \
 58			   $(patsubst $(obj)/%,%, $(call src-sec, $(required) $(initrd))) \
 59			   $(patsubst $(obj)/%,%, $(call gz-sec, $(required) $(initrd))) \
 60			   vmlinux.initrd
 61extra-y			:= initrd.o
 62
 63quiet_cmd_ramdisk = RAMDISK $@
 64      cmd_ramdisk = $(obj)/addRamDisk $(obj)/ramdisk.image.gz $< $@
 65
 66quiet_cmd_stripvm = STRIP $@
 67      cmd_stripvm = $(STRIP) -s $< -o $@
 68
 69vmlinux.strip: vmlinux FORCE
 70	$(call if_changed,stripvm)
 71$(obj)/vmlinux.initrd: vmlinux.strip $(obj)/addRamDisk $(obj)/ramdisk.image.gz FORCE
 72	$(call if_changed,ramdisk)
 73
 74addsection = $(CROSS32OBJCOPY) $(1) \
 75		--add-section=.kernel:$(strip $(patsubst $(obj)/kernel-%.o,%, $(1)))=$(patsubst %.o,%.gz, $(1)) \
 76		--set-section-flags=.kernel:$(strip $(patsubst $(obj)/kernel-%.o,%, $(1)))=$(OBJCOPYFLAGS)
 77
 78quiet_cmd_addnote = ADDNOTE $@ 
 79      cmd_addnote = $(CROSS32LD) $(BOOTLFLAGS) -o $@ $(obj-boot) && $(obj)/addnote $@
 80
 81quiet_cmd_piggy = PIGGY   $@
 82      cmd_piggy = $(obj)/piggyback $(@:.o=) < $< | $(CROSS32AS) -o $@
 83
 84$(call gz-sec, $(required)): $(obj)/kernel-%.gz: % FORCE
 85	$(call if_changed,gzip)
 86
 87$(obj)/kernel-initrd.gz: $(obj)/ramdisk.image.gz
 88	cp -f $(obj)/ramdisk.image.gz $@
 89
 90$(call src-sec, $(required) $(initrd)): $(obj)/kernel-%.c: $(obj)/kernel-%.gz FORCE
 91	touch $@
 92
 93$(call obj-sec, $(required) $(initrd)): $(obj)/kernel-%.o: $(obj)/kernel-%.c FORCE
 94	$(call if_changed_dep,bootcc)
 95	$(call addsection, $@)
 96
 97$(obj)/zImage: obj-boot += $(call obj-sec, $(required))
 98$(obj)/zImage: $(call obj-sec, $(required)) $(obj-boot) $(obj)/addnote FORCE
 99	$(call if_changed,addnote)
100
101$(obj)/zImage.initrd: obj-boot += $(call obj-sec, $(required) $(initrd))
102$(obj)/zImage.initrd: $(call obj-sec, $(required) $(initrd)) $(obj-boot) $(obj)/addnote FORCE
103	$(call if_changed,addnote)
104
105$(obj)/imagesize.c: vmlinux.strip
106	@echo Generating $@
107	ls -l vmlinux.strip | \
108	awk '{printf "/* generated -- do not edit! */\n" \
109		"unsigned long vmlinux_filesize = %d;\n", $$5}' > $(obj)/imagesize.c
110	$(CROSS_COMPILE)nm -n vmlinux | tail -n 1 | \
111	awk '{printf "unsigned long vmlinux_memsize = 0x%s;\n", substr($$1,8)}' \
112		>> $(obj)/imagesize.c
113
114install: $(CONFIGURE) $(BOOTIMAGE)
115	sh -x $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" vmlinux System.map "$(INSTALL_PATH)" "$(BOOTIMAGE)"
116
117clean-files := $(addprefix $(objtree)/, $(obj-boot) vmlinux.strip)