view src/gpf3/frame/makefile @ 600:8f50b202e81f

board preprocessor conditionals: prep for more FC hw in the future This change eliminates the CONFIG_TARGET_FCDEV3B preprocessor symbol and all preprocessor conditionals throughout the code base that tested for it, replacing them with CONFIG_TARGET_FCFAM or CONFIG_TARGET_FCMODEM. These new symbols are specified as follows: CONFIG_TARGET_FCFAM is intended to cover all hardware designs created by Mother Mychaela under the FreeCalypso trademark. This family will include modem products (repackagings of the FCDEV3B, possibly with RFFE or even RF transceiver changes), and also my desired FreeCalypso handset product. CONFIG_TARGET_FCMODEM is intended to cover all FreeCalypso modem products (which will be firmware-compatible with the FCDEV3B if they use TI Rita transceiver, or will require a different fw build if we switch to one of Silabs Aero transceivers), but not the handset product. Right now this CONFIG_TARGET_FCMODEM preprocessor symbol is used to conditionalize everything dealing with MCSI. At the present moment the future of FC hardware evolution is still unknown: it is not known whether we will ever have any beyond-FCDEV3B hardware at all (contingent on uncertain funding), and if we do produce further FC hardware designs, it is not known whether they will retain the same FIC modem core (triband), if we are going to have a quadband design that still retains the classic Rita transceiver, or if we are going to switch to Silabs Aero II or some other transceiver. If we produce a quadband modem that still uses Rita, it will run exactly the same fw as the FCDEV3B thanks to the way we define TSPACT signals for the RF_FAM=12 && CONFIG_TARGET_FCFAM combination, and the current fcdev3b build target will be renamed to fcmodem. OTOH, if that putative quadband modem will be Aero-based, then it will require a different fw build target, the fcdev3b target will stay as it is, and the two targets will both define CONFIG_TARGET_FCFAM and CONFIG_TARGET_FCMODEM, but will have different RF_FAM numbers. But no matter which way we are going to evolve, it is not right to have conditionals on CONFIG_TARGET_FCDEV3B in places like ACI, and the present change clears the way for future evolution.
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 01 Apr 2019 01:05:24 +0000
parents c41a534f33c6
children
line wrap: on
line source

#######################  Makefile for GNU make    #####################
#
#           makefile with rules for all different variations of Frame
#
#           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
#           targets:
#
#           os_layer      (objects)
#           frameobjs     Frame + OS-Layer + TST (objects)
#           ../lib/frame.lib or ../lib/frame.dll
#           ../lib/ofe.lib or ../lib/ofe.dll Frame + OS_LAYER + TST + OFE
#           clean         delete object files
#
#######################################################################


VPATH=$(OS_LAYER_SRC) $(OBJDIR)
OWN_MAKELEVEL=0


GPF:=$(subst \,/,$(GPF))

ifdef TOOL_CHOICE
  TS:=/ts$(TOOL_CHOICE)
  tsTail  :=_ts$(TOOL_CHOICE)
else
  TS:=
endif

ifdef PATH_CC_1_22E 
 PATH:=$(PATH_CC_1_22E);$(PATH)
 C_DIR:=$(PATH_CC_1_22E)
endif

ifeq ($(TOOL_CHOICE), 3)
 COPTS= --align_structs=4 -pden -q
 ifndef PATH_CC_2_54 
   PATH_CC_2_54=C:/Dvpt_tools/Codegen/TMS4701x_2.54
   C_DIR=PATH_CC_2_54
 endif
 Path:=$(PATH_CC_2_54)/bin;$(Path)
 INCLUDES += -I"$(PATH_CC_2_54)/include"
endif

ifeq ($(TOOL_CHOICE), 5)
 COPTS= --align_structs=4 -pden -q
 ifndef PATH_CC_2_55 
   PATH_CC_2_55=C:\Dvpt_tools\Codegen\TMS4701x_2.55
#  C_DIR=PATH_CC_2_55
 endif
 Path:=$(PATH_CC_2_55)/bin;$(Path)
 INCLUDES += -I"$(PATH_CC_2_55)/include"
endif

ifeq ($(TOOL_CHOICE), 6)
  # --code_state=16 => -mt
  # --endian=little => -me
  # what is -ml?
  COPTS= -mv=5e --abi=ti_arm9_abi
  COPTS+= -pden -pdv -mf -ms -qq -disable_branch_chaining -pi
  ifndef PATH_CC_4_11 
    PATH_CC_4_11=C:\Dvpt_tools\Codegen\TMS4701x_4.11
#   C_DIR=PATH_CC_4_11
  endif
  Path:=$(PATH_CC_4_11)/bin;$(Path)
  INCLUDES += -I"$(PATH_CC_4_11)/include"
endif

#*==== PARAMETERS-ANALYSIS =========================================*#
ifeq ($(FLOAT), 1)
REPLACE		= -replace
endif

ifeq ($(OS_ONLY), 1)
  OSAL:=/os
else
  OSAL:=
endif

ifeq ($(TARGET), nuc)
  ifeq ($(RUN_FLASH), 1)
    SECTION:=/fl
  endif

  ifeq ($(RUN_INT_RAM), 1)
    SECTION:=/ir
  endif
else
  SECTION:=
endif

ifeq ($(TARGET), linuxpc)
  ESF=1
endif
ifeq ($(TARGET), linuxarm)
  ESF=1
endif
ifeq ($(TARGET), solsparc)
  ESF=1
endif

ifeq ($(ESF), 1)
  ES:=/esf
else
  ES:=
endif

ifeq ($(NO_LINT), 1)
  USE_LINT:=1
else
  USE_LINT:=0
endif

ifeq "$(CLEARCASE_PRIMARY_GROUP)" ""
  CLRCAS=0
