# Copyright (c) 2020 Microchip Technology Inc. and its subsidiaries.
# SPDX-License-Identifier: (GPL-2.0)

project (mrp C)

cmake_minimum_required(VERSION 2.6)

## libnl ################################################
find_path(LibNL_INCLUDE_DIR netlink/netlink.h
    /usr/include
    /usr/include/libnl3
    /usr/local/include
    /usr/local/include/libnl3
)

find_library(LibNL_LIBRARY NAMES nl nl-3)
find_library(LibNL_GENL_LIBRARY NAMES nl-genl nl-genl-3)

if (NOT (LibNL_INCLUDE_DIR AND LibNL_LIBRARY))
    message(FATAL_ERROR "Could not find netlink library.")
endif ()

## libmnl ###############################################
find_path(LibMNL_INCLUDE_DIR libmnl/libmnl.h
    /usr/include
    /usr/local/include
)

find_library(LibMNL_LIBRARY NAMES mnl)

if (NOT (LibMNL_INCLUDE_DIR AND LibMNL_LIBRARY))
    message(FATAL_ERROR "Coult not find mnl library.")
endif ()

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_LIBMNL")

## libev ################################################
find_path(LibEV_INCLUDE_DIR ev.h
    /usr/include
    /usr/local/include
)

find_library(LibEV_LIBRARY NAMES ev)

if (NOT (LibEV_INCLUDE_DIR AND LibEV_LIBRARY))
    message(FATAL_ERROR "Could not find libev.")
endif ()

## libcfm_netlink ########################################
find_path(LibCFM_INCLUDE_DIR cfm_netlink.h
    /usr/include
    /usr/local/include
)

find_library(LibCFM_LIBRARY NAMES cfm_netlink)
if (NOT (LibCFM_INCLUDE_DIR AND LibCFM_LIBRARY))
    message(FATAL_ERROR "Could not find libcfm_netlink.")
endif ()
## libubus ###############################################
find_path(libubus_INCLUDE_DIR libubus.h
	/usr/include
	/usr/local/include
)

find_library(libubus_LIBRARY NAMES ubus)
if (NOT (libubus_INCLUDE_DIR AND libubus_LIBRARY))
    message(FATAL_ERROR "Could not find libubus library")
endif ()

find_library(libubox_LIBRARY NAMES ubox)
if (NOT (libubox_LIBRARY))
    message(FATAL_ERROR "Could not find libubox library")
endif ()

find_library(libtlt_uci_LIBRARY NAMES tlt_uci)
if (NOT(libtlt_uci_LIBRARY))
    message(FATAL_ERROR "Could not find libtltuci library")
endif()

find_library(libuci_LIBRARY NAMES uci)
if (NOT(libuci_LIBRARY))
    message(FATAL_ERROR "Could not find libuci library")
endif()

## mrp (this project) ####################################
add_definitions(-Wall)

include_directories(${LibNL_INCLUDE_DIR} ${LibEV_INCLUDE_DIR} ${LibMNL_INCLUDE_DIR} ${LibCFM_INCLUDE_DIR}  include/uapi)

add_executable(mrp mrp.c)

add_executable(mrp_server mrp_server.c packet.c server_socket.c server_cmds.c state_machine.c netlink.c timer.c libnetlink.c utils.c print.c ubus_server.c utils_api.c)
target_link_libraries(mrp_server ${LibNL_LIBRARY} ${LibNL_GENL_LIBRARY}
    ${LibEV_LIBRARY} ${LibMNL_LIBRARY} ${LibCFM_LIBRARY} ${libubus_LIBRARY} ${libubox_LIBRARY} ${libtlt_uci_LIBRARY} ${libuci_LIBRARY})

install(TARGETS mrp_server mrp RUNTIME DESTINATION bin)

