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