File: Makefile

package info (click to toggle)
cbios 0.25-2
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd, wheezy
  • size: 1,276 kB
  • ctags: 1,797
  • sloc: asm: 10,307; xml: 747; makefile: 159; python: 124; sed: 1
file content (158 lines) | stat: -rw-r--r-- 5,335 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
# $Id: Makefile 584 2010-11-20 15:08:23Z manuelbi $

# Select your assembler:
Z80_ASSEMBLER?=pasmo
#Z80_ASSEMBLER?=z80-as
#Z80_ASSEMBLER?=sjasm
#Z80_ASSEMBLER?=tniasm

PACKAGE_NAME:=cbios
VERSION:=$(shell cat version.txt)
PACKAGE_FULL:=$(PACKAGE_NAME)-$(VERSION)

#CHANGELOG_REVISION:=\
#        $(shell sed -ne "s/\$$Id: ChangeLog \([^ ]*\).*/\1/p" ChangeLog)
#TITLE:="C-BIOS $(VERSION)-dev$(CHANGELOG_REVISION)"
TITLE:="C-BIOS $(VERSION)      cbios.sf.net"
VERSION_FILE:=derived/asm/version.asm

ROMS:=main_msx1 main_msx1_jp main_msx1_br main_msx2 main_msx2_jp main_msx2_br \
	main_msx2+ main_msx2+_jp main_msx2+_br sub logo_msx1 logo_msx2 \
	logo_msx2+ music disk basic
ROMS_FULLPATH:=$(ROMS:%=derived/bin/cbios_%.rom)

# If needed override location of pasmo.
PASMO=pasmo

# Mark all logical targets as such.
.PHONY: all dist clean list_stub

all: $(ROMS_FULLPATH)

ifeq ($(Z80_ASSEMBLER),sjasm)
# Workaround for SjASM producing output file even if assembly failed.
.DELETE_ON_ERROR: $(ROMS_FULLPATH)
endif

ifeq ($(Z80_ASSEMBLER),z80-as)
# Z80-as can only place code into relocatable sections, we preprocess the sections and use
# z80-ld to produce the final .rom files
ASMDIR=derived/asm
SEDSCR = -e 's/ds[ \t]\+\(\$$[0-9a-fA-F]\+[ \t]*-[ \t]*\$$\)/ds\tABS0+\1/' \
	-e 's/[ \t]\+org[ \t]\+\(\$$[0-9a-fA-F]\+\|[0-9]\+\)/\
	;\0\nABS0: equ \$$-\1\n;;;-Ttext \1 --entry \1/'  \
	-e 's:\.\./derived/asm/::'
else
ASMDIR=src
endif

$(VERSION_FILE): ChangeLog version.txt
	@echo "Creating: $@"
	@mkdir -p $(@D)
	@echo '  db $(TITLE)' > $@

$(ROMS_FULLPATH): derived/bin/cbios_%.rom: vdep/%.asm
	@echo "Assembling: $(<:vdep/%=$(ASMDIR)/%)"
	@mkdir -p $(@D)
	@mkdir -p derived/lst
ifeq ($(Z80_ASSEMBLER),sjasm)
	@sjasm -iderived/asm -l $(<:vdep/%=src/%) $@ $(@:derived/bin/%.rom=derived/lst/%.lst)
endif
ifeq ($(Z80_ASSEMBLER),pasmo)
	@$(PASMO) -I src -I derived/asm $(<:vdep/%=src/%) \
		$@ $(@:derived/bin/%.rom=derived/lst/%.lst)
endif
# TODO: The "mv" can cause problems in parallel builds, it would be better if
#       tniASM could write distinct output files (can it?).
ifeq ($(Z80_ASSEMBLER),tniasm)
	@cd src && tniasm $(<:vdep/%=%) ../$@
	@mv src/tniasm.sym $(@:derived/bin/%.rom=derived/lst/%.sym)
endif
ifeq ($(Z80_ASSEMBLER),z80-as)
	@mkdir -p derived/obj
	@z80-as -I derived/asm -I src $(<:vdep/%=$(ASMDIR)/%) -Wall \
		-o $(@:derived/bin/%.rom=derived/obj/%.o) \
		-as=$(@:derived/bin/%.rom=derived/lst/%.lst)
	@z80-ld -n --oformat binary $(@:derived/bin/%.rom=derived/obj/%.o) `\
		grep "^;;;-Ttext" $(<:vdep/%=$(ASMDIR)/%) | \
		sed -e "s/;//g" -e 's/\\$$/0x/g'` -o $@
endif

