Merging NList 0.111 into main branch.
[AROS-Contrib.git] / mui / classes / nlist / nbalance_mcc / Makefile
blobe92750d50e6257d2197cfae0b0ffbe62389c4771
1 #/***************************************************************************
3 # NBalance.mcc - New Balance MUI Custom Class
4 # Copyright (C) 2008-2009 by NList Open Source Team
6 # This library is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU Lesser General Public
8 # License as published by the Free Software Foundation; either
9 # version 2.1 of the License, or (at your option) any later version.
11 # This library 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 GNU
14 # Lesser General Public License for more details.
16 # NList classes Support Site: http://www.sf.net/projects/nlist-classes
18 # $Id$
20 #***************************************************************************/
22 ###########################################################################
23 # This makefile is a very generic one. It tries to identify both, the host
24 # and the target operating system for which YAM should be compiled.
25 # However, this auto-detection can be easily overridden by directly
26 # specifying an option on the commandline while calling 'make'.
28 # Example:
30 # # to explicitly compile for AmigaOS3
31 # > make OS=os3
33 # # to compile for AmigaOS4 but with debugging
34 # > make OS=os4 DEBUG=
37 #############################################
38 # find out the HOST operating system
39 # on which this makefile is run
40 HOST ?= $(shell uname)
41 ifeq ($(HOST), AmigaOS)
42 ifeq ($(shell uname -m), powerpc)
43 HOST = AmigaOS4
44 endif
45 ifeq ($(shell uname -m), ppc)
46 HOST = AmigaOS4
47 endif
48 endif
50 # if no host is identifed (no uname tool)
51 # we assume a AmigaOS build
52 ifeq ($(HOST),)
53 HOST = AmigaOS
54 endif
56 #############################################
57 # now we find out the target OS for
58 # which we are going to compile YAM in case
59 # the caller didn't yet define OS himself
60 ifndef (OS)
61 ifeq ($(HOST), AmigaOS4)
62 OS = os4
63 else
64 ifeq ($(HOST), AmigaOS)
65 OS = os3
66 else
67 ifeq ($(HOST), MorphOS)
68 OS = mos
69 else
70 ifeq ($(HOST), AROS)
71 # now we find out which CPU system aros will be used
72 ifeq ($(shell uname -m), powerpc)
73 OS = aros-ppc
74 endif
75 ifeq ($(shell uname -m), ppc)
76 OS = aros-ppc
77 endif
78 ifeq ($(shell uname -m), i386)
79 OS = aros-i386
80 endif
81 ifeq ($(shell uname -m), i686)
82 OS = aros-i686
83 endif
84 ifeq ($(shell uname -m), x86_64)
85 OS = aros-x86_64
86 endif
87 else
88 OS = os4
89 endif
90 endif
91 endif
92 endif
93 endif
95 #############################################
96 # define common commands we use in this
97 # makefile. Please note that each of them
98 # might be overridden on the commandline.
100 # common commands
101 FLEX = flex
102 FC = flexcat
103 EXPR = expr
104 DATE = date
105 RM = delete force
106 RMDIR = delete force all
107 MKDIR = makedir
108 CHMOD = protect FLAGS=rwed
109 SED = sed
110 CP = copy
111 CC = gcc
112 STRIP = strip
113 OBJDUMP = objdump
115 # path definitions
116 CDUP = /
117 CDTHIS=
119 # override some variables for non-native builds (cross-compiler)
120 ifneq ($(HOST), AmigaOS)
121 ifneq ($(HOST), AmigaOS4)
122 ifneq ($(HOST), MorphOS)
124 # when we end up here this is either a unix or Aros host
125 # so lets use unix kind of commands
126 RM = rm -f
127 RMDIR = rm -rf
128 MKDIR = mkdir -p
129 CHMOD = chmod 755
130 CP = cp -f
132 CDUP = ../
133 CDTHIS= ./
135 endif
136 endif
137 endif
139 ###########################################################################
140 # CPU and DEBUG can be defined outside, defaults to above
141 # using e.g. "make DEBUG= CPU=-mcpu=603e" produces optimized non-debug
142 # PPC-603e version
144 # OPTFLAGS are disabled by DEBUG normally!
146 # ignored warnings are:
147 # none - because we want to compile with -Wall all the time
149 # Common Directories
150 PREFIX = $(CDTHIS)
151 OBJDIR = .obj_$(OS)
152 BINDIR = bin_$(OS)
153 VPATH = $(OBJDIR)
154 DEPFILE = Makefile.dep
155 DESTDIR = MUI:Libs/MUI
157 # target definition
158 TARGET = $(BINDIR)/NBalance.mcc
159 TESTTARGET= $(BINDIR)/NBalance-Test
161 # Common compiler/linker flags
162 WARN = -W -Wall -Wwrite-strings -Wpointer-arith -Wsign-compare
163 OPTFLAGS = -O3 -fomit-frame-pointer -funroll-loops
164 DEBUG = -DDEBUG -O0
165 DEBUGSYM = -g -gstabs
166 CFLAGS = -I. -I../include $(CPU) $(WARN) $(OPTFLAGS) \
167 $(DEBUG) $(DEBUGSYM) $(USER_CFLAGS) -c
168 LDFLAGS = $(CPU) $(DEBUGSYM)
169 LDLIBS =
171 ###########################################################################
172 # object files definition
175 LOBJS = library.o
177 COBJS = Dispatcher.o \
178 NBalance.o \
179 Pointer.o \
180 Debug.o
182 TOBJS = NBalance-Test.o
184 MCCOBJS = $(addprefix $(OBJDIR)/,$(LOBJS)) $(addprefix $(OBJDIR)/,$(COBJS))
185 TESTOBJS = $(addprefix $(OBJDIR)/,$(COBJS)) $(addprefix $(OBJDIR)/,$(TOBJS))
187 # different options per target OS
188 ifeq ($(OS), os4)
190 ##############################
191 # AmigaOS4
193 # Compiler/link/strip commands
194 ifneq ($(HOST), AmigaOS4)
195 CC = ppc-amigaos-gcc
196 STRIP = ppc-amigaos-strip
197 OBJDUMP = ppc-amigaos-objdump
198 endif
200 # Compiler/Linker flags
201 CRT = newlib
202 CPU = -mcpu=powerpc
203 WARN += -Wdeclaration-after-statement -Wdisabled-optimization
204 CFLAGS += -mcrt=$(CRT) -D__USE_INLINE__ -D__NEW_TIMEVAL_DEFINITION_USED__ \
205 -DNO_PPCINLINE_STDARG -Wa,-mregnames
206 LDFLAGS += -mcrt=$(CRT)
208 # additional object files required
209 M68KSTUBS = $(OBJDIR)/mccclass_68k.o
211 else
212 ifeq ($(OS), os3)
214 ##############################
215 # AmigaOS3
217 # Compiler/link/strip commands
218 ifneq ($(HOST), AmigaOS)
219 CC = m68k-amigaos-gcc
220 STRIP = m68k-amigaos-strip
221 OBJDUMP = m68k-amigaos-objdump
222 endif
224 # Compiler/Linker flags
225 CPU = -m68020-60 -msoft-float
226 CFLAGS += -noixemul -DNO_INLINE_STDARG -D__amigaos3__
227 LDFLAGS += -noixemul
228 LDLIBS += -ldebug -lmui
230 # additional object files required
231 COBJS += vastubs.o
233 else
234 ifeq ($(OS), mos)
236 ##############################
237 # MorphOS
239 # Compiler/link/strip commands
240 ifneq ($(HOST), MorphOS)
241 CC = ppc-morphos-gcc
242 STRIP = ppc-morphos-strip
243 OBJDUMP = ppc-morphos-objdump
244 endif
246 # Compiler/Linker flags
247 CPU = -mcpu=powerpc
248 CFLAGS += -noixemul -DNO_PPCINLINE_STDARG
249 LDFLAGS += -noixemul
250 LDLIBS += -ldebug
252 else
253 ifeq ($(OS), aros-i386)
255 ##############################
256 # AROS (i386)
258 ifneq ($(HOST), AROS)
259 CC = i386-aros-gcc
260 STRIP = i386-aros-strip
261 OBJDUMP = i386-aros-objdump
262 endif
264 # Compiler/Linker flags
265 OPTFLAGS = -O2 -fomit-frame-pointer -funroll-loops
266 CFLAGS += -Wno-pointer-sign -DNO_INLINE_STDARG
267 LDLIBS += -larossupport -lrom -lmui
269 else
270 ifeq ($(OS), aros-ppc)
272 ##############################
273 # AROS (PPC)
275 ifneq ($(HOST), AROS)
276 CC = ppc-aros-gcc
277 STRIP = ppc-aros-strip
278 OBJDUMP = ppc-aros-objdump
279 endif
281 # Compiler/Linker flags
282 OPTFLAGS = -O2 -fomit-frame-pointer -funroll-loops
283 CFLAGS += -Wno-pointer-sign -DNO_INLINE_STDARG
284 LDLIBS += -larossupport -lrom -lmui
286 else
287 ifeq ($(OS), aros-x86_64)
289 ##############################
290 # AROS (x86_64)
292 ifneq ($(HOST), AROS)
293 CC = x86_64-aros-gcc
294 STRIP = x86_64-aros-strip
295 OBJDUMP = x86_64-aros-objdump
296 endif
298 # Compiler/Linker flags
299 OPTFLAGS = -O2 -fomit-frame-pointer -funroll-loops
300 CFLAGS += -Wno-pointer-sign -DNO_INLINE_STDARG
301 LDLIBS += -larossupport -lrom -lmui
303 endif
304 endif
305 endif
306 endif
307 endif
308 endif
310 # main target
311 .PHONY: all
312 ifeq ($(wildcard $(DEPFILE)),$(DEPFILE))
313 # great, we have a dependecies file, let's make our target
314 all: $(BINDIR) $(OBJDIR) $(M68KSTUBS) $(TARGET) $(TESTTARGET)
315 else
316 # no dependecies, create it and then call make again
317 all: depend
318 @make --no-print-directory all
319 endif
321 # for making a release we compile ALL target with no debug
322 release:
323 @echo " CC $<"
324 make OS=os4 clean
325 make OS=os4 DEBUG=
326 @echo " CC $<"
327 make OS=os3 clean
328 make OS=os3 DEBUG=
329 @echo " CC $<"
330 make OS=mos clean
331 make OS=mos DEBUG=
332 @echo " CC $<"
333 make OS=aros-i386 clean
334 make OS=aros-i386 DEBUG=
335 @echo " CC $<"
336 make OS=aros-ppc clean
337 make OS=aros-ppc DEBUG=
338 @echo " CC $<"
339 make OS=aros-x86_64 clean
340 make OS=aros-x86_64 DEBUG=
342 # make the object directories
343 $(OBJDIR):
344 @echo " MK $@"
345 @$(MKDIR) $(OBJDIR)
347 # make the binary directories
348 $(BINDIR):
349 @echo " MK $@"
350 @$(MKDIR) $(BINDIR)
352 # for compiling single .c files
353 $(OBJDIR)/%.o: %.c
354 @echo " CC $<"
355 @$(CC) $(CFLAGS) $< -o $@
357 $(OBJDIR)/mccclass_68k.o: ../include/mccclass_68k.c
358 @echo " CC $<"
359 @$(CC) $(CFLAGS) $< -o $@
361 # for linking the target
362 $(TARGET): $(M68KSTUBS) $(MCCOBJS)
363 @echo " LD $@.debug"
364 @$(CC) -nostartfiles $(LDFLAGS) -o $@.debug $(MCCOBJS) $(M68KSTUBS) $(LDLIBS) -Wl,--cref,-M,-Map=$@.map
365 @echo " LD $@"
366 @$(STRIP) --preserve-dates -R.comment -R.sdata2 -S -o $@ $@.debug
368 # for linking the target
369 $(TESTTARGET): $(TESTOBJS)
370 @echo " LD $@.debug"
371 @$(CC) $(LDFLAGS) -o $@.debug $(TESTOBJS) $(LDLIBS) -Wl,--cref,-M,-Map=$@.map
372 @echo " LD $@"
373 @$(STRIP) --preserve-dates -R.comment -R.sdata2 -S -o $@ $@.debug
375 .PHONY: dump
376 dump:
377 -$(OBJDUMP) --section-headers --all-headers --reloc --disassemble-all $(TARGET) >$(TARGET).dump
379 .PHONY: clean
380 clean:
381 -$(RM) $(TARGET) $(TARGET).debug $(TARGET).map
382 -$(RM) $(TESTTARGET) $(TESTTARGET).debug $(TESTTARGET).map
383 -$(RM) $(MCCOBJS) $(TESTOBJS) $(M68KSTUBS)
385 .PHONY: distclean
386 distclean: clean
387 -$(RMDIR) $(OBJDIR)
388 -$(RMDIR) $(BINDIR)
390 # install
391 .PHONY: install
392 install: all
393 @echo " IN $(TARGET)"
394 @$(CP) $(TARGET) $(DESTDIR)
396 .PHONY: help
397 help:
398 @echo "Cleaning targets:"
399 @echo " clean - Cleanup working directory for clean compile"
400 @echo " distclean - Also cleanup autogenerated files"
401 @echo ""
402 @echo "Other generic targets:"
403 @echo " all - Build $(TARGET)"
404 @echo " catalogs - Build all available catalogs"
405 @echo ""
406 @echo "Install targets:"
407 @echo " install - Install $(TARGET) into $(DESTDIR)"
408 @echo ""
409 @echo "Parameters:"
410 @echo " make OS=os3|os4|mos|aros-i386|aros-i686|aros-ppc|aros-x86_64"
411 @echo " make DEBUG= : build $(TARGET) without debugging information"
412 @echo ""
414 ## DEPENDENCY GENERATION ##############
416 .PHONY: depend
417 depend:
418 @echo " MK $(DEPFILE)"
419 @echo "# AUTOGENERATED! DO NOT EDIT!!!" >$(DEPFILE)
420 @$(CC) -MM -MG $(CFLAGS) $(wildcard *.c) >>$(DEPFILE)
421 @echo "# AUTOGENERATED! DO NOT EDIT!!!" >>$(DEPFILE)
422 @$(SED) -i 's,^\(.*\)\.o:,$$\(OBJDIR\)/\1.o:,g' $(DEPFILE)
424 # include dependencies file
425 -include $(DEPFILE)