1# libmikmod Makefile for targetting Darwin (i.e. Mac OS X)
2# Edit the compiler/linker flags, etc. to meet your needs
3
4ifeq ($(CROSS),)
5CC=gcc
6AS=as
7AR=ar
8RANLIB=ranlib
9LIPO=lipo
10else
11CC=$(CROSS)-gcc
12AS=$(CROSS)-as
13AR=$(CROSS)-ar
14RANLIB=$(CROSS)-ranlib
15LIPO=$(CROSS)-lipo
16endif
17
18ARFLAGS = cr
19CPPFLAGS=-DMIKMOD_BUILD
20LDLIBS=
21
22# SSE2 support (for x86 builds. for x86_64 it doesn't hurt.)
23# SIMD code is unstable at present: *not* recommended...
24SSE2FLAGS=-msse2
25
26# altivec support (for ppc builds)
27#VECFLAGS=-maltivec
28# use -faltivec or -mpim-altivec instead. (see Apple gcc man page.)
29# SIMD code is unstable at present: *not* recommended...
30VECFLAGS=-faltivec
31
32# support for CoreAudio sound output:
33LDLIBS+=-Wl,-framework,CoreAudio
34CPPFLAGS+=-DDRV_OSX
35
36# support for output through OpenAL (requires 10.4 or newer)
37#LDLIBS+=-Wl,-framework,OpenAL
38#CPPFLAGS+=-DDRV_OPENAL
39
40# support for output through SDL:
41# SDL_FRAMEWORK define is for including SDL.h as <SDL/SDL.h> from SDL.framework.
42#LDLIBS+=-Wl,-framework,SDL
43#CPPFLAGS+=-DDRV_SDL -DSDL_FRAMEWORK
44
45# support for output via a pipe to another command:
46CPPFLAGS+=-DDRV_PIPE
47# support for output to stdout:
48CPPFLAGS+=-DDRV_STDOUT
49
50# support for aiff file output:
51CPPFLAGS+=-DDRV_AIFF
52# support for wav file output:
53CPPFLAGS+=-DDRV_WAV
54# support for output raw data to a file:
55CPPFLAGS+=-DDRV_RAW
56
57# disable the high quality mixer (build only with the standart mixer)
58#CPPFLAGS+=-DNO_HQMIXER
59
60CPPFLAGS+=-DHAVE_FCNTL_H -DHAVE_LIMITS_H -DHAVE_UNISTD_H -DHAVE_SNPRINTF -DHAVE_PTHREAD -DHAVE_SRANDOM
61
62# compiler flags
63CFLAGS=-O2 -Wall
64CFLAGS+=-ffast-math -fno-common
65CFLAGS+=-fvisibility=hidden -DSYM_VISIBILITY
66#CFLAGS+=-g
67LDFLAGS =-Wl,-single_module
68LDFLAGS+=-Wl,-install_name,"@executable_path/$(LIBSHARED)"
69LDFLAGS+=-Wl,-compatibility_version,4.0 -Wl,-current_version,6.0
70
71# specifically for 10.5 and newer:
72#CFLAGS+=-mmacosx-version-min=10.5
73#LDFLAGS+=-mmacosx-version-min=10.5
74# specifically for 10.6 and newer:
75#CFLAGS+=-mmacosx-version-min=10.6
76#CPPFLAGS+=-DHAVE_POSIX_MEMALIGN
77#LDFLAGS+=-mmacosx-version-min=10.6 -Wl,-lbundle1.o
78
79COMPILE=$(CC) -c $(CFLAGS) $(CPPFLAGS) -I../macosx -I../include
80
81.SUFFIXES:
82.SUFFIXES: .o .c
83
84DYLIB_VER=3
85#LIBSHARED=libmikmod.$(DYLIB_VER).dylib
86LIBSHARED=libmikmod.dylib
87LIBSTATIC=libmikmod.a
88
89LIBS=$(LIBSHARED)
90
91OBJ=drv_osx.o drv_openal.o drv_sdl.o \
92    drv_raw.o drv_aiff.o drv_wav.o \
93    drv_nos.o drv_pipe.o drv_stdout.o \
94    load_669.o load_amf.o load_asy.o load_dsm.o load_far.o load_gdm.o load_gt2.o \
95    load_it.o load_imf.o load_m15.o load_med.o load_mod.o load_mtm.o load_okt.o \
96    load_s3m.o load_stm.o load_stx.o load_ult.o load_umx.o load_uni.o load_xm.o \
97    mmalloc.o mmerror.o mmio.o mdriver.o mdreg.o \
98    mmcmp.o pp20.o s404.o xpk.o strcasecmp.o \
99    mloader.o mlreg.o mlutil.o mplayer.o munitrk.o mwav.o \
100    npertab.o sloader.o virtch.o virtch2.o virtch_common.o
101#   mdulaw.o
102
103help:
104	@echo ""
105	@echo "Valid targets:"
106	@echo ""
107	@echo "  $(MAKE) dylib         : build libmikmod.dylib shared lib"
108	@echo "  $(MAKE) static        : build libmikmod.a static library"
109	@echo ""
110	@echo "Same as above, but with SIMD (AltiVec/SSE2) mixer optimizations:"
111	@echo "(SIMD code is unstable at present: *not* recommended...)"
112	@echo ""
113	@echo "  $(MAKE) dylib-altivec : build libmikmod.dylib with altivec support (ppc)"
114	@echo "  $(MAKE) dylib-sse2    : build libmikmod.dylib with sse2 support (x86/x86_64)"
115	@echo "  $(MAKE) static-altivec: build libmikmod.a with altivec support (ppc)"
116	@echo "  $(MAKE) static-sse2   : build libmikmod.a with sse2 support (x86/x86_64)"
117	@echo ""
118
119clean:
120	rm -f $(LIBSHARED) $(LIBSTATIC) *.o
121
122dylib-sse2: CFLAGS+=$(SSE2FLAGS)
123dylib-sse2: CPPFLAGS+=-DMIKMOD_SIMD
124dylib-sse2: dylib
125
126dylib-altivec: CFLAGS+=$(VECFLAGS)
127dylib-altivec: CPPFLAGS+=-DMIKMOD_SIMD
128dylib-altivec: dylib
129
130static-sse2: CFLAGS+=$(SSE2FLAGS)
131static-sse2: CPPFLAGS+=-DMIKMOD_SIMD
132static-sse2: static
133
134static-altivec: CFLAGS+=$(VECFLAGS)
135static-altivec: CPPFLAGS+=-DMIKMOD_SIMD
136static-altivec: static
137
138dylib: $(LIBSHARED)
139static: $(LIBSTATIC)
140
141$(LIBSHARED): $(OBJ)
142	$(CC) -dynamiclib -o $(LIBSHARED) $(OBJ) $(LDFLAGS) $(LDLIBS)
143
144$(LIBSTATIC): $(OBJ)
145	$(AR) $(ARFLAGS) $@ $(OBJ)
146	$(RANLIB) $@
147
148HEADER_DEPS=../include/mikmod.h ../include/mikmod_internals.h ../include/mikmod_ctype.h
149drv_osx.o: ../drivers/drv_osx.c $(HEADER_DEPS)
150	$(COMPILE) ../drivers/drv_osx.c -o drv_osx.o
151drv_openal.o: ../drivers/drv_openal.c $(HEADER_DEPS)
152	$(COMPILE) ../drivers/drv_openal.c -o drv_openal.o
153drv_sdl.o: ../drivers/drv_sdl.c $(HEADER_DEPS)
154	$(COMPILE) ../drivers/drv_sdl.c -o drv_sdl.o
155drv_nos.o: ../drivers/drv_nos.c $(HEADER_DEPS)
156	$(COMPILE) ../drivers/drv_nos.c -o drv_nos.o
157drv_raw.o: ../drivers/drv_raw.c $(HEADER_DEPS)
158	$(COMPILE) ../drivers/drv_raw.c -o drv_raw.o
159drv_stdout.o: ../drivers/drv_stdout.c $(HEADER_DEPS)
160	$(COMPILE) ../drivers/drv_stdout.c -o drv_stdout.o
161drv_aiff.o: ../drivers/drv_aiff.c $(HEADER_DEPS)
162	$(COMPILE) ../drivers/drv_aiff.c -o drv_aiff.o
163drv_wav.o: ../drivers/drv_wav.c $(HEADER_DEPS)
164	$(COMPILE) ../drivers/drv_wav.c -o drv_wav.o
165drv_pipe.o: ../drivers/drv_pipe.c $(HEADER_DEPS)
166	$(COMPILE) ../drivers/drv_pipe.c -o drv_pipe.o
167load_669.o: ../loaders/load_669.c $(HEADER_DEPS)
168	$(COMPILE) ../loaders/load_669.c -o load_669.o
169load_amf.o: ../loaders/load_amf.c $(HEADER_DEPS)
170	$(COMPILE) ../loaders/load_amf.c -o load_amf.o
171load_asy.o: ../loaders/load_asy.c $(HEADER_DEPS)
172	$(COMPILE) ../loaders/load_asy.c -o load_asy.o
173load_dsm.o: ../loaders/load_dsm.c $(HEADER_DEPS)
174	$(COMPILE) ../loaders/load_dsm.c -o load_dsm.o
175load_far.o: ../loaders/load_far.c $(HEADER_DEPS)
176	$(COMPILE) ../loaders/load_far.c -o load_far.o
177load_gdm.o: ../loaders/load_gdm.c $(HEADER_DEPS)
178	$(COMPILE) ../loaders/load_gdm.c -o load_gdm.o
179load_gt2.o: ../loaders/load_gt2.c $(HEADER_DEPS)
180	$(COMPILE) ../loaders/load_gt2.c -o load_gt2.o
181load_it.o: ../loaders/load_it.c $(HEADER_DEPS)
182	$(COMPILE) ../loaders/load_it.c -o load_it.o
183load_imf.o: ../loaders/load_imf.c $(HEADER_DEPS)
184	$(COMPILE) ../loaders/load_imf.c -o load_imf.o
185load_m15.o: ../loaders/load_m15.c $(HEADER_DEPS)
186	$(COMPILE) ../loaders/load_m15.c -o load_m15.o
187load_med.o: ../loaders/load_med.c $(HEADER_DEPS)
188	$(COMPILE) ../loaders/load_med.c -o load_med.o
189load_mod.o: ../loaders/load_mod.c $(HEADER_DEPS)
190	$(COMPILE) ../loaders/load_mod.c -o load_mod.o
191load_mtm.o: ../loaders/load_mtm.c $(HEADER_DEPS)
192	$(COMPILE) ../loaders/load_mtm.c -o load_mtm.o
193load_okt.o: ../loaders/load_okt.c $(HEADER_DEPS)
194	$(COMPILE) ../loaders/load_okt.c -o load_okt.o
195load_s3m.o: ../loaders/load_s3m.c $(HEADER_DEPS)
196	$(COMPILE) ../loaders/load_s3m.c -o load_s3m.o
197load_stm.o: ../loaders/load_stm.c $(HEADER_DEPS)
198	$(COMPILE) ../loaders/load_stm.c -o load_stm.o
199load_stx.o: ../loaders/load_stx.c $(HEADER_DEPS)
200	$(COMPILE) ../loaders/load_stx.c -o load_stx.o
201load_ult.o: ../loaders/load_ult.c $(HEADER_DEPS)
202	$(COMPILE) ../loaders/load_ult.c -o load_ult.o
203load_umx.o: ../loaders/load_umx.c $(HEADER_DEPS)
204	$(COMPILE) ../loaders/load_umx.c -o load_umx.o
205load_uni.o: ../loaders/load_uni.c $(HEADER_DEPS)
206	$(COMPILE) ../loaders/load_uni.c -o load_uni.o
207load_xm.o: ../loaders/load_xm.c $(HEADER_DEPS)
208	$(COMPILE) ../loaders/load_xm.c -o load_xm.o
209mmalloc.o: ../mmio/mmalloc.c $(HEADER_DEPS)
210	$(COMPILE) ../mmio/mmalloc.c -o mmalloc.o
211mmerror.o: ../mmio/mmerror.c $(HEADER_DEPS)
212	$(COMPILE) ../mmio/mmerror.c -o mmerror.o
213mmio.o: ../mmio/mmio.c $(HEADER_DEPS)
214	$(COMPILE) ../mmio/mmio.c -o mmio.o
215mmcmp.o: ../depackers/mmcmp.c $(HEADER_DEPS)
216	$(COMPILE) ../depackers/mmcmp.c -o mmcmp.o
217pp20.o: ../depackers/pp20.c $(HEADER_DEPS)
218	$(COMPILE) ../depackers/pp20.c -o pp20.o
219s404.o: ../depackers/s404.c $(HEADER_DEPS)
220	$(COMPILE) ../depackers/s404.c -o s404.o
221xpk.o: ../depackers/xpk.c $(HEADER_DEPS)
222	$(COMPILE) ../depackers/xpk.c -o xpk.o
223mdriver.o: ../playercode/mdriver.c $(HEADER_DEPS)
224	$(COMPILE) ../playercode/mdriver.c -o mdriver.o
225mdreg.o: ../playercode/mdreg.c $(HEADER_DEPS)
226	$(COMPILE) ../playercode/mdreg.c -o mdreg.o
227mdulaw.o: ../playercode/mdulaw.c $(HEADER_DEPS)
228	$(COMPILE) ../playercode/mdulaw.c -o mdulaw.o
229mloader.o: ../playercode/mloader.c $(HEADER_DEPS)
230	$(COMPILE) ../playercode/mloader.c -o mloader.o
231mlreg.o: ../playercode/mlreg.c $(HEADER_DEPS)
232	$(COMPILE) ../playercode/mlreg.c -o mlreg.o
233mlutil.o: ../playercode/mlutil.c $(HEADER_DEPS)
234	$(COMPILE) ../playercode/mlutil.c -o mlutil.o
235mplayer.o: ../playercode/mplayer.c $(HEADER_DEPS)
236	$(COMPILE) ../playercode/mplayer.c -o mplayer.o
237munitrk.o: ../playercode/munitrk.c $(HEADER_DEPS)
238	$(COMPILE) ../playercode/munitrk.c -o munitrk.o
239mwav.o: ../playercode/mwav.c $(HEADER_DEPS)
240	$(COMPILE) ../playercode/mwav.c -o mwav.o
241npertab.o: ../playercode/npertab.c $(HEADER_DEPS)
242	$(COMPILE) ../playercode/npertab.c -o npertab.o
243sloader.o: ../playercode/sloader.c $(HEADER_DEPS)
244	$(COMPILE) ../playercode/sloader.c -o sloader.o
245virtch.o: ../playercode/virtch.c ../playercode/virtch_common.c $(HEADER_DEPS)
246	$(COMPILE) ../playercode/virtch.c -o virtch.o
247virtch2.o: ../playercode/virtch2.c ../playercode/virtch_common.c $(HEADER_DEPS)
248	$(COMPILE) ../playercode/virtch2.c -o virtch2.o
249virtch_common.o: ../playercode/virtch_common.c $(HEADER_DEPS)
250	$(COMPILE) ../playercode/virtch_common.c -o virtch_common.o
251strcasecmp.o: ../posix/strcasecmp.c $(HEADER_DEPS)
252	$(COMPILE) ../posix/strcasecmp.c -o strcasecmp.o
253