-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
149 lines (114 loc) · 3.33 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
#
# Makefile for cw2dmk family of tools
#
# Makefile will guess if it's building on MS-DOS. Passing in
# "HOST_OS=MSDOS" or "HOST_OS=" overrides the guess.
#
# To build MS-DOS binaries on Linux using DJGPP, pass in
# "TARGET_OS=MSDOS" and set $(CC) to point to the DJGPP compiler.
#
ifneq ($(COMSPEC),)
HOST_OS ?= MSDOS
endif
ifeq ($(HOST_OS),MSDOS)
TARGET_OS = MSDOS
RM = deltree /y
CP = rem cp
else
TARGET_OS =
RM = rm -f --
CP = cp --
endif
ifeq ($(TARGET_OS),MSDOS)
CC = i586-pc-msdosdjgpp-gcc
E = .exe
O = obj
PCILIB =
else
CC = gcc
E =
O = o
PCILIB = -lpci -lz
endif
CFLAGS = -O3 -g -Wall -std=gnu99
version := $(shell grep VERSION version.h | sed -re 's/^.*"([^"]+)".*$$/\1/')
cc_dump_mach := $(shell $(CC) -dumpmachine)
target_arch = $(firstword $(subst -, ,$(cc_dump_mach)))
TAR_PREFIX = cw2dmk-$(version)
TAR_SRC = $(TAR_PREFIX)-src.tar.gz
TAR_LINUX = $(TAR_PREFIX)-linux-$(target_arch).tar.gz
TAR_MSDOS = $(TAR_PREFIX)-msdos.tar.gz
TAR_TARGETS = $(TAR_SRC) \
$(if $(subst MSDOS,,$(TARGET_OS)),$(TAR_MSDOS),$(TAR_LINUX))
CWEXE = cw2dmk$E dmk2cw$E cwtsthst$E
EXE = $(CWEXE) dmk2jv3$E jv2dmk$E
TXT = cw2dmk.txt dmk2cw.txt dmk2jv3.txt jv2dmk.txt
NROFFFLAGS = -c -Tascii
FIRMWARE = firmware/rel2f2.cw4
.SUFFIXES: .man .txt
%.txt: %.man
nroff -man $(NROFFFLAGS) $< | col -b | cat -s > $*.txt
ifneq ($(TARGET_OS),MSDOS)
else
EXE += cwsdpmi.exe
.SUFFIXES: .obj
%.obj: %.c
$(CC) -c $(CFLAGS) -o $@ $<
endif
BUILD_TARGETS = firmware.h $(TXT) $(EXE)
RELEASE_TARGETS = COPYING README ChangeLog $(TXT) $(EXE)
clean = $(EXE) $(TAR_TARGETS) crc$E parselog$E *.$O *~
veryclean = $(clean) $(TXT) firmware.h *.exe *.obj *.o *.tar.gz
all: progs manpages
progs: $(EXE)
manpages: $(TXT)
catweasl.$O: catweasl.c cwfloppy.h firmware.h
cw2dmk$E: cw2dmk.c catweasl.$O cwpci.$O parselog.$O crc.c \
cwfloppy.h kind.h dmk.h version.h
$(CC) $(CFLAGS) -o $@ $< catweasl.$O cwpci.$O parselog.$O $(PCILIB) -lm
dmk2cw$E: dmk2cw.c catweasl.$O cwpci.$O crc.c \
cwfloppy.h kind.h dmk.h version.h
$(CC) $(CFLAGS) -o $@ $< catweasl.$O cwpci.$O $(PCILIB)
dmk2jv3$E: dmk2jv3.c crc.c dmk.h jv3.h
$(CC) $(CFLAGS) -o $@ $<
jv2dmk$E: jv2dmk.c crc.c dmk.h jv3.h
$(CC) $(CFLAGS) -o $@ $<
cwtsthst$E: testhist.c catweasl.$O cwpci.$O cwfloppy.h
$(CC) $(CFLAGS) -o $@ $< catweasl.$O cwpci.$O $(PCILIB) -lm
crc$E: crc.c
$(CC) $(CFLAGS) -DTEST -o $@ $<
parselog$E: parselog.c
$(CC) $(CFLAGS) -DTEST -o $@ $<
firmware.h: $(FIRMWARE)
(echo 'unsigned char firmware[] = { ' ;\
hexdump -v -e '12/1 "%#x, " "\n"' $< ;\
echo '};') | sed -e 's/ ,//g' > $@
cwsdpmi.exe: cwsdpmi/bin/CWSDPMI.EXE
$(CP) "$<" "$@"
chmod -- +x "$@"
clean veryclean:
$(if $(wildcard $($@)),$(RM) $(wildcard $($@)))
$(TAR_SRC): firmware.h
git archive \
--format=tar.gz \
--prefix="$(TAR_PREFIX)/" \
$(addprefix --add-file=,$+) \
HEAD > "$@"
ifneq ($(TARGET_OS),MSDOS)
$(TAR_LINUX): $(RELEASE_TARGETS)
tar -czf "$@" --transform='s:^:$(TAR_PREFIX)/:' -- $+
$(TAR_MSDOS):
+$(MAKE) TARGET_OS=MSDOS "$@"
else
$(TAR_MSDOS): $(RELEASE_TARGETS)
tar -czf "$@" --transform='s:^:$(TAR_PREFIX)/:' -- $+
endif
ifneq ($(HOST_OS),MSDOS)
release: $(TAR_TARGETS)
fullrelease: release $(TAR_PREFIX)-msdos.tar.gz
endif
setuid: $(CWEXE)
chown root $(CWEXE)
chmod 4755 $(CWEXE)
.PHONY: all progs manpages clean veryclean release fullrelease setuid
.DELETE_ON_ERROR: