#******************************************************************************#
#*                                                                            *#
#*                    CAO & VLSI's cad tools chain Alliance                   *#
#*                                                                            *#
#*     Product  : STANDARD CELLS PLACER AND ROUTER                            *#
#*     File     : @(#) Makefile                                               *#
#*     Contents :                                                             *#
#*                                                                            *#
#*     (c) Copyright 1992 Laboratoire MASI equipe CAO & VLSI                  *#
#*     All rights reserved                                                    *#
#*     Hot line  : cao-vlsi@masi.ibp.fr (e-mail)                              *#
#*                                                                            *#
#*     Author(s)   : El housseine REJOUAN               Date : 13/01/1993     *#
#*                   and Pierre Fedrichkine                                   *#
#*     Modified by : El housseine REJOUAN               Date : 13/01/1993     *#
#*     Modified by :                                    Date : ../../....     *#
#*     Modified by :                                    Date : ../../....     *#
#*                                                                            *#
#******************************************************************************#

#******************************************************************************#
#*			LIBRARY PATH         				      *#
#******************************************************************************#
ALLIANCE_LIB = /labo/lib

LIBRARY = -lm -L$(ALLIANCE_LIB) -lMlu406 -lMpu306 -lMcl406 -lMsl600 -lMel400 \
          -lMal400 -lMhl402 -lMap305 -lMcp307 -lMlo402 -lMph306 -lMut309 \
          -lMvl404 

#******************************************************************************#
#*			INCLUDE PATH           				      *#
#******************************************************************************#
ALLIANCE_INCLUDE = /labo/include 
INCLUDE = -I$(ALLIANCE_INCLUDE) 

#******************************************************************************#
#*			FLAGS FOR COMPILATION  				      *#
#******************************************************************************#
ARCHI =
OBJ_PATH = ../$(ARCHI)/obj/
BIN_PATH = ../$(ARCHI)/bin/
CFLAGS   = -g
CC       = cc $(INCLUDE) $(CFLAGS)

################################################################################
#	PART ONE : This part contents all informations for the PLACER          #
################################################################################

#******************************************************************************#
#*			SOURCES FILES FOR SCP				      *#
#******************************************************************************#
SCP_SOURCES = scp_rmsd.c scp_init.c scp_pprs.c scp_gca.c scp_cct.c \
 	      scp_cdc.c scp_mc.c scp_mnc.c scp_mbk2scp.c scp_scp2mbk.c \
	      scp_dist.c scp_ph.c scp_initpp.c scp_initcon.c

#******************************************************************************#
#*			HEADERS FILES FOR SCP				      *#
#******************************************************************************#
SCR_HEADERS = scp_types.h scp_fonc.h 

#******************************************************************************#
#*			OBJ. FILES FOR SCP				      *#
#******************************************************************************#
SCP_OBJS   = $(OBJ_PATH)scp_rmsd.o $(OBJ_PATH)scp_init.o $(OBJ_PATH)scp_pprs.o \
             $(OBJ_PATH)scp_gca.o $(OBJ_PATH)scp_cct.o $(OBJ_PATH)scp_cdc.o \
             $(OBJ_PATH)scp_mc.o $(OBJ_PATH)scp_mnc.o $(OBJ_PATH)scp_mbk2scp.o \
             $(OBJ_PATH)scp_scp2mbk.o $(OBJ_PATH)scp_dist.o \
	     $(OBJ_PATH)scp_initpp.o $(OBJ_PATH)scp_ph.o \
             $(OBJ_PATH)scp_initcon.o		

################################################################################
#	PART TWO : This part contents all informations for the ROUTER          #
################################################################################

#******************************************************************************#
#*			SOURCES FILES FOR SCR				      *#
#******************************************************************************#
SCR_SOURCES = StaticUtil.c DynamicUtil.c AllowFree.c GreedyRouter.c \
              SymbChanRout.c ScrSesame.c LoadDataBase.c ViewDataBase.c \
              GlobalRouter.c main.c

#******************************************************************************#
#*			HEADERS FILES FOR SCR				      *#
#******************************************************************************#
SCR_HEADERS = StaticUtil.h DynamicUtil.h AllowFree.h GreedyRouter.h \
              SymbChanRout.h ScrDataBase.h scr.h LoadDataBase.h \
              ViewDataBase.h GlobalRouter.h SCR_Type.h

