-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
344 lines (295 loc) · 10.5 KB
/
Makefile
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
## Setup
export LANG=C
export LC_ALL=C
export LC_COLLATE=POSIX
include Config
VERSION = 22.8
# Debug mode (spam/verbose)
DEBUG = 0
# make install vars
ROOT =
PREFIX = usr/local
MANDIR = man
# command used to get root (needed for tarball creation)
GETROOT = fakeroot
# Set this to the prefix of your cross-compiler, if you have one.
# Else leave it empty.
#
CROSS =
# The flags for the yaboot binary.
#
YBCFLAGS = -O2
YBCFLAGS += -g
ifneq ($(CFLAGS),)
YBCFLAGS += $(CFLAGS)
endif
YBCFLAGS += -msoft-float
YBCFLAGS += -fno-builtin
YBCFLAGS += -nostdinc
YBCFLAGS += -Wall
YBCFLAGS += -isystem `gcc -print-file-name=include`
YBCFLAGS += -mcpu=powerpc
YBCFLAGS += -I ./include
ifeq ($(DEBUG),2)
YBCFLAGS += -O1
endif
# Link flags
#
LFLAGS =
cc-option-yn = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
> /dev/null 2>&1; then echo "y"; else echo "n"; fi;)
HAS_BIARCH := $(call cc-option-yn, -m32)
ifeq ($(HAS_BIARCH),y)
YBCFLAGS += -m32
LFLAGS += -m elf32ppc
endif
# For compiling userland utils
#
UCFLAGS = -Os $(CFLAGS) -Wall -I/usr/include
# For compiling build-tools that run on the host.
#
HOSTCC = gcc
HOSTCFLAGS = -O1 -g $(CFLAGS) -Wall -W
## End of configuration section
OBJS = second/crt0.o second/yaboot.o second/cache.o second/prom.o second/file.o \
second/e2fsprogs_lookup.o second/e2fsprogs_freefs.o second/e2fsprogs_read_bb.o second/e2fsprogs_ind_block.o second/e2fsprogs_dirblock.o \
second/e2fsprogs_block.o second/e2fsprogs_io_manager.o second/e2fsprogs_badblocks.o second/e2fsprogs_namei.o second/e2fsprogs_openfs.o \
second/e2fsprogs_dir_iterate.o second/e2fsprogs_inode.o second/e2fsprogs_closefs.o second/e2fsprogs_bb_inode.o second/e2fsprogs_swapfs.o \
second/partition.o second/cfg.o second/setjmp.o second/cmdline.o \
second/cputable.o \
second/parse_device_path.o \
second/fs_of.o second/fs_ext2.o second/fs_iso.o second/iso_util.o \
lib/nosys.o lib/misc.o lib/string.o lib/strtol.o lib/vsprintf.o lib/ctype.o lib/malloc.o lib/strstr.o
OBJS += second/md5.o
OBJS += second/fs_xfs.o
OBJS += second/fs_reiserfs.o
# compilation
CC := $(CROSS)gcc
LD := $(CROSS)ld
AR := $(CROSS)ar
RANLIB := $(CROSS)ranlib
OBJCOPY := $(CROSS)objcopy
all yaboot: second/yaboot md5test
.PHONY: FORCE
FORCE:
include/version.h: FORCE
@if test -d .svn ; then \
rev=`env -i svn info | sed -n "/^Last Changed Rev:[[:blank:]]\+/s@^[^:]\+:[[:blank:]]\+@@p"` ; \
mod=`env -i svn st | grep -q '^[MAD]' && echo M` ; \
else \
rev=${VERSION} ; mod= ; \
fi ; \
echo "#define VERSION \"r$$rev$$mod\"" > $@~ ; \
if test -f $@ ; then \
if ! diff -u $@ $@~ ; then \
cp -f $@~ $@ ; \
fi ; \
else \
cp -f $@~ $@ ; \
fi
@rm -f $@~
include/hardcoded_bootpath.h: FORCE
ifeq ($(HARD_CODED_BOOTPATH),)
@echo "#undef HARD_CODED_BOOTPATH" > $@~
else
@echo "#define HARD_CODED_BOOTPATH \"$(HARD_CODED_BOOTPATH)\"" > $@~
endif
@if test -f $@ ; then \
if ! diff -u $@ $@~ ; then \
cp -f $@~ $@ ; \
fi ; \
else \
cp -f $@~ $@ ; \
fi
@rm -f $@~
include/config.h: Config FORCE
@echo "/* autogenerated by make */" > $@~
ifeq ($(CONFIG_COLOR_TEXT),y)
@echo "#define CONFIG_COLOR_TEXT 1" >> $@~
else
@echo "#undef CONFIG_COLOR_TEXT" >> $@~
endif
ifeq ($(CONFIG_SET_COLORMAP),y)
@echo "#define CONFIG_SET_COLORMAP 1" >> $@~
else
@echo "#undef CONFIG_SET_COLORMAP" >> $@~
endif
ifeq ($(USE_MD5_PASSWORDS),y)
@echo "#define USE_MD5_PASSWORDS 1" >> $@~
else
@echo "#undef USE_MD5_PASSWORDS" >> $@~
endif
ifeq ($(CONFIG_FS_XFS),y)
@echo "#define CONFIG_FS_XFS 1" >> $@~
else
@echo "#undef CONFIG_FS_XFS" >> $@~
endif
ifeq ($(CONFIG_FS_REISERFS),y)
@echo "#define CONFIG_FS_REISERFS 1" >> $@~
else
@echo "#undef CONFIG_FS_REISERFS" >> $@~
endif
ifeq ($(DEBUG),0)
@echo "#undef DEBUG" >> $@~
else
@echo "#define DEBUG $(DEBUG)" >> $@~
endif
@if test -f $@ ; then \
if ! diff -u $@ $@~ ; then \
cp -f $@~ $@ ; \
fi ; \
else \
cp -f $@~ $@ ; \
fi
@rm -f $@~
second/empty.c:
rm -f $@
echo '' > $@
second/empty.o: second/empty.c
second/yaboot.a: $(OBJS)
rm -fv $@ $@.~
$(AR) ru $@.~ $(OBJS)
$(RANLIB) $@.~
mv -f $@.~ $@
second/yaboot: $(OBJS) util/addnote ld.script second/yaboot.a second/empty.o
$(LD) -T ld.script $(LFLAGS) second/empty.o second/crt0.o second/yaboot.a -o $@ `gcc -m32 -print-libgcc-file-name`
chmod -x $@
cp $@ [email protected]
util/addnote [email protected]
util/split_of_path: util/split_of_path.c second/parse_device_path.c
$(HOSTCC) $(HOSTCFLAGS) -o $@ [email protected]
util/addnote: util/addnote.c
$(HOSTCC) $(HOSTCFLAGS) -o $@ [email protected]
util/elfextract:
$(CC) $(UCFLAGS) -o $@ [email protected]
md5test: second/md5.c
$(HOSTCC) $(HOSTCFLAGS) -o $@ second/md5.c -Iinclude -DTEST -Os
./$@
mkofboot:
ln -sf ybin ybin/mkofboot
@if [ $$(grep '^VERSION=' ybin/ybin | cut -f2 -d=) != ${VERSION} ] ; then \
echo "ybin/ybin: warning: VERSION mismatch"; \
false; \
fi
%.o: %.c
$(CC) $(YBCFLAGS) -c -o $@ $<
%.o: %.S
$(CC) $(YBCFLAGS) -D__ASSEMBLY__ -c -o $@ $<
dep:
makedepend -Iinclude *.c lib/*.c util/*.c gui/*.c
docs:
make -C doc all
.PHONY: tags
tags:
ctags `find \( -path '*/.pc' -o -path '*/.svn' \) -prune -o -name "*.[chS]"`
bindist: all
mkdir ../yaboot-binary-${VERSION}
$(GETROOT) make ROOT=../yaboot-binary-${VERSION} install
mkdir -p -m 755 ../yaboot-binary-${VERSION}/usr/local/share/doc/yaboot
cp -a COPYING ../yaboot-binary-${VERSION}/usr/local/share/doc/yaboot/COPYING
cp -a README ../yaboot-binary-${VERSION}/usr/local/share/doc/yaboot/README
cp -a doc/README.rs6000 ../yaboot-binary-${VERSION}/usr/local/share/doc/yaboot/README.rs6000
cp -a doc/yaboot-howto.html ../yaboot-binary-${VERSION}/usr/local/share/doc/yaboot/yaboot-howto.html
cp -a doc/yaboot-howto.sgml ../yaboot-binary-${VERSION}/usr/local/share/doc/yaboot/yaboot-howto.sgml
mv ../yaboot-binary-${VERSION}/etc/yaboot.conf ../yaboot-binary-${VERSION}/usr/local/share/doc/yaboot/
rmdir ../yaboot-binary-${VERSION}/etc
$(GETROOT) tar -C ../yaboot-binary-${VERSION} -zcvpf ../yaboot-binary-${VERSION}.tar.gz .
rm -rf ../yaboot-binary-${VERSION}
clean:
rm -f include/version.h
rm -f include/config.h
rm -f include/hardcoded_bootpath.h
rm -f second/yaboot util/addnote util/elfextract $(OBJS)
rm -f second/yaboot.debug
rm -f second/yaboot.chrp
rm -f second/yaboot.a
rm -f second/empty.c second/empty.o
rm -f util/split_of_path
rm -f tags
rm -f md5test
find . -not -path './\{arch\}*' -name '#*' | xargs rm -f
find . -not -path './\{arch\}*' -name '.#*' | xargs rm -f
find . -not -path './\{arch\}*' -name '*~' | xargs rm -f
find . -not -path './\{arch\}*' -name '*.swp' | xargs rm -f
find . -not -path './\{arch\}*' -name ',,*' | xargs rm -rf
find man -name '*.gz' | xargs -r gunzip
rm -rf man.deb
dist:
mkdir -p ../yaboot-${VERSION}
rsync -r --exclude=.git ./ ../yaboot-${VERSION}
tar -cjf 'yaboot-${VERSION}.tar.bz2' ../yaboot-${VERSION}
cleandocs:
make -C doc clean
## removes arch revision control crap, only to be called for making
## release tarballs. arch should have a export command like cvs...
archclean:
rm -rf '{arch}'
find . -type d -name .arch-ids | xargs rm -rf
rm -f 0arch-timestamps0
maintclean: clean cleandocs
release: docs bindist clean
strip: all
strip second/yaboot
strip --remove-section=.comment second/yaboot
strip util/addnote
strip --remove-section=.comment --remove-section=.note util/addnote
install: all strip
install -d -o root -g root -m 0755 ${ROOT}/etc/
install -d -o root -g root -m 0755 ${ROOT}/${PREFIX}/sbin/
install -d -o root -g root -m 0755 ${ROOT}/${PREFIX}/lib
install -d -o root -g root -m 0755 ${ROOT}/${PREFIX}/lib/yaboot
install -d -o root -g root -m 0755 ${ROOT}/${PREFIX}/${MANDIR}/man5/
install -d -o root -g root -m 0755 ${ROOT}/${PREFIX}/${MANDIR}/man8/
install -o root -g root -m 0644 second/yaboot ${ROOT}/$(PREFIX)/lib/yaboot
install -o root -g root -m 0755 util/addnote ${ROOT}/${PREFIX}/lib/yaboot/addnote
install -o root -g root -m 0644 first/ofboot ${ROOT}/${PREFIX}/lib/yaboot/ofboot
install -o root -g root -m 0755 ybin/ofpath ${ROOT}/${PREFIX}/sbin/ofpath
install -o root -g root -m 0755 ybin/ybin ${ROOT}/${PREFIX}/sbin/ybin
install -o root -g root -m 0755 ybin/yabootconfig ${ROOT}/${PREFIX}/sbin/yabootconfig
rm -f ${ROOT}/${PREFIX}/sbin/mkofboot
ln -s ybin ${ROOT}/${PREFIX}/sbin/mkofboot
@gzip -9 man/*.[58]
install -o root -g root -m 0644 man/bootstrap.8.gz ${ROOT}/${PREFIX}/${MANDIR}/man8/bootstrap.8.gz
install -o root -g root -m 0644 man/mkofboot.8.gz ${ROOT}/${PREFIX}/${MANDIR}/man8/mkofboot.8.gz
install -o root -g root -m 0644 man/ofpath.8.gz ${ROOT}/${PREFIX}/${MANDIR}/man8/ofpath.8.gz
install -o root -g root -m 0644 man/yaboot.8.gz ${ROOT}/${PREFIX}/${MANDIR}/man8/yaboot.8.gz
install -o root -g root -m 0644 man/yabootconfig.8.gz ${ROOT}/${PREFIX}/${MANDIR}/man8/yabootconfig.8.gz
install -o root -g root -m 0644 man/ybin.8.gz ${ROOT}/${PREFIX}/${MANDIR}/man8/ybin.8.gz
install -o root -g root -m 0644 man/yaboot.conf.5.gz ${ROOT}/${PREFIX}/${MANDIR}/man5/yaboot.conf.5.gz
@gunzip man/*.gz
@if [ ! -e ${ROOT}/etc/yaboot.conf ] ; then \
echo "install -o root -g root -m 0644 etc/yaboot.conf ${ROOT}/etc/yaboot.conf"; \
install -o root -g root -m 0644 etc/yaboot.conf ${ROOT}/etc/yaboot.conf; \
else \
echo "/etc/yaboot.conf already exists, leaving it alone"; \
fi
@echo
@echo "Installation successful."
@echo
@echo "An example /etc/yaboot.conf has been installed (unless /etc/yaboot.conf already existed)"
@echo "You may either alter that file to match your system, or alternatively run yabootconfig"
@echo "yabootconfig will generate a simple and valid /etc/yaboot.conf for your system"
@echo
deinstall:
rm -f ${ROOT}/${PREFIX}/sbin/ofpath
rm -f ${ROOT}/${PREFIX}/sbin/ybin
rm -f ${ROOT}/${PREFIX}/sbin/yabootconfig
rm -f ${ROOT}/${PREFIX}/sbin/mkofboot
rm -f ${ROOT}/${PREFIX}/lib/yaboot/yaboot
rm -f ${ROOT}/${PREFIX}/lib/yaboot/ofboot
rm -f ${ROOT}/${PREFIX}/lib/yaboot/addnote
@rmdir ${ROOT}/${PREFIX}/lib/yaboot || true
rm -f ${ROOT}/${PREFIX}/${MANDIR}/man8/bootstrap.8.gz
rm -f ${ROOT}/${PREFIX}/${MANDIR}/man8/mkofboot.8.gz
rm -f ${ROOT}/${PREFIX}/${MANDIR}/man8/ofpath.8.gz
rm -f ${ROOT}/${PREFIX}/${MANDIR}/man8/yaboot.8.gz
rm -f ${ROOT}/${PREFIX}/${MANDIR}/man8/yabootconfig.8.gz
rm -f ${ROOT}/${PREFIX}/${MANDIR}/man8/ybin.8.gz
rm -f ${ROOT}/${PREFIX}/${MANDIR}/man5/yaboot.conf.5.gz
@if [ -L ${ROOT}/boot/yaboot -a ! -e ${ROOT}/boot/yaboot ] ; then rm -f ${ROOT}/boot/yaboot ; fi
@if [ -L ${ROOT}/boot/ofboot.b -a ! -e ${ROOT}/boot/ofboot.b ] ; then rm -f ${ROOT}/boot/ofboot.b ; fi
@echo
@echo "Deinstall successful."
@echo "${ROOT}/etc/yaboot.conf has not been removed, you may remove it yourself if you wish."
uninstall: deinstall
include yaboot.deps