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