Added support for compiling BULLET with scons on windows
[blender.git] / source / nan_compile.mk
1 #
2 # $Id$
3 #
4 # ***** BEGIN GPL/BL DUAL 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. The Blender
10 # Foundation also sells licenses for use in proprietary software under
11 # the Blender License.  See http://www.blender.org/BL/ for information
12 # about this.
13 #
14 # This program is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 # GNU General Public License for more details.
18 #
19 # You should have received a copy of the GNU General Public License
20 # along with this program; if not, write to the Free Software Foundation,
21 # Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22 #
23 # The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24 # All rights reserved.
25 #
26 # The Original Code is: all of this file.
27 #
28 # Contributor(s): none yet.
29 #
30 # ***** END GPL/BL DUAL LICENSE BLOCK *****
31 #
32 # Compile and archive
33
34 include nan_definitions.mk
35
36 CPPFLAGS ?= $(NAN_CPPFLAGS)
37
38 # common parts ---------------------------------------------------
39
40 # Uncomment next lines to enable integrated game engine
41 ifneq ($(NAN_NO_KETSJI), true)
42     CFLAGS  += -DGAMEBLENDER=1
43     CFLAGS  += -DUSE_SUMO_SOLID
44     CCFLAGS += -DUSE_SUMO_SOLID
45 else
46    CPPFLAGS += -DNO_KETSJI
47 endif
48
49 ifdef NAN_DEBUG
50     CFLAGS += $(NAN_DEBUG)
51     CCFLAGS += $(NAN_DEBUG)
52 endif
53
54 REL_CFLAGS      += -DNDEBUG
55 REL_CCFLAGS     += -DNDEBUG
56 DBG_CFLAGS      += -g
57 DBG_CCFLAGS     += -g
58
59 # OS dependent parts ---------------------------------------------------
60
61 ifeq ($(OS),beos)
62     CC  = gcc
63     CCC = g++
64     CFLAGS      += -pipe -fPIC
65     CFLAGS      += -pipe -fPIC
66     REL_CFLAGS  += -O2
67     REL_CCFLAGS += -O2
68     NAN_DEPEND  = true
69     OPENGL_HEADERS  = .
70     CPPFLAGS    += -D__BeOS
71     AR  = ar
72     ARFLAGS = ruv
73     ARFLAGSQUIET = ru
74 endif
75
76 ifeq ($(OS),darwin)
77     CC  = gcc
78     CCC = g++
79     CFLAGS      += -pipe -fPIC -ffast-math -mcpu=7450 -mtune=7450
80     CCFLAGS     += -pipe -fPIC 
81     REL_CFLAGS  += -O2
82     REL_CCFLAGS += -O2
83     CPPFLAGS    += -D_THREAD_SAFE
84     NAN_DEPEND  = true
85     OPENGL_HEADERS = /System/Library/Frameworks/OpenGL.framework
86     AR = ar
87     ARFLAGS = ruv
88     RANLIB = ranlib
89     ARFLAGSQUIET = ru
90 endif
91
92 ifeq ($(OS),freebsd)
93     CC  = gcc
94     CCC = g++
95     JAVAC = javac
96     JAVAH = javah
97     CFLAGS      += -pipe -fPIC
98     CCFLAGS     += -pipe -fPIC
99     REL_CFLAGS  += -O2
100     REL_CCFLAGS += -O2
101     CPPFLAGS    += -D_THREAD_SAFE
102     NAN_DEPEND  = true
103     OPENGL_HEADERS  = /usr/X11R6/include
104     JAVA_HEADERS = /usr/local/jdk1.3.1/include
105     JAVA_SYSTEM_HEADERS = /usr/local/jdk1.3.1/include/freebsd
106     AR  = ar
107     ARFLAGS = ruv
108     ARFLAGSQUIET = ru
109 endif
110
111 ifeq ($(OS),irix)
112     CC  = cc
113     CCC = CC
114     CFLAGS      += -n32 -mips3 -Xcpluscomm
115     CCFLAGS     += -n32 -mips3 -Xcpluscomm -LANG:std
116     CCFLAGS     += -LANG:libc_in_namespace_std=off
117     REL_CFLAGS  += -n32 -mips3 -O2 -OPT:Olimit=0
118     REL_CCFLAGS += -n32 -mips3 -O2 -OPT:Olimit=0
119     OPENGL_HEADERS = /usr/include
120     NAN_DEPEND = true
121     AR = CC
122     ARFLAGS = -ar -o
123         ARFLAGSQUIET = -ar -o
124 endif
125
126 ifeq ($(OS),linux)
127     CC  = gcc
128     CCC = g++
129 #    CFLAGS     += -pipe
130     CFLAGS      += -pipe -fPIC 
131     CCFLAGS     += -pipe -fPIC
132 #    CCFLAGS    += -pipe
133     REL_CFLAGS  += -O2
134     REL_CCFLAGS += -O2
135     NAN_DEPEND = true
136   ifeq ($(CPU),alpha)
137     CFLAGS += -mieee
138   endif
139     OPENGL_HEADERS = /usr/X11R6/include
140     AR = ar
141     ARFLAGS = ruv
142     ARFLAGSQUIET = ru
143 endif
144
145 ifeq ($(OS),openbsd)
146     CC  = gcc
147     CCC = g++
148     CFLAGS      += -pipe -fPIC
149     CCFLAGS     += -pipe -fPIC
150     REL_CFLAGS  += -O2
151     REL_CCFLAGS += -O2
152     NAN_DEPEND = true
153     CPPFLAGS += -D__FreeBSD__
154     OPENGL_HEADERS = /usr/X11R6/include
155     AR = ar
156     ARFLAGS = ruv
157     ARFLAGSQUIET = ru
158 endif
159
160 ifeq ($(OS),solaris)
161     CC  = gcc
162     CCC = g++
163     JAVAC = javac
164     JAVAH = javah
165     CFLAGS      += -pipe -fPIC
166     CCFLAGS     += -pipe -fPIC
167     REL_CFLAGS  += -O1
168     REL_CCFLAGS += -O1
169     NAN_DEPEND = true
170   ifeq ($(CPU),sparc)
171     OPENGL_HEADERS = /usr/openwin/share/include
172     CPPFLAGS += -DSUN_OGL_NO_VERTEX_MACROS
173     JAVA_HEADERS = /usr/java/include
174     JAVA_SYSTEM_HEADERS = /usr/java/include/solaris
175   else
176     OPENGL_HEADERS = /usr/local/include
177   endif
178     AR = ar
179     ARFLAGS = ruv
180     ARFLAGSQUIET = ru
181 endif
182
183 ifeq ($(OS),windows)
184   ifeq ($(FREE_WINDOWS),true)
185     CC  = gcc
186     CCC = g++
187     CFLAGS += -pipe -mno-cygwin -mwindows
188     CCFLAGS += -pipe -mno-cygwin -mwindows
189     CPPFLAGS += -DFREE_WINDOWS
190     REL_CFLAGS += -O2
191     REL_CCFLAGS += -O2
192     NAN_DEPEND = true
193     #OPENGL_HEADERS = /usr/include/w32api
194     OPENGL_HEADERS = ./
195     AR = ar
196     ARFLAGS = ruv
197     ARFLAGSQUIET = ru
198     WINRC = $(wildcard *.rc)    
199     RANLIB = ranlib
200   else
201     CC  = $(SRCHOME)/tools/cygwin/cl_wrapper.pl
202     CCC = $(SRCHOME)/tools/cygwin/cl_wrapper.pl
203     JAVAC = $(SRCHOME)/tools/cygwin/java_wrapper.pl -c
204     JAVAH = $(SRCHOME)/tools/cygwin/java_wrapper.pl -h
205     REL_CFLAGS  += /O2
206     REL_CCFLAGS += /O2 -GX
207     DBG_CFLAGS  += /Fd$(DIR)/debug/
208     DBG_CCFLAGS += /Fd$(DIR)/debug/
209     CFLAGS += /MT
210     CCFLAGS += /MT
211     NAN_DEPEND = true
212     OPENGL_HEADERS = .
213     CPPFLAGS += -DWIN32 -D_WIN32 -D__WIN32
214     CPPFLAGS += -D_M_IX86
215     CPPFLAGS += -I"/cygdrive/c/Program Files/Microsoft Visual Studio/VC98/include"
216     JAVA_HEADERS = /cygdrive/c/j2sdk1.4.0-beta3/include
217     JAVA_SYSTEM_HEADERS = /cygdrive/c/j2sdk1.4.0-beta3/include/win32
218     CPP = $(SRCHOME)/tools/cygwin/cl_wrapper.pl
219     AR = ar
220     ARFLAGS = ruv
221     ARFLAGSQUIET = ru
222     WINRC = $(wildcard *.rc)
223   endif
224 endif
225
226 ifeq (debug, $(findstring debug, $(MAKECMDGOALS)))
227     export DEBUG_DIR=debug/
228 endif
229
230 ifneq (x$(DEBUG_DIR), x)
231     CFLAGS +=$(DBG_CFLAGS)
232     CCFLAGS+=$(DBG_CCFLAGS)
233 else
234     CFLAGS +=$(REL_CFLAGS)
235     CCFLAGS+=$(REL_CCFLAGS)
236 endif
237
238 # Note: include nan_warn's LEVEL_*_WARNINGS after CC/OS have been set.
239 include nan_warn.mk
240
241 # compile rules
242
243 default: all
244
245 $(DIR)/$(DEBUG_DIR)%.o: %.c
246     ifdef NAN_DEPEND
247         @set -e; $(CC) -M $(CPPFLAGS) $< 2>/dev/null \
248                 | sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \
249                 > $(DIR)/$(DEBUG_DIR)$*.d; \
250                 [ -s $(DIR)/$(DEBUG_DIR)$*.d ] || $(RM) $(DIR)/$(DEBUG_DIR)$*.d
251     endif
252     ifdef NAN_QUIET
253         @echo " -- $< -- "
254         @$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
255     else
256         $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
257     endif
258
259 $(DIR)/$(DEBUG_DIR)%.o: %.cpp
260     ifdef NAN_DEPEND
261         @set -e; $(CCC) -M $(CPPFLAGS) $< 2>/dev/null \
262                 | sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \
263                 > $(DIR)/$(DEBUG_DIR)$*.d; \
264                 [ -s $(DIR)/$(DEBUG_DIR)$*.d ] || $(RM) $(DIR)/$(DEBUG_DIR)$*.d
265     endif
266     ifdef NAN_QUIET
267         @echo " -- $< -- "
268         @$(CCC) -c $(CCFLAGS) $(CPPFLAGS) $< -o $@
269     else
270         $(CCC) -c $(CCFLAGS) $(CPPFLAGS) $< -o $@
271     endif
272
273 $(DIR)/$(DEBUG_DIR)%.res: %.rc
274 ifeq ($(FREE_WINDOWS),true)
275         windres $< -O coff -o $@
276 else
277         $(SRCHOME)/tools/cygwin/cl_wrapper.pl - rc /fo$@ $<
278 endif
279
280 $(DIR)/$(DEBUG_DIR)%.class: %.java
281     ifdef JARS
282         $(JAVAC) -verbose -g -deprecation -sourcepath . -classpath "$(JARS)" -d $(DIR)/$(DEBUG_DIR) $<
283     else
284         $(JAVAC) -verbose -g -deprecation -d $(DIR)/$(DEBUG_DIR) $<
285     endif
286
287 $(DIR)/$(DEBUG_DIR)%.h: $(DIR)/$(DEBUG_DIR)%.class
288         $(JAVAH) -classpath $(DIR)/$(DEBUG_DIR) -d $(DIR)/$(DEBUG_DIR) -jni $*
289
290 %.h:
291         @echo "WARNING: Fake header creation rule used, dependencies will be remade"
292
293 CSRCS  ?= $(wildcard *.c)
294 CCSRCS ?= $(wildcard *.cpp)
295 JSRCS  ?= $(wildcard *.java)
296
297 ifdef NAN_DEPEND
298 -include $(CSRCS:%.c=$(DIR)/$(DEBUG_DIR)%.d) $(CCSRCS:%.cpp=$(DIR)/$(DEBUG_DIR)%.d)
299 endif
300
301 OBJS += $(CSRCS:%.c=$(DIR)/$(DEBUG_DIR)%.o)
302 OBJS += $(CCSRCS:%.cpp=$(DIR)/$(DEBUG_DIR)%.o)
303 OBJS += $(WINRC:%.rc=$(DIR)/$(DEBUG_DIR)%.res)
304
305 JCLASS += $(JSRCS:%.java=$(DIR)/$(DEBUG_DIR)%.class)
306
307 LIB_a = $(DIR)/$(DEBUG_DIR)lib$(LIBNAME).a
308
309 $(LIB_a): $(OBJS)
310    # $OBJS can be empty except for some spaces
311     ifneq (x, x$(strip $(OBJS)))
312       ifdef NAN_PARANOID
313         @$(RM) $(LIB_a)
314         ifdef NAN_QUIET
315         @echo " -- lib: lib$(LIBNAME).a -- "
316         @$(AR) $(ARFLAGSQUIET) $@ $(OBJS)
317         else
318         $(AR) $(ARFLAGS) $@ $(OBJS)
319         endif
320       else
321         ifdef NAN_QUIET
322         @echo " -- lib: lib$(LIBNAME).a -- "
323         @$(AR) $(ARFLAGSQUIET) $@ $?
324         else
325         $(AR) $(ARFLAGS) $@ $?
326         endif
327       endif
328       ifdef RANLIB
329         $(RANLIB) $@
330       endif
331     endif
332
333 ALLTARGETS ?= $(LIB_a)
334
335 all debug :: makedir $(ALLTARGETS)
336
337 lib: $(LIB_a)
338
339 creator: $(OBJS)
340         @echo "====> make creator subtarget in `pwd | sed 's/^.*develop\///'`"
341         @$(MAKE) makedir DIR=$(DIR)/$(DEBUG_DIR)cre
342         @$(MAKE) lib CSRCS="$(CRE_CSRCS)" LIBNAME=$(LIBNAME)$@
343
344 publisher: $(OBJS)
345         @echo "====> make publisher subtarget in `pwd | sed 's/^.*develop\///'`"
346         @$(MAKE) makedir DIR=$(DIR)/$(DEBUG_DIR)pub
347         @$(MAKE) lib CSRCS="$(PUB_CSRCS)" LIBNAME=$(LIBNAME)$@
348
349 player: $(OBJS)
350         @echo "====> make player subtarget in `pwd | sed 's/^.*develop\///'`"
351         @$(MAKE) makedir DIR=$(DIR)/player/$(DEBUG_DIR)
352         @$(MAKE) lib CSRCS="$(SAP_CSRCS)" LIBNAME=$(LIBNAME)$@
353
354 clean:: optclean debugclean
355
356 optclean::
357         @-[ ! -d $(DIR) ] || ( cd $(DIR) && \
358             $(RM) *.o *.a *.d *.res ii_files/*.ii *.class *.h )
359
360 debugclean::
361         @-[ ! -d $(DIR)/debug ] || ( cd $(DIR)/debug && \
362             $(RM) *.o *.a *.d *.res ii_files/*.ii *.class *.h )
363
364 .PHONY: makedir
365 makedir::
366         @# don't use mkdir -p. Cygwin will try to make network paths and fail
367         @[ -d $(DIR) ] || mkdir $(DIR)
368         @[ -d $(DIR)/debug ] || mkdir $(DIR)/debug
369