###############################################################################
##
## Copyright (C) 2003-2013 Fraunhofer Gesellschaft. All rights reserved.
##               Institut Integrierte Schaltungen - EAS Dresden
##
###############################################################################


###############################################################################
# Libraries configuration
###############################################################################


SYSTEMC_AMS           = yes
SYSTEMC               = yes
SCA_BASIC_LIBRARIES   = yes
SCSIMCONTROL          = no
SCA_TRACE_LIBRARIES   = no
STATISTICS_PACKAGE    = no
SYSTEMC_AMS_NONLIN    = no
SCA_NLN_LIBRARIES     = no
STATECHART2SYSTEMC    = no
SYSTEMC_AMS_SWCAP     = no
TLM_GENERIC_LIBRARIES = no


#------------------------------------------------------------------------------
# if you need SystemC with pthread support -> SYSTEMC_PTHREAD = yes
#------------------------------------------------------------------------------
SYSTEMC_PTHREAD = no

#------------------------------------------------------------------------------
# if you need SystemC-* profiling support
# profiling support for SYSTEMC, SYSTEMC AMS, SCA Basic Lib., ... -> SYSTEMC_GPROF = yes  
#------------------------------------------------------------------------------
SYSTEMC_GPROF = no

#------------------------------------------------------------------------------
# if you need SystemC tracing with HDF5 support -> BUILD_WITH_HDF5 = yes
#------------------------------------------------------------------------------
BUILD_WITH_HDF5 = no

#------------------------------------------------------------------------------
# if you want to build a shared object -> BUILD_WITH_SHLIB = yes
#------------------------------------------------------------------------------
BUILD_WITH_SHLIB = no


###############################################################################
# Compiler & linker flags for building and linking
###############################################################################

CC                   = gcc
CXX                  = g++
CXXLD                = g++

EXTRA_CFLAGS         = -Wall -Wfatal-errors -g -O2
EXTRA_CXXFLAGS       = -Wall -Wfatal-errors -g -O2
EXTRA_LDFLAGS        =
EXTRA_LIBS           =

ifneq ($(TARGET_ARCH),mingw32)
  EXTRA_CFLAGS       += -fPIC
  EXTRA_CXXFLAGS     += -fPIC
endif

###############################################################################
# Tool configuration - usually no change required
###############################################################################

# path to Makefile creation utilities
# MAKEFLOW_HOME = ${SYSTEMC_AMS_TOOLS_PATH}/makefileCreation_COSIDE

# make command
MAKE = make

# show executed commands
MAKE_VERBOSE = no

# Linker search path for customer customization
# LINKER_SEARCH_PATH = /opt/gcc-4.0.2/lib /usr/gcc/lib

# customize object extension
# OBJECT_EXTENSION = obj

# customize _config_data filename
# CONFIG_DATA = _my_config_data

# customize fhg_coupling_framework location
# COUPLING_FRAMEWORK_LOCATION = /my_location/fhg_coupling_framework

# add module/library to black-list to exclude it from compile flow
# MODULE_BLACK_LIST  = library/sub/library/module 
# LIBRARY_BLACK_LIST = 

# add module/library to white-list to add module to compile flow
# MODULE_WHITE_LIST  = 
# LIBRARY_WHITE_LIST = 

###############################################################################
# internal section, do not change
###############################################################################
ifeq ($(SCSIMCONTROL),yes)
  SYSTEMCINCDIR +=		-I$(SYSTEMC_AMS_LIBS_HOME)/SCSimControlModule/include
  
  SYSTEMCLIBDIR +=		-L$(SYSTEMC_AMS_LIBS_HOME)/SCSimControlModule/lib-$(TARGET_ARCH)
  
  ifneq ($(TARGET_ARCH),mingw32)
    SYSTEMCLIBS +=		-lSCSimControlModule -ldl
  else
    SYSTEMCLIBS +=		-lSCSimControlModule
  endif 
  
  SCA_TRACE_LIBRARIES = yes
  BUILD_WITH_HDF5 = yes
  SYSTEMC_AMS_LIBS = yes
  SYSTEMC_AMS = yes
