#
# 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.
#

#
# %% \textrm{This File Looks Nicer with\textsf{ LGrind} and \LaTeXe.}        %%
# %|                                                                         |%
# %| $Id: Makefile,v 1.10 1997/10/30 13:27:55 fitpath Exp fitpath $          |%
# %|                                                                         |%
# %| /---------------------------------------------------------------------\ |%
# %| |                                                                     | |%
# %| |          Alliance CAD System 3.2b                                    | |%
# %| |     F p G e n   P a c k a g e   1.10                                | |%
# %| |                                                                     | |%
# %| |  Copyright(c) 95-97, MASI, CAO-VLSI Team                            | |%
# %| |                                                                     | |%
# %| |  Author    :            Jean-Paul CHAPUT                            | |%
# %| |  E-mail    :        cao-vlsi@masi.ibp.fr                            | |%
# %| | =================================================================== | |%
# %| |  File      :      "./sce/FpGen/Makefile"                            | |%
# %| | ******************************************************************* | |%
# %| |  U p d a t e s                                                      | |%
# %| |                                                                     | |%
# %| |  02/05/93:0.00:Jean-Paul CHAPUT: ---------------------------------- | |%
# %| |  21/01/95:1.03:Jean-Paul CHAPUT: ---------------------------------- | |%
# %| |      New reference directories :  TARGET_LIB                        | |%
# %| |                                   TARGET_BIN                        | |%
# %| |                                   TARGET_INC                        | |%
# %| |  06/03/96:1.07:Jean-Paul CHAPUT: ---------------------------------- | |%
# %| |      `distrib' and `INSTALLED' mechanism removed, `TARGET_*'        | |%
# %| |    activated.                                                       | |%
# %| |  27/05/97:2.00:Jean-Paul CHAPUT: ---------------------------------- | |%
# %| |      Completely rewritten, with many simplifications.               | |%
# %| |                                                                     | |%
# %| \---------------------------------------------------------------------/ |%
#

#
# %| /---------------------------------------------------------------------\ |%
# %| |                                                                     | |%
# %| |                   Macros and Alliance libraries                     | |%
# %| |                                                                     | |%
# %| \---------------------------------------------------------------------/ |%
#

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

      TARGET_INC = $(TARGET_INCLUDE)

#
# %| /---------------------------------------------------------------------\ |%
# %| |                                                                     | |%
# %| |                       MBK Additionnal Macros                        | |%
# %| |                                                                     | |%
# %| \---------------------------------------------------------------------/ |%
#
  LOCAL_ALC_IDIR = $(DEVEL_INCLUDE) -I$(ALLIANCE_INCLUDE)
  LOCAL_ALC_DEFS = -DALLIANCE_VERSION=$(ALLIANCE_VERSION) \
                   -DGCLARA_H='<$(GCLARA_H)>' \
                    -DGZARA_H='<$(GZARA_H)>' \
                    -DGSARA_H='<$(GSARA_H)>' \
                    -DGRAGA_H='<$(GRAGA_H)>' \
                     -DGBAT_H='<$(GBAT_H)>' \
                      -DGRF_H='<$(GRF_H)>' \
                      -DGBS_H='<$(GBS_H)>' \
                      -DGAM_H='<$(GAM_H)>' \
                      -DRSA_H='<$(GGA_H)>' \
                      -DAPR_H='<$(APR_H)>' \
                      -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)>' \
                      -DBEH_H='<$(BEH_H)>' \
                      -DLOG_H='<$(LOG_H)>'
  LOCAL_ALC_INCS = $(LOCAL_ALC_IDIR) $(LOCAL_ALC_DEFS)

#  Technology dependent libraries to link with.
  LOCAL_ALC_LGEN_CMOS = $(GRF_L) \
                        $(GBS_L) \
                        $(GAM_L) \
                        $(GGA_L)
  LOCAL_ALC_LGEN_GAAS = $(GCLARA_L) \
                        $(GZARA_L)  \
                        $(GSARA_L)  \
                        $(GRAGA_L)  \
                        $(GBAT_L)

  LOCAL_ALC_LDIR = $(DEVEL_LIB) -L$(ALLIANCE_LIB)
  LOCAL_ALC_LVBE = $(BVL_L) \
                   $(BEH_L) \
                   $(LOG_L)
  LOCAL_ALC_LAPR = $(APR_L)
  LOCAL_ALC_LICO = $(ICU_L) \
                   $(ICC_L) \
                   $(ICA_L) \
                   $(ICN_L)
  LOCAL_ALC_LMGN = $(MGN_L)
  LOCAL_ALC_LMUT = $(MUT_L)
  LOCAL_ALC_LMLO = $(MLU_L) \
                   $(MLO_L) \
                   $(MAL_L) \
                   $(MCL_L) \
                   $(MEL_L) \
                   $(MHL_L) \
                   $(MSL_L) \
                   $(MVL_L) \
                   $(RCN_L)
  LOCAL_ALC_LMPH = $(MPU_L) \
                   $(MPH_L) \
                   $(MAP_L) \
                   $(MCP_L) \
                   $(MMG_L) \
                   $(MUT_L)
  LOCAL_ALC_LIBS = $(LOCAL_ALC_LDIR) \
                   $(LOCAL_ALC_LVBE) \
                   $(LOCAL_ALC_LAPR) \
                   $(LOCAL_ALC_LICO) \
                   $(LOCAL_ALC_LMGN) \
                   $(LOCAL_ALC_LMLO) \
                   $(LOCAL_ALC_LMPH) \
                   $(LOCAL_ALC_LMUT)

  LOCAL_STD_LIBS = -lm

