perturbation based calculations
[maximus:emndl.git] / Makefile
1 #
2 #    emndl -- exponentially transformed Mandelbrot Set renderer
3 #    Copyright (C) 2011  Claude Heiland-Allen <claude@mathr.co.uk>
4 #
5 #    This program is free software: you can redistribute it and/or modify
6 #    it under the terms of the GNU General Public License as published by
7 #    the Free Software Foundation, either version 3 of the License, or
8 #    (at your option) any later version.
9 #
10 #    This program is distributed in the hope that it will be useful,
11 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #    GNU General Public License for more details.
14 #
15 #    You should have received a copy of the GNU General Public License
16 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 #
18
19 # standard paths/tools
20 prefix = /usr/local
21 exec_prefix = $(prefix)
22 data_prefix = $(prefix)
23 bindir = $(exec_prefix)/bin
24 datadir = $(data_prefix)/share/emndl
25 INSTALL = install
26 INSTALL_PROGRAM = $(INSTALL)
27 INSTALL_DATA = $(INSTALL) -m 644
28
29 # tools
30 CC = gcc
31 CXX = g++
32 GHC = ghc
33
34 # flags
35 OFLAGS = -O3 -march=native -Wall -pedantic -Wextra -Wno-unused-parameter -D_FILE_OFFSET_BITS=64 -pthread -fopenmp -ggdb
36 CFLAGS = -std=c99
37 CXXFLAGS = -std=c++11
38 GHCFLAGS = -O3 -Wall -threaded -rtsopts -fspec-constr-count=50
39 LIBS = -lm -lqd -lmpfr -lgmp
40 EXES = emndl_automu emndl_colourize emndl_downscale emndl_equalize emndl_finalize emndl_calculate emndl_parse emndl_ppmtoy4m emndl_pretty emndl_randomize emndl_unwarp
41 OBJS = emndl_autotune emndl_autotune.hi emndl_autotune.o Complex.hi Complex.o GridScan.hi GridScan.o MuAtom.hi MuAtom.o Number.hi Number.o Roots.hi Roots.o
42 DATAS = emndl_audio.pd emndl_comb~.pd emndl_compress~.pd emndl_filter.pd emndl_loader.pd
43
44 # build
45 all: $(EXES)
46
47 # clean
48 clean:
49         -rm -f $(EXES) $(OBJS)
50
51 # install
52 install:
53         $(INSTALL) -d $(DESTDIR)$(bindir)
54         $(MAKE) install-bin
55         $(MAKE) install-sh
56         $(MAKE) install-data
57
58 install-strip:
59         $(INSTALL) -d $(DESTDIR)$(bindir)
60         $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install-bin
61         $(MAKE) install-sh
62         $(MAKE) install-data
63
64 install-bin:
65         $(INSTALL_PROGRAM) $(EXES) $(DESTDIR)$(bindir)
66
67 install-sh:
68         $(INSTALL_PROGRAM) emndl.sh $(DESTDIR)$(bindir)
69
70 install-data:
71         $(INSTALL) -d $(DESTDIR)$(datadir)
72         $(INSTALL_DATA) $(DATAS) $(DESTDIR)$(datadir)
73
74 # Haskell executables
75 emndl_autotune: emndl_autotune.hs Complex.hs GridScan.hs MuAtom.hs Number.hs Roots.hs
76         $(GHC) $(GHCFLAGS) --make emndl_autotune.hs
77
78 # C executables
79 %: %.c
80         $(CC) $(CFLAGS) $(OFLAGS) -o $@ $< $(LIBS)
81
82 # C++ executables
83 %: %.cc
84         $(CXX) $(CXXFLAGS) $(OFLAGS) -o $@ $< $(LIBS)
85
86 # dependencies
87 emndl_calculate: emndl_calculate.cc mp_real.h
88
89 # meta
90 .SUFFIXES:
91 .PHONY: all clean install install-strip install-bin install-sh