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