#
# %| /---------------------------------------------------------------------\ |%
# %| |                                                                     | |%
# %| |                          Internal Macros                            | |%
# %| |                                                                     | |%
# %| \---------------------------------------------------------------------/ |%
#
#  C Flags for normal compilation.
 LOCAL_CFLAGS = $(CFLAGS) -c -O2 -D$(MACHINE)
 LOCAL_OFLAGS = $(OFLAGS) -o
#  C Flags for compilation and profiling.
#LOCAL_CFLAGS = $(CFLAGS) -p -c -g -D$(MACHINE)
#LOCAL_OFLAGS = $(OFLAGS) -p -o

  LOCAL_VERSION         = 110
  LOCAL_ALC_LGFP        = -lGfp$(LOCAL_VERSION)
  LOCAL_ALC_LFGN_CMOS   = -lFgn$(LOCAL_VERSION) $(LOCAL_ALC_LGFP)
  LOCAL_ALC_LFGN_GAAS   = -lFgnGAAS$(LOCAL_VERSION) $(LOCAL_ALC_LGFP)

  LOCAL_GFP_INCS        = GenericGN.h SharedGN.h
  LOCAL_GFP_OBJS        = UtBase.o      \
                          UtEnv.o       \
                          UtLib.o       \
                          UtTechno.o    \
                          UtFlat.o      \
                          UtXlong.o     \
                          UtUser.o      \
                          UtMBKLo.o     \
                          UtMBKPh.o     \
                          UtFileDPR.o   \
                          UtPowerBar.o  \
                          UtHierarchy.o \
                          ScLibGN.o     \
                          FpLibGN.o     \
                          SharedGN.o
 TARGET_GFP_INCLUDE     = $(TARGET_INC)/gfp$(LOCAL_VERSION).h
 TARGET_GFP_LIB         = $(TARGET_LIB)/libGfp$(LOCAL_VERSION).a

  LOCAL_FGN_INCS        = $(LOCAL_GFP_INCS) FpGenMBK.h FpGenMGN.h
  LOCAL_FGN_CMOS_OBJS   = FpGenMBK_CMOS.o FpGenMGN_CMOS.o
  LOCAL_FGN_GAAS_OBJS   = FpGenMBK_GAAS.o FpGenMGN_GAAS.o
 TARGET_FGN_CMOS_LIB    = $(TARGET_LIB)/libFgn$(LOCAL_VERSION).a
 TARGET_FGN_GAAS_LIB    = $(TARGET_LIB)/libFgnGAAS$(LOCAL_VERSION).a
 TARGET_FGN_INCLUDE     = $(TARGET_INC)/fgn$(LOCAL_VERSION).h

 TARGET_TOP_INCLUDE     = $(TARGET_INC)/fpgen.h
 TARGET_TOP_SCRIPT      = $(TARGET_BIN)/fpgen

#
# %| /---------------------------------------------------------------------\ |%
# %| |                                                                     | |%
# %| |                         Compilation Rules                           | |%
# %| |                                                                     | |%
# %| \---------------------------------------------------------------------/ |%
#
#   %| /-----------------------------------------------------------------\ |%
#   %| |                           Control Rules                         | |%
#   %| \-----------------------------------------------------------------/ |%
#

all: rgfp rfgn

#
#   %| /-----------------------------------------------------------------\ |%
#   %| |                    FpGen Libraries and Batch                    | |%
#   %| \-----------------------------------------------------------------/ |%
#

rfgn: $(TARGET_FGN_CMOS_LIB) \
      $(TARGET_FGN_INCLUDE)  \
      $(TARGET_TOP_INCLUDE)  \
      $(TARGET_TOP_SCRIPT)

#     $(TARGET_FGN_GAAS_LIB)

