File: Makefile

package info (click to toggle)
silo 0.9.8-1
  • links: PTS
  • area: main
  • in suites: potato
  • size: 988 kB
  • ctags: 2,245
  • sloc: ansic: 10,619; asm: 2,783; makefile: 405; perl: 77; sh: 3
file content (160 lines) | stat: -rw-r--r-- 4,821 bytes parent folder | download
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
##
## Linux Loader for SPARC
##
##

VERSION=0.98
CC=gcc 
LD=ld
AS=as
RM=/bin/rm -f
NM=nm
DD=dd
AWK=awk
LS=ls
ELFTOAOUT=elftoaout
STRIP=strip
GZIP=gzip
GDB=gdb
ECHO=echo
GREP=grep
SED=sed
CP=cp

CFLAGS = -I../include -O2 -I. -Wall

# Relocate to 2.5MB. The Hitchhiker's Guide to Open Boot Rev 3 claims
# that 3MB are guaranteed to be mapped.
LDFLAGS=-N -Ttext 0x280000
LDFLAGS2=-N -Ttext 0x380000

.c.o:
	$(CC) $(CFLAGS) -c $*.c

.S.o:
	$(CC) $(CFLAGS) -c $*.S

# The ordering here is very significant. Please add new object files to OBJS5 only.
OBJS1 = crt0.o
OBJS2 = decomp.o
OBJS2N = decompnet.o
OBJS3 = console.o printf.o malloc.o jmp.o prom.o tree.o urem.o udiv.o stringops1.o
OBJS4 = main.o
OBJS4N = mainnet.o
OBJS5 = cmdline.o disk.o file.o misc.o cfg.o strtol.o ranges.o timer.o memory.o ufs.o romfs.o 9660.o divdi3.o \
	mul.o rem.o sdiv.o umul.o stringops2.o ls.o muldi3.o
OBJS = $(OBJS1) $(OBJS2) $(OBJS3) bmark.o $(OBJS4) $(OBJS5)
OBJSNET = $(OBJS1) $(OBJS2N) $(OBJS3) bmark.o $(OBJS4N) $(OBJS5)

ifeq (Linux,$(shell uname))
ifeq (sparc,$(subst sparc64,sparc,$(shell uname -m)))
# Should really switch to autoconf...
LIBINC=$(shell if [ ! -f /lib/ld-linux.so.2 -o ! -f /usr/lib/libext2fs.so ]; then echo -L../include; fi)
all: second.b silotftp.b
else
all:
	@$(ECHO) Second stage bootloader should be build under Linux/Sparc only
endif
else
all:
	@$(ECHO) Second stage bootloader should be build under Linux/Sparc only
endif

second: $(OBJS) mark.o
	$(LD) $(LDFLAGS) -Bstatic -o second $(OBJS) $(LIBINC) -lext2fs mark.o
	$(LD) $(LDFLAGS2) -Bstatic -o second2 $(OBJS) $(LIBINC) -lext2fs mark.o
	$(NM) second | grep -v '*ABS*' | sort > second.map

silotftp: $(OBJSNET) mark.o
	$(LD) $(LDFLAGS) -Bstatic -o silotftp $(OBJSNET) $(LIBINC) -lext2fs mark.o
	$(LD) $(LDFLAGS2) -Bstatic -o silotftp2 $(OBJSNET) $(LIBINC) -lext2fs mark.o
	$(NM) silotftp | grep -v '*ABS*' | sort > silotftp.map

second.l: second
	( $(ECHO) 'disassemble 0x280000 '`$(GREP) '_etext' second.map | $(SED) 's/ .*$$//' | $(SED) 's/^00/0x/'`; $(ECHO) quit ) | $(GDB) second | $(SED) '1,/^(gdb)/d;/^End /,$$d' > second.l

