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