OBJECT_DIR := build/$(shell uname -s)-$(shell uname -m) INTERFACE_DIR := build/Interface SOURCE = $(patsubst %, src/%, $(TOPLEVEL)) \ $(HASKORE_INTERFACE) $(MUSIC) \ $(PLAIN) $(FILTER) $(DIMENSION) $(VOLUME) $(SRCONTEXT) $(PHYSICAL) \ $(FUSION) $(STORABLE) \ $(INFERENCE) $(SOX) TOPLEVEL = \ BinarySample.hs # DiscreteWavelet/Lifting DiscreteWavelet/Lattice \ # Signal.hs ShiftedSignal.hs MUSIC = $(patsubst %, src/Music/%, \ WinterAde.hs FilterSaw.hs FMBassLine.hs SwanLake.hs \ ChildSong6ToSignal.hs Guitar.hs ) HASKORE_INTERFACE = \ $(patsubst %, src/Haskore/Interface/Signal/%, \ Note.hs InstrumentMap.hs Write.hs) SIGNAL = $(wildcard src/Sound/Signal/*.hs) src/Sound/Signal.hs PLAIN = $(wildcard src/Synthesizer/Plain/*.hs) \ $(wildcard src/Synthesizer/Plain/Effect/*.hs) \ $(wildcard src/Synthesizer/Plain/Filter/*.hs) \ $(wildcard src/Synthesizer/Plain/Filter/Delay/*.hs) FILTER = $(wildcard src/Filter/*.hs) DIMENSION = $(wildcard src/Synthesizer/Dimension/*.hs) \ $(wildcard src/Synthesizer/Dimension/Amplitude/*.hs) \ $(wildcard src/Synthesizer/Dimension/Rate/*.hs) \ $(wildcard src/Synthesizer/Dimension/RateAmplitude/*.hs) VOLUME = $(wildcard src/Synthesizer/Amplitude/*.hs) SRCONTEXT = $(wildcard src/Synthesizer/SampleRateContext/*.hs) FUSION = $(wildcard src/Synthesizer/FusionList/*.hs) STORABLE = $(wildcard src/Synthesizer/Storable/*.hs) PHYSICAL = $(wildcard src/Synthesizer/Physical/*.hs) INFERENCE = $(wildcard src/Synthesizer/Inference/Monad/*.hs) \ $(wildcard src/Synthesizer/Inference/Monad/Signal/*.hs) \ $(wildcard src/Synthesizer/Inference/Monad/SignalSeq/*.hs) \ $(wildcard src/Synthesizer/Inference/Reader/*.hs) SOX = src/Sox.hs $(wildcard src/Sox/*.hs) HTML = doc/html STDHADDOCK = base/base.haddock CUSTOMHADDOCK = numericprelude/docs/numericprelude.haddock haskore/docs/haskore.haddock HADDOCK_INCL = $(patsubst %, -i /usr/local/share/ghc-6.2/html/libraries/%, $(STDHADDOCK)) \ $(patsubst %, -i $(HOME)/programming/haskell/%, $(CUSTOMHADDOCK)) # if the 6.4.1 files are used, many identifiers like ExitCode can not be found # CUSTOMHADDOCK = numericprelude/docs/numericprelude.haddock haskore/docs/haskore.haddock # HADDOCK_INCL = $(patsubst %, -i /usr/share/doc/ghc-6.4.1/libraries/%, $(STDHADDOCK)) \ # $(patsubst %, -i $(HOME)/programming/haskell/%, $(CUSTOMHADDOCK)) HADDOCK_SOURCE = $(SOURCE) src/Synthesizer/Physical.hs src/Synthesizer/Inference/Monad.hs #MODULES = Synthesizer Instruments SignalIO Signal Test Filter/Test MODULE_PATH = src:src-3 # the other modules are now present by (Cabal) packages HC = ghc # ghc-6.2.2 HCINT = ghci # ghci-6.2.2 GHC_OPTIONS = -O -Wall -odir$(OBJECT_DIR) -hidir$(INTERFACE_DIR) -hide-package synthesizer .PHONY: all doc build test clean perm all: build clean: rm -r $(OBJECT_DIR) $(INTERFACE_DIR)/* doc: $(SOURCE) haddock --html-help=devhelp -o $(HTML) -t Synthesizer -p doc/Prologue.txt -h --dump-interface=doc/synthesizer.haddock \ $(HADDOCK_INCL) $(HADDOCK_SOURCE) chmod -R o+rx $(HTML) publish-doc: doc tar cz $(HTML) | ssh cvs.haskell.org tar xz --directory=/home/darcs/synthesizer build: -mkdir $(OBJECT_DIR) $(HC) --make $(GHC_OPTIONS) -i:$(MODULE_PATH) $(SOURCE) # $(HC) --make -O -Wall $(patsubst %, %.hs, $(MODULES)) perm: (cd /home/thielema; \ chgrp -R perform projects/paper/haskellsignal programming/haskell/synthesizer; \ chmod -R g+rw projects/paper/haskellsignal programming/haskell; \ chmod g+x `find programming/haskell -type d`; \ rm /tmp/curve.dat; ) test: $(HC) $(GHC_OPTIONS) -i:$(MODULE_PATH) --make src/Test.hs time $(HC) $(GHC_OPTIONS) -i:$(MODULE_PATH) -e main src/Test.hs # time a.out main: $(HC) $(GHC_OPTIONS) -i:$(MODULE_PATH) --make Main.hs time a.out ghci: $(HCINT) -Wall -odirdist/build -hidirdist/build -hide-package synthesizer -i:$(MODULE_PATH) ghci-custom: $(HCINT) $(GHC_OPTIONS) -i:$(MODULE_PATH) tutorial: $(HCINT) -Wall -fobject-code -fexcess-precision -O2 -fvia-C -optc-O2 -odirdist/build -hidirdist/build -hide-package synthesizer -i:$(MODULE_PATH) src/Synthesizer/Generic/Tutorial.hs %.o: %.hs $(HC) -i:$(MODULE_PATH) -O --make $< %.o: %.c gcc -c -o $@ $<