endif

ifeq ($(SCA_NLN_LIBRARIES),yes)
  SYSTEMCINCDIR +=		-I$(SYSTEMC_AMS_LIBS_HOME)/sca_nln_libraries/include

  SYSTEMCLIBDIR +=		-L$(SYSTEMC_AMS_LIBS_HOME)/sca_nln_libraries/lib-$(TARGET_ARCH)

  SYSTEMCLIBS +=		-lsca_nln_libraries

  SYSTEMC_AMS_NONLIN = yes
  SCA_BASIC_LIBRARIES =	yes
endif

ifeq ($(SCA_TRACE_LIBRARIES),yes)
  SYSTEMCINCDIR +=		-I$(SYSTEMC_AMS_LIBS_HOME)/sca_trace_libraries/include
  
  SYSTEMCLIBDIR +=		-L$(SYSTEMC_AMS_LIBS_HOME)/sca_trace_libraries/lib-$(TARGET_ARCH)

  ifneq ($(TARGET_ARCH),mingw32)
    SYSTEMCLIBS +=		-lsca_trace_libraries -lpthread
  else
    SYSTEMCLIBS +=		-lsca_trace_libraries -lws2_32
  endif

  ifeq ($(BUILD_WITH_HDF5),yes)
    SYSTEMCINCDIR +=	-I$(HDF5_HOME)/include
    
    SYSTEMCLIBDIR +=	-L$(HDF5_HOME)/lib
    
    SYSTEMCLIBS +=		-lhdf5
  endif

  SYSTEMC_AMS_LIBS = yes
  SYSTEMC_AMS = yes
endif

ifeq ($(STATISTICS_PACKAGE),yes)
  SYSTEMCINCDIR +=		-I$(UTILITY_PATH)/statistics_package/include
  
  SYSTEMCLIBDIR +=		-L$(UTILITY_PATH)/statistics_package/lib-$(TARGET_ARCH)

  SYSTEMCLIBS +=		-lstatistics_package

  UTILITY = yes
  SYSTEMC = yes
endif

ifeq ($(STATECHART2SYSTEMC),yes)
  SYSTEMCINCDIR +=		-I$(UTILITY_PATH)/statechart2systemc/include
  
  SYSTEMCLIBDIR +=		-L$(UTILITY_PATH)/statechart2systemc/lib-$(TARGET_ARCH)

  ifneq ($(TARGET_ARCH),mingw32)
    SYSTEMCLIBS +=		-lCGLWriter -lpthread
  else
    SYSTEMCLIBS +=		-lCGLWriter -lws2_32
  endif

  UTILITY = yes
endif

ifeq ($(SCA_BASIC_LIBRARIES),yes)
  SYSTEMCINCDIR +=		-I$(SYSTEMC_AMS_LIBS_HOME)/sca_basic_libraries/include
  
  ifeq ($(SYSTEMC_GPROF),yes)
    SYSTEMCLIBDIR +=	-L$(SYSTEMC_AMS_LIBS_HOME)/sca_basic_libraries/lib-$(TARGET_ARCH)-gprof
  else
    SYSTEMCLIBDIR +=	-L$(SYSTEMC_AMS_LIBS_HOME)/sca_basic_libraries/lib-$(TARGET_ARCH)
  endif  
  
  SYSTEMCLIBS +=		-lsca_basic_libraries
  
  SYSTEMC_AMS_LIBS = yes
  SYSTEMC_AMS = yes
endif

ifeq ($(SYSTEMC_AMS_NONLIN),yes)
  SYSTEMCINCDIR +=		-I$(SYSTEMC_AMS_NONLIN_HOME)/include

  SYSTEMCLIBDIR +=		-L$(SYSTEMC_AMS_NONLIN_HOME)/lib-$(TARGET_ARCH)

  SYSTEMCLIBS +=		-lsystemc-ams-nonlinear

  SYSTEMC_AMS =	yes
