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