- LIBGL := -lGL -lGLU
- LIBSDL := `sdl-config --libs`
- LIBS := ${LIBSDL} ${LIBGL} -lpg
+ # set this on the command line to 1 to get a windows 32 build
+ WIN32 := 0
+
+ # set this on the command line to 1 to get a final (none debug) build
+ FINAL := 0
+
+
+ ifeq (${WIN32},1)
+ LIBGL := -lopengl32 -lglu32
+ LIBSDL := `/usr/mingw32/bin/sdl-config --libs`
+ else
+ LIBGL := -lGL -lGLU
+ LIBSDL := `sdl-config --libs`
+ endif
-LIBS := ${LIBSDL} ${LIBGL}
-
++LIBMY := -lpg
++LIBS := ${LIBSDL} ${LIBGL} ${LIBMY}
OPTFLAGS := -O2
DBGFLAGS := -ggdb
PRFFLAGS := ${DBGFLAGS} -pg
MYFLAGS := -Wall -pedantic -ansi
+RPATH := libs/
+
VALFLAGS := --leak-check=full
- CXXFLAGS := ${MYFLAGS} ${DBGFLAGS}
+LNKFLAGS := -Wl,-rpath,${RPATH}
+
- CXX := g++
+ ifeq (${WIN32},1)
+ CXXFLAGS := ${OPTFLAGS}
+ else ifeq (${FINAL},1)
+ CXXFLAGS := ${OPTFLAGS}
+ else
+ CXXFLAGS := ${MYFLAGS} ${DBGFLAGS}
+ endif
+
+ ifeq (${WIN32},1)
+ CXX := mingw32-g++
+ else
+ CXX := g++
+ endif
-DIRS := # := start
+DIRS := # := start
SRCSDIR := src/
SRCS := # := start
- OBJSDIR := objsd/
- OBJS := # := start
+ ifeq (${WIN32},1)
+ OBJSDIR := objs-mingw32/
+ else ifeq (${FINAL},1)
+ OBJSDIR := objs/
+ else
+ OBJSDIR := objsd/
+ endif
+ OBJS := # := start
DEPSDIR := deps/
DEPS := # := start
DIRMK := dir.mk
include ${SRCSDIR}${DIRMK}
- WORKINGDIR := bind/
+ ifeq (${WIN32},1)
+ WORKINGDIR := bin-mingw32/
+ else ifeq (${FINAL},1)
+ WORKINGDIR := bin/
+ else
+ WORKINGDIR := bind/
+ endif
CFGDIRNAME := configs/
SRCCFGDIR := ${CFGDIRNAME}
CFGS += keys.cfg
CFGS := $(addprefix ${DSTCFGDIR},${CFGS})
-SRCLIBSDIR := libs/
-DSTLIBSDIR := ${WORKINGDIR}
+LIBSDIRNAME := libs/
+SRCLIBSDIR := ${LIBSDIRNAME}
+DSTLIBSDIR := ${WORKINGDIR}${LIBSDIRNAME}
LIBSTXT := # := start
LIBSTXT += COPYING-SDL
LIBSTXT := $(addprefix ${DSTLIBSDIR},${LIBSTXT})
LIBSCPY := # := start
- LIBSCPY += libSDL-1.2.so.0
- LIBSCPY += libpg.so.0
+ ifeq (${WIN32},1)
+ LIBSCPY += SDL.dll
+ else
- LIBSCPY += libSDL.so
++ LIBSCPY += libSDL-1.2.so.0
++ LIBSCPY += libpg.so.0
+ endif
LIBSCPY := $(addprefix ${DSTLIBSDIR},${LIBSCPY})
SRCTXTDIR :=
TXT += COPYING
TXT := $(addprefix ${DSTTXTDIR},${TXT})
- TARGETNAME := run_physics
+ ifeq (${WIN32},1)
+ TARGETNAME := run_physics.exe
+ else
+ TARGETNAME := run_physics
+ endif
TARGETTMP := ${OBJSDIR}${TARGETNAME}
TARGET := ${WORKINGDIR}${TARGETNAME}
DEPSBLDDIRS := ${DEPSDIR} $(addprefix ${DEPSDIR},${DIRS})
OBJSBLDDIRS := ${OBJSDIR} $(addprefix ${OBJSDIR},${DIRS})
-BLDDIRS := ${OBJSBLDDIRS} ${DEPSBLDDIRS} ${WORKINGDIR} ${DSTCFGDIR}
+
+BLDDIRS := # := start
+BLDDIRS += ${OBJSBLDDIRS}
+BLDDIRS += ${DEPSBLDDIRS}
+BLDDIRS += ${WORKINGDIR}
+BLDDIRS += ${DSTCFGDIR}
+BLDDIRS += ${DSTLIBSDIR}
INCDIRS := ${SRCSDIR}
+INCFLAGS := $(addprefix -I, ${INCDIRS})
PRNTFMT := printf "%-5s: %s\n"
# how to link the main target
${TARGETTMP}: ${OBJS}
${Q1}${PRNTFMT} "${CXX}" "$@"
- ${Q2}${CXX} ${CXXFLAGS} -o $@ $^ ${LIBS}
+ ${Q2}${CXX} ${CXXFLAGS} ${LNKFLAGS} -o $@ $^ ${LIBS}
# rule to copy tmp target to working directory
${TARGET}: ${TARGETTMP} | ${WORKINGDIR}
# rule to make an object file from a .cpp
${OBJSDIR}%.o: ${SRCSDIR}%.cpp | $$(dir $$@)
${Q1}${PRNTFMT} "${CXX}" "$@"
- ${Q2}${CXX} ${CXXFLAGS} -c -o $@ $< -I "${INCDIRS}"
+ ${Q2}${CXX} ${CXXFLAGS} -c -o $@ $< ${INCFLAGS}
# rule to make a depend file from a .cpp
# be clever and escape the / chars in file paths
# DON'T simply use another sed delimiter or it can't appear in the file paths
${DEPSDIR}%.d: ${SRCSDIR}%.cpp | $$(dir $$@)
${Q1}${PRNTFMT} "DEP" "$@"
- ${Q2}${CXX} -MM ${CXXFLAGS} $< -I "${INCDIRS}" | \
+ ${Q2}${CXX} -MM ${CXXFLAGS} $< ${INCFLAGS} | \
sed 's/\(^.*\):/$(subst /,\/,${OBJSDIR}\1 $@):/' > $@
+ CLEANCMDS := cleanbin cleanobjs cleandeps clean cleanall
+
.PHONY: cleanbin
cleanbin:
${Q1}${PRNTFMT} "rm" "${WORKINGDIR}"
.PHONY: clean
clean: cleanobjs
+ ${Q1}${PRNTFMT} "rm" "${TARGET}"
+ ${Q2}rm -rf ${TARGET}
.PHONY: cleanall
cleanall: clean cleanbin cleandeps
.PHONY: run
run: all
+ ifeq (${WIN32},1)
+ cd ${WORKINGDIR}; wine ${TARGETNAME}
+ else
cd ${WORKINGDIR}; ./${TARGETNAME}
+ endif
.PHONY: gdb
gdb: all
cd ${WORKINGDIR}; kprof -f prof
- MINGMAKEARGS := "LIBGL := -lopengl32 -lglu32" \
- "LIBSDL := `/usr/mingw32/bin/sdl-config --libs`" \
- "LIBSCPY := $(addprefix bin-mingw32/,SDL.dll)" \
- "CXXFLAGS := ${OPTFLAGS}" \
- "CXX := mingw32-g++" \
- "OBJSDIR := objs-mingw32/" \
- "WORKINGDIR := bin-mingw32/" \
- "TARGETNAME := run_physics.exe"
-
- .PHONY: mingw32
- mingw32:
- ${Q1}${PRNTFMT} "make" "mingw32"
- ${Q2}${MAKE} ${MINGMAKEARGS} cleanbin cleanobjs
- ${Q2}${MAKE} ${MINGMAKEARGS} all
-
- FINALMAKEARGS := "CXXFLAGS := ${OPTFLAGS}" \
- "OBJSDIR := objs/" \
- "WORKINGDIR := bin/"
-
- .PHONY: final
- final:
- ${Q1}${PRNTFMT} "make" "final"
- ${Q2}${MAKE} ${FINALMAKEARGS} cleanbin cleanobjs
- ${Q2}${MAKE} ${FINALMAKEARGS} all
-
-
- -include ${DEPS}
+ # Do not include deps files when doing a _single_ clean operation
+ ifeq ($(findstring ${MAKECMDGOALS},${CLEANCMDS}),)
+ -include ${DEPS}
+ endif