# /*------------------------------------------------------------\
# |                                                             |
# | This file is part of the Alliance CAD System Copyright      |
# | (C) Laboratoire LIP6 - Dpartement ASIM Universite P&M 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.                     |
# |                                                             |
# \------------------------------------------------------------*/

# /*------------------------------------------------------------\
# |                                                             |
# | Tool   :                     Power                          |
# |                                                             |
# | File   :                    Makefile                        |
# |                                                             |
# | Date    :                   12_09_00                        |
# |                                                             |
# \------------------------------------------------------------*/

include $(ALLIANCE_TOP)/etc/$(ALLIANCE_OS).mk
include $(ALLIANCE_TOP)/etc/libraries.mk
include local.mk

# /*------------------------------------------------------------\
# |                                                             |
# |                            Variables                        |
# |                                                             |
# \------------------------------------------------------------*/

LOCAL_CFLAGS = $(CFLAGS) -D$(ALLIANCE_OS)  -Wall -g
# -Werror
# STRIP = echo

# /*------------------------------------------------------------\
# |                                                             |
# |                             Binary                          |
# |                                                             |
# \------------------------------------------------------------*/

LOCAL_POCPAG_BIN = pocpag
LOCAL_EPOC_BIN     = epoc
LOCAL_SICC_BIN     = sicc
LOCAL_MKDLY_BIN    = dtx2dly

# /*------------------------------------------------------------\
# |                                                             |
# |                             Include                         |
# |                                                             |
# \------------------------------------------------------------*/

LOCAL_INCLUDE = -I$(LOCAL_TARGET_INC) -I$(ALLIANCE_INCLUDE)

# /*------------------------------------------------------------\
# |                                                             |
# |                             Library                         |
# |                                                             |
# \------------------------------------------------------------*/

LOCAL_LIB      = -L$(ALLIANCE_LIB) \
                 $(MLU_L)  \
                 $(MAL_L)  \
		 $(RCN_L) \
                 $(MCL_L)  \
                 $(MEL_L)  \
                 $(MHL_L)  \
                 $(MSL_L)  \
                 $(MGL_L)  \
                 $(MVL_L)  \
                 $(MLO_L)  \
                 $(RCN_L)  \
                 $(LOG_L)  \
                 $(MUT_L)

# /*------------------------------------------------------------\
# |                                                             |
# |                             Define                          |
# |                                                             |
# \------------------------------------------------------------*/

LOCAL_DEFINE = -DALLIANCE_VERSION=$(ALLIANCE_VERSION) \
               -DMLO_H='"$(MLO_H)"' \
               -DMLU_H='"$(MLU_H)"' \
               -DMUT_H='"$(MUT_H)"' \
               -DRCN_H='"$(RCN_H)"' \
               -DBEH_H='"$(BEH_H)"' \
               -DBHL_H='"$(BHL_H)"' \
               -DBVL_H='"$(BVL_H)"' \
               -DCST_H='"cst.h"'  \
               -DSCG_H='"scg.h"'  \
               -DPRB_H='"prb.h"'  \
               -DGSS_H='"gss.h"'  \
               -DCOX_H='"cox.h"'  \
               -DLOG_H='"$(LOG_H)"'  \
               -DPPT_H='"ppt.h"'  \
               -DPAT_H='"pat.h"'  \
               -DPHL_H='"phl.h"'

LOCAL_HEADER = $(LOCAL_INCLUDE) $(LOCAL_DEFINE)

# /*------------------------------------------------------------\
# |                                                             |
# |                             Object                          |
# |                                                             |
# \------------------------------------------------------------*/

LOCAL_BEH_OBJ = behall.o

LOCAL_PAT_OBJ = pat_addpacom.o \
                pat_addpaevt.o \
                pat_addpagrp.o \
                pat_addpaini.o \
                pat_addpains.o \
                pat_addpaiol.o \
                pat_addpapat.o \
                pat_addpaseq.o \
                pat_crtpaiol.o \
                pat_debug.o \
                pat_decl.o \
                pat_desc.o \
                pat_drvpat.o \
                pat_error.o \
                pat_frepacom.o \
                pat_frepaevt.o \
                pat_frepaini.o \
                pat_frepaiol.o \
                pat_frepapat.o \
                pat_getusage.o \
                pat_globals.o \
                pat_lex.o \
                pat_lodpaseq.o \
                pat_message.o \
                pat_pattostr.o \
                pat_prspat.o \
                pat_savpaseq.o \
                pat_warning.o

