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