else
  ifeq "$(IN_VOB)" "FALSE"
    CLRCAS=0
  else
    CLRCAS=1
  endif
endif

ifeq ($(CLRCAS), 1)
  CHECKOUT = -cleartool co -nc
  CHECKIN = -cleartool ci -nc
else
  CHECKOUT = attrib -r
  CHECKIN = attrib +r
endif

# for created object files
ifeq ($(TARGET), nuc)
  OBJDIR=obj/$(TARGET)/$(PLATFORM)$(DB)$(OSAL)$(PS)$(ES)$(SECTION)$(OPT)$(TS)
  NUC_OBJDIR=e:/nucleus/v1.1/os/asm
  TIF_OBJDIR=../tst/$(OBJDIR)
  MISC_OBJDIR=../misc/$(OBJDIR)
else
  OBJDIR=obj/$(TARGET)$(DB)$(OSAL)$(PS)$(ES)
endif

# for stack calculation
GAWK=../tools/bin/gawk.exe
AWK_PROG=../BIN/cg$(tTail).awk

# Lint
LINT=lint-nt.exe
LINT_INC=-i/gpf/template/lint/
LINT_OPT_FILE=/gpf/template/lint/options.lnt

# general directories
GPFDIR=..
INCDIR=../inc
ifndef TI_DIR
  TI_DIR=/chipsetsw/
endif
override TI_DIR:=$(subst \,/,$(TI_DIR))

# for created libraries
ifeq ($(TARGET), win32)
  LIBDIR=../LIB/WIN32$(DEBUGDIR)
  BINDIR=../BIN$(DEBUGDIR)
else
  LIBDIR:=../LIB
endif


OS_LAYER_SRC=./$(TARGET)
FRAME_SRC=./



#-------------------------general exported include files
INC_FILES=Vsi.h os.h typedefs.h drvconf.h STDDEFS.H gdi.h comp.h Header.h \
          ofe.h PEI.H poolconf.h TOK.H $(LIBDIR)/FrmConst.h

#-------------------------Suffixes for the name of the output file
#---------e.g. frame_tr_rt_po_db.lib

ifeq ($(ESF), 1)
   esfTail :=_esf
else
   esfTail :=
endif

ifeq ($(RUN_FLASH), 1)
   flTail :=_fl
else
   flTail:=
endif

ifeq ($(RUN_INT_RAM), 1)
   irTail :=_ir
else
   irTail:=
endif

ifeq ($(TARGET), nuc)
  ifeq ($(PLATFORM), arm7)
    tTail :=_na7
  else
    ifeq ($(PLATFORM), arm9)
      tTail :=_na9
    else
      ifeq ($(PLATFORM), pc)
        tTail :=_npc
      endif
    endif
  endif
else
  ifeq ($(TARGET), nuc_ARM)
    tTail :=_ar
  else
    ifeq ($(TARGET), win32)
      tTail :=
    else
      ifeq ($(TARGET), psos)
        tTail :=_po
      else
   	ifeq ($(TARGET), vxworks)
	  tTail :=_vx
    	  ifeq ($(TOOL), gnu)
	    tlTail :=_gn
          else
	    tlTail :=_di
	  endif
    	  ifeq ($(CPU), PPC603)
	    cpTail :=_pp
	  endif
        else
   	  ifeq ($(TARGET), linuxpc)
	    tTail :=_lpc
            OSENV=sus
            NO_LINT=1
          else
            ifeq ($(TARGET), rtlpc)
              tTail :=_rlp
              OSENV=sus
              NO_LINT=1
              RTL_VERSION=2.0
              RTL_DIR=/opt/rtldk-$(RTL_VERSION)/rtlinuxpro
              include $(RTL_DIR)/rtl.mk
            else
              ifeq ($(TARGET), linuxarm)
                tTail :=_la9
                OSENV=sus
                NO_LINT=1
              else
                ifeq ($(TARGET), solsparc)
                  tTail :=_ssp
                  OSENV=sus
                  NO_LINT=1
                endif
              endif
	    endif
	  endif
	endif
      endif
    endif
   endif
endif


ifeq ($(DEBUG), 1)
   DB=/db
   ifeq ($(TARGET), win32)
     DEBUGDIR=/debug
     dbTail :=
   else
     dbTail :=_db
   endif
else
   dbTail:=
   DB=
endif

ifeq ($(OS_ONLY), 1)
   LIBNAME = os
else
   LIBNAME = frame
endif

ifeq ($(NO_OPT), 1)
  DISABLE_OPT:=1
  OPT:=/no
   noTail:=_no
else
  DISABLE_OPT:=0
  OPT:=
  noTail:=
endif

#---------- shell calls
RM      		= -rm -rf
ifeq ($(OSENV), sus)
  MKDIR   		= mkdir
else
  MKDIR   		= gmkdir
endif
COPY    		= cp
MOVE      	    = mv
COPTS_FILE	    =
CLEARTOOL		= cleartool
ECHO			= @echo

#-------------------------Suffixes for the name of the output files
#--------frame.lib suffixes

ifeq ($(MEMSUPER), 2)
   msTail :=_ps
   PS=/ps
endif
ifeq ($(MEMSUPER), 1)
   msTail :=_pm
endif
ifeq ($(MEMSUPER), 0)
   msTail:=
   PS=
endif

XXX:=$(tTail)$(tlTail)$(cpTail)$(dbTail)$(msTail)$(esfTail)$(irTail)$(flTail)$(noTail)$(tsTail)

#-------------------------Suffixes for the name of the output files

_OS_LAYER= os_pro.$(OBJTAIL) os_com.$(OBJTAIL) os_tim.$(OBJTAIL) os_sem.$(OBJTAIL) os_mis.$(OBJTAIL) os_mem.$(OBJTAIL) $(OS_ISR) $(OS_PART) $(OSDRV)

