HOME_DIR = ..
SRC_DIR = $(HOME_DIR)/src
OBJ_DIR = $(HOME_DIR)/obj
HDR_DIR = $(HOME_DIR)/src
BIN_DIR = $(HOME_DIR)/bin
TIFF_DIR = $(HOME_DIR)/../tiff_lib/tiff-v3.4/libtiff
JPEG_DIR = $(HOME_DIR)/../tiff_lib/jpeg-uunet/jpeg-6a

HDR_SEG = $(HOME_DIR)/../segment/src/seg.h
LIB_SEG = $(HOME_DIR)/../segment/lib/lib_seg.a

LIB_TIFF = $(TIFF_DIR)/libtiff.a
HDR_TIFF = $(TIFF_DIR)/Tiff_img.h 
LIB_JPEG = $(JPEG_DIR)/libjpeg.a 

HDR_UTL = $(HOME_DIR)/../utilities/src/util.h $(HDR_TIFF)
LIB_UTL = $(HOME_DIR)/../utilities/lib/lib_util.a $(LIB_TIFF) $(LIB_JPEG)

# electric fence is a program to find malloc errors
# Jacob Harris   18 Dec 02.
EF_DIR = $(HOME_DIR)/../../ElectricFence-2.0.5
LIB_EF = $(EF_DIR)/libefence.a



# Solaris 2.X, HPUX 9.X and 10.X cc options
#CFLAGS = -Aa -O
#CFLAGS = -Aa -g

# linux gcc options
CFLAGS = -ansi -g
#
#-------------------------  EM and Decimate ----------------------------
#
EM_HEADERS = \
    $(HDR_DIR)/EM_Dec.h  $(HDR_UTL) 

EM_OBJECTS = \
    $(OBJ_DIR)/EM_Dec.o \
    $(OBJ_DIR)/EM_Dec_u.o \
    $(OBJ_DIR)/EM_alpha.o \
    $(OBJ_DIR)/EM_sample.o \
    $(OBJ_DIR)/Dec_u.o \
    $(OBJ_DIR)/train_u.o

#to use electric fence, delete the '#' in the next line
EM_LIBS = $(LIB_UTL)                # $(LIB_EF)

#----------------------  Gaussian Mixture Model ----------------------------
#
GMM_HEADERS = \
    $(HDR_DIR)/GMM.h  $(HDR_DIR)/clust.h  $(HDR_DIR)/clustermessage.h  \
    $(HDR_UTL) $(HDR_SEG) 

GMM_OBJECTS = \
    $(OBJ_DIR)/GMM.o \
    $(OBJ_DIR)/GMM_u.o \
    $(OBJ_DIR)/GMM_pyramid.o \
    $(OBJ_DIR)/GMM_clust.o \
    $(OBJ_DIR)/clust_alloc.o \
    $(OBJ_DIR)/clust_invert.o \
    $(OBJ_DIR)/clust_io.o \
    $(OBJ_DIR)/clust_util.o \
    $(OBJ_DIR)/subcluster.o \
    $(OBJ_DIR)/subcluster2.o \
    $(OBJ_DIR)/clustermessage.o

#to use electric fence, delete the '#' in the next line
GMM_LIBS = $(LIB_UTL) $(LIB_SEG)          # $(LIB_EF)

#--------------------  Class Probability Tree ----------------------------
#

CPT_HEADERS = \
    $(HDR_DIR)/CPT.h  $(HDR_UTL)  $(HDR_SEG) 

CPT_OBJECTS = \
    $(OBJ_DIR)/CPT_MAP.o \
    $(OBJ_DIR)/CPT_util.o \
    $(OBJ_DIR)/TrUtil.o \
    $(OBJ_DIR)/TrPrune.o \
    $(OBJ_DIR)/TrEntropy.o \
    $(OBJ_DIR)/TrFeatBin.o \
    $(OBJ_DIR)/TrGrow.o \
    $(OBJ_DIR)/TrLinearSplit.o \
    $(OBJ_DIR)/TrPartition.o \
    $(OBJ_DIR)/pinv.o \
    $(OBJ_DIR)/stat.o
   
