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