ifeq ($(OS_ONLY), 1)
_FRAMEOBJS =  $(ESF_FUNC)
else
_FRAMEOBJS =  frame.$(OBJTAIL) vsi_sem.$(OBJTAIL) vsi_com.$(OBJTAIL) vsi_mem.$(OBJTAIL) vsi_tim.$(OBJTAIL)\
              vsi_mis.$(OBJTAIL) vsi_drv.$(OBJTAIL) vsi_trc.$(OBJTAIL) vsi_pro.$(OBJTAIL) xalert.$(OBJTAIL)\
              route.$(OBJTAIL) prf_func.$(OBJTAIL) frm_ext.$(OBJTAIL) $(ESF_FUNC)
endif

_TIFOBJS = $(TIF_OBJDIR)/tst_pei.$(OBJTAIL) $(TIF_OBJDIR)/tstdriver.$(OBJTAIL) $(TIF_OBJDIR)/tif.$(OBJTAIL)\
          $(TIF_OBJDIR)/tr.$(OBJTAIL) $(TIF_OBJDIR)/titrc.$(OBJTAIL)

_MISCOBJS = $(MISC_OBJDIR)/tok.$(OBJTAIL) $(MISC_OBJDIR)/tools.$(OBJTAIL)


_NUCOBJS = $(NUC_OBJDIR)/inc.$(OBJTAIL) $(NUC_OBJDIR)/dmi.$(OBJTAIL) $(NUC_OBJDIR)/evi.$(OBJTAIL) $(NUC_OBJDIR)/pmi.$(OBJTAIL) $(NUC_OBJDIR)/mbi.$(OBJTAIL) $(NUC_OBJDIR)/ioi.$(OBJTAIL) $(NUC_OBJDIR)/tmi.$(OBJTAIL) \
           $(NUC_OBJDIR)/qui.$(OBJTAIL) $(NUC_OBJDIR)/hii.$(OBJTAIL) $(NUC_OBJDIR)/eri.$(OBJTAIL) $(NUC_OBJDIR)/pii.$(OBJTAIL) $(NUC_OBJDIR)/smi.$(OBJTAIL) $(NUC_OBJDIR)/tci.$(OBJTAIL) $(NUC_OBJDIR)/erc.$(OBJTAIL) \
           $(NUC_OBJDIR)/mbd.$(OBJTAIL) $(NUC_OBJDIR)/iod.$(OBJTAIL) $(NUC_OBJDIR)/hid.$(OBJTAIL) $(NUC_OBJDIR)/pid.$(OBJTAIL) $(NUC_OBJDIR)/qud.$(OBJTAIL) $(NUC_OBJDIR)/erd.$(OBJTAIL) $(NUC_OBJDIR)/lic.$(OBJTAIL) \
           $(NUC_OBJDIR)/rld.$(OBJTAIL) $(NUC_OBJDIR)/lid.$(OBJTAIL) $(NUC_OBJDIR)/ioc.$(OBJTAIL) $(NUC_OBJDIR)/ioce.$(OBJTAIL) $(NUC_OBJDIR)/iof.$(OBJTAIL) $(NUC_OBJDIR)/quc.$(OBJTAIL) $(NUC_OBJDIR)/quce.$(OBJTAIL) \
           $(NUC_OBJDIR)/quf.$(OBJTAIL) $(NUC_OBJDIR)/qus.$(OBJTAIL) $(NUC_OBJDIR)/quse.$(OBJTAIL) $(NUC_OBJDIR)/pic.$(OBJTAIL) $(NUC_OBJDIR)/pice.$(OBJTAIL) $(NUC_OBJDIR)/pif.$(OBJTAIL) $(NUC_OBJDIR)/pis.$(OBJTAIL) \
           $(NUC_OBJDIR)/pise.$(OBJTAIL) $(NUC_OBJDIR)/mbc.$(OBJTAIL) $(NUC_OBJDIR)/mbce.$(OBJTAIL) $(NUC_OBJDIR)/mbf.$(OBJTAIL) $(NUC_OBJDIR)/mbs.$(OBJTAIL) $(NUC_OBJDIR)/mbse.$(OBJTAIL) $(NUC_OBJDIR)/sms.$(OBJTAIL) \
           $(NUC_OBJDIR)/smse.$(OBJTAIL) $(NUC_OBJDIR)/tcs.$(OBJTAIL) $(NUC_OBJDIR)/tcse.$(OBJTAIL) $(NUC_OBJDIR)/evf.$(OBJTAIL) $(NUC_OBJDIR)/hic.$(OBJTAIL) $(NUC_OBJDIR)/dmc.$(OBJTAIL) $(NUC_OBJDIR)/dmce.$(OBJTAIL) \
           $(NUC_OBJDIR)/dmd.$(OBJTAIL) $(NUC_OBJDIR)/dmf.$(OBJTAIL) $(NUC_OBJDIR)/evc.$(OBJTAIL) $(NUC_OBJDIR)/evce.$(OBJTAIL) $(NUC_OBJDIR)/evd.$(OBJTAIL) $(NUC_OBJDIR)/pmf.$(OBJTAIL) $(NUC_OBJDIR)/smf.$(OBJTAIL) \
           $(NUC_OBJDIR)/tcf.$(OBJTAIL) $(NUC_OBJDIR)/tmf.$(OBJTAIL) $(NUC_OBJDIR)/rlc.$(OBJTAIL) $(NUC_OBJDIR)/csc.$(OBJTAIL) $(NUC_OBJDIR)/tmc.$(OBJTAIL) $(NUC_OBJDIR)/pmc.$(OBJTAIL) $(NUC_OBJDIR)/pmce.$(OBJTAIL) \
           $(NUC_OBJDIR)/pmd.$(OBJTAIL) $(NUC_OBJDIR)/smc.$(OBJTAIL) $(NUC_OBJDIR)/smce.$(OBJTAIL) $(NUC_OBJDIR)/smd.$(OBJTAIL) $(NUC_OBJDIR)/tcc.$(OBJTAIL) $(NUC_OBJDIR)/tcce.$(OBJTAIL) $(NUC_OBJDIR)/tcd.$(OBJTAIL) \
           $(NUC_OBJDIR)/tms.$(OBJTAIL) $(NUC_OBJDIR)/tmse.$(OBJTAIL) $(NUC_OBJDIR)/tmd.$(OBJTAIL)


