1 # -*- mode: gnumakefile; tab-width: 8; indent-tabs-mode: t; -*-
6 # ***** BEGIN GPL LICENSE BLOCK *****
8 # This program is free software; you can redistribute it and/or
9 # modify it under the terms of the GNU General Public License
10 # as published by the Free Software Foundation; either version 2
11 # of the License, or (at your option) any later version.
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program; if not, write to the Free Software Foundation,
20 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22 # The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23 # All rights reserved.
25 # The Original Code is: all of this file.
27 # Contributor(s): GSR, Stefan Gartner
29 # ***** END GPL LICENSE BLOCK *****
33 include nan_definitions.mk
35 CPPFLAGS ?= $(NAN_CPPFLAGS)
37 # common parts ---------------------------------------------------
39 # Uncomment next lines to enable integrated game engine
40 ifneq ($(NAN_NO_KETSJI), true)
41 CFLAGS += -DGAMEBLENDER=1
42 ifeq ($(NAN_USE_BULLET), true)
43 CFLAGS += -DUSE_BULLET
44 CCFLAGS += -DUSE_BULLET
47 CPPFLAGS += -DNO_KETSJI
50 ifeq ($(BF_PROFILE), true)
55 ifeq ($(WITH_BF_OPENMP), true)
61 CFLAGS += $(NAN_DEBUG)
62 CCFLAGS += $(NAN_DEBUG)
65 REL_CFLAGS += -DNDEBUG
66 REL_CCFLAGS += -DNDEBUG
70 # OS dependent parts ---------------------------------------------------
75 ifeq ($(MACOSX_DEPLOYMENT_TARGET), 10.4)
79 ifeq ($(MACOSX_DEPLOYMENT_TARGET), 10.5)
85 CFLAGS += -pipe -fPIC -ffast-math -mcpu=7450 -mtune=G5 -funsigned-char -fno-strict-aliasing
86 CCFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
88 CFLAGS += -pipe -fPIC -ffast-math -funsigned-char
89 CCFLAGS += -pipe -fPIC -funsigned-char
93 CFLAGS += -arch $(MACOSX_ARCHITECTURE) #-isysroot $(MACOSX_SDK) -mmacosx-version-min=$(MACOSX_MIN_VERS)
94 CCFLAGS += -arch $(MACOSX_ARCHITECTURE) #-isysroot $(MACOSX_SDK) -mmacosx-version-min=$(MACOSX_MIN_VERS)
96 ifeq ($(MACOSX_ARCHITECTURE), $(findstring $(MACOSX_ARCHITECTURE), "i386 x86_64"))
97 REL_CFLAGS += -O2 -ftree-vectorize -msse -msse2 -msse3
98 REL_CCFLAGS += -O2 -ftree-vectorize -msse -msse2 -msse3
104 CPPFLAGS += -D_THREAD_SAFE -fpascal-strings
106 ifeq ($(WITH_COCOA), true)
107 CPPFLAGS += -DGHOST_COCOA
109 ifeq ($(USE_QTKIT), true)
110 CPPFLAGS += -DUSE_QTKIT
114 OPENGL_HEADERS = /System/Library/Frameworks/OpenGL.framework
126 CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
127 CCFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
130 CPPFLAGS += -D_THREAD_SAFE
132 OPENGL_HEADERS = /usr/X11R6/include
133 JAVA_HEADERS = /usr/local/jdk1.3.1/include
134 JAVA_SYSTEM_HEADERS = /usr/local/jdk1.3.1/include/freebsd
141 ifeq ($(IRIX_USE_GCC),true)
144 CFLAGS += -fPIC -funsigned-char -fno-strict-aliasing -mabi=n32 -mips4
145 CCFLAGS += -fPIC -fpermissive -funsigned-char -fno-strict-aliasing -mabi=n32 -mips4
148 DBG_CFLAGS += -g3 -gdwarf-2 -ggdb
149 DBG_CCFLAGS += -g3 -gdwarf-2 -ggdb
153 CFLAGS += -n32 -mips3 -Xcpluscomm
154 CCFLAGS += -n32 -mips3 -Xcpluscomm -LANG:std
155 ifdef MIPS73_ISOHEADERS
156 CCFLAGS += -LANG:libc_in_namespace_std=off -I$(MIPS73_ISOHEADERS)
158 CCFLAGS += -LANG:libc_in_namespace_std=off
160 REL_CFLAGS += -n32 -mips3 -O2 -OPT:Olimit=0
161 REL_CCFLAGS += -n32 -mips3 -O2 -OPT:Olimit=0
163 OPENGL_HEADERS = /usr/include
167 ARFLAGSQUIET = -ar -o
175 CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
176 CCFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
183 OPENGL_HEADERS = /usr/X11R6/include
192 CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
193 CCFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
197 CPPFLAGS += -D__FreeBSD__
198 OPENGL_HEADERS = /usr/X11R6/include
205 # Adding gcc flag to $CC is not good, however if its not there makesdna wont build - Campbell
206 ifeq (x86_64, $(findstring x86_64, $(CPU)))
218 CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
219 CCFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
220 # CFLAGS += "-fast -xdepend -xarch=v8plus -xO3 -xlibmil -KPIC -DPIC -xchar=unsigned"
221 # CCFLAGS += "-fast -xdepend -xarch=v8plus -xO3 -xlibmil -xlibmopt -features=tmplife -norunpath -KPIC -DPIC -xchar=unsigned"
223 # Note, you might still want to compile a 32 bit binary if you have a 64bit system. if so remove the following lines
224 # ifeq ($(findstring 64,$(CPU)), 64)
233 # ifeq ($(CPU),sparc)
234 ifeq ($(findstring sparc,$(CPU)), sparc)
235 OPENGL_HEADERS = /usr/openwin/share/include
236 CPPFLAGS += -DSUN_OGL_NO_VERTEX_MACROS
237 JAVA_HEADERS = /usr/java/include
238 JAVA_SYSTEM_HEADERS = /usr/java/include/solaris
240 # OPENGL_HEADERS = /usr/X11/include/mesa
241 OPENGL_HEADERS = /usr/X11/include/
249 ifeq ($(FREE_WINDOWS),true)
252 CFLAGS += -pipe -mno-cygwin -mwindows -funsigned-char -fno-strict-aliasing
253 CCFLAGS += -pipe -mno-cygwin -mwindows -funsigned-char -fno-strict-aliasing
254 CPPFLAGS += -DFREE_WINDOWS
258 #OPENGL_HEADERS = /usr/include/w32api
263 WINRC = $(wildcard *.rc)
266 CC ?= $(SRCHOME)/tools/cygwin/cl_wrapper.pl
267 CCC ?= $(SRCHOME)/tools/cygwin/cl_wrapper.pl
268 JAVAC = $(SRCHOME)/tools/cygwin/java_wrapper.pl -c
269 JAVAH = $(SRCHOME)/tools/cygwin/java_wrapper.pl -h
271 REL_CCFLAGS += /O2 -GX
272 DBG_CFLAGS += /Fd$(DIR)/debug/
273 DBG_CCFLAGS += /Fd$(DIR)/debug/
278 CPPFLAGS += -DWIN32 -D_WIN32 -D__WIN32
279 CPPFLAGS += -D_M_IX86
280 CPPFLAGS += -I"/cygdrive/c/Program Files/Microsoft Visual Studio/VC98/include"
281 JAVA_HEADERS = /cygdrive/c/j2sdk1.4.0-beta3/include
282 JAVA_SYSTEM_HEADERS = /cygdrive/c/j2sdk1.4.0-beta3/include/win32
283 CPP = $(SRCHOME)/tools/cygwin/cl_wrapper.pl
287 WINRC = $(wildcard *.rc)
291 ifeq (debug, $(findstring debug, $(MAKECMDGOALS)))
292 export DEBUG_DIR=debug/
295 ifneq (x$(DEBUG_DIR), x)
296 CFLAGS +=$(DBG_CFLAGS)
297 CCFLAGS+=$(DBG_CCFLAGS)
299 CFLAGS +=$(REL_CFLAGS)
300 CCFLAGS+=$(REL_CCFLAGS)
303 # Note: include nan_warn's LEVEL_*_WARNINGS after CC/OS have been set.
310 $(DIR)/$(DEBUG_DIR)%.o: %.c
312 @set -e; $(CC) -M $(CPPFLAGS) $< 2>/dev/null \
313 | sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \
314 > $(DIR)/$(DEBUG_DIR)$*.d; \
315 [ -s $(DIR)/$(DEBUG_DIR)$*.d ] || $(RM) $(DIR)/$(DEBUG_DIR)$*.d
319 @$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
321 $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
324 $(DIR)/$(DEBUG_DIR)%.o: %.cpp
326 @set -e; $(CCC) -M $(CPPFLAGS) $< 2>/dev/null \
327 | sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \
328 > $(DIR)/$(DEBUG_DIR)$*.d; \
329 [ -s $(DIR)/$(DEBUG_DIR)$*.d ] || $(RM) $(DIR)/$(DEBUG_DIR)$*.d
333 @$(CCC) -c $(CCFLAGS) $(CPPFLAGS) $< -o $@
335 $(CCC) -c $(CCFLAGS) $(CPPFLAGS) $< -o $@
338 $(DIR)/$(DEBUG_DIR)%.o: %.mm
340 @set -e; $(CC) -M $(CPPFLAGS) $< 2>/dev/null \
341 | sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \
342 > $(DIR)/$(DEBUG_DIR)$*.d; \
343 [ -s $(DIR)/$(DEBUG_DIR)$*.d ] || $(RM) $(DIR)/$(DEBUG_DIR)$*.d
347 @$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
349 $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
352 $(DIR)/$(DEBUG_DIR)%.o: %.m
354 @set -e; $(CC) -M $(CPPFLAGS) $< 2>/dev/null \
355 | sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \
356 > $(DIR)/$(DEBUG_DIR)$*.d; \
357 [ -s $(DIR)/$(DEBUG_DIR)$*.d ] || $(RM) $(DIR)/$(DEBUG_DIR)$*.d
361 @$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
363 $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
367 $(DIR)/$(DEBUG_DIR)%.res: %.rc
368 ifeq ($(FREE_WINDOWS),true)
369 windres $< -O coff -o $@
371 $(SRCHOME)/tools/cygwin/cl_wrapper.pl - rc /fo$@ $<
374 $(DIR)/$(DEBUG_DIR)%.class: %.java
376 $(JAVAC) -verbose -g -deprecation -sourcepath . -classpath "$(JARS)" -d $(DIR)/$(DEBUG_DIR) $<
378 $(JAVAC) -verbose -g -deprecation -d $(DIR)/$(DEBUG_DIR) $<
381 $(DIR)/$(DEBUG_DIR)%.h: $(DIR)/$(DEBUG_DIR)%.class
382 $(JAVAH) -classpath $(DIR)/$(DEBUG_DIR) -d $(DIR)/$(DEBUG_DIR) -jni $*
385 @echo "WARNING: Fake header creation rule used, dependencies will be remade"
387 CSRCS ?= $(wildcard *.c)
388 CCSRCS ?= $(wildcard *.cpp)
389 JSRCS ?= $(wildcard *.java)
392 -include $(CSRCS:%.c=$(DIR)/$(DEBUG_DIR)%.d) $(CCSRCS:%.cpp=$(DIR)/$(DEBUG_DIR)%.d) $(OCCSRCS:$.mm=$(DIR)/$(DEBUG_DIR)%.d) $(OCSRCS:$.m=$(DIR)/$(DEBUG_DIR)%.d)
396 OBJS_AR += $(CSRCS:%.c=%.o)
397 OBJS_AR += $(CCSRCS:%.cpp=%.o)
398 OBJS_AR += $(OCCSRCS:%.mm=%.o)
399 OBJS_AR += $(OCSRCS:%.m=%.o)
400 OBJS_AR += $(WINRC:%.rc=%.res)
402 OBJS += $(CSRCS:%.c=$(DIR)/$(DEBUG_DIR)%.o)
403 OBJS += $(CCSRCS:%.cpp=$(DIR)/$(DEBUG_DIR)%.o)
404 OBJS += $(OCCSRCS:%.mm=$(DIR)/$(DEBUG_DIR)%.o)
405 OBJS += $(OCSRCS:%.m=$(DIR)/$(DEBUG_DIR)%.o)
406 OBJS += $(WINRC:%.rc=$(DIR)/$(DEBUG_DIR)%.res)
408 JCLASS += $(JSRCS:%.java=$(DIR)/$(DEBUG_DIR)%.class)
410 LIB_a = $(DIR)/$(DEBUG_DIR)lib$(LIBNAME).a
413 # $OBJS can be empty except for some spaces
414 ifneq (x, x$(strip $(OBJS)))
418 @echo " -- lib: lib$(LIBNAME).a -- "
419 @cd $(DIR)/$(DEBUG_DIR); $(AR) $(ARFLAGSQUIET) $@ $(OBJS_AR)
421 cd $(DIR)/$(DEBUG_DIR); $(AR) $(ARFLAGS) $@ $(OBJS_AR)
425 @echo " -- lib: lib$(LIBNAME).a -- "
426 @$(AR) $(ARFLAGSQUIET) $@ $?
428 $(AR) $(ARFLAGS) $@ $?
436 ALLTARGETS ?= $(LIB_a)
438 all debug :: makedir $(ALLTARGETS)
443 @echo "====> make creator subtarget in `pwd | sed 's/^.*develop\///'`"
444 @$(MAKE) makedir DIR=$(DIR)/$(DEBUG_DIR)cre
445 @$(MAKE) lib CSRCS="$(CRE_CSRCS)" LIBNAME=$(LIBNAME)$@
448 @echo "====> make publisher subtarget in `pwd | sed 's/^.*develop\///'`"
449 @$(MAKE) makedir DIR=$(DIR)/$(DEBUG_DIR)pub
450 @$(MAKE) lib CSRCS="$(PUB_CSRCS)" LIBNAME=$(LIBNAME)$@
453 @echo "====> make player subtarget in `pwd | sed 's/^.*develop\///'`"
454 @$(MAKE) makedir DIR=$(DIR)/player/$(DEBUG_DIR)
455 @$(MAKE) lib CSRCS="$(SAP_CSRCS)" LIBNAME=$(LIBNAME)$@
457 clean:: optclean debugclean
460 @-[ ! -d $(DIR) ] || ( cd $(DIR) && \
461 $(RM) *.o *.a *.d *.res ii_files/*.ii *.class *.h )
464 @-[ ! -d $(DIR)/debug ] || ( cd $(DIR)/debug && \
465 $(RM) *.o *.a *.d *.res ii_files/*.ii *.class *.h )
469 @# don't use mkdir -p. Cygwin will try to make network paths and fail
470 @[ -d $(DIR) ] || mkdir $(DIR)
471 @[ -d $(DIR)/debug ] || mkdir $(DIR)/debug