BLDDIRS clean up
[physics.git] / src / Makefile
1
2 LIBGL  := -lGL -lGLU
3 LIBSDL := `sdl-config --libs`
4 LIBS   := ${LIBSDL} ${LIBGL}
5
6 OPTFLAGS := -O2
7 DBGFLAGS := -ggdb
8 PRFFLAGS := ${DBGFLAGS} -pg
9 MYFLAGS  := -Wall -pedantic -ansi
10 CXXFLAGS := ${MYFLAGS} ${DBGFLAGS}
11
12 VALFLAGS := --leak-check=full
13
14 CXX := g++
15
16 SRCS := # := start
17
18 DIRS := # := start
19 DIRS += ./
20 DIRS += Entities/
21 DIRS += GameStates/
22 DIRS += Effects/
23 DIRS += config/
24 DIRS += input/
25 DIRS += graphics/
26
27 include $(addsuffix /files.mk,${DIRS})
28
29 OBJSDIR := ../objs/
30 OBJS    := ${SRCS:.cpp=.o}
31 OBJS    := $(addprefix ${OBJSDIR},${OBJS})
32
33 DEPSDIR := ../deps/
34 DEPS    := ${SRCS:.cpp=.d}
35 DEPS    := $(addprefix ${DEPSDIR},${DEPS})
36
37 WORKINGDIR  := ../bin/
38 TARGETNAME  := run_physics
39 TARGETTMP   := ${OBJSDIR}${TARGETNAME}
40 TARGET                  := ${WORKINGDIR}${TARGETNAME}
41
42 DEPSBLDDIRS := $(addprefix ${DEPSDIR},${DIRS})
43 OBJSBLDDIRS := $(addprefix ${OBJSDIR},${DIRS})
44 BLDDIRS := ${OBJSBLDDIRS} ${DEPSBLDDIRS} ${WORKINGDIR}
45
46
47 VERBOSE := 0
48
49 ifeq (${VERBOSE},0)
50     # quiet the echo command
51     Q1 := @
52     # quiet the command that is `replaced' by an echo
53     Q2 := @
54 else
55     # EAT the echo command as if it was not there
56     Q1 := @true # NOTE: the space between @true and the # is VERY important!!
57     # do not quiet the command output
58     Q2 :=
59 endif
60
61 .PHONY: all
62 all: ${TARGET}
63
64 # rule to copy tmp target to working directory
65 ${TARGET}: ${TARGETTMP} | ${WORKINGDIR}
66         ${Q1}echo "cp: $@"
67         ${Q2}cp $^ $@
68
69 # how to link the main target
70 ${TARGETTMP}: ${OBJS}
71         ${Q1}echo "${CXX}: $@"
72         ${Q2}${CXX} ${CXXFLAGS} -o $@ $^ ${LIBS}
73
74 # how to make a directory
75 ${BLDDIRS}:
76         ${Q2}mkdir -p $@
77
78 # rule to make a depend file from a .cpp
79 ${DEPSDIR}%.d: %.cpp | ${DEPSBLDDIRS}
80         ${Q1}echo "DEP: $@"
81         ${Q2}${CXX} -MM ${CXXFLAGS} $< | sed 's,\(^.*\):,${OBJSDIR}\1 $@:,' > $@
82
83 # rule to make an object file from a .cpp
84 ${OBJSDIR}%.o: %.cpp | ${OBJSBLDDIRS}
85         ${Q1}echo "${CXX}: $@"
86         ${Q2}${CXX} ${CXXFLAGS} -c -o $@ $<
87
88
89 tags: ${SRCS}
90         ${Q1}echo "ctags: $@"
91         ${Q2}ctags $^
92
93
94 .PHONY: clean
95 clean:
96         ${Q1}echo "CLEAN: OBJS"
97         ${Q2}rm -f ${OBJS}
98         ${Q1}echo "CLEAN: TARGET"
99         ${Q2}rm -f ${TARGET}
100
101 .PHONY: distclean
102 distclean: clean
103         ${Q1}echo "CLEAN: DEPS"
104         ${Q2}rm -f ${DEPS}
105         ${Q1}echo "CLEAN: tags prof gmon.out"
106         ${Q2}rm -f tags prof gmon.out
107
108 .PHONY: gitclean
109 gitclean:
110         ${Q1}echo "git-clean: show, use gitcleanf to force"
111         ${Q2}cd ..; git clean -nxd
112
113 .PHONY: gitcleanf
114 gitcleanf:
115         ${Q1}echo "git-clean: forced"
116         ${Q2}cd ..; git clean -fxd
117
118 .PHONY: tar
119 tar: ../physics.tar.bz2
120
121 .PHONY: ../physics.tar.bz2
122 ../physics.tar.bz2:
123         @echo "git-archive: Warning, archives HEAD not current"
124         ${Q1}echo "git-archive: ../physics.tar.bz2"
125         ${Q2}cd ..; git-archive --prefix=physics/ HEAD | bzip2 > physics.tar.bz2
126
127 .PHONY: run
128 run: all
129         cd ${WORKINGDIR}; ./${TARGETNAME}
130
131 .PHONY: gdb
132 gdb: all
133         cd ${WORKINGDIR}; gdb ${TARGETNAME}
134
135 .PHONY: cgdb
136 cgdb: all
137         cd ${WORKINGDIR}; cgdb ${TARGETNAME}
138
139 .PHONY: val
140 val: all
141         cd ${WORKINGDIR}; valgrind ${VALFLAGS} ./${TARGETNAME}
142
143 .PHONY: prof
144 prof: run
145         cd ${WORKINGDIR}; gprof -b ${TARGETNAME} > src/prof
146         kprof -f prof
147
148 MINGMAKEARGS := "LIBGL      := -lopengl32 -lglu32" \
149                 "LIBSDL     := `/usr/mingw32/bin/sdl-config --libs`" \
150                 "CXXFLAGS   := ${OPTFLAGS}" \
151                 "CXX        := mingw32-g++" \
152                 "OBJSDIR    := ../objs-mingw32/" \
153                 "WORKINGDIR := ../bin-mingw32/" \
154                 "TARGETNAME := run_physics.exe"
155
156 .PHONY: mingw32
157 mingw32:
158         ${Q1}echo "make: mingw32"
159         ${Q2}${MAKE} ${MINGMAKEARGS} clean all
160
161 -include ${DEPS}