#
# $Id: Makefile,v 1.25 2001/05/31 16:23:24 jpc Exp $
#
# /------------------------------------------------------------------\
# |                                                                  |
# |        A l l i a n c e   C A D   S y s t e m                     |
# |  S i l i c o n   E n s e m b l e / A l l i a n c e               |
# |                                                                  |
# |  Author    :                      Jean-Paul CHAPUT               |
# |  E-mail    :         alliance-support@asim.lip6.fr               |
# | ================================================================ |
# |  Makefile  :         "./sea/Makefile"                            |
# | **************************************************************** |
# |  U p d a t e s                                                   |
# |                                                                  |
# \------------------------------------------------------------------/
#


.PRECIOUS: DEF_%.c %.tab.h %.tab.c $(TARGET_ETC)/%.mac.in


          PURIFY = /users/soft2/purify/purify-5.1-solaris2/purify


# --------------------------------------------------------------------
# Macros and Alliance libraries.

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

      TARGET_INC = $(TARGET_INCLUDE)
      TARGET_ETC = $(ALLIANCE_INSTALL_DIR)/etc

       DEVEL_LIB = -L$(ALLIANCE_INSTALL_DIR)/lib


# --------------------------------------------------------------------
# Alliance Includes.

  LOCAL_ALC_IDIR = $(DEVEL_INCLUDE) -I$(ALLIANCE_INCLUDE)

  LOCAL_ALC_DEFS = -DALLIANCE_VERSION=$(ALLIANCE_VERSION) \
                              -DMGN_H='<$(MGN_H)>' \
                              -DMLU_H='<$(MLU_H)>' \
                              -DMLO_H='<$(MLO_H)>' \
                              -DMPH_H='<$(MPH_H)>' \
                              -DMPU_H='<$(MPU_H)>' \
                              -DMUT_H='<$(MUT_H)>' \
                              -DMGN_H='<$(MGN_H)>' \
                              -DABL_H='<$(ABL_H)>' \
                              -DAUT_H='<$(AUT_H)>' \
                              -DBEH_H='<$(BEH_H)>' \
                              -DBVL_H='<$(BVL_H)>' \
                              -DLOG_H='<$(LOG_H)>'

  LOCAL_ALC_INCS = $(LOCAL_ALC_IDIR) $(LOCAL_ALC_DEFS)


# --------------------------------------------------------------------
# Alliance Libraries.

  LOCAL_ALC_LDIR = $(DEVEL_LIB) -L$(ALLIANCE_LIB)

  LOCAL_ALC_LMUT = $(MUT_L)

  LOCAL_ALC_LMLO = $(MLU_L) \
                   $(MLO_L) \
                   $(MAL_L) \
                   $(MCL_L) \
                   $(MEL_L) \
                   $(MHL_L) \
                   $(MSL_L) \
                   $(MVL_L) \
                   $(MGL_L) \
                   $(RCN_L)

  LOCAL_ALC_LMPH = $(MPU_L) \
                   $(MPH_L) \
                   $(MAP_L) \
                   $(MCP_L) \
                   $(MMG_L) \
                   $(MUT_L)

  LOCAL_ALC_LBEH = $(ABL_L) \
                   $(AUT_L) \
                   $(BVL_L) \
                   $(BHL_L) \
                   $(BEH_L) \
                   $(LOG_L)

  LOCAL_ALC_LIBS = $(LOCAL_ALC_LDIR) \
                   $(LOCAL_ALC_LBEH) \
                   $(LOCAL_ALC_LMLO) \
                   $(LOCAL_ALC_LMPH) \
                   $(LOCAL_ALC_LMUT)

  LOCAL_STD_LIBS = -lm


# --------------------------------------------------------------------
# SEA Macros.

#  C Flags for normal compilation.
    LOCAL_CFLAGS = $(CFLAGS) -c -g -D$(ALLIANCE_OS)
#   LOCAL_OFLAGS = $(OFLAGS) -o
#   LOCAL_CFLAGS = $(CFLAGS) -c -O2 -D$(ALLIANCE_OS)
    LOCAL_OFLAGS = $(OFLAGS) -o
#  C Flags for compilation and profiling.
#   LOCAL_CFLAGS = $(CFLAGS) -p -c -g -D$(ALLIANCE_OS)
#   LOCAL_OFLAGS = $(OFLAGS) -p -o


 LOCAL_UTIL_INCS = util_Defs.h GNU_Defs.h DEF_actions.h
 LOCAL_UTIL_OBJS = util_Sys.o       \
                   util_MBK.o       \
                   util_Inter.o     \
                   util_RTU.o       \
                   util_Power.o     \
                   util_Floorplan.o \
                   util_LEFDEF.o

           a2DEF = $(TARGET_BIN)/a2def
           DEF2a = $(TARGET_BIN)/def2a
       sxlib2LEF = $(TARGET_BIN)/sxlib2lef

           A2LEF = $(TARGET_BIN)/a2lef
             SEA = $(TARGET_BIN)/sea
         SEPLACE = $(TARGET_BIN)/seplace
         SEROUTE = $(TARGET_BIN)/seroute
           CHECK = $(TARGET_BIN)/debug

      LOCAL_BINS = $(a2DEF) $(DEF2a) $(sxlib2LEF) \
                   $(A2LEF) $(SEA) $(SEPLACE) $(SEROUTE)

     SE_DEFAULTS = $(TARGET_ETC)/se_defaults.mac

      LOCAL_ETCS =

