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