#******************************************************************************#
#*			OBJ. FILES FOR SCR				      *#
#******************************************************************************#
SCR_OBJS   = $(OBJ_PATH)StaticUtil.o $(OBJ_PATH)DynamicUtil.o \
             $(OBJ_PATH)AllowFree.o $(OBJ_PATH)GreedyRouter.o \
             $(OBJ_PATH)SymbChanRout.o $(OBJ_PATH)ScrSesame.o \
             $(OBJ_PATH)LoadDataBase.o $(OBJ_PATH)ViewDataBase.o \
             $(OBJ_PATH)GlobalRouter.o $(OBJ_PATH)main.o

#******************************************************************************#
#*			DEFINES FOR SCR   				      *#
#******************************************************************************#
SCR_DEFINES = -DMAXLINE=200 -DMAXCOL=1000
# use -DSCR_DEBUG to verbose mode

#******************************************************************************#
#*	                 ALLIANCE DISTRIBUTION INPUT                          *#
#******************************************************************************#
distribaux :
	-mkdir ../obj

distrib : distribaux $(SCR_OBJS) $(SCP_OBJS) 
	$(CC) -o $(BIN_PATH)scr $(SCP_OBJS) $(SCR_OBJS) $(LIBRARY) 
	-/bin/rm -r ../obj

#******************************************************************************#
#*	      EXECUTABLE FOR STANDARD CELLS PLACER AND ROUTER                 *#
#******************************************************************************#
$(BIN_PATH)scr : $(SCR_OBJS) $(SCR_HEADERS) $(SCP_OBJS) $(SCP_HEADERS)
	-mv $(BIN_PATH)scr $(BIN_PATH)scr.old 
	-mv *.o $(OBJ_PATH) 
	$(CC) -o $(BIN_PATH)scr $(SCP_OBJS) $(SCR_OBJS) $(LIBRARY) 
	strip $(BIN_PATH)scr

#******************************************************************************#
#*			OBJ. FILES FOR SCP				      *#
#******************************************************************************#
$(OBJ_PATH)scp_pprs.o : scp_pprs.c $(HFILES)
	$(CC) -c scp_pprs.c -o $(OBJ_PATH)scp_pprs.o

$(OBJ_PATH)scp_rmsd.o : scp_rmsd.c $(HFILES)
	$(CC) -c scp_rmsd.c -o $(OBJ_PATH)scp_rmsd.o

$(OBJ_PATH)scp_gca.o : scp_gca.c $(HFILES)
	$(CC) -c scp_gca.c  -o $(OBJ_PATH)scp_gca.o

$(OBJ_PATH)scp_init.o :scp_init.c $(HFILES)
	$(CC) -c scp_init.c -o $(OBJ_PATH)scp_init.o

$(OBJ_PATH)scp_cct.o : scp_cct.c $(HFILES)
	$(CC) -c scp_cct.c -o $(OBJ_PATH)scp_cct.o

$(OBJ_PATH)scp_mc.o : scp_mc.c $(HFILES)
	$(CC) -c scp_mc.c -o $(OBJ_PATH)scp_mc.o

$(OBJ_PATH)scp_cdc.o : scp_cdc.c $(HFILES)
	$(CC) -c scp_cdc.c -o $(OBJ_PATH)scp_cdc.o

$(OBJ_PATH)scp_mnc.o : scp_mnc.c $(HFILES)
	$(CC) -c scp_mnc.c -o $(OBJ_PATH)scp_mnc.o

$(OBJ_PATH)scp_mbk2scp.o : scp_mbk2scp.c $(HFILES)
	$(CC) -c scp_mbk2scp.c -o $(OBJ_PATH)scp_mbk2scp.o

$(OBJ_PATH)scp_scp2mbk.o : scp_scp2mbk.c $(HFILES)
	$(CC) -c scp_scp2mbk.c -o $(OBJ_PATH)scp_scp2mbk.o

$(OBJ_PATH)scp_dist.o : scp_dist.c $(HFILES)
	$(CC) -c scp_dist.c -o $(OBJ_PATH)scp_dist.o