LOCAL_BVL_OBJ = bvl_lex.o bvl_yac.o bvl_bspec.o bvl_drive.o \
                bvl_parse.o bvl_util.o

LOCAL_CST_OBJ = cstall.o 

LOCAL_PRB_OBJ = prb_addprbevt.o \
              prb_addprbini.o \
              prb_addprbino.o \
              prb_addprbseq.o \
              prb_addprbsup.o \
              prb_compare.o \
              prb_debug.o \
              prb_dict.o \
              prb_driver.o \
              prb_freprbevt.o \
              prb_freprbini.o \
              prb_freprbino.o \
              prb_freprbseq.o \
              prb_getprbseq.o \
              prb_globals.o \
              prb_makderdeder.o \
              prb_makprbsup.o \
              prb_maksupabl.o \
              prb_maksupbdd.o \
              prb_maksupderiv.o \
              prb_maksupgates.o \
              prb_maksupvarlist.o \
              prb_package.o \
              prb_randprbseq.o \
              prb_sequences.o \
              prb_simulator.o \
              prb_supdepend.o \
              prb_tab.o \
              prb_lex.o prb_yac.o \
              prb_util.o

LOCAL_COX_OBJ = cox_colorset.o \
                cox_globals.o \
                cox_package.o \
                cox_sequences.o \
                cox_simulator.o \
                cox_util.o

LOCAL_GSS_OBJ = gss_debug.o \
                gss_globals.o \
                gss_history.o \
                gss_lspec.o \
                gss_package.o \
                gss_scheduler.o \
                gss_sequences.o \
                gss_util.o \
                gss_value.o \
                gss_xspec.o

LOCAL_SCG_OBJ = scg_AddTra.o \
                scg_CrtScg.o \
                scg_Free.o \
                scg_GetCTim.o \
                scg_GetCTra.o \
                scg_GetNTim.o \
                scg_GoNTim.o \
                scg_SetCTim.o \
                scg_addshent.o \
                scg_addshtra.o \
                scg_addshwav.o \
                scg_bug.o \
                scg_debug.o \
                scg_error.o \
                scg_globals.o \
                scg_hash.o \
                scg_insentry.o \
                scg_inswave.o \
                scg_message.o \
                scg_rmventry.o

LOCAL_POCPAG_OBJ = pocpag.o \
                  $(LOCAL_COX_OBJ) \
                  $(LOCAL_CST_OBJ) \
                  $(LOCAL_SCG_OBJ) \
                  $(LOCAL_GSS_OBJ) \
                  $(LOCAL_BEH_OBJ) \
                  $(LOCAL_BVL_OBJ) \
                  $(LOCAL_PRB_OBJ) \
                  $(LOCAL_PAT_OBJ)

LOCAL_EPOC_OBJ = epoc.o \
                  $(LOCAL_CST_OBJ) \
                  $(LOCAL_BEH_OBJ) \
                  $(LOCAL_BVL_OBJ)

LOCAL_SICC_OBJ = sicc.o

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

# /*------------------------------------------------------------\
# |                                                             |
# |                             Vasy                            |
# |                                                             |
# \------------------------------------------------------------*/

distrib : $(LOCAL_TARGET_BIN)/$(LOCAL_EPOC_BIN) \
          $(LOCAL_TARGET_BIN)/$(LOCAL_SICC_BIN) \
          $(LOCAL_TARGET_BIN)/$(LOCAL_POCPAG_BIN) \
          $(LOCAL_TARGET_BIN)/$(LOCAL_MKDLY_BIN)

all : distrib

$(LOCAL_TARGET_BIN)/$(LOCAL_POCPAG_BIN) : $(LOCAL_POCPAG_OBJ)
	$(CC) $(LOCAL_CFLAGS) -o $(LOCAL_TARGET_BIN)/$(LOCAL_POCPAG_BIN) \
	$(LOCAL_POCPAG_OBJ) $(LOCAL_LIB) -lm
	$(STRIP) $(LOCAL_TARGET_BIN)/$(LOCAL_POCPAG_BIN)

