summaryrefslogtreecommitdiff
path: root/msdos/makefile.emx
blob: 3a50b5b190f7f9c7c72a63f4b3666169dfa34ae6 (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
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
# Makefile for Zip, ZipCloak, ZipNote and ZipSplit
# using emx 0.9c for DOS.
# By Kai-Uwe Rommel, Chr. Spieler, E-Yen Tan (and others).
# Last updated 7th January 2007.
#
# This Makefile is a stripped down version of win32/Makefile.emx that
# builds executables applying the default MSDOS emx setup.  For variant
# targets (using zlib), and cross-compilation for WIN32 or OS/2, take a
# look into "win32/makefile.emx" resp. "os2/makefile.os2".
#
# Supported Make utilities:
# - Microsoft/IBM nmake (e.g. from MSC 6.0 or newer)
# - dmake 3.8 or higher
# - GNU make, at least version 3.68 (GNUish 16-bit port, RSXNT Make 3.75 in a
#   Win95/WinNT DOS box, DJGPP v1.12 Make 3.71, some versions of DJGPP v2.x
#   32-bit Make; current DJGPP v2.01 Make 3.76.1 does NOT work)
# - NOT watcom make
# The "smart" Make utilities mentioned below are Christian Spieler's
# enhanced version of GNUish 16-bit Make (3.74) and his adaption of these
# GNU Make sources to EMX (32-bit).

# Supported 32-bit C Compilers for MSDOS:
# - GNU gcc (emx kit 0.9c or newer, 32-bit)

# Supported Assemblers:
# - GNU as with GNU gcc


# To use, enter "make/nmake/dmake -f msdos/makefile.emx"
# (this makefile depends on its name being "msdos/makefile.emx").

# emx 0.9c, gcc, a.out format, for MS-DOS
CC=gcc -O2 -m486 -Wall
CFLAGS=-DDOS -DMSDOS -DASM_CRC
AS=gcc
ASFLAGS=-Di386
LDFLAGS=-o ./
LDFLAGS2=-s -Zsmall-conv
OUT=-o
OBJ=.o
CRCA_O=crc_gcc.o
OBJA=matchgcc.o
OBJZS=msdos.o
OBJUS=msdos_.o
OSDEP_H=msdos/osdep.h
ZIPUP_H=msdos/zipup.h

#default settings for target dependent macros:
DIRSEP = /
AS_DIRSEP = /
RM = del
LOCAL_OPTS = $(LOCAL_ZIP)
CCFLAGS = $(CFLAGS) $(LOCAL_OPTS)


OBJZ1 = zip$(OBJ) zipfile$(OBJ) zipup$(OBJ) fileio$(OBJ) util$(OBJ) \
	crc32$(OBJ) $(CRCA_O)
OBJZ2 = globals$(OBJ) deflate$(OBJ) trees$(OBJ) crypt$(OBJ) \
	ttyio$(OBJ)
OBJZ  = $(OBJZ1) $(OBJZ2) $(OBJZS) $(OBJA)

OBJU1 = zipfile_$(OBJ) fileio_$(OBJ) util_$(OBJ) globals$(OBJ)
OBJU  = $(OBJU1) $(OBJUS)

OBJN  = zipnote$(OBJ) $(OBJU)
OBJS  = zipsplit$(OBJ) $(OBJU)
OBJC1 = zipcloak$(OBJ) crc32_$(OBJ) crypt_$(OBJ) ttyio$(OBJ)
OBJC  = $(OBJC1) $(OBJU)

ZIP_H = zip.h ziperr.h tailor.h $(OSDEP_H)

# rules

.SUFFIXES: .c $(OBJ)

.c$(OBJ):
	$(CC) -c -I. $(CCFLAGS) $(OUT)$@ $<

# targets

all:    zip.exe zipnote.exe zipsplit.exe zipcloak.exe

zip$(OBJ):      zip.c $(ZIP_H) revision.h crc32.h crypt.h ttyio.h
zipfile$(OBJ):  zipfile.c $(ZIP_H) crc32.h
zipup$(OBJ):    zipup.c $(ZIP_H) revision.h crc32.h crypt.h $(ZIPUP_H)
fileio$(OBJ):   fileio.c $(ZIP_H) crc32.h
util$(OBJ):     util.c $(ZIP_H)
globals$(OBJ):  globals.c $(ZIP_H)
deflate$(OBJ):  deflate.c $(ZIP_H)
trees$(OBJ):    trees.c $(ZIP_H)
crc32$(OBJ):    crc32.c $(ZIP_H) crc32.h
crypt$(OBJ):    crypt.c $(ZIP_H) crypt.h crc32.h ttyio.h
ttyio$(OBJ):    ttyio.c $(ZIP_H) crypt.h ttyio.h

msdos$(OBJ):    msdos/msdos.c $(ZIP_H)
	$(CC) -c -I. $(CCFLAGS) msdos$(DIRSEP)msdos.c

win32zip$(OBJ): win32/win32zip.c $(ZIP_H) win32/win32zip.h win32/nt.h
	$(CC) -c -I. $(CCFLAGS) win32$(DIRSEP)win32zip.c

win32$(OBJ):    win32/win32.c $(ZIP_H) win32/win32zip.h
	$(CC) -c -I. $(CCFLAGS) win32$(DIRSEP)win32.c

nt$(OBJ):       win32/nt.c $(ZIP_H) win32/nt.h
	$(CC) -c -I. $(CCFLAGS) win32$(DIRSEP)nt.c

crc_gcc$(OBJ):  crc_i386.S                                      # 32bit, GNU AS
	$(AS) $(ASFLAGS) -x assembler-with-cpp -c -o $@ crc_i386.S

matchgcc$(OBJ): match.S
	$(AS) $(ASFLAGS) -x assembler-with-cpp -c -o $@ match.S

zipcloak$(OBJ): zipcloak.c $(ZIP_H) revision.h crc32.h crypt.h ttyio.h
zipnote$(OBJ):  zipnote.c $(ZIP_H) revision.h
zipsplit$(OBJ): zipsplit.c $(ZIP_H) revision.h

zipfile_$(OBJ): zipfile.c $(ZIP_H) crc32.h
	$(CC) -c -I. $(CCFLAGS) -DUTIL $(OUT)$@ zipfile.c

fileio_$(OBJ):  fileio.c $(ZIP_H) crc32.h
	$(CC) -c -I. $(CCFLAGS) -DUTIL $(OUT)$@ fileio.c

util_$(OBJ):    util.c $(ZIP_H)
	$(CC) -c -I. $(CCFLAGS) -DUTIL $(OUT)$@ util.c

crc32_$(OBJ):   crc32.c $(ZIP_H) crc32.h
	$(CC) -c -I. $(CCFLAGS) -DUTIL $(OUT)$@ crc32.c

crypt_$(OBJ):   crypt.c $(ZIP_H) crypt.h crc32.h ttyio.h
	$(CC) -c -I. $(CCFLAGS) -DUTIL $(OUT)$@ crypt.c

msdos_$(OBJ):   msdos/msdos.c $(ZIP_H)
	$(CC) -c -I. $(CCFLAGS) -DUTIL $(OUT)$@ msdos$(DIRSEP)msdos.c

win32_$(OBJ):   win32/win32.c $(ZIP_H) win32/win32zip.h
	$(CC) -c -I. $(CCFLAGS) -DUTIL $(OUT)$@ win32$(DIRSEP)win32.c

# This next bit is nasty, but is needed to overcome the MS-DOS command
# line limit as response files for emx's gcc seem to only work if each
# file is on a different line. DJGPP doesn't do this (if you are at all
# interested).

zip.exe: $(OBJZ)
# for DUMB make utilities, uncomment the following commands:
	-@$(RM) zip.rsp
	@for %%f in ($(OBJZ1)) do echo %%f >> zip.rsp
	@for %%f in ($(OBJZ2)) do echo %%f >> zip.rsp
	@for %%f in ($(OBJZS) $(OBJA)) do echo %%f >> zip.rsp
	$(CC) $(LDFLAGS)$@ @zip.rsp $(LDFLAGS2)
	@$(RM) zip.rsp
# smart make utilities (like well done ports of GNU Make) can use this:
#	$(CC) $(LDFLAGS)$@ $(OBJZ) $(LDFLAGS2)

zipcloak.exe: $(OBJC)
# for DUMB make utilities, uncomment the following commands:
	-@$(RM) zipcloak.rsp
	@for %%f in ($(OBJC1)) do echo %%f >> zipcloak.rsp
	@for %%f in ($(OBJU1)) do echo %%f >> zipcloak.rsp
	@for %%f in ($(OBJUS)) do echo %%f >> zipcloak.rsp
	$(CC) $(LDFLAGS)$@ @zipcloak.rsp $(LDFLAGS2)
	@$(RM) zipcloak.rsp
# smart make utilities (like well done ports of GNU Make) can use this:
#	$(CC) $(LDFLAGS)$@ $(OBJC) $(LDFLAGS2)

zipnote.exe: $(OBJN)
	$(CC) $(LDFLAGS)$@ $(OBJN) $(LDFLAGS2)

zipsplit.exe: $(OBJS)
	$(CC) $(LDFLAGS)$@ $(OBJS) $(LDFLAGS2)