aboutsummaryrefslogtreecommitdiff
path: root/makefile
blob: a42e9575c7449e5dfbced9e8b46a845bce03783b (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
#!/usr/bin/env wmake

# All binaries to build
bins = test.exe chudisk.sys chud.exe

# Object files for chdisk
chudisk_objs = chudisk.obj chudinit.obj cio.obj

# Compiler arguments for DOS
dos_cflags = -bt=dos -3 -ms -osi -ox -w3 -wcd=202 -g=DGROUP
# -ms to use small memory model (this assumes ss == ds)
# -osi to optimize for size, put intrinsics inline (to avoid runtime calls)
# -ox extra optimization (impact is not very big)
# -w3 enables warnings
# -wcd=202 disables the unreferenced function warning (e.g., for inline functions in headers)

# Compiler arguments for the DOS drivers
dosdrv_cflags = -bt=dos -3 -ms -zu -s -osi -ox -w3 -wcd=202 -g=DGROUP
# -zu since ss != ds in the driver
# -s to disable stack checks, since it inserts calls to the runtime

# Full compiler command lines
compile_dos = *wcc -fo=$^@ $(dos_cflags) $[@
compile_dosdrv = *wcc -fo=$^@ $(dosdrv_cflags) $[@

# Object files

.BEFORE:
	# We need DOS and Windows headers, not host platform's
	set include=$(%watcom)/h/win;$(%watcom)/h

all: $(bins) .SYMBOLIC

test.exe: test.obj .AUTODEPEND
	*wlink system dos name $@ file { test.obj }

test.obj: test.c .AUTODEPEND
	*wcc -fo=$^@ -bt=dos -3 -osi -w3 -wcd=202 $[@

chudisk.sys: chudisk.lnk $(chudisk_objs) .AUTODEPEND
	*wlink @$[@ name $@ file { $(chudisk_objs) }

chudisk.obj: chudisk.c .AUTODEPEND
	$(compile_dosdrv)

chudinit.obj: chudinit.c .AUTODEPEND
	$(compile_dosdrv)

cio.obj: cio.c .AUTODEPEND
	$(compile_dosdrv)

chud.exe: chud.obj .AUTODEPEND
	*wlink name $@ system dos file { chud.obj }

chud.obj: chud.c .AUTODEPEND
	$(compile_dos)

clean: .SYMBOLIC
	rm -f $(bins) *.obj

# Build a zip with the driver binaries
zip: $(bins) .SYMBOLIC
	zip --DOS-names -fz- chu.zip $(bins)

srczip: .SYMBOLIC
	zip -fz- chusrc.zip COPYING README.md makefile *.lnk *.h *.c inc/*.h