-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
165 lines (133 loc) · 5.99 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
# Makefile
# Written by Joe R. Doupnik, 1991
# Rejigged for GNU Make, jwasm, and Open Watcom by hackerb9, Sept 2021
# Define subsystems to remove
#LITESUBSYSTEMS+=-Dno_graphics
#LITESUBSYSTEMS+=-Dno_terminal
#LITESUBSYSTEMS+=-Dno_tcp
#LITESUBSYSTEMS+=-Dno_network
######################################################################
# OBSOLETE
# File MSVIBM.MAK 2 Feb 1991
# Make file for MS Kermit using Microsoft's Make v4 and later and NMK.
# Written by Joe R. Doupnik
# MASM v6 or above and Microsoft C v6 or v7 are required.
# If using MASM v6 execute this command file as
# NMK /f <name of this file> kermit.exe
# or rename this file to be "makefile" and say
# NMK kermit.exe.
# The final argument, kermit.exe, tells NMK which item to make.
# NMK is smaller than NMAKE; MASM.EXE (v6) provides v5 compatibility.
######################################################################
######################################################################
# OBSOLETE
# MSC CL switches:
# /AS for small memory model (64KB code, everything else in 64KB DGROUP)
# /Zp1 for pack structures on one byte boundaries.
# /Gs to eliminate stack checking (optional, saves a little space & time).
# and the two switches below for MSC v7
# /Zl to say no default library
# /Of for p-code quoting (supposed to be the default, but is broken)
# /nologo stops displaying MSC copyright notice on every compile
######################################################################
# OBSOLETE
# MASM v6 switch /mx means preserve case of externals, required.
# MASM v6 switch /Zm means use MASM v5.1 & earlier syntax. This switch is
# implied by running v6 of MASM.EXE rather than running ML directly.
######################################################################
# OBSOLETE
# The inference macros below call CL and MASM to create .o modules.
# .c.obj:
# cl /AS /Zp1 /Gs /W3 /Zl /Of /nologo -c $*.c
# .asm.obj:
# masm /mx $*.asm;
######################################################################
### Set up compilation environment for Open Watcom compiler.
# Set the WATCOM environment variable if you wish to override these defaults.
export WATCOM ?= ${HOME}/ow2
export PATH += :${WATCOM}/bin
export INCLUDE ?= ${WATCOM}/h
### Testing: Maybe wcc compiler works better? Nope, no better than owcc.
# -q Quiet: Don't show logo at startup
# -bt=DOS Compile a DOS .exe file
# -bc Application type "console"
# -0 16-bit 8086
# -ms small memory model: 64K code, 64K data group
# -zp=1 pack structure members with alignment=1 byte
# -s remove stack overflow checks; optional
# -ze enable NEAR, FAR, EXPORT, etc
# -zl remove default library information
# -ecc Set calling convention to C (_underscore)
# -DMSDOS define MSDOS so netlibc.c will use _ourdiv()
#
#%.o : %.c
# wcc -q -bt=DOS -bc -0 -ms -zp=1 -s -ze -zl -ecc -DMSDOS $*.c
### Build up command line for owcc compiler
# Compile and link for a DOS .exe file
OWCCARGS+=-bdos
# 16-bit 8086
OWCCARGS+=-march=i86
# small memory model: 64K code, 64K data group == /AS
OWCCARGS+=-mcmodel=s
# pack structures on one byte boundaries == /Zp=1
OWCCARGS+=-fpack-struct=1
# no stack checking; optional optimization == /Gs
OWCCARGS+=-fno-stack-check
# no default library == /Zl
OWCCARGS+=-fnostdlib
# Set calling convention to C (_underscore)
OWCCARGS+=-mabi=cdecl
# Define MSDOS so netlibc.c will use _ourdiv()
OWCCARGS+=-DMSDOS
# Remove debugging code to save about 20KB in .exe.
OWCCARGS+=-g0 -s
# Optimize (-O3 adds 2KB, -Os has no effect on size)
OWCCARGS+=-O3
# Allow optimizer to take multiple passes. (Has no effect on size)
OWCCARGS+=-frerun-optimizer
# MS Kermit 3.14 saved about 40K by using Microsoft's "PACKDATA".
# It doesn't seem to help with OWCC.
# Note that changing these values makes the segment size smaller which
# is not necessarily safe! Pointers on large data structures can wrap around.
#OWCCARGS+=-Wl,'OPTION PACKCODE=16K'
#OWCCARGS+=-Wl,'OPTION PACKDATA=16K'
%.o : %.c
owcc ${OWCCARGS} ${LITESUBSYSTEMS} -c $*.c
# Obsolete assembly method: masm /mx /Zm $*.asm;
### JWASM args
# -Cx Casemap=none. Preserve case of externals, required.
# -Zm Use MASM v5.1 syntax. Don't need to qualify fields with structure names.
# -Zp1 pack structures on one byte boundaries (needed?)
# -q Quiet: don't show statistics after assembling
# -e1000 show up to 1000 errors
%.o : %.asm
jwasm -Cx -Zm -Zp1 -q -e1000 ${LITESUBSYSTEMS} $<
objects = commandparser.o communication.o filehandling.o main.o \
receive.o script.o send.o server.o setcommand.o showcommand.o \
terminalemulation.o ibmkeyboard.o graphics.o ibmspecificx.o \
ibmspecificy.o ibmspecificz.o telnetinterface.o pdi.o \
telnetdriver.o tcp.o ethsupport.o dns.o arp.o bootp.o icmp.o \
packetdriver.o netlibc.o netutil.o
### kermit.exe is the first and hence the implied target if none is specified.
# OWCC serves as a nicer frontend to WLINK's wacky directives file.
# Use -fd=directives.lnk if you wish to see the .LNK file owcc creates.
kermit.exe: $(objects)
owcc ${OWCCARGS} -o kermit.exe $^
### UPX compression utility
# UPX compress the Kermit.exe file from 300 KB to 152 KB.
upx: kermit.exe
upx --8086 kermit.exe
### OBSOLETE
# Here's how to link with wlink if we decide to go back to that.
#kermit.exe: $(objects)
# wlink Option quiet Name kermit.exe System DOS File { $^ }
### These are the dependency relations (.o depends on .asm/.c and .h):
commandparser.o communication.o filehandling.o main.o receive.o script.o send.o server.o setcommand.o showcommand.o terminalemulation.o ibmkeyboard.o graphics.o ibmspecificx.o ibmspecificy.o ibmspecificz.o : symboldefs.h
# Files below are for TCP/IP support
telnetinterface.o: symboldefs.h
telnetdriver.o tcp.o ethsupport.o dns.o arp.o bootp.o icmp.o packetdriver.o netlibc.o: netlibc.h
### Helpful imaginary targets
.PHONY : clean
clean :
rm kermit.exe $(objects) *.err 2>/dev/null || true
# End of Kermit Make file.