added ogg/vorbis source code for ease of building on msvc
[laserbrain_demo] / Makefile
1 src = $(wildcard src/*.cc) \
2           $(wildcard src/audio/*.cc) \
3           $(wildcard src/machine/*.cc) \
4           $(wildcard src/blobs/*.cc) \
5           $(wildcard src/imgui/*.cc)
6 csrc = $(wildcard src/*.c) \
7            $(wildcard src/machine/*.c) \
8            $(wildcard src/blobs/*.c)
9 obj = $(src:.cc=.o) $(csrc:.c=.o)
10 dep = $(obj:.o=.d)
11 bin = demo
12
13 opt = -O3 -ffast-math
14 dbg = -g
15
16 incpath = -Isrc -Isrc/machine -I/usr/local/include `pkg-config --cflags sdl2`
17 #libpath = -L/usr/local/lib
18
19 warn = -pedantic -Wall
20
21 CFLAGS = $(warn) $(opt) $(dbg) $(incpath) -fopenmp
22 CXXFLAGS = -std=c++11 $(warn) $(opt) $(dbg) $(incpath) -fopenmp
23 LDFLAGS = $(libpath) -ldrawtext $(libgl_$(sys)) $(libal_$(sys)) -lm -lgmath -lvmath \
24                   -limago -lresman -lpthread -lassimp -ltreestore -lgoatvr \
25                   `pkg-config --libs sdl2 freetype2` -lpng -ljpeg -lz -lvorbisfile -lgomp
26
27 sys ?= $(shell uname -s | sed 's/MINGW.*/mingw/')
28 libgl_Linux = -lGL -lGLU -lGLEW
29 libgl_Darwin = -framework OpenGL -lGLEW
30 libgl_mingw = -lopengl32 -lglu32 -lglew32
31 #libgl_mingw = -lglu32 -Wl,-Bstatic -lglew32 -Wl,-Bdynamic -lopengl32
32
33 libal_Linux = -lopenal
34 libal_Darwin = -framework OpenAL
35 libal_mingw = -lopenal
36
37 ifeq ($(sys), mingw)
38         obj = $(src:.cc=.w32.o) $(csrc:.c=.w32.o)
39         dep     = $(obj:.o=.d)
40
41         bin = demo.exe
42         LDFLAGS += -lmingw32 -lSDL2main -lSDL2 -lwinmm -mwindows
43         #CFLAGS += -DGLEW_STATIC
44         #CXXFLAGS += -DGLEW_STATIC
45 endif
46
47 $(bin): .clang_complete $(obj)
48         $(CXX) -o $@ $(obj) $(LDFLAGS)
49
50 .PHONY: cross
51 cross:
52         $(MAKE) CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ sys=mingw
53
54 .PHONY: cross-clean
55 cross-clean:
56         $(MAKE) CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ sys=mingw clean
57
58 .PHONY: instalien
59 instalien: demo.exe
60         cp $< /alien/demo/$<
61         mkdir -p /alien/demo/sdr && cp sdr/* /alien/demo/sdr/
62         for i in `tools/dlldepends | grep -v '++'`; do echo $$i; rsync $$i /alien/demo; done
63
64 .clang_complete: Makefile
65         rm -f $@
66         for i in $(CXXFLAGS); do echo $$i >>$@; done
67
68 -include $(dep)
69
70 %.d: %.c
71         @$(CPP) $(CFLAGS) $< -MM -MT $(@:.d=.o) >$@
72
73 %.d: %.cc
74         @$(CPP) $(CXXFLAGS) $< -MM -MT $(@:.d=.o) >$@
75
76 %.w32.o: %.c
77         $(CC) -o $@ $(CFLAGS) -c $<
78
79 %.w32.o: %.cc
80         $(CC) -o $@ $(CXXFLAGS) -c $<
81
82 .PHONY: clean
83 clean:
84         rm -f $(obj) $(bin)
85
86 .PHONY: cleandep
87 cleandep:
88         rm -f $(dep)
89
90 .PHONY: data
91 data:
92         tools/prepare_data