# OpenAL # http://www.openal.org/ USEAL=1 LINKAL=0 ALCFLAGS= ALLIBS=-lopenal ALDLWIN=openal32.dll ALDLLIN=libopenal.so # DirectX SDK (Win32) # http://www.microsoft.com/downloads/details.aspx?FamilyID=edb98ffa-a59c-4c23-9b92-ba304f188314&DisplayLang=en DIRECTXCFLAGS= DIRECTXLIBS=-ldxguid # OggVorbis # http://www.vorbis.com/ USEVORBIS=1 LINKVORBIS=0 VORBISCFLAGS= VORBISLIBS=-lvorbisfile -lvorbis -logg VORBISDLWIN=vorbisfile.dll VORBISDLLIN=libvorbisfile.so # FLAC # http://flac.sf.net/ USEFLAC=0 LINKFLAC=0 FLACCFLAGS= FLACLIBS=-lflac FLACDLWIN=libflac.dll FLACDLLIN=libFLAC.so # MPEG Audio via mpadec # http://mpadec.sf.net/ USEMPADEC=1 LINKMPADEC=1 MPADECCFLAGS=-Impadec MPADECLIBS=mpadec/libmpadec.a MPADECDLWIN=mpadec.dll MPADECDLLIN=libmpadec.so # libSDL 1.2 or better (used just for the test app on Win32, for CDA and sound everywhere else) # http://www.libsdl.org/ SDLCFLAGS=$(shell sdl-config --cflags) SDLLIBS=$(shell sdl-config --libs) # Directories for library SDKs on Windows # I keep my third-party libraries each in a directory on their own. SDKDIRECTX=c:/sdks/directx/dx61/ SDKOPENAL=c:/sdks/OpenAL/ SDKVORBIS=c:/sdks/oggvorbis-gcc3/ SDKFLAC=c:/sdks/flac/ obj=obj src=src inc=inc o=o libfile=libjfaud.a # Linux-specific options ifeq ($(shell uname -s),Linux) exe= platformcflags=$(SDLCFLAGS) platformobjs=$(obj)/cda_sdl.$o $(obj)/waveout_sdl.$o platformlibs= SDLCFLAGS+= -DSDL_main=main ALCFLAGS:= $(ALCFLAGS) -DALDL=\"$(ALDLLIN)\" VORBISCFLAGS:= $(VORBISCFLAGS) -DVORBISDL=\"$(VORBISDLLIN)\" FLACCFLAGS:= $(FLACCFLAGS) -DFLACDL=\"$(FLACDLLIN)\" MPADECCFLAGS:=$(MPADECCFLAGS) -DMPADECDL=\"$(MPADECDLLIN)\" MPADECBUILD=libmpadec.so endif # *BSD-specific options ifeq ($(findstring BSD,$(shell uname -s)),BSD) exe= platformcflags=$(SDLCFLAGS) platformobjs=$(obj)/cda_sdl.$o $(obj)/waveout_sdl.$o platformlibs= ALCFLAGS:= $(ALCFLAGS) -DALDL=\"$(ALDLLIN)\" VORBISCFLAGS:= $(VORBISCFLAGS) -DVORBISDL=\"$(VORBISDLLIN)\" FLACCFLAGS:= $(FLACCFLAGS) -DFLACDL=\"$(FLACDLLIN)\" MPADECCFLAGS:=$(MPADECCFLAGS) -DMPADECDL=\"$(MPADECDLLIN)\" MPADECBUILD=libmpadec.so endif # MinGW32-specific options ifeq ($(findstring MINGW,$(shell uname -s)),MINGW) exe=.exe platformcflags=-I$(SDKDIRECTX)include $(DIRECTXCFLAGS) platformobjs=$(obj)/cda_win32.$o $(obj)/midisynth_win32.$o $(obj)/waveout_dsound.$o platformlibs=-lwinmm -L$(SDKDIRECTX)lib $(DIRECTXLIBS) ALCFLAGS:=-I$(SDKOPENAL)Include $(ALCFLAGS) -DALDL=\"$(ALDLWIN)\" ALLIBS=-L$(SDKOPENAL)libs -lopenal32 VORBISCFLAGS:=-I$(SDKVORBIS)include $(VORBISCFLAGS) -DVORBISDL=\"$(VORBISDLWIN)\" VORBISLIBS:=-L$(SDKVORBIS)lib $(VORBISLIBS) FLACCFLAGS:=-I$(SDKFLAC)include $(FLACCFLAGS) -DFLACDL=\"$(FLACDLWIN)\" FLACLIBS:=-L$(SDKFLAC)bin $(FLACLIBS) MPADECCFLAGS:=$(MPADECCFLAGS) -DMPADECDL=\"$(MPADECDLWIN)\" MPADECBUILD=mpadec.dll endif OURCFLAGS=-fno-rtti -fno-exceptions -g -I$(inc) $(platformcflags) #-DDEBUG LIBS=$(platformlibs) dependencies= OURCFLAGS+= -DUSEAL=$(USEAL) ifeq ($(USEAL),1) OURCFLAGS+= -DLINKAL=$(LINKAL) ifeq ($(LINKAL),1) LIBS+= $(ALLIBS) endif endif OURCFLAGS+= -DUSEVORBIS=$(USEVORBIS) ifeq ($(USEVORBIS),1) OURCFLAGS+= -DLINKVORBIS=$(LINKVORBIS) ifeq ($(LINKVORBIS),1) LIBS+= $(VORBISLIBS) endif endif OURCFLAGS+= -DUSEFLAC=$(USEFLAC) ifeq ($(USEFLAC),1) OURCFLAGS+= -DLINKFLAC=$(LINKFLAC) ifeq ($(LINKFLAC),1) LIBS+= $(FLACLIBS) endif endif OURCFLAGS+= -DUSEMPADEC=$(USEMPADEC) ifeq ($(USEMPADEC),1) OURCFLAGS+= -DLINKMPADEC=$(LINKMPADEC) ifeq ($(LINKMPADEC),1) LIBS+= $(MPADECLIBS) endif dependencies+= libmpadec endif # JFAud can be built natively in both a 64bit and 32bit environment # but the JF ports that use it are currently only 32bit games, so # setting NBIT=32 on the make command line will force a 32bit compile NBIT=32 ifeq ($(NBIT),32) ifeq ($(findstring x86_64,$(shell uname -m)),x86_64) # on my 64bit Gentoo these are the 32bit emulation libs LIBS+= -m32 -L/emul/linux/x86/usr/lib OURCFLAGS+= -m32 endif endif CC=gcc CXX=gcc AR=ar OURCXXFLAGS=$(OURCFLAGS) libraryobjs=$(obj)/jfaud.$o $(obj)/soundcache.$o \ $(obj)/mixer.$o $(obj)/nullmixer.$o $(obj)/almixer.$o $(obj)/softwaremixer.$o \ $(obj)/file.$o $(obj)/stdfile.$o \ $(obj)/pcmbuffer.$o $(obj)/midibuffer.$o \ $(obj)/soundfile.$o $(obj)/waveformfile.$o $(obj)/midifile.$o \ $(obj)/waveformfile_raw.$o $(obj)/waveformfile_riffwave.$o $(obj)/waveformfile_aiff.$o \ $(obj)/waveformfile_voc.$o $(obj)/waveformfile_au.$o $(obj)/waveformfile_oggvorbis.$o \ $(obj)/waveformfile_flac.$o $(obj)/waveformfile_mpeg.$o \ $(obj)/midifile_smf.$o $(obj)/midiseq.$o $(obj)/midisynth.$o \ $(obj)/cda_null.$o $(obj)/waveout.$o $(obj)/dynlib.$o $(obj)/crc32.$o $(platformobjs) testprogobjs=$(obj)/jfaudtest.$o $(libfile) # module-specific CFLAGS declaration variables almixer_cpp_CFLAGS=$(ALCFLAGS) jfaud_cpp_CFLAGS=$(ALCFLAGS) waveformfile_oggvorbis_cpp_CFLAGS=$(VORBISCFLAGS) waveformfile_flac_cpp_CFLAGS=$(FLACCFLAGS) waveformfile_mpeg_cpp_CFLAGS=$(MPADECCFLAGS) waveformfile_cpp_CFLAGS=$(VORBISCFLAGS) $(FLACCFLAGS) $(MPADECCFLAGS) .PHONY: all test clean veryclean all: $(libfile) test: jfaudtest$(exe) jfaudtest$(exe): $(testprogobjs) $(dependencies) $(CXX) -g -o $@ $(testprogobjs) $(SDLLIBS) $(LIBS) -lm -lsupc++ $(libfile): $(libraryobjs) $(AR) cr $@ $^ ranlib $@ sinclude Makefile.deps $(obj)/jfaudtest.$o: $(src)/jfaudtest.cpp $(inc)/jfaud.hpp $(inc)/file.hpp $(inc)/mixer.hpp $(inc)/waveformfile.hpp $(inc)/soundfile.hpp $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp $(inc)/cda.hpp $(inc)/sysdefs.h $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $(SDLCFLAGS) -c -o $@ $< $(obj)/%.$o: $(src)/%.cpp $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $($(subst .,_,$(notdir $<))_CFLAGS) -c -o $@ $< # for reconstructing the dependencies makefile .PHONY: deps deps: $(libraryobjs:.$o=.dep) perl processdeps.pl $(obj) $(src) $(inc) $^ > Makefile.deps.new rm -f $^ $(obj)/%.dep: $(src)/%.cpp $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $($(subst .,_,$(notdir $<))_CFLAGS) -MM -c -o $@ $< # housekeeping clean: -rm -f $(libraryobjs) jfaudtest$(exe) $(obj)/jfaudtest.$o -cd mpadec && $(MAKE) clean veryclean: clean -rm -f $(libfile) # for building libmpadec .PHONY: libmpadec libmpadec: cd mpadec && $(MAKE) libmpadec.a $(MPADECBUILD) NBIT=$(NBIT)