#############################################################
# Makefile for SLRF denoise demo
#
# Yunpeng Li
#############################################################

MACHTYPE=$(shell uname -m)

ifeq ($(MACHTYPE), x86_64)
ARCH = core2
else
ARCH = pentium4
endif

OS = LINUX
COMPILER = GCC

# PNG lib
PNGLIBDIR = lpng
PNG_LIB = lpng/libpng.a

# Image lib
IMGLIBDIR = imagelib
IMG_LIB = imagelib/libImg.a

# L-BFGS lib
LBFGSDIR = lbfgs
LBFGS_LIB = lbfgs/lbfgs.o lbfgs/libs/ap.o

OBJ = Main.o Denoise.o Utils.o SLRF.o $(LBFGS_LIB) $(IMG_LIB) $(PNG_LIB)

WARN = -Wall -Wextra
OPT = -O3 -ffast-math -fomit-frame-pointer -funroll-loops -fprefetch-loop-arrays -march=$(ARCH) -mfpmath=sse -msse2
INCLUDES = -I. -I$(IMGLIBDIR) -I$(PNGLIBDIR) -I$(LBFGSDIR)

OTHERFLAGS = #-fopenmp #(enable only if compiler supports)

CPPFLAGS = -D$(OS) -D$(COMPILER) -pipe $(INCLUDES) $(WARN) $(OPT) $(OTHERFLAGS)
LINKFLAGS = $(CPPFLAGS) -static -L$(IMGLIBDIR) -L$(PNGLIBDIR) -lc -lm -lpthread -lz

CC = g++
LINK = g++


#############################################################

all:	$(PNG_LIB) $(IMG_LIB) denoise

denoise: $(OBJ)
	$(LINK) -o denoise $(OBJ) $(LINKFLAGS)

$(IMG_LIB):
	cd $(IMGLIBDIR); make; cd ..

$(PNG_LIB):
	cd $(PNGLIBDIR); make -f scripts/makefile.gcc; cd ..

clean:
	rm -f -r $(OBJ)

cleanall:
	rm -f -r $(OBJ); 
	cd $(PNGLIBDIR); make clean -f scripts/makefile.gcc; cd ..; 
	cd $(IMGLIBDIR); make clean; make allclean; cd ..
