vertex parents to a mesh that no verts would crash blender
[plumiferos.git] / source / nan_compile.mk
blobacd9372f3442d02f78bc5056eff10b2be7cabe42
2 # $Id: nan_compile.mk 8932 2006-11-17 18:29:46Z sirdude $
4 # ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
6 # This program is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU General Public License
8 # as published by the Free Software Foundation; either version 2
9 # of the License, or (at your option) any later version. The Blender
10 # Foundation also sells licenses for use in proprietary software under
11 # the Blender License. See http://www.blender.org/BL/ for information
12 # about this.
14 # This program is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # GNU General Public License for more details.
19 # You should have received a copy of the GNU General Public License
20 # along with this program; if not, write to the Free Software Foundation,
21 # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 # The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24 # All rights reserved.
26 # The Original Code is: all of this file.
28 # Contributor(s): none yet.
30 # ***** END GPL/BL DUAL LICENSE BLOCK *****
32 # Compile and archive
34 include nan_definitions.mk
36 CPPFLAGS ?= $(NAN_CPPFLAGS)
38 # common parts ---------------------------------------------------
40 # Uncomment next lines to enable integrated game engine
41 ifneq ($(NAN_NO_KETSJI), true)
42 CFLAGS += -DGAMEBLENDER=1
43 CFLAGS += -DUSE_SUMO_SOLID
44 CCFLAGS += -DUSE_SUMO_SOLID
45 ifeq ($(NAN_USE_BULLET), true)
46 CFLAGS += -DUSE_BULLET
47 CCFLAGS += -DUSE_BULLET
48 endif
49 else
50 CPPFLAGS += -DNO_KETSJI
51 endif
53 ifdef NAN_DEBUG
54 CFLAGS += $(NAN_DEBUG)
55 CCFLAGS += $(NAN_DEBUG)
56 endif
58 REL_CFLAGS += -DNDEBUG
59 REL_CCFLAGS += -DNDEBUG
60 DBG_CFLAGS += -g
61 DBG_CCFLAGS += -g
63 # OS dependent parts ---------------------------------------------------
65 ifeq ($(OS),beos)
66 CC = gcc
67 CCC = g++
68 CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
69 CCFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
70 REL_CFLAGS += -O2
71 REL_CCFLAGS += -O2
72 NAN_DEPEND = true
73 OPENGL_HEADERS = .
74 CPPFLAGS += -D__BeOS
75 AR = ar
76 ARFLAGS = ruv
77 ARFLAGSQUIET = ru
78 endif
80 ifeq ($(OS),darwin)
81 CC = gcc
82 CCC = g++
83 ifeq ($(CPU),powerpc)
84 CFLAGS += -pipe -fPIC -ffast-math -mcpu=7450 -mtune=G5 -funsigned-char -fno-strict-aliasing
85 CCFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
86 else
87 CFLAGS += -pipe -fPIC -ffast-math -march=pentium-m -funsigned-char -fno-strict-aliasing
88 CCFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
89 endif
90 REL_CFLAGS += -O2
91 REL_CCFLAGS += -O2
92 CPPFLAGS += -D_THREAD_SAFE
93 NAN_DEPEND = true
94 OPENGL_HEADERS = /System/Library/Frameworks/OpenGL.framework
95 AR = ar
96 ARFLAGS = ruv
97 RANLIB = ranlib
98 ARFLAGSQUIET = ru
99 endif
101 ifeq ($(OS),freebsd)
102 CC = gcc
103 CCC = g++
104 JAVAC = javac
105 JAVAH = javah
106 CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
107 CCFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
108 REL_CFLAGS += -O2
109 REL_CCFLAGS += -O2
110 CPPFLAGS += -D_THREAD_SAFE
111 NAN_DEPEND = true
112 OPENGL_HEADERS = /usr/X11R6/include
113 JAVA_HEADERS = /usr/local/jdk1.3.1/include
114 JAVA_SYSTEM_HEADERS = /usr/local/jdk1.3.1/include/freebsd
115 AR = ar
116 ARFLAGS = ruv
117 ARFLAGSQUIET = ru
118 endif
120 ifeq ($(OS),irix)
121 CC = cc
122 CCC = CC
123 CFLAGS += -n32 -mips3 -Xcpluscomm
124 CCFLAGS += -n32 -mips3 -Xcpluscomm -LANG:std
125 ifdef MIPS73_ISOHEADERS
126 CCFLAGS += -LANG:libc_in_namespace_std=off -I$(MIPS73_ISOHEADERS)
127 else
128 CCFLAGS += -LANG:libc_in_namespace_std=off
129 endif
130 REL_CFLAGS += -n32 -mips3 -O2 -OPT:Olimit=0
131 REL_CCFLAGS += -n32 -mips3 -O2 -OPT:Olimit=0
132 OPENGL_HEADERS = /usr/include
133 NAN_DEPEND = true
134 AR = CC
135 ARFLAGS = -ar -o
136 ARFLAGSQUIET = -ar -o
137 endif
139 ifeq ($(OS),linux)
140 CC = gcc
141 CCC = g++
142 # CFLAGS += -pipe
143 CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
144 CCFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
145 # CCFLAGS += -pipe
146 REL_CFLAGS += -O2
147 REL_CCFLAGS += -O2
148 NAN_DEPEND = true
149 ifeq ($(CPU),alpha)
150 CFLAGS += -mieee
151 endif
152 OPENGL_HEADERS = /usr/X11R6/include
153 AR = ar
154 ARFLAGS = ruv
155 ARFLAGSQUIET = ru
156 endif
158 ifeq ($(OS),openbsd)
159 CC = gcc
160 CCC = g++
161 CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
162 CCFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
163 REL_CFLAGS += -O2
164 REL_CCFLAGS += -O2
165 NAN_DEPEND = true
166 CPPFLAGS += -D__FreeBSD__
167 OPENGL_HEADERS = /usr/X11R6/include
168 AR = ar
169 ARFLAGS = ruv
170 ARFLAGSQUIET = ru
171 endif
173 ifeq ($(OS),solaris)
174 CC = gcc
175 CCC = g++
176 # CC = cc
177 # CCC = CC
178 JAVAC = javac
179 JAVAH = javah
180 CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
181 CCFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing
182 # CFLAGS += "-fast -xdepend -xarch=v8plus -xO3 -xlibmil -KPIC -DPIC -xchar=unsigned"
183 # CCFLAGS += "-fast -xdepend -xarch=v8plus -xO3 -xlibmil -xlibmopt -features=tmplife -norunpath -KPIC -DPIC -xchar=unsigned"
184 REL_CFLAGS += -O1
185 REL_CCFLAGS += -O1
186 NAN_DEPEND = true
187 ifeq ($(CPU),sparc)
188 OPENGL_HEADERS = /usr/openwin/share/include
189 CPPFLAGS += -DSUN_OGL_NO_VERTEX_MACROS
190 JAVA_HEADERS = /usr/java/include
191 JAVA_SYSTEM_HEADERS = /usr/java/include/solaris
192 else
193 OPENGL_HEADERS = /usr/local/include
194 endif
195 AR = ar
196 ARFLAGS = ruv
197 ARFLAGSQUIET = ru
198 endif
200 ifeq ($(OS),windows)
201 ifeq ($(FREE_WINDOWS),true)
202 CC = gcc
203 CCC = g++
204 CFLAGS += -pipe -mno-cygwin -mwindows -funsigned-char -fno-strict-aliasing
205 CCFLAGS += -pipe -mno-cygwin -mwindows -funsigned-char -fno-strict-aliasing
206 CPPFLAGS += -DFREE_WINDOWS
207 REL_CFLAGS += -O2
208 REL_CCFLAGS += -O2
209 NAN_DEPEND = true
210 #OPENGL_HEADERS = /usr/include/w32api
211 OPENGL_HEADERS = ./
212 AR = ar
213 ARFLAGS = ruv
214 ARFLAGSQUIET = ru
215 WINRC = $(wildcard *.rc)
216 RANLIB = ranlib
217 else
218 CC = $(SRCHOME)/tools/cygwin/cl_wrapper.pl
219 CCC = $(SRCHOME)/tools/cygwin/cl_wrapper.pl
220 JAVAC = $(SRCHOME)/tools/cygwin/java_wrapper.pl -c
221 JAVAH = $(SRCHOME)/tools/cygwin/java_wrapper.pl -h
222 REL_CFLAGS += /O2
223 REL_CCFLAGS += /O2 -GX
224 DBG_CFLAGS += /Fd$(DIR)/debug/
225 DBG_CCFLAGS += /Fd$(DIR)/debug/
226 CFLAGS += /MT
227 CCFLAGS += /MT
228 NAN_DEPEND = true
229 OPENGL_HEADERS = .
230 CPPFLAGS += -DWIN32 -D_WIN32 -D__WIN32
231 CPPFLAGS += -D_M_IX86
232 CPPFLAGS += -I"/cygdrive/c/Program Files/Microsoft Visual Studio/VC98/include"
233 JAVA_HEADERS = /cygdrive/c/j2sdk1.4.0-beta3/include
234 JAVA_SYSTEM_HEADERS = /cygdrive/c/j2sdk1.4.0-beta3/include/win32
235 CPP = $(SRCHOME)/tools/cygwin/cl_wrapper.pl
236 AR = ar
237 ARFLAGS = ruv
238 ARFLAGSQUIET = ru
239 WINRC = $(wildcard *.rc)
240 endif
241 endif
243 ifeq (debug, $(findstring debug, $(MAKECMDGOALS)))
244 export DEBUG_DIR=debug/
245 endif
247 ifneq (x$(DEBUG_DIR), x)
248 CFLAGS +=$(DBG_CFLAGS)
249 CCFLAGS+=$(DBG_CCFLAGS)
250 else
251 CFLAGS +=$(REL_CFLAGS)
252 CCFLAGS+=$(REL_CCFLAGS)
253 endif
255 # Note: include nan_warn's LEVEL_*_WARNINGS after CC/OS have been set.
256 include nan_warn.mk
258 # compile rules
260 default: all
262 $(DIR)/$(DEBUG_DIR)%.o: %.c
263 ifdef NAN_DEPEND
264 @set -e; $(CC) -M $(CPPFLAGS) $< 2>/dev/null \
265 | sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \
266 > $(DIR)/$(DEBUG_DIR)$*.d; \
267 [ -s $(DIR)/$(DEBUG_DIR)$*.d ] || $(RM) $(DIR)/$(DEBUG_DIR)$*.d
268 endif
269 ifdef NAN_QUIET
270 @echo " -- $< -- "
271 @$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
272 else
273 $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
274 endif
276 $(DIR)/$(DEBUG_DIR)%.o: %.cpp
277 ifdef NAN_DEPEND
278 @set -e; $(CCC) -M $(CPPFLAGS) $< 2>/dev/null \
279 | sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \
280 > $(DIR)/$(DEBUG_DIR)$*.d; \
281 [ -s $(DIR)/$(DEBUG_DIR)$*.d ] || $(RM) $(DIR)/$(DEBUG_DIR)$*.d
282 endif
283 ifdef NAN_QUIET
284 @echo " -- $< -- "
285 @$(CCC) -c $(CCFLAGS) $(CPPFLAGS) $< -o $@
286 else
287 $(CCC) -c $(CCFLAGS) $(CPPFLAGS) $< -o $@
288 endif
290 $(DIR)/$(DEBUG_DIR)%.res: %.rc
291 ifeq ($(FREE_WINDOWS),true)
292 windres $< -O coff -o $@
293 else
294 $(SRCHOME)/tools/cygwin/cl_wrapper.pl - rc /fo$@ $<
295 endif
297 $(DIR)/$(DEBUG_DIR)%.class: %.java
298 ifdef JARS
299 $(JAVAC) -verbose -g -deprecation -sourcepath . -classpath "$(JARS)" -d $(DIR)/$(DEBUG_DIR) $<
300 else
301 $(JAVAC) -verbose -g -deprecation -d $(DIR)/$(DEBUG_DIR) $<
302 endif
304 $(DIR)/$(DEBUG_DIR)%.h: $(DIR)/$(DEBUG_DIR)%.class
305 $(JAVAH) -classpath $(DIR)/$(DEBUG_DIR) -d $(DIR)/$(DEBUG_DIR) -jni $*
307 %.h:
308 @echo "WARNING: Fake header creation rule used, dependencies will be remade"
310 CSRCS ?= $(wildcard *.c)
311 CCSRCS ?= $(wildcard *.cpp)
312 JSRCS ?= $(wildcard *.java)
314 ifdef NAN_DEPEND
315 -include $(CSRCS:%.c=$(DIR)/$(DEBUG_DIR)%.d) $(CCSRCS:%.cpp=$(DIR)/$(DEBUG_DIR)%.d)
316 endif
318 OBJS_AR := $(OBJS)
319 OBJS_AR += $(CSRCS:%.c=%.o)
320 OBJS_AR += $(CCSRCS:%.cpp=%.o)
321 OBJS_AR += $(WINRC:%.rc=%.res)
323 OBJS += $(CSRCS:%.c=$(DIR)/$(DEBUG_DIR)%.o)
324 OBJS += $(CCSRCS:%.cpp=$(DIR)/$(DEBUG_DIR)%.o)
325 OBJS += $(WINRC:%.rc=$(DIR)/$(DEBUG_DIR)%.res)
327 JCLASS += $(JSRCS:%.java=$(DIR)/$(DEBUG_DIR)%.class)
329 LIB_a = $(DIR)/$(DEBUG_DIR)lib$(LIBNAME).a
331 $(LIB_a): $(OBJS)
332 # $OBJS can be empty except for some spaces
333 ifneq (x, x$(strip $(OBJS)))
334 ifdef NAN_PARANOID
335 @$(RM) $(LIB_a)
336 ifdef NAN_QUIET
337 @echo " -- lib: lib$(LIBNAME).a -- "
338 @cd $(DIR)/$(DEBUG_DIR); $(AR) $(ARFLAGSQUIET) $@ $(OBJS_AR)
339 else
340 cd $(DIR)/$(DEBUG_DIR); $(AR) $(ARFLAGS) $@ $(OBJS_AR)
341 endif
342 else
343 ifdef NAN_QUIET
344 @echo " -- lib: lib$(LIBNAME).a -- "
345 @$(AR) $(ARFLAGSQUIET) $@ $?
346 else
347 $(AR) $(ARFLAGS) $@ $?
348 endif
349 endif
350 ifdef RANLIB
351 $(RANLIB) $@
352 endif
353 endif
355 ALLTARGETS ?= $(LIB_a)
357 all debug :: makedir $(ALLTARGETS)
359 lib: $(LIB_a)
361 creator: $(OBJS)
362 @echo "====> make creator subtarget in `pwd | sed 's/^.*develop\///'`"
363 @$(MAKE) makedir DIR=$(DIR)/$(DEBUG_DIR)cre
364 @$(MAKE) lib CSRCS="$(CRE_CSRCS)" LIBNAME=$(LIBNAME)$@
366 publisher: $(OBJS)
367 @echo "====> make publisher subtarget in `pwd | sed 's/^.*develop\///'`"
368 @$(MAKE) makedir DIR=$(DIR)/$(DEBUG_DIR)pub
369 @$(MAKE) lib CSRCS="$(PUB_CSRCS)" LIBNAME=$(LIBNAME)$@
371 player: $(OBJS)
372 @echo "====> make player subtarget in `pwd | sed 's/^.*develop\///'`"
373 @$(MAKE) makedir DIR=$(DIR)/player/$(DEBUG_DIR)
374 @$(MAKE) lib CSRCS="$(SAP_CSRCS)" LIBNAME=$(LIBNAME)$@
376 clean:: optclean debugclean
378 optclean::
379 @-[ ! -d $(DIR) ] || ( cd $(DIR) && \
380 $(RM) *.o *.a *.d *.res ii_files/*.ii *.class *.h )
382 debugclean::
383 @-[ ! -d $(DIR)/debug ] || ( cd $(DIR)/debug && \
384 $(RM) *.o *.a *.d *.res ii_files/*.ii *.class *.h )
386 .PHONY: makedir
387 makedir::
388 @# don't use mkdir -p. Cygwin will try to make network paths and fail
389 @[ -d $(DIR) ] || mkdir $(DIR)
390 @[ -d $(DIR)/debug ] || mkdir $(DIR)/debug