-> Bevel tools and Bmesh kernel
[blender-staging.git] / source / nan_compile.mk
1 #
2 # $Id$
3 #
4 # ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
5 #
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.
13 #
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.
18 #
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.
22 #
23 # The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24 # All rights reserved.
25 #
26 # The Original Code is: all of this file.
27 #
28 # Contributor(s): none yet.
29 #
30 # ***** END GPL/BL DUAL LICENSE BLOCK *****
31 #
32 # Compile and archive
33
34 include nan_definitions.mk
35
36 CPPFLAGS ?= $(NAN_CPPFLAGS)
37
38 # common parts ---------------------------------------------------
39
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
52
53 ifdef NAN_DEBUG
54     CFLAGS += $(NAN_DEBUG)
55     CCFLAGS += $(NAN_DEBUG)
56 endif
57
58 REL_CFLAGS      += -DNDEBUG
59 REL_CCFLAGS     += -DNDEBUG
60 DBG_CFLAGS      += -g
61 DBG_CCFLAGS     += -g
62
63 # OS dependent parts ---------------------------------------------------
64
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
79
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
100
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
119
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
138
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
157
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
172
173 ifeq ($(OS),solaris)
174     # Adding gcc flag to $CC is not good, however if its not there makesdna wont build - Campbell
175     ifeq (x86_64, $(findstring x86_64, $(CPU)))
176         CC  = gcc -m64
177         CCC = g++ -m64
178     else
179         CC  = gcc
180         CCC = g++
181         #CC  = cc
182         #CCC = CC
183     endif
184     
185     JAVAC = javac
186     JAVAH = javah
187     CFLAGS      += -pipe -fPIC -funsigned-char -fno-strict-aliasing
188     CCFLAGS     += -pipe -fPIC -funsigned-char -fno-strict-aliasing
189 #    CFLAGS     += "-fast -xdepend -xarch=v8plus -xO3 -xlibmil -KPIC -DPIC -xchar=unsigned"
190 #    CCFLAGS    += "-fast -xdepend -xarch=v8plus -xO3 -xlibmil -xlibmopt -features=tmplife -norunpath -KPIC -DPIC -xchar=unsigned"
191
192     # Note, you might still want to compile a 32 bit binary if you have a 64bit system. if so remove the following lines
193 #    ifeq ($(findstring 64,$(CPU)), 64)
194 #        CFLAGS += -m64
195 #        CCFLAGS        += -m64
196 #    endif
197
198     REL_CFLAGS  += -O2
199     REL_CCFLAGS += -O2
200
201     NAN_DEPEND = true
202 #    ifeq ($(CPU),sparc)
203     ifeq ($(findstring sparc,$(CPU)), sparc)
204         OPENGL_HEADERS = /usr/openwin/share/include
205         CPPFLAGS += -DSUN_OGL_NO_VERTEX_MACROS
206         JAVA_HEADERS = /usr/java/include
207         JAVA_SYSTEM_HEADERS = /usr/java/include/solaris
208     else
209         # OPENGL_HEADERS = /usr/X11/include/mesa
210         OPENGL_HEADERS = /usr/X11/include/
211     endif
212     AR = ar
213     ARFLAGS = ruv
214     ARFLAGSQUIET = ru
215 endif
216
217 ifeq ($(OS),windows)
218   ifeq ($(FREE_WINDOWS),true)
219     CC  = gcc
220     CCC = g++
221     CFLAGS += -pipe -mno-cygwin -mwindows -funsigned-char -fno-strict-aliasing
222     CCFLAGS += -pipe -mno-cygwin -mwindows -funsigned-char -fno-strict-aliasing
223     CPPFLAGS += -DFREE_WINDOWS
224     REL_CFLAGS += -O2
225     REL_CCFLAGS += -O2
226     NAN_DEPEND = true
227     #OPENGL_HEADERS = /usr/include/w32api
228     OPENGL_HEADERS = ./
229     AR = ar
230     ARFLAGS = ruv
231     ARFLAGSQUIET = ru
232     WINRC = $(wildcard *.rc)    
233     RANLIB = ranlib
234   else
235     CC  = $(SRCHOME)/tools/cygwin/cl_wrapper.pl
236     CCC = $(SRCHOME)/tools/cygwin/cl_wrapper.pl
237     JAVAC = $(SRCHOME)/tools/cygwin/java_wrapper.pl -c
238     JAVAH = $(SRCHOME)/tools/cygwin/java_wrapper.pl -h
239     REL_CFLAGS  += /O2
240     REL_CCFLAGS += /O2 -GX
241     DBG_CFLAGS  += /Fd$(DIR)/debug/
242     DBG_CCFLAGS += /Fd$(DIR)/debug/
243     CFLAGS += /MT
244     CCFLAGS += /MT
245     NAN_DEPEND = true
246     OPENGL_HEADERS = .
247     CPPFLAGS += -DWIN32 -D_WIN32 -D__WIN32
248     CPPFLAGS += -D_M_IX86
249     CPPFLAGS += -I"/cygdrive/c/Program Files/Microsoft Visual Studio/VC98/include"
250     JAVA_HEADERS = /cygdrive/c/j2sdk1.4.0-beta3/include
251     JAVA_SYSTEM_HEADERS = /cygdrive/c/j2sdk1.4.0-beta3/include/win32
252     CPP = $(SRCHOME)/tools/cygwin/cl_wrapper.pl
253     AR = ar
254     ARFLAGS = ruv
255     ARFLAGSQUIET = ru
256     WINRC = $(wildcard *.rc)
257   endif
258 endif
259
260 ifeq (debug, $(findstring debug, $(MAKECMDGOALS)))
261     export DEBUG_DIR=debug/
262 endif
263
264 ifneq (x$(DEBUG_DIR), x)
265     CFLAGS +=$(DBG_CFLAGS)
266     CCFLAGS+=$(DBG_CCFLAGS)
267 else
268     CFLAGS +=$(REL_CFLAGS)
269     CCFLAGS+=$(REL_CCFLAGS)
270 endif
271
272 # Note: include nan_warn's LEVEL_*_WARNINGS after CC/OS have been set.
273 include nan_warn.mk
274
275 # compile rules
276
277 default: all
278
279 $(DIR)/$(DEBUG_DIR)%.o: %.c
280     ifdef NAN_DEPEND
281         @set -e; $(CC) -M $(CPPFLAGS) $< 2>/dev/null \
282                 | sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \
283                 > $(DIR)/$(DEBUG_DIR)$*.d; \
284                 [ -s $(DIR)/$(DEBUG_DIR)$*.d ] || $(RM) $(DIR)/$(DEBUG_DIR)$*.d
285     endif
286     ifdef NAN_QUIET
287         @echo " -- $< -- "
288         @$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
289     else
290         $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
291     endif
292
293 $(DIR)/$(DEBUG_DIR)%.o: %.cpp
294     ifdef NAN_DEPEND
295         @set -e; $(CCC) -M $(CPPFLAGS) $< 2>/dev/null \
296                 | sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \
297                 > $(DIR)/$(DEBUG_DIR)$*.d; \
298                 [ -s $(DIR)/$(DEBUG_DIR)$*.d ] || $(RM) $(DIR)/$(DEBUG_DIR)$*.d
299     endif
300     ifdef NAN_QUIET
301         @echo " -- $< -- "
302         @$(CCC) -c $(CCFLAGS) $(CPPFLAGS) $< -o $@
303     else
304         $(CCC) -c $(CCFLAGS) $(CPPFLAGS) $< -o $@
305     endif
306
307 $(DIR)/$(DEBUG_DIR)%.res: %.rc
308 ifeq ($(FREE_WINDOWS),true)
309         windres $< -O coff -o $@
310 else
311         $(SRCHOME)/tools/cygwin/cl_wrapper.pl - rc /fo$@ $<
312 endif
313
314 $(DIR)/$(DEBUG_DIR)%.class: %.java
315     ifdef JARS
316         $(JAVAC) -verbose -g -deprecation -sourcepath . -classpath "$(JARS)" -d $(DIR)/$(DEBUG_DIR) $<
317     else
318         $(JAVAC) -verbose -g -deprecation -d $(DIR)/$(DEBUG_DIR) $<
319     endif
320
321 $(DIR)/$(DEBUG_DIR)%.h: $(DIR)/$(DEBUG_DIR)%.class
322         $(JAVAH) -classpath $(DIR)/$(DEBUG_DIR) -d $(DIR)/$(DEBUG_DIR) -jni $*
323
324 %.h:
325         @echo "WARNING: Fake header creation rule used, dependencies will be remade"
326
327 CSRCS  ?= $(wildcard *.c)
328 CCSRCS ?= $(wildcard *.cpp)
329 JSRCS  ?= $(wildcard *.java)
330
331 ifdef NAN_DEPEND
332 -include $(CSRCS:%.c=$(DIR)/$(DEBUG_DIR)%.d) $(CCSRCS:%.cpp=$(DIR)/$(DEBUG_DIR)%.d)
333 endif
334
335 OBJS_AR := $(OBJS)
336 OBJS_AR += $(CSRCS:%.c=%.o)
337 OBJS_AR += $(CCSRCS:%.cpp=%.o)
338 OBJS_AR += $(WINRC:%.rc=%.res)
339
340 OBJS += $(CSRCS:%.c=$(DIR)/$(DEBUG_DIR)%.o)
341 OBJS += $(CCSRCS:%.cpp=$(DIR)/$(DEBUG_DIR)%.o)
342 OBJS += $(WINRC:%.rc=$(DIR)/$(DEBUG_DIR)%.res)
343
344 JCLASS += $(JSRCS:%.java=$(DIR)/$(DEBUG_DIR)%.class)
345
346 LIB_a = $(DIR)/$(DEBUG_DIR)lib$(LIBNAME).a
347
348 $(LIB_a): $(OBJS)
349    # $OBJS can be empty except for some spaces
350     ifneq (x, x$(strip $(OBJS)))
351       ifdef NAN_PARANOID
352         @$(RM) $(LIB_a)
353         ifdef NAN_QUIET
354         @echo " -- lib: lib$(LIBNAME).a -- "
355         @cd $(DIR)/$(DEBUG_DIR); $(AR) $(ARFLAGSQUIET) $@ $(OBJS_AR)
356         else
357         cd $(DIR)/$(DEBUG_DIR); $(AR) $(ARFLAGS) $@ $(OBJS_AR)
358         endif
359       else
360         ifdef NAN_QUIET
361         @echo " -- lib: lib$(LIBNAME).a -- "
362         @$(AR) $(ARFLAGSQUIET) $@ $?
363         else
364         $(AR) $(ARFLAGS) $@ $?
365         endif
366       endif
367       ifdef RANLIB
368         $(RANLIB) $@
369       endif
370     endif
371
372 ALLTARGETS ?= $(LIB_a)
373
374 all debug :: makedir $(ALLTARGETS)
375
376 lib: $(LIB_a)
377
378 creator: $(OBJS)
379         @echo "====> make creator subtarget in `pwd | sed 's/^.*develop\///'`"
380         @$(MAKE) makedir DIR=$(DIR)/$(DEBUG_DIR)cre
381         @$(MAKE) lib CSRCS="$(CRE_CSRCS)" LIBNAME=$(LIBNAME)$@
382
383 publisher: $(OBJS)
384         @echo "====> make publisher subtarget in `pwd | sed 's/^.*develop\///'`"
385         @$(MAKE) makedir DIR=$(DIR)/$(DEBUG_DIR)pub
386         @$(MAKE) lib CSRCS="$(PUB_CSRCS)" LIBNAME=$(LIBNAME)$@
387
388 player: $(OBJS)
389         @echo "====> make player subtarget in `pwd | sed 's/^.*develop\///'`"
390         @$(MAKE) makedir DIR=$(DIR)/player/$(DEBUG_DIR)
391         @$(MAKE) lib CSRCS="$(SAP_CSRCS)" LIBNAME=$(LIBNAME)$@
392
393 clean:: optclean debugclean
394
395 optclean::
396         @-[ ! -d $(DIR) ] || ( cd $(DIR) && \
397             $(RM) *.o *.a *.d *.res ii_files/*.ii *.class *.h )
398
399 debugclean::
400         @-[ ! -d $(DIR)/debug ] || ( cd $(DIR)/debug && \
401             $(RM) *.o *.a *.d *.res ii_files/*.ii *.class *.h )
402
403 .PHONY: makedir
404 makedir::
405         @# don't use mkdir -p. Cygwin will try to make network paths and fail
406         @[ -d $(DIR) ] || mkdir $(DIR)
407         @[ -d $(DIR)/debug ] || mkdir $(DIR)/debug
408