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