#
# /------------------------------------------------------------------\
# |                                                                  |
# |                        Compilation Rules                         |
# |                                                                  |
# \------------------------------------------------------------------/
#
# --------------------------------------------------------------------
# Building Rules

all:   $(LOCAL_BINS) $(LOCAL_ETCS)
check: $(CHECK)


util_%.o: $(LOCAL_UTIL_INCS) util_%.c
	$(CC) $(LOCAL_CFLAGS) $(LOCAL_ALC_INCS) util_$*.c


$(TARGET_BIN)/%: %.sh
	cp $*.sh   $(TARGET_BIN)/$*
	chmod a+rx $(TARGET_BIN)/$*


$(TARGET_ETC)/%.mac: $(TARGET_ETC)/%.mac.in
	sed "s,ALLIANCE_INSTALL_DIR,$(ALLIANCE_INSTALL_DIR)," \
	  $(TARGET_ETC)/$*.mac.in > $(TARGET_ETC)/$*.mac


# --------------------------------------------------------------------
# Rule set for debug.

$(CHECK) : $(LOCAL_UTIL_OBJS) debug.o
	$(CC) $(LOCAL_OFLAGS) $@ $^ $(LOCAL_ALC_LIBS) $(LOCAL_STD_LIBS)


debug.o: $(LOCAL_UTIL_INCS) debug.c
	$(CC) $(LOCAL_CFLAGS) $(LOCAL_ALC_INCS) debug.c


# --------------------------------------------------------------------
# Rule set for a2DEF.

$(a2DEF) : $(LOCAL_UTIL_OBJS) DEF_drive.o MAC_drive.o a2DEF.o
	$(CC) $(LOCAL_OFLAGS) $@ $^ $(LOCAL_ALC_LIBS) $(LOCAL_STD_LIBS)


a2DEF.o: $(LOCAL_UTIL_INCS) DEF_drive.h a2DEF.c
	$(CC) $(LOCAL_CFLAGS) $(LOCAL_ALC_INCS) a2DEF.c


DEF_drive.o: $(LOCAL_UTIL_INCS) DEF_drive.h DEF_drive.c
	$(CC) $(LOCAL_CFLAGS) $(LOCAL_ALC_INCS) DEF_drive.c


MAC_drive.o: $(LOCAL_UTIL_INCS) MAC_drive.h MAC_drive.c
	$(CC) $(LOCAL_CFLAGS) $(LOCAL_ALC_INCS) MAC_drive.c


# --------------------------------------------------------------------
# Rule set for DEF2a.


$(DEF2a) : $(LOCAL_UTIL_OBJS) DEF_grammar.tab.o \
                              DEF_grammar.o     \
                              DEF_actions.o     \
                              DEF2a.o
	$(CC) $(LOCAL_OFLAGS) $@ $^ $(LOCAL_ALC_LIBS) $(LOCAL_STD_LIBS)

DEF%.o: $(LOCAL_UTIL_INCS) DEF%.c
	$(CC) $(LOCAL_CFLAGS) $(LOCAL_ALC_INCS) DEF$*.c

# Specific rule for Flex.
DEF_%.c: $(LOCAL_UTIL_INCS) DEF_%.tab.h DEF_%.l
	$(LEX) -s -f -8 -pp -PDEF_$* -oDEF_$*.c DEF_$*.l


# --------------------------------------------------------------------
# Rule set for sxlib2LEF.

$(sxlib2LEF) : $(LOCAL_UTIL_OBJS) LEF_drive.o       \
                                  LEF_drive_sxlib.o \
                                  sxlib2LEF.o
	$(CC) $(LOCAL_OFLAGS) $@ $^ $(LOCAL_ALC_LIBS) $(LOCAL_STD_LIBS)


sxlib2LEF.o: $(LOCAL_UTIL_INCS) LEF_drive_sxlib.h sxlib2LEF.c
	$(CC) $(LOCAL_CFLAGS) $(LOCAL_ALC_INCS) sxlib2LEF.c


LEF_drive_sxlib.o: $(LOCAL_UTIL_INCS) LEF_drive.h       \
	                                  LEF_drive_sxlib.h \
	                                  LEF_drive_sxlib.c
	$(CC) $(LOCAL_CFLAGS) $(LOCAL_ALC_INCS) LEF_drive_sxlib.c


LEF_drive.o: $(LOCAL_UTIL_INCS) LEF_drive.h LEF_drive.c
	$(CC) $(LOCAL_CFLAGS) $(LOCAL_ALC_INCS) LEF_drive.c


# --------------------------------------------------------------------
# Generic ruleset for Bison.


%.tab.o: $(LOCAL_UTIL_INCS) %.tab.c %.h
	$(CC) $(LOCAL_CFLAGS) $(LOCAL_ALC_INCS) $*.tab.c

%.tab.c %.tab.h: %.y
	$(YACC) -d -v -p $* -b $* $*.y


# --------------------------------------------------------------------
# Cleaning Rules

clean:
	$(RM) -f *.o                \
	         DEF_grammar.tab.c  \
	         DEF_grammar.tab.h  \
	         DEF_grammar.c      \
	         DEF_grammar.output

realclean: clean
	$(RM) -f $(LOCAL_BINS)
