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 # the other modules are now present by (Cabal) packages
# MODULE_PATH = src:..:../numericprelude/src:../linearalgebra:../math:../shell-haskell:../haskore/src:../haskore/src/GHC
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)
%.o: %.hs
$(HC) -i:$(MODULE_PATH) -O --make $<
%.o: %.c
gcc -c -o $@ $<