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