# -----------------------------------------------------------------------
#  Installation and configuration of FpGen's batch (similar to GenLib).
$(TARGET_TOP_SCRIPT): B.fpgen.sh
	 echo "#!/bin/sh"                           >  fpgen.tmp; \
	 echo ""                                    >> fpgen.tmp; \
	 echo "           TOP=\"$(TOP)\""           >> fpgen.tmp; \
	 echo "     DEVEL_TOP=\"$(DEVEL_TOP)\""     >> fpgen.tmp; \
	 echo " DEVEL_VERSION=\"$(LOCAL_VERSION)\"" >> fpgen.tmp; \
	 echo ""                                    >> fpgen.tmp; \
	  cat       B.fpgen.sh                      >> fpgen.tmp; \
	chmod a+x     fpgen.tmp;                                  \
	   mv         fpgen.tmp $(TARGET_TOP_SCRIPT)

#  Generation of `fpgen.h'.
$(TARGET_TOP_INCLUDE): $(LOCAL_FGN_INCS)
	 cat            H.fpgen                     >  $(TARGET_TOP_INCLUDE); \
	echo "# ifndef  __FpGen__"                  >> $(TARGET_TOP_INCLUDE); \
	echo "#   define  __FpGen__"                >> $(TARGET_TOP_INCLUDE); \
	echo "#   include  <gfp$(LOCAL_VERSION).h>" >> $(TARGET_TOP_INCLUDE); \
	echo "#   include  <fgn$(LOCAL_VERSION).h>" >> $(TARGET_TOP_INCLUDE); \
	echo "# endif"                              >> $(TARGET_TOP_INCLUDE);

# -----------------------------------------------------------------------
#  Compilation and archivage of `FgnCMOS' library. 
$(TARGET_FGN_CMOS_LIB): $(LOCAL_FGN_CMOS_OBJS)
	$(AR) $(ARFLAGS) $(TARGET_FGN_CMOS_LIB) $(LOCAL_FGN_CMOS_OBJS);
	$(RANLIB)        $(TARGET_FGN_CMOS_LIB);

%_CMOS.o: $(LOCAL_FGN_INCS) %.c
	$(CC) $(LOCAL_CFLAGS) $(LOCAL_ALC_INCS) -o $*_CMOS.o $*.c;

# -----------------------------------------------------------------------
#  Compilation and archivage of `FgnGAAS' library. 
$(TARGET_FGN_GAAS_LIB): $(LOCAL_FGN_GAAS_OBJS)
	$(AR) $(ARFLAGS) $(TARGET_FGN_GAAS_LIB) $(LOCAL_FGN_GAAS_OBJS);
	$(RANLIB)        $(TARGET_FGN_GAAS_LIB);

%_GAAS.o: $(LOCAL_FGN_INCS) %.c
	$(CC) $(LOCAL_CFLAGS) $(LOCAL_ALC_INCS) -D__GaAs__ -o $*_GAAS.o $*.c;

# -----------------------------------------------------------------------
#  Generation of `fgn110.h'.
$(TARGET_FGN_INCLUDE): FpGenMGN.h
	$(CP) FpGenMGN.h $(TARGET_FGN_INCLUDE)


#
#   %| /-----------------------------------------------------------------\ |%
#   %| |                 Low Level Generator and Library                 | |%
#   %| \-----------------------------------------------------------------/ |%
#

rgfp: $(TARGET_GFP_LIB)      \
      $(TARGET_GFP_INCLUDE)

# -----------------------------------------------------------------------
#  Compilation and archivage of `Gfp' library. 
$(TARGET_GFP_LIB): $(LOCAL_GFP_OBJS)
	$(AR) $(ARFLAGS) $(TARGET_GFP_LIB) $(LOCAL_GFP_OBJS);
	$(RANLIB)        $(TARGET_GFP_LIB);

Ut%.o: $(LOCAL_GFP_INCS) Ut%.c
	$(CC) $(LOCAL_CFLAGS) $(LOCAL_ALC_INCS) Ut$*.c;

%GN.o: $(LOCAL_GFP_INCS) %GN.c
	$(CC) $(LOCAL_CFLAGS) $(LOCAL_ALC_INCS) $*GN.c;

# -----------------------------------------------------------------------
#  Generation of `gfp110.h'.
$(TARGET_GFP_INCLUDE): GenericGN.h
	$(CP) GenericGN.h $(TARGET_GFP_INCLUDE)

#
#   %| /-----------------------------------------------------------------\ |%
#   %| |                         Cleaning Rules                          | |%
#   %| \-----------------------------------------------------------------/ |%
#

clean: 
	$(RM) -f *.o

realclean: clean
	$(RM) -f $(TARGET_GFP_INCLUDE)  \
	         $(TARGET_GFP_LIB)      \
	         $(TARGET_FGN_INCLUDE)  \
	         $(TARGET_FGN_CMOS_LIB) \
	         $(TARGET_FGN_GAAS_LIB) \
	         $(TARGET_TOP_INCLUDE)  \
	         $(TARGET_TOP_SCRIPT)
