1# platform: linux, macports, mingw_dynamic, mingw_static
2# build: debug, release
3PLATFORM = linux
4BUILD    = release
5
6
7TARGET_SOURCES = \
8	hdr_create.cc \
9	hdr_fix_ca.cc \
10	hdr_denoise.cc \
11	hdr_squish.cc \
12	hdr_adjust.cc \
13	hdr_convert.cc
14
15DEPENDENCY_SOURCES = \
16	image.cc \
17	fix_chromatic_aberration.cc \
18	fix_noise.cc \
19	squish_luminance.cc \
20	solve_poisson.cc
21
22DEPENDENCY_HEADERS = \
23	image.hh \
24	fix_chromatic_aberration.hh \
25	fix_noise.hh \
26	squish_luminance.hh \
27	solve_poisson.hh \
28	shared_array.hh \
29	helpers.hh \
30	headers.hh
31
32
33ifeq (${PLATFORM},linux)
34CXX?=		c++
35CXXFLAGS+=	-Wall
36CPPFLAGS+=	`pkg-config --cflags popt` `pkg-config --cflags OpenEXR` \
37		`Magick++-config --cppflags`
38LDFLAGS+=	`pkg-config --libs popt` `pkg-config --libs libtiff-4` \
39		`pkg-config --libs OpenEXR` `Magick++-config --libs`
40EXECUTABLES = ${TARGET_SOURCES:%.cc=%}
41endif
42
43ifeq (${PLATFORM},macports)
44CFLAGS = -msse2 -mfpmath=sse -I/opt/local/include/ImageMagick -I/opt/local/include/OpenEXR
45LDFLAGS = -lIlmImf -lHalf -lMagick++ -ltiff -lpopt -lstdc++ -lm
46EXECUTABLES = ${TARGET_SOURCES:%.cc=%}
47endif
48
49ifeq  ($(PLATFORM),mingw_dynamic)
50CFLAGS = -msse2 -mfpmath=sse -I/mingw/include/ImageMagick -I/mingw/include/OpenEXR
51LDFLAGS = -enable-auto-import -lIlmImf -lHalf -lMagick++ -ltiff -lpopt -lstdc++ -lm
52EXECUTABLES = ${TARGET_SOURCES:%.cc=%.exe}
53endif
54
55ifeq  ($(PLATFORM),mingw_static)
56CFLAGS = -msse2 -mfpmath=sse -I/mingw/include/ImageMagick -I/mingw/include/OpenEXR
57LDFLAGS = -static -static-libgcc -lIlmImf -lIlmThread -lIex -lHalf -lMagick++ -lMagickWand -lMagickCore -ljpeg -ltiff -lgdi32 -lpopt -lintl -liconv -lz -lltdl -lstdc++ -lm
58EXECUTABLES = ${TARGET_SOURCES:%.cc=%.exe}
59endif
60
61
62ifeq ($(BUILD),debug)
63CFLAGS := -g3 $(CFLAGS)
64endif
65
66ifeq ($(BUILD),release)
67CFLAGS := -O3 -funroll-loops -fomit-frame-pointer -DNDEBUG $(CFLAGS)
68endif
69
70
71TARGET_OBJS = $(TARGET_SOURCES:%.cc=%.o)
72DEPENDENCY_OBJS = $(DEPENDENCY_SOURCES:%.cc=%.o)
73
74.PHONY : all
75all : $(EXECUTABLES)
76
77$(TARGET_OBJS) $(DEPENDENCY_OBJS) : $(DEPENDENCY_HEADERS)
78$(EXECUTABLES) : $(DEPENDENCY_OBJS)
79$(foreach prog,$(EXECUTABLES),$(eval $$prog : $$prog.o))
80
81%.o : %.cc
82# Clang cannot compile image.cc and squish_luminance.cc with -O2 and above
83	$(CXX) $(if $(and $(shell $(CXX) -v 2>&1 | grep clang),$(filter \
84		image.cc squish_luminance.cc,$<)),$(CXXFLAGS:-O%=-O1), \
85		$(CXXFLAGS)) $(CPPFLAGS) -o $@ -c $<
86
87% : %.o
88	$(CXX) $(CXXFLAGS) $(LDFLAGS) $^ -o $@
89
90.PHONY : strip
91strip : all
92	strip $(EXECUTABLES)
93
94
95.PHONY : clean
96clean :
97	rm -f $(EXECUTABLES)
98