ifeq ($(MEMSUPER), 2)
   _FRAMEOBJS +=  vsi_ppm.$(OBJTAIL)
endif

_FRAMEOBJS +=  frame_version.$(OBJTAIL)

#----------------------------------- Special settings for each target
#----------Nucleus
ifeq ($(TARGET), nuc)
  ifeq ($(PLATFORM), arm7)

    OSDRV = os_drv.$(OBJTAIL)
    OS_ISR = os_isr.$(OBJTAIL)
    OS_LAYER_SRC:=./nuc/
    _OS_LAYER += os_evt.$(OBJTAIL)

   ifeq ($(TOOL_CHOICE), )
    COPTS+= -mw -x -pw2 -q -o
   endif

   CC=cl470
   COPTS+= -me -mt

   ifeq ($(DEBUG), 1)
     ifeq ($(TOOL_CHOICE), )
       COPTS += -g
     else
       COPTS += -gt
     endif
     COPTS += -mn
     DEFINES += -dNU_DEBUG
   endif

    ifeq ($(ASM_ONLY), 1)
      ASMOBJS = $(_NUCOBJS) $(_TIFOBJS) $(_MISCOBJS)
      COPTS+= -q -n -x0 -fs $(OBJDIR)
      MKLIB = $(GAWK) -f $(AWK_PROG) > $(FRAME_LIB)
      OBJTAIL = asm
      FRAME_LIB = $(OBJDIR)/frame$(XXX).pa
    else
      LIBEXT = lib
      OBJTAIL = obj
      FRAME_LIB=$(LIBDIR)/$(LIBNAME)$(XXX).$(LIBEXT)
      LINT_OPT_FILE += nucleus.lnt
      LINT_OPTS = $(LINT_INC) -I"$(subst \,/,$(C_DIR))" -u  $(LINT_OPT_FILE)
      MKLIB = ar470  $(LFLAGS)
    endif

	ifeq ($(OS_ONLY), 1)
	  DEFINES += -dFF_OS_ONLY
    else
	  DEFINES += -d_FF_RV_EXIST_
      COPTS+= -o3
	endif

    ifeq ($(POOL_SPLIT), 1)
      DEFINES += -dFF_POOL_SPLIT
    endif

    ifeq ($(RUN_INT_RAM), 1)
      COPTS += -dRUN_INT_RAM
    endif

    ifeq ($(RUN_FLASH), 1)
      COPTS += -dRUN_FLASH
    endif

    COPTS += -fr $(OBJDIR) -c

    ifeq ($(MEMSUPER), 2)
      DEFINES +=  -dMEMORY_SUPERVISION -dOPTIMIZE_POOL
    endif
    ifeq ($(MEMSUPER), 1)
      DEFINES += -dMEMORY_SUPERVISION
    endif

    INCLUDES+=-I"." -I"..\FRAME\NUC" -I"..\INC\NUC" -I"..\INC\NUC\ARM7" -I"..\INC" \
             -I"..\TST" -I"$(TI_DIR)\Riviera" -I"$(TI_DIR)\Riviera\rv" -I"$(TI_DIR)\Services\dar" \
             -I"$(TI_DIR)\Riviera\rvm" -I"$(TI_DIR)\System" -I"$(TI_DIR)\Services" \
             -I"$(TI_DIR)\Drivers\drv_app"  -I"$(TI_DIR)\Drivers\drv_app\ffs" \
             -I"$(TI_DIR)\System\deps_objs\gprs_dsample_amr_nw" -I"$(TI_DIR)\System\deps_objs\gprs_dsample_amr_nw\config"


    DEFINES += -d_TARGET_ -d_NUCLEUS_
    COPTSNF = $(COPTS) $(DEFINES) $(INCLUDES)
    INCLUDELIST=$(INCLUDES)
    DEFINELIST=$(subst -d,-D,$(DEFINES))
    COPTS_FILE=
    COMMLFLAGS = -rq $@             # only one command:a
    LFLAGS=$(COMMLFLAGS)
    LIBEXT=lib

    clean:
		@$(RM) obj/$(TARGET)/$(PLATFORM)$(DB)$(OSAL)$(PS)$(SECTION)$(TS)/*.$(OBJTAIL)
		@$(RM) $(FRAME_LIB)

  endif
endif         # nucleus & arm7

#----------Nucleus
ifeq ($(TARGET), nuc)
  ifeq ($(PLATFORM), arm9)

    OSDRV = os_drv.$(OBJTAIL)
    OS_ISR = os_isr.$(OBJTAIL)
    OS_LAYER_SRC:=./nuc/
    _OS_LAYER += os_evt.$(OBJTAIL)

    CC=cl470
    COPTS+= -me -mt

    ifneq ($(DISABLE_OPT), 1)
      ifeq ($(TOOL_CHOICE), 6)
        COPTS+= -O=2
      else
        COPTS+= -o
      endif
    endif

    ifeq ($(DEBUG), 1)
      ifeq ($(TOOL_CHOICE), 6)
        COPTS += --symdebug:coff
      else
      # toolset 3 and 5
        COPTS += -gt
      endif
      COPTS += -mn
      DEFINES += -dNU_DEBUG
    endif

    LINT_OPT_FILE += nucleus.lnt
    LINT_OPTS = $(LINT_INC) -I"$(subst \,/,$(C_DIR))" -u  $(LINT_OPT_FILE)

	ifeq ($(OS_ONLY), 1)
	  DEFINES += -dFF_OS_ONLY
	endif

	ifeq ($(ESF), 1)
	  ESF_FUNC = esf_func.$(OBJTAIL)
	  DEFINES +=  -d_ESF_SUPPORT_
	endif

    ifeq ($(RUN_INT_RAM), 1)
      COPTS += -dRUN_INT_RAM
    endif

    ifeq ($(RUN_FLASH), 1)
      COPTS += -dRUN_FLASH
    endif

    COPTS += -fr $(OBJDIR) -c

    ifeq ($(MEMSUPER), 2)
      DEFINES +=  -dMEMORY_SUPERVISION -dOPTIMIZE_POOL
    endif
    ifeq ($(MEMSUPER), 1)
      DEFINES += -dMEMORY_SUPERVISION
    endif

    INCLUDES+=-I"." -I"..\FRAME\NUC" -I"..\INC\NUC" -I"..\INC" -I"..\TST"
    MKLIB=ar470 $(LFLAGS)

    INCLUDES += -I"..\inc\NUC\ARM9"

    DEFINES += -d_TARGET_ -d_NUCLEUS_
    COPTSNF = $(COPTS) $(DEFINES) $(INCLUDES)
    INCLUDELIST=$(INCLUDES)
    DEFINELIST=$(subst -d,-D,$(DEFINES))
    COPTS_FILE=
    COMMLFLAGS = -rq $@             # only one command:a
    LFLAGS=$(COMMLFLAGS)
    LIBEXT=lib
    OBJTAIL=obj
    FRAME_LIB=$(LIBDIR)/$(LIBNAME)$(XXX).$(LIBEXT)

    clean:
		@$(RM) obj/$(TARGET)/$(PLATFORM)$(DB)$(OSAL)$(PS)$(ES)$(SECTION)$(OPT)$(TS)/*.$(OBJTAIL)
		@$(RM) $(FRAME_LIB)

  endif
endif         # nucleus & arm9


#----------------------------------- Special settings for each target
#----------Nucleus_ARM
ifeq ($(TARGET), nuc_ARM)

   OSDRV = os_drv.$(OBJTAIL)
   OS_LAYER_SRC:=./nuc/
   _OS_LAYER += os_evt.$(OBJTAIL)

   CC=perl "\G23M\Condat\INT\BIN\gti_compile.pl"
   COPTS= -me -mt -pw2 -q  -x -mw -o  # from condat_env.mak and os.mak for nucleus.lib

   ifeq ($(DEBUG), 1)
      COPTS += -g -mn
      DEFINES += -dNU_DEBUG
   endif
   COPTS += -fr $(OBJDIR) -fo $(OBJDIR)/$@ -c

   ifeq ($(MEMSUPER), 2)
     DEFINES +=  -dMEMORY_SUPERVISION -dOPTIMIZE_POOL
   endif
   ifeq ($(MEMSUPER), 1)
     DEFINES += -dMEMORY_SUPERVISION
   endif

   INCLUDES+=-I"..\FRAME\NUC" -I"..\inc\NUC" -I"..\inc\NUC\ARM7" -I"..\inc"  -I"..\TST"
   DEFINES += -d_TARGET_ -d_NUCLEUS_
   COPTSNF = $(COPTS) $(DEFINES) $(INCLUDES)
   INCLUDELIST=$(INCLUDES)
   DEFINELIST=$(subst -d,-D,$(DEFINES))
   COPTS_FILE=
   COMMLFLAGS = -rq $@             # only one command:a
   LFLAGS=$(COMMLFLAGS)
   MKLIB=perl "\G23M\Condat\INT\BIN\gti_archive.pl" $(LFLAGS)
   LIBEXT=lib
   OBJTAIL=obj
   FRAME_LIB=$(LIBDIR)/$(LIBNAME)$(XXX).$(LIBEXT)

   clean:
		@$(RM) obj/$(TARGET)$(DB)$(PS)/*.$(OBJTAIL)
		@$(RM) $(FRAME_LIB)

endif         # target: Nucleus_ARM


#----------------------------------- Special settings for each target
#----------NucleusWin
ifeq ($(TARGET), nuc)
  ifeq ($(PLATFORM), pc)

    OS_ISR = os_isr.$(OBJTAIL)
    _OS_LAYER += os_ctb.obj
    _OS_LAYER += os_evt.$(OBJTAIL)
    OS_LAYER_SRC:=./nuc/
    CC=cl
    COPTS = /c /nologo /W3 /GX /Zp1 /GZ
    INCLUDES += -I"." -I"..\inc\NUC" -I"..\inc\NUC\PC" -I"..\inc" -I"..\TST"
    LINT_OPT_FILE += co-msc50.lnt
    LINT_OPTS = $(LINT_INC) -D_WIN32 -D_M_IX86 -I"NUC" -u $(LINT_OPT_FILE)

    ifeq ($(DEBUG), 1)
      COPTS += /MD /DEBUG /Z7
      DEFINES += -D"_DEBUG" -D"NU_DEBUG"
    else
      COPTS += /MT
    endif

    COPTS += /FR"..\temp\nucwin"  /Fd"..\temp\nucwin" /Fo./$(OBJDIR)/

    ifeq ($(OS_ONLY), 1)
	  DEFINES += -D"FF_OS_ONLY"
    endif

    ifeq ($(MEMSUPER), 2)
      DEFINES +=  -D"MEMORY_SUPERVISION"  -D"OPTIMIZE_POOL"
    endif
    ifeq ($(MEMSUPER), 1)
      DEFINES += -D"MEMORY_SUPERVISION"
    endif

    ifeq ($(POOL_SPLIT), 1)
      DEFINES += -D"FF_POOL_SPLIT"
    endif

    DEFINES += -D"_NUCLEUS_"
    COPTSNF = $(COPTS) $(DEFINES) $(INCLUDES)
    COPTS_FILE =
    INCLUDELIST=$(subst /I ,-I,$(INCLUDES))
    DEFINELIST=$(subst /D ,-D,$(DEFINES))

    COMMLFLAGS =  /nologo  /subsystem:console  /machine:I386
    LFLAGS=$(COMMLFLAGS) #/debug??
    MKLIB=LIB /out:$@ $(LFLAGS)
    LIBEXT=lib
    OBJTAIL=obj
    FRAME_LIB=$(LIBDIR)/$(LIBNAME)$(XXX).$(LIBEXT)

    clean:
		@$(RM) obj/$(TARGET)/$(PLATFORM)$(DB)$(OSAL)$(PS)/*.$(OBJTAIL)
		@$(RM) $(FRAME_LIB)

  endif
endif         # nucleus && pc


ifeq ($(OSENV), sus)

    #_OS_LAYER += os_ctb.o
    OS_ISR = os_isr.$(OBJTAIL)
    ESF_FUNC = esf_func.$(OBJTAIL)
    OS_LAYER_SRC:=./$(OSENV)/
    COPTS = -c -o$(OBJDIR)/$@
    INCLUDES += -I. -I../inc/$(OSENV) -I../inc -I../TST -I$(OS_LAYER_SRC)
    ifeq ($(TARGET), linuxtool)
      DEFINES += -D_TOOLS_
    endif

    DEFINES += -DPURE_USER_MODE

    ifeq ($(OSL_LOG), 1)
      DEFINES += -DOSL_OSL_LOG
    endif
    ifeq ($(OS_ONLY), 1)
      DEFINES += -DFF_OS_ONLY
    endif

    ifeq ($(DEBUG), 1)
      COPTS += -g
      DEFINES += -DOSL_DEBUG
    endif

    ifeq ($(MEMSUPER), 2)
      DEFINES +=  -DMEMORY_SUPERVISION  -DOPTIMIZE_POOL
    endif
    ifeq ($(MEMSUPER), 1)
      DEFINES += -DMEMORY_SUPERVISION
    endif

   ifeq ($(TARGET), rtlpc)
     COPTSNF = $(CFLAGS)
     MKLIB= i386-linux-ar ruv $@
     RANLIB= i386-linux-ranlib
     DEFINES += -D_RT_LINUX_
   else
     ifeq ($(TARGET), linuxarm)
       CC=arm-linux-gcc
       MKLIB= arm-linux-ar ruv $@
       RANLIB= arm-linux-ranlib
       DEFINES += -D_TARGET -D_LINUX_ -D_ESF_SUPPORT_
     else
       ifeq ($(TARGET), solsparc)
         CC=gcc
         MKLIB= ar ruv $@
         RANLIB= ranlib
         DEFINES += -D_SOLARIS_ -D_LINUX_ -D_ESF_SUPPORT_
       else
         CC=gcc
         MKLIB= ar ruv $@
         RANLIB= ranlib
         DEFINES += -D_LINUX_ -D_ESF_SUPPORT_
       endif
     endif
   endif
    COPTSNF += $(COPTS) $(DEFINES) $(INCLUDES)
    COPTS_FILE =
    INCLUDELIST=$(subst /I ,-I,$(INCLUDES))
    DEFINELIST=$(subst /D ,-D,$(DEFINES))

    MKLIB=ar ruv $@
    LIBEXT=a
    OBJTAIL=o
    FRAME_LIB=$(LIBDIR)/lib$(LIBNAME)$(XXX).$(LIBEXT)

    clean:
		@$(RM) $(OBJDIR)/*.$(OBJTAIL)
		@$(RM) $(FRAME_LIB)

#_TESTOBJS=os_pro.o os_mem.o os_com.o os_sem.o os_tim.o os_mis.o
#TESTOBJS=$(patsubst %.$(OBJTAIL),$(OBJDIR)/%.$(OBJTAIL),$(_TESTOBJS))
   os_test: os_test$(tTail)
	@echo os_test$(tTail) built

   os_test$(tTail): $(_TESTOBJS) sus/os_test.c $(FRAME_LIB)
	$(CC) -g -o $@ $(INCLUDES) $(DEFINES)  sus/os_test.c $(FRAME_LIB) -lpthread -lrt

endif # osenv = sus

#----------------------------------- Special settings for each target
#----------Win32
ifeq ($(TARGET), win32)
   MISCXXX:=$(tTail)$(dbTail)
   TIFXXX:=$(tTail)$(dbTail)
   TOOLS_LIBDIR=../tools/lib
   OS_LAYER_SRC:=./vcms/
   CC=cl
   COPTS += /c /nologo /GX /W3 /Zp1 /GZ
   INCLUDES += -I"." -I$(OS_LAYER_SRC) -I"..\inc\vcms" -I"..\inc\win32" -I"..\inc\vcms\win32" -I"..\inc"
   LINT_OPT_FILE += co-msc50.lnt
   LINT_OPTS = $(LINT_INC) -D_WIN32 -D_M_IX86 -D_MSC_VER -D"WIN32" -u $(LINT_OPT_FILE)

   INCLUDES += -I"..\lib\win32"
   _OS_LAYER += frame_dllmain.$(OBJTAIL)

   COPTS += /FR"..\temp\win32"  /Fo./$(OBJDIR)/

   DEFINES += -D"CRASH_TOL"
   DEFINES += -D"_TOOLS_"

   DEFINES += -D"FRAME_DLL"
   DLLFLAGS= /dll\
             $(EXPFILE) $(LIBDIR)/misc$(MISCXXX).lib \
             $(LIBDIR)/tif$(TIFXXX).lib \
             $(LIBDIR)/ntutils.lib $(TOOLS_LIBDIR)/psapi.lib \
             user32.lib

   COMMLFLAGS = $(DLLFLAGS)
   COMMLFLAGS += /nologo
   ifeq ($(DEBUG), 1)
     COPTS += -DEBUG /MDd /Z7
     DEFINES += -D"_DEBUG"
     COMMLFLAGS += /DEBUG /incremental:no /pdb:none\
                   ../os_lib/win32/debug/cms.lib \
                   /nodefaultlib:"libcmtd"
   else  #debug
     COPTS += /MD
     COMMLFLAGS += ../os_lib/win32/cms.lib \
                   /nodefaultlib:"libcmt"
   endif #debug
   COPTSNF = $(COPTS) $(DEFINES) $(INCLUDES)
   INCLUDELIST=$(subst /I ,-I,$(INCLUDES))
   DEFINELIST=$(subst /D ,-D,$(DEFINES))

   LFLAGS=$(COMMLFLAGS)
   LFLAGS += /SECTION:FRAME_SHARED,RWS
   LIBEXT = dll
   MKLIB=link.exe /out:$@ $(LFLAGS)
   OBJTAIL=obj
   FRAME_LIB=$(BINDIR)/$(LIBNAME)$(XXX).$(LIBEXT)

   COPTS_FILE=
   EXPFILE=$(LIBDIR)/frame$(XXX).exp
   IMPLIB=$(LIBDIR)/frame$(XXX).lib

   INC_FILES+=vcms/os_const.h

   implib: $(IMPLIB)

   $(IMPLIB) $(EXPFILE): $(OBJDIR) $(_OS_LAYER) $(_FRAMEOBJS)
#  OWN_MAKELEVEL == 0 if makefile called directly, == 1 if nested
   ifneq ($(OWN_MAKELEVEL), 0)
	@echo checking out and touching using $(MAKE) for two possible targets ($@), make level $(OWN_MAKELEVEL)
		$(CHECKOUT) $(IMPLIB)
		touch -c $(IMPLIB)
   else
		gnumake MAKE=gnumake OWN_MAKELEVEL=1 $(subst \,/,$@ $<)
	@echo proceeding using $(MAKE) for two possible targets ($@), make level $(OWN_MAKELEVEL)
		lib.exe /nologo /MACHINE:IX86 /DEF:frame$(msTail).def $(FRAMEOBJS)\
            $(OS_LAYER) /OUT:$(IMPLIB) /NAME:frame$(XXX).dll
   endif

   clean:
	    $(RM) $(OBJDIR)/*.$(OBJTAIL)
	    $(RM) $(IMPLIB) $(EXPFILE) $(FRAME_LIB)

endif         # target: win32



#----------------------------------- Special settings for each target
#----------pSOS+
ifeq ($(TARGET), psos)

   OS_LAYER_SRC:=./psos/
   CC=cc386
   COPTS_FILE:=c.opt
   _OS_LAYER += drv_conf.$(OBJTAIL)
   SPEC_F_OBJS=

   -include $(PSS_BSP)/bsp.mk# board support settings e.g. MODEL, FPU

   ifeq ( FPU,H )
      FPUOPT = -VNDP
   else
      FPUOPT=
   endif

   COPTS1  =       -c -V$(MODEL) -VROM -VBSS -VANSI -VLONGNAME -VSPROTO -VQUIET -VDIAGNOSTICS
   COPTS2  =       $(FPUOPT)  -I$(COMFSRC)/configps/
   COPTS3  =       -I. -I$(PSS_ROOT)/include -I$(PSS_BSP) -I$(PSS_ROOT)/bsps/devices
   COPTS4  =        -I./ -I../inc/ -I../inc/psos/ -I./psos/ -I../../g23net/dev/config  -I../TST
   COPTS5  =       -DMODEL=$(MODEL) -VNOSIGNEDCHAR -D__CADUL__=1 -DPSOS=1 -D_PSOS_

   ifeq ($(MEMSUPER), 2)
      COPTS5 += -DMEMORY_SUPERVISION -DOPTIMIZE_POOL
   endif
   ifeq ($(MEMSUPER), 1)
      COPTS5 += -DMEMORY_SUPERVISION
   endif

   ifeq ($(DEBUG), 1)
      COPTS5 += -VXDB
   endif

   COPTS5 += -DTEST_TARGET_IP_ADDRESS

   COPTS   =       @c.opt

#$(COPTS1)  $(COPTS2)  $(COPTS3)  $(COPTS4)  $(COPTS5) ich wollte c.opt umgehen. erstmal keinen Erfolg.

   COPTS += -o $(OBJDIR)/$@
   COPTSNF = $(COPTS)
   LIBEXT = lib
   MKLIB = lib386 $@         # psos related libs will not be included here
   OBJTAIL=obj
   FRAME_LIB=$(LIBDIR)/$(LIBNAME)$(XXX).$(LIBEXT)

c.opt:  makefile
	@echo $(COPTS1) >  c.opt
	@echo $(COPTS2) >> c.opt
	@echo $(COPTS3) >> c.opt
	@echo $(COPTS4) >> c.opt
	@echo $(COPTS5) >> c.opt

#psos.abs: os.abs wie? wozu??

#~~~~~~
   clean:
		@$(RM) obj/$(TARGET)$(DB)$(PS)/*.$(OBJTAIL)
		@$(RM) $(FRAME_LIB)
		@$(RM) c.opt
endif         # target: psos

#----------------------------------- Special settings for each target
#---------- vxworks
ifeq ($(TARGET), vxworks)

   OS_PART = os_part.$(OBJTAIL)

   CC = ccppc
   OS_LAYER_SRC  = ./$(TARGET)
   SPEC_OSL_INC  =
   SPEC_OSL_OBJS =
   SPEC_F_OBJS   =

  ifeq ($(DEBUG), 1)
    COPTSNF  = -g
  else
    COPTSNF  = -O2
  endif
    COPTSNF += -c -mstrict-align -ansi -nostdinc -DRW_MULTI_THREAD -D_REENTRANT \
               -fvolatile -fno-builtin -fno-for-scope -DCPU=$(CPU) \
               -I$(WIND_BASE)/target/h -I. -I../../g23net/dev/config -I../inc/$(TARGET) \
               -I../inc -D_VXWORKS_  -I../TST

   ifeq ($(MEMSUPER), 2)
      COPTSNF +=  -DMEMORY_SUPERVISION -DOPTIMIZE_POOL
   endif
   ifeq ($(MEMSUPER), 1)
      COPTSNF += -DMEMORY_SUPERVISION
   endif

   COPTSNF += -o $(OBJDIR)/$@
   LIBEXT   = a
   MKLIB     = arppc crus $@
   OBJTAIL=obj

   FRAME_LIB= $(LIBDIR)/$(LIBNAME)$(XXX).$(LIBEXT)

clean:
	@$(RM) obj/$(TARGET)$(DB)$(PS)/*.o*
	@$(RM) $(FRAME_LIB)

endif
# target: vxworks

######################### echo for control ##################################

#echo:
#	@echo $(_OS_LAYER)
#	@echo $(OS_LAYER)
#	@echo $(_FRAMEOBJS)
#	@echo $(FRAMEOBJS)
#	@echo $(SRCFILES)
#	@echo $(DEFINES)
#	@echo $(DEFINELIST)

######################### OS layer ##################################

OS_LAYER=$(patsubst %.$(OBJTAIL),$(OBJDIR)/%.$(OBJTAIL),$(_OS_LAYER))

os_layer: $(COPTS_FILE) $(_OS_LAYER)

#########################  Frame    ##################################
.PHONY:	all label help

asm: $(OBJDIR) $(FRAME_LIB)

FRAMEOBJS=$(patsubst %.$(OBJTAIL),$(OBJDIR)/%.$(OBJTAIL),$(_FRAMEOBJS))

frameobjs: $(COPTS_FILE) $(_OS_LAYER) $(_FRAMEOBJS)

frame.$(LIBEXT): $(FRAME_LIB)

$(OBJDIR) :
	$(MKDIR) -p $(OBJDIR)

$(FRAME_LIB) : $(OBJDIR) $(COPTS_FILE) $(_OS_LAYER) $(_FRAMEOBJS) makefile $(EXPFILE)
#  OWN_MAKELEVEL == 0 if makefile called directly, == 1 if nested
ifneq ($(OWN_MAKELEVEL), 0)
	@echo checking out and touching using $(MAKE)
	$(CHECKOUT) $@ $(IMPLIB)
	touch -c $@ $(IMPLIB)
else
	gnumake MAKE=gnumake OWN_MAKELEVEL=1 $(subst \,/,$@ $<)
	@echo proceeding using $(MAKE)
  ifneq ($(OSENV), sus)
		$(RM) $@
  endif
		$(MKLIB) $(FRAMEOBJS) $(OS_LAYER) $(ASMOBJS)
  ifeq ($(OSENV), sus)
		$(RANLIB) $@
  endif
endif

$(_OS_LAYER) $(_FRAMEOBJS): %.$(OBJTAIL) :	%.c
	$(RM) $(OBJDIR)/frame_version.$(OBJTAIL)
ifneq ($(NO_LINT), 1)
	$(LINT) $(LINT_OPTS) $(DEFINES) $(INCLUDES) $<
endif
	$(CC) $(COPTSNF) $<

SRCFILES=$(patsubst %.$(OBJTAIL),%.c,$(_FRAMEOBJS) $(_OS_LAYER))

FRAME_DEP=dep_frame_$(PROJECT)$(XXX).mk

help:
	$(ECHO) usage...
	$(ECHO) building:
	$(ECHO) "gnumake [DEBUG={1|0}] [ROUTING={1|0}] [MEMSUPER={1|0}] ..."
	$(ECHO) cleaning:
	$(ECHO) "gnumake clean [DEBUG={1|0}] [ROUTING={1|0}] [MEMSUPER={1|0}] ..."
	$(ECHO) ClearCase:
	$(ECHO) "gnumake checkin - not implemeted yet -"
	$(ECHO) "gnumake label LABEL=<label type> [FLOAT={1|0}] [DEBUG={1|0}] [ROUTING={1|0}] "
	$(ECHO) "        [MEMSUPER={1|0}] ..."
	$(ECHO) help:
	$(ECHO) "gnumake help"

DEPEND_DIRS=$(GPFDIR) $(LIBDIR) $(BINDIR) $(INCDIR)
EXPORT_FILES=$(IMPLIB) $(FRAME_LIB)
INCLUDE_FILES=$(patsubst %,../inc/%,$(INC_FILES))

label:
	-$(CLEARTOOL) mklabel -recurse $(REPLACE) $(LABEL) . 2>> error.log
	-$(CLEARTOOL) mklabel $(REPLACE) $(LABEL) $(DEPEND_DIRS) \
	                      $(EXPORT_FILES) $(INCLUDE_FILES) 2>> error.log

depend: $(SRCFILES)
	@touch $(FRAME_DEP)
	makedepend -b -f$(FRAME_DEP) $^ -Y -o.$(OBJTAIL) $(INCLUDELIST) $(DEFINELIST)
	@$(RM) $(FRAME_DEP)

-include $(FRAME_DEP)