$(LOCAL_TARGET_BIN)/$(LOCAL_EPOC_BIN) : $(LOCAL_EPOC_OBJ)
	$(CC) $(LOCAL_CFLAGS) -o $(LOCAL_TARGET_BIN)/$(LOCAL_EPOC_BIN) \
	$(LOCAL_EPOC_OBJ) $(LOCAL_LIB) -lm
	$(STRIP) $(LOCAL_TARGET_BIN)/$(LOCAL_EPOC_BIN)

$(LOCAL_TARGET_BIN)/$(LOCAL_SICC_BIN) : $(LOCAL_SICC_OBJ)
	$(CC) $(LOCAL_CFLAGS) -o $(LOCAL_TARGET_BIN)/$(LOCAL_SICC_BIN) \
	$(LOCAL_SICC_OBJ) $(LOCAL_LIB) -lm
	$(STRIP) $(LOCAL_TARGET_BIN)/$(LOCAL_SICC_BIN)

$(LOCAL_TARGET_BIN)/$(LOCAL_MKDLY_BIN) : $(LOCAL_MKDLY_BIN)
	$(CP) $(LOCAL_MKDLY_BIN) $(LOCAL_TARGET_BIN)/$(LOCAL_MKDLY_BIN)

bvl_lex.c : bvl_bcomp.lex bvl_yac.c
	$(LEX) $(LEXFLAGS) bvl_bcomp.lex
	$(SED) -e 's/YY/BVL_Y_/g' -e 's/yy/bvl_y_/g' lex.yy.c > bvl_lex.c
	$(RM) lex.yy.c

bvl_yac.c : bvl_bcomp.yac
	$(YACC) $(YACCFLAGS) -d bvl_bcomp.yac
	$(SED) -e 's/YY/BVL_Y_/g' -e 's/yy/bvl_y_/g' y.tab.c > bvl_yac.c
	$(RM) y.tab.c
	$(SED) -e 's/YY/BVL_Y_/g' -e 's/yy/bvl_y_/g' y.tab.h > bvl_yac.h
	$(RM) y.tab.h

prb_yac.c prb_parser.h : prb_parser.yac
	$(YACC) $(YACCFLAGS) -d prb_parser.yac
	sed -e 's/yy/prb_yy/g' -e 's/YY/PRB_YY/g' y.tab.c > prb_yac.c
	sed -e 's/yy/prb_yy/g' -e 's/YY/PRB_YY/g' y.tab.h > prb_parser.h
	$(RM) y.tab.c
	$(RM) y.tab.h


prb_lex.c : prb_parser.lex prb_parser.h
	$(LEX) $(LEXFLAGS) prb_parser.lex
	$(SED) -e 's/yy/prb_yy/g' -e 's/YY/PRB_YY/g' lex.yy.c > prb_lex.c
	$(RM) lex.yy.c

pat_decl.c : pat_decl.yac
	$(YACC) $(YACCFLAGS) -d -p pat_decl pat_decl.yac
	$(SED) -e 's/pat_decllex/pat_lex/g' y.tab.c > pat_decl.c
	$(RM) y.tab.c 

pat_desc.c : pat_desc.yac
	$(YACC) $(YACCFLAGS) -d -p pat_desc pat_desc.yac
	$(SED) -e 's/pat_desclex/pat_lex/g' y.tab.c > pat_desc.c
	$(RM) y.tab.c

pat_lex.c : pat_pars.lex
	$(LEX) $(LEXFLAGS) -t pat_pars.lex > pat_lex.c



# /*------------------------------------------------------------\
# |                                                             |
# |                              Clean                          |
# |                                                             |
# \------------------------------------------------------------*/

clean :
	$(RM) -f pat_lex.c  pat_desc.c \
	$(LOCAL_POCPAG_OBJ) $(LOCAL_EPOC_OBJ) \
	$(LOCAL_SICC_OBJ) \
	pat_decl.c prb_lex.c prb_parser.h prb_yac.c bvl_yac.h bvl_yac.c \
	bvl_lex.c 

	
realclean : clean
	$(RM) -f $(LOCAL_TARGET_BIN)/$(LOCAL_EPOC_BIN) \
          $(LOCAL_TARGET_BIN)/$(LOCAL_SICC_BIN) \
          $(LOCAL_TARGET_BIN)/$(LOCAL_POCPAG_BIN) \
          $(LOCAL_TARGET_BIN)/$(LOCAL_MKDLY_BIN)