endif

ifeq ($(SYSTEMC_AMS_SWCAP),yes)
  SYSTEMCINCDIR +=		-I$(SYSTEMC_AMS_SWCAP_PATH)/include
  
  ifeq ($(SYSTEMC_GPROF),yes)
    SYSTEMCLIBDIR +=	-L$(SYSTEMC_AMS_SWCAP_PATH)/lib-$(TARGET_ARCH)-gprof
  else
    SYSTEMCLIBDIR +=	-L$(SYSTEMC_AMS_SWCAP_PATH)/lib-$(TARGET_ARCH)
  endif

  SYSTEMCLIBS +=		-lsystemc-ams-swcap

  SYSTEMC_AMS =	yes
endif


ifeq ($(SYSTEMC_AMS),yes)
  SYSTEMCINCDIR +=		-I$(SYSTEMC_AMS_HOME)/include
  
  ifeq ($(SYSTEMC_GPROF),yes)
    SYSTEMCLIBDIR +=	-L$(SYSTEMC_AMS_HOME)/lib-$(TARGET_ARCH)-gprof
  else
    SYSTEMCLIBDIR +=	-L$(SYSTEMC_AMS_HOME)/lib-$(TARGET_ARCH)
  endif
  
  SYSTEMCLIBS +=		-lsystemc-ams
  
  SYSTEMC =	yes
endif

ifeq ($(TLM_GENERIC_LIBRARIES),yes)
  EXTRA_CXXFLAGS +=		-DSC_INCLUDE_DYNAMIC_PROCESSES
  SYSTEMCINCDIR +=		-I$(SYSTEMC_AMS_LIBS_HOME)/tlm_generic_libraries/include
  SYSTEMCLIBDIR +=		-L$(SYSTEMC_AMS_LIBS_HOME)/tlm_generic_libraries/lib-$(TARGET_ARCH)
  SYSTEMCLIBS +=		-ltlm_generic_libraries
  
  SYSTEMC_AMS_LIBS = yes
  SYSTEMC = yes
endif

ifeq ($(SYSTEMC),yes)
  SYSTEMCINCDIR +=		-I$(SYSTEMC_HOME)/include
  SYSTEMCINCDIR +=		-I${SYSTEMC_TLM_HOME}/include

  ifeq ($(SYSTEMC_PTHREAD),yes)
    SYSTEMCLIBDIR +=	-L$(SYSTEMC_HOME)/lib-$(TARGET_ARCH)-pthread
    SYSTEMCLIBS   +=    -lpthread
  else
    ifeq ($(SYSTEMC_GPROF),yes)
      SYSTEMCLIBDIR +=	-L$(SYSTEMC_HOME)/lib-$(TARGET_ARCH)-gprof
    else
      SYSTEMCLIBDIR +=	-L$(SYSTEMC_HOME)/lib-$(TARGET_ARCH)
    endif
  endif
  SYSTEMCLIBS   +=    -lsystemc
endif
  
ifeq ($(SYSTEMC_AMS_LIBS),yes)
  SYSTEMCINCDIR +=		-I$(SYSTEMC_AMS_LIBS_HOME)
endif

ifeq ($(UTILITY),yes)
  SYSTEMCINCDIR +=		-I$(UTILITY_PATH)
endif

SYSTEMCLIBS +=			-lm
###############################################################################
ifeq ($(SYSTEMC_GPROF),yes)
EXTRA_CFLAGS +=			-g -pg
EXTRA_CXXFLAGS +=		-g -pg
endif
###############################################################################
###############################################################################

#include global makefile
ifndef MAKEFLOW_HOME
$(error MAKEFLOW_HOME environment variable not set!)
else
include $(MAKEFLOW_HOME)/Makefile_global.mk
endif