main.o:        main.c silo.h
ls.o:          ls.c silo.h
malloc.o:      malloc.c silo.h
printf.o:      printf.c silo.h
cmdline.o:     cmdline.c silo.h
console.o:     console.c silo.h
misc.o:	       misc.c silo.h
disk.o:	       disk.c silo.h
file.o:	       file.c silo.h ufs.h
cfg.o:	       cfg.c silo.h
ranges.o:      ranges.c silo.h
tree.o:	       tree.c silo.h
timer.o:       timer.c silo.h
decomp.o:      decomp.c inflate.c silo.h
mark.o:	       mark.S
bmark.o:       bmark.S
mul.o:         mul.S
umul.o:        umul.S
sdiv.o:        sdiv.S
udiv.o:        udiv.S
rem.o:         rem.S
urem.o:        urem.S
ufs.o:	       ufs.c silo.h ufs.h
romfs.o:       romfs.c silo.h
memory.o:      memory.c silo.h
jmp.o:	       jmp.S
divdi3.o:      divdi3.S
prom.o:	       prom.c promlib.h
decompnet.o:   decomp.c inflate.c silo.h
	$(CC) $(CFLAGS) -DTFTP -c -o decompnet.o decomp.c
mainnet.o:   main.c silo.h
	$(CC) $(CFLAGS) -DTFTP -c -o mainnet.o main.c

util:	util.c
	$(CC) -o util util.c

clean:
	$(RM) $(OBJS) *.o second second2 second.b silotftp silotftp2 silotftp.b second.l *.map core *~ util second.b second.image.tmp *.s

crt0.o:	crt0.S
	$(CC) $(CFLAGS) -E -o crt0.s -DVERSION='"SILO$(VERSION)"' crt0.S
	$(AS) -Av9 -o crt0.o crt0.s
	$(RM) crt0.s

prom.o: prom.c
	$(CC) $(CFLAGS) -S -o prom.s prom.c
	$(AS) -Av9 -o prom.o prom.s
	$(RM) prom.s

memory.o: memory.c
	$(CC) $(CFLAGS) -S -o memory.s memory.c
	$(AS) -Av9 -o memory.o memory.s
	$(RM) memory.s

timer.o: timer.c
	$(CC) $(CFLAGS) -S -o timer.s timer.c
	$(AS) -Av9a -o timer.o timer.s
	$(RM) timer.s

second.b: second util
	$(CP) second second.tmp
	$(CP) second2 second2.tmp
	$(STRIP) second.tmp
	$(STRIP) second2.tmp
	$(ELFTOAOUT) -o second.image.tmp second.tmp
	$(ELFTOAOUT) -o second2.image.tmp second2.tmp
	./util -z second.map second.image.tmp second2.image.tmp second.b second.b2
	$(GZIP) -9cfn second.b2 >> second.b
	$(DD) if=/dev/zero bs=1 count=`$(LS) -l second.b | $(AWK) '{len=$$5%512;if(len!=0)len=512-len;print len}'` >> second.b
	$(LS) -l second.b | $(AWK) '{printf "%c%c%c%c",0,$$5/65536,($$5%65536)/256,0}' | $(DD) of=second.b bs=4 count=1 seek=581 conv=notrunc
	$(RM) second.tmp second.image.tmp second2.tmp second2.image.tmp second.b2
	ln -f second.b ../boot/second.b

silotftp.b: silotftp util
	$(CP) silotftp silotftp.tmp
	$(CP) silotftp2 silotftp2.tmp
	$(STRIP) silotftp.tmp
	$(STRIP) silotftp2.tmp
	$(ELFTOAOUT) -o silotftp.image.tmp silotftp.tmp
	$(ELFTOAOUT) -o silotftp2.image.tmp silotftp2.tmp
	./util -a silotftp.map silotftp.image.tmp silotftp2.image.tmp silotftp.b silotftp.b2
	$(GZIP) -9cfn silotftp.b2 >> silotftp.b
	$(RM) silotftp.tmp silotftp.image.tmp silotftp2.tmp silotftp2.image.tmp silotftp.b2
	ln -f silotftp.b ../boot/silotftp.b