cmake_minimum_required(VERSION 3.03)

project(generic VERSION 1.0)

add_subdirectory(submodule/mepicsca)

add_compile_options(
    -Wall
    -Wformat=2
    -g
    -Wno-format-nonliteral
    -Wno-strict-aliasing
    -Wuninitialized
    -Wno-unused-function
)

# Check if the required environment variables MIDASSYS and EPICSSYS are available
if (NOT DEFINED ENV{MIDASSYS})
   message(SEND_ERROR "MIDASSYS environment variable not defined.")
endif()
if (NOT DEFINED ENV{EPICSSYS})
   message(SEND_ERROR "EPICSSYS environment variable not defined.")
endif()

set(CMAKE_CXX_STANDARD 17)
set(MIDASSYS $ENV{MIDASSYS})
set(EPICSSYS $ENV{EPICSSYS})

# Select the correct EPICS library depending on the OS (currently Linus is available)
if (${CMAKE_SYSTEM_NAME} MATCHES Linux)
   link_directories(${EPICSSYS}/lib/linux-x86_64)
   set(LIBS ${LIBS} -lpthread -lutil -lrt -lbsd -ldl)
endif()

find_package(Midas REQUIRED)

################################################################################
## Device
################################################################################

add_library(
    epics_bridge
    src/device/epics_bridge.cpp
    src/utils/type.cpp
)

set_property(
    TARGET
        epics_bridge
    PROPERTY
        CXX_STANDARD 17
)

target_link_libraries(
    epics_bridge
    PRIVATE
        midas::mfe
        m_epics_ca
        ${LIBS}
)

target_include_directories(
    epics_bridge
    PUBLIC
        ${CMAKE_CURRENT_SOURCE_DIR}
    PRIVATE
        ${EPICSSYS}/include
        ${EPICSSYS}/include/os/Linux
        ${EPICSSYS}/include/compiler/gcc
        ${EPICSSYS}/include/compiler/clang
)

################################################################################
## Frontend
################################################################################

add_executable(epics_bridge_scfe
    src/frontend/epics_bridge_scfe.cpp    
)

set_property(
  TARGET
    epics_bridge_scfe
  PROPERTY
    CXX_STANDARD 17
)

target_include_directories(
  epics_bridge_scfe 
  PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}
  PRIVATE
    ${EPICSSYS}/include
    ${EPICSSYS}/include/os/Linux
    ${EPICSSYS}/include/compiler/gcc
    ${EPICSSYS}/include/compiler/clang
)

target_link_libraries(
  epics_bridge_scfe
  PRIVATE
    epics_bridge   
    midas::mfe
    m_epics_ca
    ${LIBS}
)