ifeq ($(filter clean,$(MAKECMDGOALS)),)

# Include main dependency files.
-include $(ROMS:%=derived/dep/%.dep)

GENERATED_FILES:=$(VERSION_FILE)
GENERATED_DEPS:=$(GENERATED_FILES:derived/asm/%.asm=derived/dep/%.dep)

# Note: The dependency generation code is here twice.
#       That's not great, but the alternatives are worse.

$(GENERATED_DEPS): derived/dep/%.dep: derived/asm/%.asm
	@echo "Depending: $<"
	@mkdir -p $(@D)
	@echo "INCLUDES:=" > $@
	@sed -n '/include/s/^[\t ]*include[\t ]*"\(\.\.\/derived\/asm\/\)\{0,1\}\(.*\)".*$$/INCLUDES+=\2/p' \
		< $< >> $@
	@echo "INCBINS:=" >> $@
	@sed -n '/incbin/s/^[\t ]*incbin[\t ]*"\(\.\.\/derived\/asm\/\)\{0,1\}\(.*\)".*$$/INCBINS+=\2/p' \
		< $< >> $@
	@echo ".SECONDARY: $(<:derived/asm/%=vdep/%)" >> $@
	@echo "$(<:derived/asm/%=vdep/%): $<" >> $@
	@echo "$(<:derived/asm/%=vdep/%): \$$(INCLUDES:%=vdep/%) \$$(INCBINS:%=src/%)" >> $@
	@echo "ifneq (\$$(INCLUDES),)" >> $@
	@echo "-include \$$(INCLUDES:%.asm=derived/dep/%.dep)" >> $@
	@echo "endif" >> $@

derived/dep/%.dep: src/%.asm
	@echo "Depending: $<"
	@mkdir -p $(@D)
	@echo "INCLUDES:=" > $@
	@sed -n '/include/s/^[\t ]*include[\t ]*"\(\.\.\/derived\/asm\/\)\{0,1\}\(.*\)".*$$/INCLUDES+=\2/p' \
		< $< >> $@
	@echo "INCBINS:=" >> $@
	@sed -n '/incbin/s/^[\t ]*incbin[\t ]*"\(\.\.\/derived\/asm\/\)\{0,1\}\(.*\)".*$$/INCBINS+=\2/p' \
		< $< >> $@
	@echo ".SECONDARY: $(<:src/%=vdep/%)" >> $@
	@echo "$(<:src/%=vdep/%): $(<:src/%=$(ASMDIR)/%)" >> $@
	@echo "$(<:src/%=vdep/%): \$$(INCLUDES:%=vdep/%) \$$(INCBINS:%=src/%)" >> $@
	@echo "ifneq (\$$(INCLUDES),)" >> $@
	@echo "-include \$$(INCLUDES:%.asm=derived/dep/%.dep)" >> $@
	@echo "endif" >> $@
else
# Clean build -> treat all dependencies as outdated.
.PHONY: $(ROMS:%=vdep/%.asm)
endif

ifneq ($(ASMDIR),src)
$(ASMDIR)/%.asm: src/%.asm
	@echo "Preprocessing: $<"
	@mkdir -p $(@D)
	@sed $(SEDSCR) \
		< $< > $@
endif

clean:
	@rm -rf derived

dist: all
	@rm -rf derived/dist
	@mkdir -p derived/dist/$(PACKAGE_FULL)
	@find . -type f '!' -path '*/.svn/*' \
		'!' -path './derived/*' '!' -path './debian/*' \
		'!' -name '.*' \
		-exec cp --parents "{}" derived/dist/$(PACKAGE_FULL) ';'
	@find configs/openMSX/* -maxdepth 0 -type d '!' -name '.svn' \
		-exec mkdir "derived/dist/$(PACKAGE_FULL)/{}/roms" ';'
	@SCRIPT=`mktemp` \
		&& sha1sum $(ROMS_FULLPATH) | sed -nf tools/subst_sha1.sed > $$SCRIPT \
		&& sed -s -i -f $$SCRIPT \
			derived/dist/$(PACKAGE_FULL)/configs/openMSX/*/hardwareconfig.xml \
		&& rm $$SCRIPT
	@mkdir -p derived/dist/$(PACKAGE_FULL)/roms
	@cp $(ROMS_FULLPATH) derived/dist/$(PACKAGE_FULL)/roms
	@cd derived/dist ; zip -9 -r $(PACKAGE_FULL).zip $(PACKAGE_FULL)

list_stub:
	cd src && grep -n _text *.asm | grep ',0$$' | awk '{print $$1}' | sed -e 's/_text://'