#############################################
# CMake file for dependencies and targets.
#############################################
#
# @author Francesco Stefanni
#


#############################################
# Configuring.
#############################################

# For each trace, which maximum verbosity level shall be used.
# From 0 (no trace) to 5 (max verbosity).

SET(SCNSL_INFO 5 CACHE STRING "Verbosity level for infos. (0 to 5)" FORCE)
SET(SCNSL_LOG 5 CACHE STRING "Verbosity level for logs. (0 to 5)" FORCE)
SET(SCNSL_DBG 5 CACHE STRING "Verbosity level for debugs. (0 to 5)" FORCE)

SET(SCNSL_WARNING 5 CACHE STRING "Verbosity level for warnings. (0 to 5)" FORCE)
SET(SCNSL_ERROR 5 CACHE STRING "Verbosity level for errors. (0 to 5)" FORCE)
SET(SCNSL_FATAL 5 CACHE STRING "Verbosity level for fatals. (0 to 5)" FORCE)

mark_as_advanced(FORCE SCNSL_INFO SCNSL_LOG SCNSL_DBG SCNSL_WARNING SCNSL_ERROR SCNSL_FATAL)

# Configuring.

add_definitions(
  -DSCNSL_INFO=${SCNSL_INFO}
  -DSCNSL_LOG=${SCNSL_LOG}
  -DSCNSL_DBG=${SCNSL_DBG}
  -DSCNSL_WARNING=${SCNSL_WARNING}
  -DSCNSL_ERROR=${SCNSL_ERROR}
  -DSCNSL_FATAL=${SCNSL_FATAL}
  )

#############################################
# Includes.
#############################################

SET(ALL_INCLUDE_DIRS
  include/scnsl/core
  include/scnsl/channels
  include/scnsl/rtl
  include/scnsl/tlm
  include/scnsl/setup
  include/scnsl/utils
  include/scnsl/tracing
  include/scnsl/builtinPlugin
  include/scnsl/protocols
  include/scnsl/protocols/mac_802_15_4
  include/scnsl/protocols/router_communicator
  include/scnsl/traffic
  include/scnsl/queueModels
  include/scnsl/statistics
  )

include_directories(${ALL_INCLUDE_DIRS})
include_directories(SYSTEM ${SYSTEMC_INCLUDE} ${SYSTEMC_TLM_INCLUDE})

#############################################
# Sources.
#############################################


set(SCNSL_CORE_SRCS
  src/core/Channel_if_t.cc
  src/core/Communicator_if_t.cc
  src/core/data_types.cc
  src/core/Node_t.cc
  src/core/Packet_t.cc
  src/core/Task_if_t.cc
  src/core/TaskProxy_if_t.cc
  src/core/QueueCommunicator_t.cc
  )

set(SCNSL_CHANNELS_SRCS
  src/channels/FullDuplexChannel_t.cc
  src/channels/HalfDuplexChannel_t.cc
  src/channels/UnidirectionalChannel_t.cc
  src/channels/SharedChannel_t.cc
  src/channels/DelayedSharedChannel_t.cc
  )


set(SCNSL_RTL_SRCS
  src/rtl/rtl_data_types.cc
  src/rtl/RtlTask_base_if_t.cc
  src/rtl/RtlTaskProxy_t.cc
  )


set(SCNSL_TLM_SRCS
  src/tlm/tlm_data_types.cc
  src/tlm/TlmTask_if_t.cc
  src/tlm/TlmTaskProxy_t.cc
  )


set(SCNSL_SETUP_SRCS
  src/setup/ChannelSetup_base_t.cc
  src/setup/CommunicatorSetup_base_t.cc
  src/setup/Extension_if_t.cc
  src/setup/PluginManager_t.cc
  src/setup/Scnsl_t.cc
  src/setup/setup_data_types.cc
  src/setup/TaskSetup_base_t.cc
  src/setup/TopologySetup_base_t.cc
  src/setup/BindSetup_base_t.cc
  src/setup/TracingSetup_base_t.cc
  )

set(SCNSL_UTILS_SRCS
  src/utils/CommunicatorStack_t.cc
  src/utils/CommunicatorBridge_t.cc
  src/utils/ChannelBridge_t.cc
  src/utils/ChannelWrapper_if_t.cc
  src/utils/EventsQueue_t.cc
 )

set(SCNSL_TRACING_SRCS
  src/tracing/Tracer_t.cc
  src/tracing/Traceable_base_t.cc
  src/tracing/Formatter_if_t.cc
  src/tracing/Filter_if_t.cc
  src/tracing/BasicFormatter_t.cc
  src/tracing/BasicFilter_t.cc
)

set(SCNSL_BUILTINPLUGIN_SRCS
  src/builtinPlugin/CoreExtension_t.cc
  src/builtinPlugin/CoreChannelSetup_t.cc
  src/builtinPlugin/CoreTaskSetup_t.cc
  src/builtinPlugin/CoreTopologySetup_t.cc
  src/builtinPlugin/CoreCommunicatorSetup_t.cc
  src/builtinPlugin/CoreTracingSetup_t.cc
 )

set(SCNSL_PROTOCOLS_MAC_802_15_4
  src/protocols/mac_802_15_4/Mac802_15_4_t.cc
  src/protocols/mac_802_15_4/MacEfsm_t.cc
  src/protocols/mac_802_15_4/MacTransitionFunctions_t.cc
  )

set(SCNSL_PROTOCOLS_COMMUNICATOR_ROUTER
  src/protocols/router_communicator/RouterCommunicator_t.cc
)

set(SCNSL_TRAFFIC_SRCS
  src/traffic/Traffic_if_t.cc
  src/traffic/Cbr_t.cc
  src/traffic/OnOff_t.cc
  src/traffic/PitTask_t.cc
  src/traffic/Gilbert_t.cc
  )

set(SCNSL_QUEUEMODELS_SRCS
  src/queueModels/Queue_if_t.cc
  src/queueModels/Fifo_t.cc
  src/queueModels/Priority_t.cc
  )

set(SCNSL_STATISTICS_SRCS
  src/statistics/StatsGenerator_t.cc
  )

# All the sources:
set(SCNSL_SRCS
  ${SCNSL_CORE_SRCS}
  ${SCNSL_CHANNELS_SRCS}
  ${SCNSL_RTL_SRCS}
  ${SCNSL_TLM_SRCS}
  ${SCNSL_SETUP_SRCS}
  ${SCNSL_UTILS_SRCS}
  ${SCNSL_TRACING_SRCS}
  ${SCNSL_BUILTINPLUGIN_SRCS}
  ${SCNSL_PROTOCOLS_MAC_802_15_4}
  ${SCNSL_PROTOCOLS_COMMUNICATOR_ROUTER}
  ${SCNSL_TRAFFIC_SRCS}
  ${SCNSL_QUEUEMODELS_SRCS}
  ${SCNSL_STATISTICS_SRCS}
  )


#############################################
# Targets.
#############################################

add_shared_and_static_library(scnsl ${SCNSL_SRCS})
target_link_libraries(scnsl)



#############################################
# Installs.
#############################################

add_install_library_targets(scnsl scnsl_static)
add_install_header_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
add_install_doc_directories(${CMAKE_CURRENT_BINARY_DIR}/doc ${CMAKE_CURRENT_SOURCE_DIR}/doc)


#### EOF ####
