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