aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ramips/image/lzma-loader/src/Makefile
blob: 478cf17f29cb9c52b9d3255d33d85bf1fba1d01d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#
# Makefile for the LZMA compressed kernel loader for
# Atheros AR7XXX/AR9XXX based boards
#
# Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org>
#
# Some parts of this file was based on the OpenWrt specific lzma-loader
# for the BCM47xx and ADM5120 based boards:
#	Copyright (C) 2004 Manuel Novoa III (mjn3@codepoet.org)
#	Copyright (C) 2005 Mineharu Takahara <mtakahar@yahoo.com>
#	Copyright (C) 2005 by Oleg I. Vdovikin <oleg@cs.msu.su>
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 as published
# by the Free Software Foundation.
#

LOADADDR	:=
LZMA_TEXT_START	:= 0x80a00000
LOADER_DATA	:=
BOARD		:=
FLASH_START	:=
FLASH_OFFS	:=
FLASH_MAX	:=
PLATFORM	:=
SUBTARGET	:=
CACHE_FLAGS	:=

CC		:= $(CROSS_COMPILE)gcc
LD		:= $(CROSS_COMPILE)ld
OBJCOPY		:= $(CROSS_COMPILE)objcopy
OBJDUMP		:= $(CROSS_COMPILE)objdump


BIN_FLAGS	:= -O binary -R .reginfo -R .note -R .comment -R .mdebug \
		   -R .MIPS.abiflags -S

CFLAGS		= -D__KERNEL__ -Wall -Wstrict-prototypes -Wno-trigraphs -Os \
		  -fno-strict-aliasing -fno-common -fomit-frame-pointer -G 0 \
		  -mno-abicalls -fno-pic -ffunction-sections -pipe -mlong-calls \
		  -fno-common -ffreestanding -fhonour-copts -nostartfiles \
		  -mabi=32 -march=mips32r2 \
		  -Wa,-32 -Wa,-march=mips32r2 -Wa,-mips32r2 -Wa,--trap
CFLAGS		+= -D_LZMA_PROB32
CFLAGS		+= -flto
CFLAGS		+= $(CACHE_FLAGS)

ASFLAGS		= $(CFLAGS) -D__ASSEMBLY__

LDFLAGS		= -static -Wl,--gc-sections -Wl,-no-warn-mismatch
LDFLAGS		+= -Wl,-e,startup -T loader.lds -Wl,-Ttext,$(LZMA_TEXT_START)
LDFLAGS		+= -flto -fwhole-program -Wl,-z,max-page-size=4096

O_FORMAT 	= $(shell $(OBJDUMP) -i | head -2 | grep elf32)

OBJECTS		:= head.o loader.o cache.o board.o printf.o LzmaDecode.o

ifeq ($(strip $(SUBTARGET)),)
$(error "Please specify a SUBTARGET!")
endif

ifeq ($(strip $(SUBTARGET)),mt7620)
CFLAGS	+= -DSOC_MT7620
endif

ifeq ($(strip $(SUBTARGET)),mt7621)
CFLAGS	+= -DSOC_MT7621
endif

ifeq ($(strip $(SUBTARGET)),rt305x)
CFLAGS	+= -DSOC_RT305X
endif

ifeq ($(strip $(SUBTARGET)),rt3883)
CFLAGS	+= -DSOC_RT3883
endif

ifneq ($(strip $(LOADER_DATA)),)
OBJECTS		+= data.o
CFLAGS		+= -DLZMA_WRAPPER=1 -DLOADADDR=$(LOADADDR)
endif

ifneq ($(strip $(KERNEL_CMDLINE)),)
CFLAGS		+= -DCONFIG_KERNEL_CMDLINE='"$(KERNEL_CMDLINE)"'
endif

ifneq ($(strip $(FLASH_START)),)
CFLAGS		+= -DCONFIG_FLASH_START=$(FLASH_START)
endif

ifneq ($(strip $(FLASH_OFFS)),)
CFLAGS		+= -DCONFIG_FLASH_OFFS=$(FLASH_OFFS)
endif

ifneq ($(strip $(FLASH_MAX)),)
CFLAGS		+= -DCONFIG_FLASH_MAX=$(FLASH_MAX)
endif

all: loader.elf

# Don't build dependencies, this may die if $(CC) isn't gcc
dep:

install:

%.o : %.c
	$(CC) $(CFLAGS) -c -o $@ $<

%.o : %.S
	$(CC) $(ASFLAGS) -c -o $@ $<

data.o: $(LOADER_DATA)
	$(LD) -r -b binary --oformat $(O_FORMAT) -T lzma-data.lds -o $@ $<

loader: $(OBJECTS)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJECTS)

loader.bin: loader
	$(OBJCOPY) $(BIN_FLAGS) $< $@

loader2.o: loader.bin
	$(LD) -r -b binary --oformat $(O_FORMAT) -o $@ $<

loader.elf: loader2.o
	$(LD) -e startup -T loader2.lds -Ttext $(LOADADDR) -z max-page-size=4096 -o $@ $<

mrproper: clean

clean:
	rm -f loader *.elf *.bin *.o