#to use electric fence, delete the '#' in the next line
CPT_LIBS = $(LIB_SEG) $(LIB_UTL)          # $(LIB_EF)



#---------------------------------------------------------------------------
# used in make.rules
CC = cc
OUTPUT_OPTION = -o $@
COMPILE.c = $(CC) $(CFLAGS) $(OUTPUT_OPTION) -c
LINK.c    = $(CC) $(CFLAGS) 
LIBS = $(LIB_UTL)

default : all

all : EM_Dec  GMM  CPT 


#----------------------  EM and Decimate ----------------------------
#
EM_Dec : $(EM_OBJECTS) $(EM_LIBS)
	$(LINK.c) -o $(BIN_DIR)/$@ $(EM_OBJECTS) $(EM_LIBS) -lm
    
$(OBJ_DIR)/EM_Dec.o : $(SRC_DIR)/EM_Dec.c $(EM_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/EM_Dec.c	

$(OBJ_DIR)/EM_Dec_u.o : $(SRC_DIR)/EM_Dec_u.c $(EM_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/EM_Dec_u.c

$(OBJ_DIR)/EM_alpha.o : $(SRC_DIR)/EM_alpha.c $(EM_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/EM_alpha.c
	
$(OBJ_DIR)/EM_sample.o : $(SRC_DIR)/EM_sample.c $(EM_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/EM_sample.c	

$(OBJ_DIR)/Dec_u.o : $(SRC_DIR)/Dec_u.c $(EM_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/Dec_u.c	

$(OBJ_DIR)/train_u.o : $(SRC_DIR)/train_u.c $(EM_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/train_u.c	


#----------------------  Gaussian Mixture Model ----------------------------
#

GMM : $(GMM_OBJECTS) $(GMM_LIBS)
	$(LINK.c) -o $(BIN_DIR)/$@ $(GMM_OBJECTS) $(GMM_LIBS) -lm
    
$(OBJ_DIR)/GMM.o : $(SRC_DIR)/GMM.c $(GMM_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/GMM.c	

$(OBJ_DIR)/GMM_u.o : $(SRC_DIR)/GMM_u.c $(GMM_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/GMM_u.c	

$(OBJ_DIR)/GMM_pyramid.o : $(SRC_DIR)/GMM_pyramid.c $(GMM_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/GMM_pyramid.c	

$(OBJ_DIR)/GMM_clust.o : $(SRC_DIR)/GMM_clust.c $(GMM_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/GMM_clust.c
	
$(OBJ_DIR)/clust_alloc.o : $(SRC_DIR)/clust_alloc.c $(GMM_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/clust_alloc.c	
	
$(OBJ_DIR)/clust_invert.o : $(SRC_DIR)/clust_invert.c $(GMM_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/clust_invert.c
	
$(OBJ_DIR)/clust_io.o : $(SRC_DIR)/clust_io.c $(GMM_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/clust_io.c
	
$(OBJ_DIR)/clust_util.o : $(SRC_DIR)/clust_util.c $(GMM_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/clust_util.c
	
$(OBJ_DIR)/subcluster.o : $(SRC_DIR)/subcluster.c $(GMM_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/subcluster.c
	
$(OBJ_DIR)/subcluster2.o : $(SRC_DIR)/subcluster2.c $(GMM_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/subcluster2.c
	
$(OBJ_DIR)/clustermessage.o : $(SRC_DIR)/clustermessage.c $(GMM_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/clustermessage.c


#--------------------  Class Probability Tree ----------------------------
#


CPT : $(OBJ_DIR)/CPT.o $(CPT_OBJECTS) $(CPT_LIBS)
	$(LINK.c) -o $(BIN_DIR)/$@ $(OBJ_DIR)/CPT.o $(CPT_OBJECTS) $(CPT_LIBS) -lm

$(OBJ_DIR)/CPT.o : $(SRC_DIR)/CPT.c $(CPT_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/CPT.c	

$(OBJ_DIR)/CPT_MAP.o : $(SRC_DIR)/CPT_MAP.c $(CPT_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/CPT_MAP.c	

$(OBJ_DIR)/CPT_util.o : $(SRC_DIR)/CPT_util.c $(CPT_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/CPT_util.c	

$(OBJ_DIR)/TrUtil.o : $(SRC_DIR)/TrUtil.c $(CPT_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/TrUtil.c	

$(OBJ_DIR)/TrPrune.o : $(SRC_DIR)/TrPrune.c $(CPT_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/TrPrune.c	

$(OBJ_DIR)/TrEntropy.o : $(SRC_DIR)/TrEntropy.c $(CPT_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/TrEntropy.c	

$(OBJ_DIR)/TrFeatBin.o : $(SRC_DIR)/TrFeatBin.c $(CPT_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/TrFeatBin.c	

$(OBJ_DIR)/TrGrow.o : $(SRC_DIR)/TrGrow.c $(CPT_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/TrGrow.c	

$(OBJ_DIR)/TrLinearSplit.o : $(SRC_DIR)/TrLinearSplit.c $(CPT_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/TrLinearSplit.c	

$(OBJ_DIR)/TrPartition.o : $(SRC_DIR)/TrPartition.c $(CPT_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/TrPartition.c	

$(OBJ_DIR)/pinv.o : $(SRC_DIR)/pinv.c $(CPT_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/pinv.c	

$(OBJ_DIR)/stat.o : $(SRC_DIR)/stat.c $(CPT_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/stat.c	


Tree : $(OBJ_DIR)/Tree.o $(CPT_OBJECTS) $(CPT_LIBS)
	$(LINK.c) -o $(BIN_DIR)/$@ $(OBJ_DIR)/Tree.o $(CPT_OBJECTS) $(CPT_LIBS) -lm

$(OBJ_DIR)/Tree.o : $(SRC_DIR)/Tree.c $(CPT_HEADERS)
	$(COMPILE.c) $(SRC_DIR)/Tree.c	


#--------------------  Decimate Org Image  ----------------------------
#

Dec_OrgImg : $(OBJ_DIR)/Dec_OrgImg.o ${LIB_UTL}
	$(LINK.c) -o $(BIN_DIR)/$@ $(OBJ_DIR)/Dec_OrgImg.o $(LIB_UTL) -lm

$(OBJ_DIR)/Dec_OrgImg.o : $(SRC_DIR)/Dec_OrgImg.c
	$(COMPILE.c) $(SRC_DIR)/Dec_OrgImg.c
        
#---------------  Standarlize Groundth Image ----------------------------
#

Groundtruth: $(OBJ_DIR)/groundtruth.o ${LIB_UTL}
	$(LINK.c) -o $(BIN_DIR)/$@ $(OBJ_DIR)/groundtruth.o $(LIB_UTL) -lm

$(OBJ_DIR)/groundtruth.o : $(SRC_DIR)/groundtruth.c
	$(COMPILE.c) $(SRC_DIR)/groundtruth.c
        
upsample_hs: $(OBJ_DIR)/upsample.o ${LIB_UTL}
	$(LINK.c) -o $(BIN_DIR)/$@ $(OBJ_DIR)/upsample.o $(LIB_UTL) -lm

$(OBJ_DIR)/upsample.o : $(SRC_DIR)/upsample.c
	$(COMPILE.c) $(SRC_DIR)/upsample.c
        
        
        
        
clean: 
	rm -f $(OBJ_DIR)/*.o $(BIN_DIR)/EM $(BIN_DIR)/GMM $(BIN_DIR)/CPT
