#
# This file is part of the Alliance CAD System
# Copyright (C) Laboratoire LIP6 - Dpartement ASIM
# Universite Pierre et Marie Curie
# 
# Home page          : http://www-asim.lip6.fr/alliance/
# E-mail support     : mailto:alliance-support@asim.lip6.fr
# 
# This progam is  free software; you can redistribute it  and/or modify it
# under the  terms of the GNU  General Public License as  published by the
# Free Software Foundation;  either version 2 of the License,  or (at your
# option) any later version.
# 
# Alliance VLSI  CAD System  is distributed  in the hope  that it  will be
# useful, but WITHOUT  ANY WARRANTY; without even the  implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details.
# 
# You should have received a copy  of the GNU General Public License along
# with the GNU C Library; see the  file COPYING. If not, write to the Free
# Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#

# 10/23/97 Makefile for cns

include $(TOP)/etc/$(MACHINE).mk
include $(TOP)/etc/libraries.mk

SHELL = /bin/sh

CNSh = cnsi.h cns.h cnsd.h cnsv.h cnsh.h

CNSsce = cnsv.c cnsenv.c cnsptype.c cnslocon.c cnslotrs.c link.c branch.c edge.c inoutcone.c cone.c cell.c cnsfig.c cnscapa.c cnsfigprs.c cnsfigdrv.c cnsstats.c

CNSallh = cnsall.h

CNSobj = $(CNSsce:.c=.o)

PARSEh = parser/prsh.h

PARSEsce = parser/prsutil.c parser/cnsfig.yac parser/cnsfig.lex

PARSEallh = parser/prsall.h

PARSEobj = parser/prsutil.o parser/cnsfigy.tab.o parser/cnsfiglex.yy.o

CNS_LIB = libCns202.a
CNS_INC = cns202.h

LOCAL_INC = -I$(TARGET_INCLUDE) \
				-I$(ALLIANCE_INCLUDE)

LOCAL_CFLAGS = $(CFLAGS) -c -O3 $(LOCAL_INC) \
					 -D$(MACHINE) \
					 -DMUT_H='<$(MUT_H)>' \
					 -DMLO_H='<$(MLO_H)>' \
					 -DBEH_H='<$(BEH_H)>' 

LOCAL_YACCFLAGS = $(YACCFLAGS) -d 

LOCAL_LEXFLAGS = $(LEXFLAGS)

.c.o :
	$(CC) $(LOCAL_CFLAGS) -o $@ $<

$(TARGET_LIB)/$(CNS_LIB) : $(CNSh) $(CNSobj) $(PARSEh) $(PARSEobj)
	$(AR) $(ARFLAGS) $(TARGET_LIB)/$(CNS_LIB) $(CNSobj) $(PARSEobj)
	$(RANLIB) $(TARGET_LIB)/$(CNS_LIB)
	echo "/* file   : $(CNS_INC)" > $(TARGET_INCLUDE)/$(CNS_INC)
	echo " | date   : `date`" >> $(TARGET_INCLUDE)/$(CNS_INC)
	echo " | author : Pascal REMY" >> $(TARGET_INCLUDE)/$(CNS_INC)
	echo " | content: #includes, #defines, structures and variables for the CNS library */" >> $(TARGET_INCLUDE)/$(CNS_INC)
	echo "" >> $(TARGET_INCLUDE)/$(CNS_INC)
	echo "#ifndef CNS" >> $(TARGET_INCLUDE)/$(CNS_INC)
	echo "#define CNS" >> $(TARGET_INCLUDE)/$(CNS_INC)
	echo "" >> $(TARGET_INCLUDE)/$(CNS_INC)
	echo "" >> $(TARGET_INCLUDE)/$(CNS_INC)
	/bin/cat $(CNSh) | expand -3 >> $(TARGET_INCLUDE)/$(CNS_INC)
	echo "#endif" >> $(TARGET_INCLUDE)/$(CNS_INC)
	@if [ -f y.output ] ; then $(RM) y.output ; fi

$(CNSobj): $(CNSh) $(CNSallh)

parser/prsutil.o : $(CNSh) $(PARSEh) parser/prsutil.c
	$(CC) $(LOCAL_CFLAGS) -o parser/prsutil.o parser/prsutil.c

parser/cnsfigy.tab.o : $(CNSh) $(PARSEh) parser/cnsfig.yac
	$(YACC) $(LOCAL_YACCFLAGS) parser/cnsfig.yac
	echo "s/yy/cnsfigyy/g" > parser/tmp
	echo "s/YY/cnsfigYY/g" >> parser/tmp
	$(SED) -f parser/tmp y.tab.c > parser/cnsfigy.tab.c
	$(SED) -f parser/tmp y.tab.h > parser/cnsfigy.tab.h
	$(CC) $(LOCAL_CFLAGS) -o parser/cnsfigy.tab.o parser/cnsfigy.tab.c
	$(RM) y.tab.h y.tab.c parser/cnsfigy.tab.c parser/tmp

parser/cnsfiglex.yy.o : parser/cnsfig.lex
	$(LEX) $(LOCAL_LEXFLAGS) parser/cnsfig.lex
	echo "s/yy/cnsfigyy/g" > parser/tmp
	echo "s/YY/cnsfigYY/g" >> parser/tmp
	echo "s/y\.tab\.h/cnsfigy.tab.h/g" >> parser/tmp
	$(SED) -f parser/tmp lex.yy.c > parser/cnsfiglex.yy.c
	$(CC) $(LOCAL_CFLAGS) -o parser/cnsfiglex.yy.o parser/cnsfiglex.yy.c
	$(RM) lex.yy.c parser/cnsfiglex.yy.c parser/tmp

realclean : clean
	-$(RM) $(TARGET_LIB)/$(CNS_LIB) \
			 $(TARGET_INCLUDE)/$(CNS_INC)

clean :
	-$(RM) $(CNSobj) $(PARSEobj)
