1#
2# Makefile for Broadcom BCM947XX boards
3#
4# Copyright (C) 2010, Broadcom Corporation. All Rights Reserved.
5# 
6# Permission to use, copy, modify, and/or distribute this software for any
7# purpose with or without fee is hereby granted, provided that the above
8# copyright notice and this permission notice appear in all copies.
9# 
10# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
13# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
15# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
16# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17#
18# $Id: Makefile,v 1.7 2009/03/12 03:00:51 Exp $
19#
20
21
22# Link at 3 MB offset in RAM
23TEXT_START	?= 0x80300000
24
25LOADADDR	:= 0x80001000
26CROSS_COMPILE	?= mipsel-linux-
27
28OBJCOPY		:= $(CROSS_COMPILE)objcopy -O binary -R .reginfo -R .note -R .comment -R .mdebug -S
29OBJCOPYSREC	:= $(CROSS_COMPILE)objcopy -O srec -R .reginfo -R .note -R .comment -R .mdebug -S
30
31vpath %.c $(SRCBASE)/shared
32vpath %.S $(SRCBASE)/shared
33vpath %.lds.in $(SRCBASE)/shared
34
35ASFLAGS		+= -D__ASSEMBLY__ -DLOADADDR=$(LOADADDR) -march=mips32 -Wa,-mips32 -Wa,--trap
36CFLAGS		+= -DLOADADDR=$(LOADADDR) -march=mips32 -Wa,-mips32 -Wa,--trap
37# The self-decompresor is standalone, get rid of the linux flags
38CFLAGS		:= $(subst -Dlinux,,$(CFLAGS))
39CFLAGS		+= -Ulinux -D_MINOSL_ -ffreestanding
40ifdef CONFIG_MCOUNT
41CFLAGS		:= $(subst -pg,,$(CFLAGS))
42endif
43CFLAGS		+= -ffunction-sections $(call check_gcc, -fvtable-gc, )
44
45SYSTEM		?= $(LINUXDIR)/vmlinux
46OBJECTS		:= boot.o sisdram.o sbsdram.o aisdram.o load.o sflash.o \
47		hndmips.o hndchipc.o \
48		sbutils.o aiutils.o siutils.o hndpmu.o nicpci.o \
49		min_osl.o bcmutils.o sromstubs.o nvramstubs.o bcmstdlib.o
50
51CFLAGS		+= -G 0 -mno-abicalls -fno-pic -pipe -msoft-float
52ASFLAGS		+= -G 0 -mno-abicalls -fno-pic -pipe
53
54ifdef CONFIG_SQUASHFS
55# Default to lzma
56COMPRESS	?= ../../../tools/lzma e
57CFLAGS		+= -DUSE_LZMA -D_LZMA_NO_SYSTEM_SIZE_T -DBCMLZMA -I$(SRCBASE)/tools/misc/lzma_src/C
58
59else
60# Default to bzip2
61COMPRESS	?= bzip2 -c
62
63ifneq ($(findstring gzip,$(COMPRESS)),)
64CFLAGS		+= -DUSE_GZIP
65else
66ifneq ($(findstring bzip2,$(COMPRESS)),)
67CFLAGS		+= -DUSE_BZIP2
68else
69COMPRESS	:= cat
70endif
71endif
72endif
73
74CFLAGS		+= -I$(SRCBASE)/include -DBCMDRIVER
75ASFLAGS		+= -I$(SRCBASE)/include
76
77all: zImage vmlinuz
78
79ifeq ($(CONFIG_SQUASHFS), y)
80all: vmlinuz-lzma
81endif
82
83# Don't build dependencies, this may die if $(CC) isn't gcc
84dep:
85
86zImage: vmlinux
87	$(OBJCOPY) $< $@
88
89# Link the loader and the kernel binary together
90vmlinux: vmlinux.lds $(OBJECTS) piggy.o
91	$(LD) -static --gc-sections -no-warn-mismatch -T vmlinux.lds -o $@ $(OBJECTS) piggy.o
92
93vmlinux.lds: hndrte.lds.in Makefile
94	@sed -e s/TEXT_START/$(TEXT_START)/ \
95	     -e s/TARGET_ARCH/mips/ < $< > $@
96
97# Create a linkable version of the (possibly compressed) kernel binary
98piggy.o: piggz piggy.lds
99	$(LD) -no-warn-mismatch -T piggy.lds -r -o $@ -b binary piggz -b elf32-tradlittlemips
100
101piggy.lds:
102	@echo "SECTIONS { .data : { input_len = .; LONG(input_data_end - input_data) input_data = .; *(.data) input_data_end = .; }}" > $@
103
104# Always create a gzipped version named vmlinuz for compatibility
105vmlinuz: piggy
106	gzip -c9 $< > $@
107
108piggz: piggy
109ifdef CONFIG_SQUASHFS
110	$(COMPRESS) $< $@
111else
112	$(COMPRESS) $< > $@
113endif
114
115ifdef CONFIG_SQUASHFS
116# Create an lzma version named vmlinuz-lzma
117vmlinuz-lzma: piggy
118	../../../tools/lzma e $<  $@
119endif
120
121piggy: $(SYSTEM)
122	$(OBJCOPY) $< $@
123	
124mrproper: clean
125
126clean:
127	rm -f vmlinux vmlinuz zImage piggz piggy *.lds *.o
128ifeq ($(CONFIG_SQUASHFS), y)
129	rm -f vmlinuz-lzma
130endif
131