To compile the new transform code with make, add the following to
[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 CFLAGS  += -DGAMEBLENDER=1
42 CFLAGS  += -DUSE_SUMO_SOLID
43 CCFLAGS += -DUSE_SUMO_SOLID
44
45 ifdef NAN_DEBUG
46     CFLAGS += $(NAN_DEBUG)
47     CCFLAGS += $(NAN_DEBUG)
48 endif
49
50 REL_CFLAGS      += -DNDEBUG
51 REL_CCFLAGS     += -DNDEBUG
52 DBG_CFLAGS      += -g
53 DBG_CCFLAGS     += -g
54
55 # Is the game engine getting you down? ---------------------------------
56    
57 ifeq ($(NAN_NO_KETSJI), true)
58    CPPFLAGS += -DNO_KETSJI
59 endif
60
61 # Support for new transform code ---------------------------------------
62 ifeq ($(NAN_NEW_TRANSFORM), true)
63    CPPFLAGS += -DNEWTRANSFORM
64 endif
65
66 # OS dependent parts ---------------------------------------------------
67
68 ifeq ($(OS),beos)
69     CC  = gcc
70     CCC = g++
71     CFLAGS      += -pipe -fPIC
72     CFLAGS      += -pipe -fPIC
73     REL_CFLAGS  += -O2
74     REL_CCFLAGS += -O2
75     NAN_DEPEND  = true
76     OPENGL_HEADERS  = .
77     CPPFLAGS    += -D__BeOS
78     AR  = ar
79     ARFLAGS = ruv
80     ARFLAGSQUIET = ru
81 endif
82
83 ifeq ($(OS),darwin)
84     CC  = gcc
85     CCC = g++
86     CFLAGS      += -pipe -fPIC -ffast-math -mcpu=7450 -mtune=7450
87     CCFLAGS     += -pipe -fPIC 
88     REL_CFLAGS  += -O2
89     REL_CCFLAGS += -O2
90     CPPFLAGS    += -D_THREAD_SAFE
91     NAN_DEPEND  = true
92     OPENGL_HEADERS = /System/Library/Frameworks/OpenGL.framework
93     AR = ar
94     ARFLAGS = ruv
95     RANLIB = ranlib
96     ARFLAGSQUIET = ru
97 endif
98
99 ifeq ($(OS),freebsd)
100     CC  = gcc
101     CCC = g++
102     JAVAC = javac
103     JAVAH = javah
104     CFLAGS      += -pipe -fPIC
105     CCFLAGS     += -pipe -fPIC
106     REL_CFLAGS  += -O2
107     REL_CCFLAGS += -O2
108     CPPFLAGS    += -D_THREAD_SAFE
109     NAN_DEPEND  = true
110     OPENGL_HEADERS  = /usr/X11R6/include
111     JAVA_HEADERS = /usr/local/jdk1.3.1/include
112     JAVA_SYSTEM_HEADERS = /usr/local/jdk1.3.1/include/freebsd
113     AR  = ar
114     ARFLAGS = ruv
115     ARFLAGSQUIET = ru
116 endif
117
118 ifeq ($(OS),irix)
119     CC  = cc
120     CCC = CC
121     CFLAGS      += -n32 -mips3 -Xcpluscomm
122     CCFLAGS     += -n32 -mips3 -Xcpluscomm -LANG:std
123     CCFLAGS     += -LANG:libc_in_namespace_std=off
124     REL_CFLAGS  += -n32 -mips3 -O2 -OPT:Olimit=0
125     REL_CCFLAGS += -n32 -mips3 -O2 -OPT:Olimit=0
126     OPENGL_HEADERS = /usr/include
127     NAN_DEPEND = true
128     AR = CC
129     ARFLAGS = -ar -o
130         ARFLAGSQUIET = -ar -o
131 endif
132
133 ifeq ($(OS),linux)
134     CC  = gcc
135     CCC = g++
136 #    CFLAGS     += -pipe
137     CFLAGS      += -pipe -fPIC 
138     CCFLAGS     += -pipe -fPIC
139 #    CCFLAGS    += -pipe
140     REL_CFLAGS  += -O2
141     REL_CCFLAGS += -O2
142     NAN_DEPEND = true
143   ifeq ($(CPU),alpha)
144     CFLAGS += -mieee
145   endif
146     OPENGL_HEADERS = /usr/X11R6/include
147     AR = ar
148     ARFLAGS = ruv
149     ARFLAGSQUIET = ru
150 endif
151
152 ifeq ($(OS),openbsd)
153     CC  = gcc
154     CCC = g++
155     CFLAGS      += -pipe -fPIC
156     CCFLAGS     += -pipe -fPIC
157     REL_CFLAGS  += -O2
158     REL_CCFLAGS += -O2
159     NAN_DEPEND = true
160     CPPFLAGS += -D__FreeBSD__
161     OPENGL_HEADERS = /usr/X11R6/include
162     AR = ar
163     ARFLAGS = ruv
164     ARFLAGSQUIET = ru
165 endif
166
167 ifeq ($(OS),solaris)
168     CC  = gcc
169     CCC = g++
170     JAVAC = javac
171     JAVAH = javah
172     CFLAGS      += -pipe -fPIC
173     CCFLAGS     += -pipe -fPIC
174     REL_CFLAGS  += -O1
175     REL_CCFLAGS += -O1
176     NAN_DEPEND = true
177   ifeq ($(CPU),sparc)
178     OPENGL_HEADERS = /usr/openwin/share/include
179     CPPFLAGS += -DSUN_OGL_NO_VERTEX_MACROS
180     JAVA_HEADERS = /usr/java/include
181     JAVA_SYSTEM_HEADERS = /usr/java/include/solaris
182   else
183     OPENGL_HEADERS = /usr/local/include
184   endif
185     AR = ar
186     ARFLAGS = ruv
187     ARFLAGSQUIET = ru
188 endif
189
190 ifeq ($(OS),windows)
191   ifeq ($(FREE_WINDOWS),true)
192     CC  = gcc
193     CCC = g++
194     CFLAGS += -pipe -mno-cygwin -mwindows
195     CCFLAGS += -pipe -mno-cygwin -mwindows
196     CPPFLAGS += -DFREE_WINDOWS
197     REL_CFLAGS += -O2
198     REL_CCFLAGS += -O2
199     #NAN_DEPEND = true
200     #OPENGL_HEADERS = /usr/include/w32api
201     OPENGL_HEADERS = ./
202     AR = ar
203     ARFLAGS = ruv
204     ARFLAGSQUIET = ru
205     WINRC = $(wildcard *.rc)    
206     RANLIB = ranlib
207   else
208     CC  = $(SRCHOME)/tools/cygwin/cl_wrapper.pl
209     CCC = $(SRCHOME)/tools/cygwin/cl_wrapper.pl
210     JAVAC = $(SRCHOME)/tools/cygwin/java_wrapper.pl -c
211     JAVAH = $(SRCHOME)/tools/cygwin/java_wrapper.pl -h
212     REL_CFLAGS  += /O2
213     REL_CCFLAGS += /O2 -GX
214     DBG_CFLAGS  += /Fd$(DIR)/debug/
215     DBG_CCFLAGS += /Fd$(DIR)/debug/
216     CFLAGS += /MT
217     CCFLAGS += /MT
218     NAN_DEPEND = true
219     OPENGL_HEADERS = .
220     CPPFLAGS += -DWIN32 -D_WIN32 -D__WIN32
221     CPPFLAGS += -D_M_IX86
222     CPPFLAGS += -I"/cygdrive/c/Program Files/Microsoft Visual Studio/VC98/include"
223     JAVA_HEADERS = /cygdrive/c/j2sdk1.4.0-beta3/include
224     JAVA_SYSTEM_HEADERS = /cygdrive/c/j2sdk1.4.0-beta3/include/win32
225     CPP = $(SRCHOME)/tools/cygwin/cl_wrapper.pl
226     AR = ar
227     ARFLAGS = ruv
228     ARFLAGSQUIET = ru
229     WINRC = $(wildcard *.rc)
230   endif
231 endif
232
233 ifeq (debug, $(findstring debug, $(MAKECMDGOALS)))
234     export DEBUG_DIR=debug/
235 endif
236
237 ifneq (x$(DEBUG_DIR), x)
238     CFLAGS +=$(DBG_CFLAGS)
239     CCFLAGS+=$(DBG_CCFLAGS)
240 else
241     CFLAGS +=$(REL_CFLAGS)
242     CCFLAGS+=$(REL_CCFLAGS)
243 endif
244
245 # Note: include nan_warn's LEVEL_*_WARNINGS after CC/OS have been set.
246 include nan_warn.mk
247
248 # compile rules
249
250 default: all
251
252 $(DIR)/$(DEBUG_DIR)%.o: %.c
253     ifdef NAN_DEPEND
254         @set -e; $(CC) -M $(CPPFLAGS) $< 2>/dev/null \
255                 | sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \
256                 > $(DIR)/$(DEBUG_DIR)$*.d; \
257                 [ -s $(DIR)/$(DEBUG_DIR)$*.d ] || $(RM) $(DIR)/$(DEBUG_DIR)$*.d
258     endif
259     ifdef NAN_QUIET
260         @echo " -- $< -- "
261         @$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
262     else
263         $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
264     endif
265
266 $(DIR)/$(DEBUG_DIR)%.o: %.cpp
267     ifdef NAN_DEPEND
268         @set -e; $(CCC) -M $(CPPFLAGS) $< 2>/dev/null \
269                 | sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \
270                 > $(DIR)/$(DEBUG_DIR)$*.d; \
271                 [ -s $(DIR)/$(DEBUG_DIR)$*.d ] || $(RM) $(DIR)/$(DEBUG_DIR)$*.d
272     endif
273     ifdef NAN_QUIET
274         @echo " -- $< -- "
275         @$(CCC) -c $(CCFLAGS) $(CPPFLAGS) $< -o $@
276     else
277         $(CCC) -c $(CCFLAGS) $(CPPFLAGS) $< -o $@
278     endif
279
280 $(DIR)/$(DEBUG_DIR)%.res: %.rc
281 ifeq ($(FREE_WINDOWS),true)
282         windres $< -O coff -o $@
283 else
284         $(SRCHOME)/tools/cygwin/cl_wrapper.pl - rc /fo$@ $<
285 endif
286
287 $(DIR)/$(DEBUG_DIR)%.class: %.java
288     ifdef JARS
289         $(JAVAC) -verbose -g -deprecation -sourcepath . -classpath "$(JARS)" -d $(DIR)/$(DEBUG_DIR) $<
290     else
291         $(JAVAC) -verbose -g -deprecation -d $(DIR)/$(DEBUG_DIR) $<
292     endif
293
294 $(DIR)/$(DEBUG_DIR)%.h: $(DIR)/$(DEBUG_DIR)%.class
295         $(JAVAH) -classpath $(DIR)/$(DEBUG_DIR) -d $(DIR)/$(DEBUG_DIR) -jni $*
296
297 %.h:
298         @echo "WARNING: Fake header creation rule used, dependencies will be remade"
299
300 CSRCS  ?= $(wildcard *.c)
301 CCSRCS ?= $(wildcard *.cpp)
302 JSRCS  ?= $(wildcard *.java)
303
304 ifdef NAN_DEPEND
305 -include $(CSRCS:%.c=$(DIR)/$(DEBUG_DIR)%.d) $(CCSRCS:%.cpp=$(DIR)/$(DEBUG_DIR)%.d)
306 endif
307
308 OBJS += $(CSRCS:%.c=$(DIR)/$(DEBUG_DIR)%.o)
309 OBJS += $(CCSRCS:%.cpp=$(DIR)/$(DEBUG_DIR)%.o)
310 OBJS += $(WINRC:%.rc=$(DIR)/$(DEBUG_DIR)%.res)
311
312 JCLASS += $(JSRCS:%.java=$(DIR)/$(DEBUG_DIR)%.class)
313
314 LIB_a = $(DIR)/$(DEBUG_DIR)lib$(LIBNAME).a
315
316 $(LIB_a): $(OBJS)
317    # $OBJS can be empty except for some spaces
318     ifneq (x, x$(strip $(OBJS)))
319       ifdef NAN_PARANOID
320         @$(RM) $(LIB_a)
321         ifdef NAN_QUIET
322         @echo " -- lib: lib$(LIBNAME).a -- "
323         @$(AR) $(ARFLAGSQUIET) $@ $(OBJS)
324         else
325         $(AR) $(ARFLAGS) $@ $(OBJS)
326         endif
327       else
328         ifdef NAN_QUIET
329         @echo " -- lib: lib$(LIBNAME).a -- "
330         @$(AR) $(ARFLAGSQUIET) $@ $?
331         else
332         $(AR) $(ARFLAGS) $@ $?
333         endif
334       endif
335       ifdef RANLIB
336         $(RANLIB) $@
337       endif
338     endif
339
340 ALLTARGETS ?= $(LIB_a)
341
342 all debug :: makedir $(ALLTARGETS)
343
344 lib: $(LIB_a)
345
346 creator: $(OBJS)
347         @echo "====> make creator subtarget in `pwd | sed 's/^.*develop\///'`"
348         @$(MAKE) makedir DIR=$(DIR)/$(DEBUG_DIR)cre
349         @$(MAKE) lib CSRCS="$(CRE_CSRCS)" LIBNAME=$(LIBNAME)$@
350
351 publisher: $(OBJS)
352         @echo "====> make publisher subtarget in `pwd | sed 's/^.*develop\///'`"
353         @$(MAKE) makedir DIR=$(DIR)/$(DEBUG_DIR)pub
354         @$(MAKE) lib CSRCS="$(PUB_CSRCS)" LIBNAME=$(LIBNAME)$@
355
356 player: $(OBJS)
357         @echo "====> make player subtarget in `pwd | sed 's/^.*develop\///'`"
358         @$(MAKE) makedir DIR=$(DIR)/player/$(DEBUG_DIR)
359         @$(MAKE) lib CSRCS="$(SAP_CSRCS)" LIBNAME=$(LIBNAME)$@
360
361 clean:: optclean debugclean
362
363 optclean::
364         @-[ ! -d $(DIR) ] || ( cd $(DIR) && \
365             $(RM) *.o *.a *.d *.res ii_files/*.ii *.class *.h )
366
367 debugclean::
368         @-[ ! -d $(DIR)/debug ] || ( cd $(DIR)/debug && \
369             $(RM) *.o *.a *.d *.res ii_files/*.ii *.class *.h )
370
371 .PHONY: makedir
372 makedir::
373         @# don't use mkdir -p. Cygwin will try to make network paths and fail
374         @[ -d $(DIR) ] || mkdir $(DIR)
375         @[ -d $(DIR)/debug ] || mkdir $(DIR)/debug
376