$(OBJ_PATH)scp_initpp.o :scp_initpp.c $(HFILES)
	$(CC) -c scp_initpp.c -o $(OBJ_PATH)scp_initpp.o

$(OBJ_PATH)scp_ph.o : scp_ph.c $(HFILES)
	$(CC) -c scp_ph.c -o $(OBJ_PATH)scp_ph.o

$(OBJ_PATH)scp_initcon.o :scp_initcon.c $(HFILES)
	$(CC) -c scp_initcon.c -o $(OBJ_PATH)scp_initcon.o

#******************************************************************************#
#*			OBJS FILES FOR SCR				      *#
#******************************************************************************#
$(OBJ_PATH)StaticUtil.o : StaticUtil.c scr.h ScrDataBase.h
	$(CC) $(SCR_DEFINES) -c StaticUtil.c -o $(OBJ_PATH)StaticUtil.o

$(OBJ_PATH)DynamicUtil.o : DynamicUtil.c greedy.h ScrDataBase.h
	$(CC) $(SCR_DEFINES) -c DynamicUtil.c -o $(OBJ_PATH)DynamicUtil.o

$(OBJ_PATH)AllowFree.o : AllowFree.c ScrDataBase.h
	$(CC) $(SCR_DEFINES) -c AllowFree.c -o $(OBJ_PATH)AllowFree.o

$(OBJ_PATH)GreedyRouter.o : GreedyRouter.c greedy.h DynamicUtil.c
	$(CC) $(SCR_DEFINES) -c GreedyRouter.c -o $(OBJ_PATH)GreedyRouter.o

$(OBJ_PATH)SymbChanRout.o : SymbChanRout.c $(SCR_HEADERS)
	$(CC) $(SCR_DEFINES) -c SymbChanRout.c -o $(OBJ_PATH)SymbChanRout.o

$(OBJ_PATH)ScrSesame.o : ScrSesame.c 
	$(CC) -c ScrSesame.c -o $(OBJ_PATH)ScrSesame.o

$(OBJ_PATH)LoadDataBase.o : LoadDataBase.c SCR_Type.h
	$(CC) -c LoadDataBase.c -o $(OBJ_PATH)LoadDataBase.o

$(OBJ_PATH)ViewDataBase.o : ViewDataBase.c SCR_Type.h
	$(CC) -c ViewDataBase.c -o $(OBJ_PATH)ViewDataBase.o

$(OBJ_PATH)GlobalRouter.o : GlobalRouter.c SCR_Type.h
	$(CC) -c GlobalRouter.c -o $(OBJ_PATH)GlobalRouter.o

$(OBJ_PATH)main.o : main.c $(SCR_HEADERS)
	$(CC) -c main.c -o $(OBJ_PATH)main.o

#******************************************************************************#
#*			                             			      *#
#******************************************************************************#
clean :
	echo "** Deleting the object files ..."
	rm $(SCR_OBJS) $(SCP_OBJS)
	echo "** Scr compilation"
	make

flow :
	echo "Generating the scr.flow and scr.rflow files ..."
	cflow -r $(INCLUDE) $(SCR_SOURCES) $(SCP_SOURCES) > scr.rflow
	cflow  $(INCLUDE) $(SCR_SOURCES) $(SCP_SOURCES) > scr.flow

ctags :
	echo "Generating the index file ..."
	/usr/ucb/ctags -v $(SCR_SOURCES) $(SCP_SOURCES) | sort -f > scr.index

lint :
	echo "Lint in process ..."
	lint $(INCLUDE) $(SCR_SOURCES) $(SCP_SOURCES) > scr.lint

#******************************************************************************#
 
#depend : $(SCR_SOURCES) $(SCP_SOURCES) $(SCR_HEADERS) $(SCP_HEADERS)
#	(sed '/^#DO NOT DELETE/q' makefile && /
#	cc -M $(SCR_SOURCES) $(SCP_SOURCES)) > makefile.new
#	cp makefile makefile.bak
#	cp makefile.new makefile
#	-rm -f makefile.new
#DO NOT DELETE
#******************************************************************************#
