a6c99364310fb7ea5afba7287521d10926bdea7e
[dosdemo] / GNUmakefile
1 src = $(wildcard src/*.c) $(wildcard src/scr/*.c) $(wildcard src/glut/*.c)
2 asmsrc = $(wildcard src/*.asm)
3 obj = $(src:.c=.o) $(asmsrc:.asm=.o)
4 dep = $(obj:.o=.d)
5 bin = demo
6
7 asmsrc += cspr/dbgfont.asm cspr/confont.asm
8 bindata = data/loading.img
9
10 inc = -I/usr/local/include -Isrc -Isrc/3dgfx -Isrc/scr -Isrc/glut -Ilibs \
11           -Ilibs/imago/src -Ilibs/mikmod/include
12 def = -DMINIGLUT_USE_LIBC -DMIKMOD_STATIC
13 warn = -pedantic -Wall -Wno-unused-variable -Wno-unused-function
14 #opt = -O3 -ffast-math
15 dbg = -g
16
17 CFLAGS = $(arch) $(warn) $(opt) -fno-pie -fno-strict-aliasing $(dbg) $(inc)
18 LDFLAGS = $(arch) -no-pie -Llibs/imago -Llibs/mikmod -limago -lmikmod \
19                   $(sndlib_$(sys)) -lm
20
21 cpu ?= $(shell uname -m | sed 's/i.86/i386/')
22
23 ifeq ($(cpu), x86_64)
24         arch = -m32
25 endif
26
27 sys ?= $(shell uname -s | sed 's/MINGW.*/mingw/; s/IRIX.*/IRIX/')
28 ifeq ($(sys), mingw)
29         obj = $(src:.c=.w32.o)
30
31         bin = demo_win32.exe
32
33         LDFLAGS += -static-libgcc -lmingw32 -mconsole -lgdi32 -lwinmm \
34                            -lopengl32
35 else
36         LDFLAGS += -lGL -lX11 -lpthread
37 endif
38
39 sndlib_Linux = -lasound
40 sndlib_IRIX = -laudio
41 sndlib_mingw = -ldsound
42
43 .PHONY: all
44 all: data $(bin)
45
46 $(bin): $(obj) imago mikmod
47         $(CC) -o $@ $(obj) $(LDFLAGS)
48
49 -include $(dep)
50
51 %.o: %.asm
52         nasm -f elf -o $@ $<
53
54 %.w32.o: %.c
55         $(CC) -o $@ $(CFLAGS) -c $<
56
57 src/data.o: src/data.asm $(bindata)
58
59 %.d: %.c
60         @echo dep $@
61         @$(CPP) $(CFLAGS) $< -MM -MT $(@:.d=.o) >$@
62
63 .PHONY: libs
64 libs: imago anim mikmod
65
66 .PHONY: imago
67 imago:
68         $(MAKE) -C libs/imago
69
70 .PHONY: anim
71 anim:
72         $(MAKE) -C libs/anim
73
74 .PHONY: mikmod
75 mikmod:
76         $(MAKE) -C libs/mikmod
77
78 .PHONY: cleanlibs
79 cleanlibs:
80         $(MAKE) -C libs/imago clean
81         $(MAKE) -C libs/anim clean
82         $(MAKE) -C libs/mikmod clean
83
84 .PHONY: clean
85 clean:
86         rm -f $(obj) $(bin)
87
88 .PHONY: cleandep
89 cleandep:
90         rm -f $(dep)
91
92 .PHONY: data
93 data:
94         @tools/procdata
95
96
97 .PHONY: crosswin
98 crosswin:
99         $(MAKE) CC=i686-w64-mingw32-gcc sys=mingw