Merge from 2.5 r20776 through r20855
[blender.git] / source / nan_compile.mk
1 # -*- mode: gnumakefile; tab-width: 8; indent-tabs-mode: t; -*-
2 # vim: tabstop=8
3 #
4 # $Id$
5 #
6 # ***** BEGIN GPL LICENSE BLOCK *****
7 #
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.
12 #
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.
17 #
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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21 #
22 # The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23 # All rights reserved.
24 #
25 # The Original Code is: all of this file.
26 #
27 # Contributor(s): GSR
28 #
29 # ***** END GPL LICENSE BLOCK *****
30 #
31 # Compile and archive
32
33 include nan_definitions.mk
34
35 CPPFLAGS ?= $(NAN_CPPFLAGS)
36
37 # common parts ---------------------------------------------------
38
39 # Uncomment next lines to enable integrated game engine
40 ifneq ($(NAN_NO_KETSJI), true)
41     CFLAGS  += -DGAMEBLENDER=1
42     CFLAGS  += -DUSE_SUMO_SOLID
43     CCFLAGS += -DUSE_SUMO_SOLID
44     ifeq ($(NAN_USE_BULLET), true)
45       CFLAGS  += -DUSE_BULLET -DWITH_BULLET
46       CCFLAGS += -DUSE_BULLET -DWITH_BULLET
47     endif
48 else
49    CPPFLAGS += -DNO_KETSJI
50 endif
51
52 ifeq ($(BF_PROFILE), true)
53     CFLAGS += -pg
54     CCFLAGS += -pg
55 endif
56
57 ifeq ($(WITH_BF_OPENMP), true)
58     CFLAGS += -fopenmp
59     CCFLAGS += -fopenmp
60 endif
61
62 ifdef NAN_DEBUG
63     CFLAGS += $(NAN_DEBUG)
64     CCFLAGS += $(NAN_DEBUG)
65 endif
66
67 REL_CFLAGS      += -DNDEBUG
68 REL_CCFLAGS     += -DNDEBUG
69 DBG_CFLAGS      += -g
70 DBG_CCFLAGS     += -g
71
72 # OS dependent parts ---------------------------------------------------
73
74 ifeq ($(OS),beos)
75     CC  = gcc
76     CCC = g++
77     CFLAGS      += -pipe -fPIC -funsigned-char -fno-strict-aliasing
78     CCFLAGS     += -pipe -fPIC -funsigned-char -fno-strict-aliasing
79     REL_CFLAGS  += -O2
80     REL_CCFLAGS += -O2
81     NAN_DEPEND  = true
82     OPENGL_HEADERS  = .
83     CPPFLAGS    += -D__BeOS
84     AR  = ar
85     ARFLAGS = ruv
86     ARFLAGSQUIET = ru
87 endif
88
89 ifeq ($(OS),darwin)
90     CC  = gcc
91     CCC = g++
92         ifeq ($(CPU),powerpc)
93         CFLAGS  += -pipe -fPIC -ffast-math -mcpu=7450 -mtune=G5 -funsigned-char -fno-strict-aliasing
94         CCFLAGS += -pipe -fPIC  -funsigned-char -fno-strict-aliasing
95         else
96         CFLAGS  += -pipe -fPIC -ffast-math -march=pentium-m -funsigned-char -fno-strict-aliasing
97         CCFLAGS += -pipe -fPIC  -funsigned-char -fno-strict-aliasing
98         endif
99 #   REL_CFLAGS  += -O
100 #    REL_CCFLAGS        += -O2
101     CPPFLAGS    += -D_THREAD_SAFE
102     NAN_DEPEND  = true
103     OPENGL_HEADERS = /System/Library/Frameworks/OpenGL.framework
104     AR = ar
105     ARFLAGS = ruv
106     RANLIB = ranlib
107     ARFLAGSQUIET = ru
108 endif
109
110 ifeq ($(OS),freebsd)
111     CC  = gcc
112     CCC = g++
113     JAVAC = javac
114     JAVAH = javah
115     CFLAGS      += -pipe -fPIC -funsigned-char -fno-strict-aliasing
116     CCFLAGS     += -pipe -fPIC -funsigned-char -fno-strict-aliasing
117     REL_CFLAGS  += -O2
118     REL_CCFLAGS += -O2
119     CPPFLAGS    += -D_THREAD_SAFE
120     NAN_DEPEND  = true
121     OPENGL_HEADERS  = /usr/X11R6/include
122     JAVA_HEADERS = /usr/local/jdk1.3.1/include
123     JAVA_SYSTEM_HEADERS = /usr/local/jdk1.3.1/include/freebsd
124     AR  = ar
125     ARFLAGS = ruv
126     ARFLAGSQUIET = ru
127 endif
128
129 ifeq ($(OS),irix)
130     ifeq ($(IRIX_USE_GCC),true)
131         CC = gcc
132         CCC = g++
133         CFLAGS += -fPIC -funsigned-char -fno-strict-aliasing -mabi=n32 -mips4
134         CCFLAGS += -fPIC -fpermissive -funsigned-char -fno-strict-aliasing -mabi=n32 -mips4
135         REL_CFLAGS += -O2
136         REL_CCFLAGS += -O2
137         CPPFLAGS += -DXP_UNIX
138         DBG_CFLAGS += -g3 -gdwarf-2 -ggdb
139         DBG_CCFLAGS += -g3 -gdwarf-2 -ggdb
140     else
141         CC = cc
142         CCC = CC
143         CFLAGS  += -n32 -mips3 -Xcpluscomm
144         CCFLAGS += -n32 -mips3 -Xcpluscomm -LANG:std
145         ifdef MIPS73_ISOHEADERS
146             CCFLAGS     += -LANG:libc_in_namespace_std=off -I$(MIPS73_ISOHEADERS)
147         else
148             CCFLAGS     += -LANG:libc_in_namespace_std=off
149         endif
150         REL_CFLAGS      += -n32 -mips3 -O2 -OPT:Olimit=0
151         REL_CCFLAGS += -n32 -mips3 -O2 -OPT:Olimit=0
152     endif
153     OPENGL_HEADERS = /usr/include
154     NAN_DEPEND = true
155     AR = CC
156     ARFLAGS = -ar -o
157     ARFLAGSQUIET = -ar -o
158 endif
159
160 ifeq ($(OS),linux)
161     CC  = gcc
162     CCC = g++
163 #    CFLAGS     += -pipe
164     CFLAGS      += -pipe -fPIC  -funsigned-char -fno-strict-aliasing
165     CCFLAGS     += -pipe -fPIC -funsigned-char -fno-strict-aliasing
166 #    CCFLAGS    += -pipe
167     REL_CFLAGS  += -O2
168     REL_CCFLAGS += -O2
169     NAN_DEPEND = true
170   ifeq ($(CPU),alpha)
171     CFLAGS += -mieee
172   endif
173     OPENGL_HEADERS = /usr/X11R6/include
174     AR = ar
175     ARFLAGS = ruv
176     ARFLAGSQUIET = ru
177 endif
178
179 ifeq ($(OS),openbsd)
180     CC  = gcc
181     CCC = g++
182     CFLAGS      += -pipe -fPIC -funsigned-char -fno-strict-aliasing
183     CCFLAGS     += -pipe -fPIC -funsigned-char -fno-strict-aliasing
184     REL_CFLAGS  += -O2
185     REL_CCFLAGS += -O2
186     NAN_DEPEND = true
187     CPPFLAGS += -D__FreeBSD__
188     OPENGL_HEADERS = /usr/X11R6/include
189     AR = ar
190     ARFLAGS = ruv
191     ARFLAGSQUIET = ru
192 endif
193
194 ifeq ($(OS),solaris)
195     # Adding gcc flag to $CC is not good, however if its not there makesdna wont build - Campbell
196     ifeq (x86_64, $(findstring x86_64, $(CPU)))
197         CC  = gcc -m64
198         CCC = g++ -m64
199     else
200         CC  = gcc
201         CCC = g++
202         #CC  = cc
203         #CCC = CC
204     endif
205     
206     JAVAC = javac
207     JAVAH = javah
208     CFLAGS      += -pipe -fPIC -funsigned-char -fno-strict-aliasing
209     CCFLAGS     += -pipe -fPIC -funsigned-char -fno-strict-aliasing
210 #    CFLAGS     += "-fast -xdepend -xarch=v8plus -xO3 -xlibmil -KPIC -DPIC -xchar=unsigned"
211 #    CCFLAGS    += "-fast -xdepend -xarch=v8plus -xO3 -xlibmil -xlibmopt -features=tmplife -norunpath -KPIC -DPIC -xchar=unsigned"
212
213     # Note, you might still want to compile a 32 bit binary if you have a 64bit system. if so remove the following lines
214 #    ifeq ($(findstring 64,$(CPU)), 64)
215 #        CFLAGS += -m64
216 #        CCFLAGS        += -m64
217 #    endif
218
219     REL_CFLAGS  += -O2
220     REL_CCFLAGS += -O2
221
222     NAN_DEPEND = true
223 #    ifeq ($(CPU),sparc)
224     ifeq ($(findstring sparc,$(CPU)), sparc)
225         OPENGL_HEADERS = /usr/openwin/share/include
226         CPPFLAGS += -DSUN_OGL_NO_VERTEX_MACROS
227         JAVA_HEADERS = /usr/java/include
228         JAVA_SYSTEM_HEADERS = /usr/java/include/solaris
229     else
230         # OPENGL_HEADERS = /usr/X11/include/mesa
231         OPENGL_HEADERS = /usr/X11/include/
232     endif
233     AR = ar
234     ARFLAGS = ruv
235     ARFLAGSQUIET = ru
236 endif
237
238 ifeq ($(OS),windows)
239   ifeq ($(FREE_WINDOWS),true)
240     CC  = gcc
241     CCC = g++
242     CFLAGS += -pipe -mno-cygwin -mwindows -funsigned-char -fno-strict-aliasing
243     CCFLAGS += -pipe -mno-cygwin -mwindows -funsigned-char -fno-strict-aliasing
244     CPPFLAGS += -DFREE_WINDOWS
245     REL_CFLAGS += -O2
246     REL_CCFLAGS += -O2
247     NAN_DEPEND = true
248     #OPENGL_HEADERS = /usr/include/w32api
249     OPENGL_HEADERS = ./
250     AR = ar
251     ARFLAGS = ruv
252     ARFLAGSQUIET = ru
253     WINRC = $(wildcard *.rc)    
254     RANLIB = ranlib
255   else
256     CC  = $(SRCHOME)/tools/cygwin/cl_wrapper.pl
257     CCC = $(SRCHOME)/tools/cygwin/cl_wrapper.pl
258     JAVAC = $(SRCHOME)/tools/cygwin/java_wrapper.pl -c
259     JAVAH = $(SRCHOME)/tools/cygwin/java_wrapper.pl -h
260     REL_CFLAGS  += /O2
261     REL_CCFLAGS += /O2 -GX
262     DBG_CFLAGS  += /Fd$(DIR)/debug/
263     DBG_CCFLAGS += /Fd$(DIR)/debug/
264     CFLAGS += /MT
265     CCFLAGS += /MT
266     NAN_DEPEND = true
267     OPENGL_HEADERS = .
268     CPPFLAGS += -DWIN32 -D_WIN32 -D__WIN32
269     CPPFLAGS += -D_M_IX86
270     CPPFLAGS += -I"/cygdrive/c/Program Files/Microsoft Visual Studio/VC98/include"
271     JAVA_HEADERS = /cygdrive/c/j2sdk1.4.0-beta3/include
272     JAVA_SYSTEM_HEADERS = /cygdrive/c/j2sdk1.4.0-beta3/include/win32
273     CPP = $(SRCHOME)/tools/cygwin/cl_wrapper.pl
274     AR = ar
275     ARFLAGS = ruv
276     ARFLAGSQUIET = ru
277     WINRC = $(wildcard *.rc)
278   endif
279 endif
280
281 ifeq (debug, $(findstring debug, $(MAKECMDGOALS)))
282     export DEBUG_DIR=debug/
283 endif
284
285 ifneq (x$(DEBUG_DIR), x)
286     CFLAGS +=$(DBG_CFLAGS)
287     CCFLAGS+=$(DBG_CCFLAGS)
288 else
289     CFLAGS +=$(REL_CFLAGS)
290     CCFLAGS+=$(REL_CCFLAGS)
291 endif
292
293 # Note: include nan_warn's LEVEL_*_WARNINGS after CC/OS have been set.
294 include nan_warn.mk
295
296 # compile rules
297
298 default: all
299
300 $(DIR)/$(DEBUG_DIR)%.o: %.c
301     ifdef NAN_DEPEND
302         @set -e; $(CC) -M $(CPPFLAGS) $< 2>/dev/null \
303                 | sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \
304                 > $(DIR)/$(DEBUG_DIR)$*.d; \
305                 [ -s $(DIR)/$(DEBUG_DIR)$*.d ] || $(RM) $(DIR)/$(DEBUG_DIR)$*.d
306     endif
307     ifdef NAN_QUIET
308         @echo " -- $< -- "
309         @$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
310     else
311         $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
312     endif
313
314 $(DIR)/$(DEBUG_DIR)%.o: %.cpp
315     ifdef NAN_DEPEND
316         @set -e; $(CCC) -M $(CPPFLAGS) $< 2>/dev/null \
317                 | sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \
318                 > $(DIR)/$(DEBUG_DIR)$*.d; \
319                 [ -s $(DIR)/$(DEBUG_DIR)$*.d ] || $(RM) $(DIR)/$(DEBUG_DIR)$*.d
320     endif
321     ifdef NAN_QUIET
322         @echo " -- $< -- "
323         @$(CCC) -c $(CCFLAGS) $(CPPFLAGS) $< -o $@
324     else
325         $(CCC) -c $(CCFLAGS) $(CPPFLAGS) $< -o $@
326     endif
327
328 $(DIR)/$(DEBUG_DIR)%.res: %.rc
329 ifeq ($(FREE_WINDOWS),true)
330         windres $< -O coff -o $@
331 else
332         $(SRCHOME)/tools/cygwin/cl_wrapper.pl - rc /fo$@ $<
333 endif
334
335 $(DIR)/$(DEBUG_DIR)%.class: %.java
336     ifdef JARS
337         $(JAVAC) -verbose -g -deprecation -sourcepath . -classpath "$(JARS)" -d $(DIR)/$(DEBUG_DIR) $<
338     else
339         $(JAVAC) -verbose -g -deprecation -d $(DIR)/$(DEBUG_DIR) $<
340     endif
341
342 $(DIR)/$(DEBUG_DIR)%.h: $(DIR)/$(DEBUG_DIR)%.class
343         $(JAVAH) -classpath $(DIR)/$(DEBUG_DIR) -d $(DIR)/$(DEBUG_DIR) -jni $*
344
345 %.h:
346         @echo "WARNING: Fake header creation rule used, dependencies will be remade"
347
348 CSRCS  ?= $(wildcard *.c)
349 CCSRCS ?= $(wildcard *.cpp)
350 JSRCS  ?= $(wildcard *.java)
351
352 ifdef NAN_DEPEND
353 -include $(CSRCS:%.c=$(DIR)/$(DEBUG_DIR)%.d) $(CCSRCS:%.cpp=$(DIR)/$(DEBUG_DIR)%.d)
354 endif
355
356 OBJS_AR := $(OBJS)
357 OBJS_AR += $(CSRCS:%.c=%.o)
358 OBJS_AR += $(CCSRCS:%.cpp=%.o)
359 OBJS_AR += $(WINRC:%.rc=%.res)
360
361 OBJS += $(CSRCS:%.c=$(DIR)/$(DEBUG_DIR)%.o)
362 OBJS += $(CCSRCS:%.cpp=$(DIR)/$(DEBUG_DIR)%.o)
363 OBJS += $(WINRC:%.rc=$(DIR)/$(DEBUG_DIR)%.res)
364
365 JCLASS += $(JSRCS:%.java=$(DIR)/$(DEBUG_DIR)%.class)
366
367 LIB_a = $(DIR)/$(DEBUG_DIR)lib$(LIBNAME).a
368
369 $(LIB_a): $(OBJS)
370    # $OBJS can be empty except for some spaces
371     ifneq (x, x$(strip $(OBJS)))
372       ifdef NAN_PARANOID
373         @$(RM) $(LIB_a)
374         ifdef NAN_QUIET
375         @echo " -- lib: lib$(LIBNAME).a -- "
376         @cd $(DIR)/$(DEBUG_DIR); $(AR) $(ARFLAGSQUIET) $@ $(OBJS_AR)
377         else
378         cd $(DIR)/$(DEBUG_DIR); $(AR) $(ARFLAGS) $@ $(OBJS_AR)
379         endif
380       else
381         ifdef NAN_QUIET
382         @echo " -- lib: lib$(LIBNAME).a -- "
383         @$(AR) $(ARFLAGSQUIET) $@ $?
384         else
385         $(AR) $(ARFLAGS) $@ $?
386         endif
387       endif
388       ifdef RANLIB
389         $(RANLIB) $@
390       endif
391     endif
392
393 ALLTARGETS ?= $(LIB_a)
394
395 all debug :: makedir $(ALLTARGETS)
396
397 lib: $(LIB_a)
398
399 creator: $(OBJS)
400         @echo "====> make creator subtarget in `pwd | sed 's/^.*develop\///'`"
401         @$(MAKE) makedir DIR=$(DIR)/$(DEBUG_DIR)cre
402         @$(MAKE) lib CSRCS="$(CRE_CSRCS)" LIBNAME=$(LIBNAME)$@
403
404 publisher: $(OBJS)
405         @echo "====> make publisher subtarget in `pwd | sed 's/^.*develop\///'`"
406         @$(MAKE) makedir DIR=$(DIR)/$(DEBUG_DIR)pub
407         @$(MAKE) lib CSRCS="$(PUB_CSRCS)" LIBNAME=$(LIBNAME)$@
408
409 player: $(OBJS)
410         @echo "====> make player subtarget in `pwd | sed 's/^.*develop\///'`"
411         @$(MAKE) makedir DIR=$(DIR)/player/$(DEBUG_DIR)
412         @$(MAKE) lib CSRCS="$(SAP_CSRCS)" LIBNAME=$(LIBNAME)$@
413
414 clean:: optclean debugclean
415
416 optclean::
417         @-[ ! -d $(DIR) ] || ( cd $(DIR) && \
418             $(RM) *.o *.a *.d *.res ii_files/*.ii *.class *.h )
419
420 debugclean::
421         @-[ ! -d $(DIR)/debug ] || ( cd $(DIR)/debug && \
422             $(RM) *.o *.a *.d *.res ii_files/*.ii *.class *.h )
423
424 .PHONY: makedir
425 makedir::
426         @# don't use mkdir -p. Cygwin will try to make network paths and fail
427         @[ -d $(DIR) ] || mkdir $(DIR)
428         @[ -d $(DIR)/debug ] || mkdir $(DIR)/debug
429