######################################
# function
######################################
macro(kcsdr_append_sources)
     set(KCSDR_SOURCES ${KCSDR_SOURCES} ${ARGV} CACHE INTERNAL "global source" FORCE)
endmacro(kcsdr_append_sources)
######################################
# moudles
######################################
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/)
######################################
# compile
######################################
#Specify the minimum version for CMake
cmake_minimum_required(VERSION 3.3.2)

set(PROJ_NAME "kcsdr")

#Project's names
project(${PROJ_NAME})

#Set the output folder where you program will be created
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})

#User can choose which device can be included
set(KC908_1 "ON"  CACHE BOOL "Do you want to enable kc908_1(usb3.0) ?")
message(STATUS "KC908_1 --> ${KC908_1}")

set(KC908_N "OFF"  CACHE BOOL "Do you want to enable kc908_n(eth) ?")
message(STATUS "KC908_N --> ${KC908_N}")

if(WIN32)
    if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
        set(LIB_32BIT "ON" CACHE BOOL "Do you want to use 32bit DLL?")
    endif()
endif(WIN32)

#which source file will be included
unset(KCSDR_SOURCES CACHE)

#The following folder will be included
include_directories(${PROJECT_SOURCE_DIR})
add_subdirectory(${PROJECT_SOURCE_DIR}/api)
include_directories(${PROJECT_SOURCE_DIR}/api)
add_subdirectory(${PROJECT_SOURCE_DIR}/lib/ds)
include_directories(${PROJECT_SOURCE_DIR}/lib/ds)

if(KC908_1)
    set(USB30_EN "ON")
    add_subdirectory(${PROJECT_SOURCE_DIR}/device/kc908_1)
    include_directories(${PROJECT_SOURCE_DIR}/device/kc908_1)
    add_definitions(-DKC908_1_ENABLE)

    find_package(FTUSB REQUIRED)
    if(NOT FTUSB_FOUND)
        message(FATAL_ERROR "can not find usb3.0 library!")
    endif(NOT FTUSB_FOUND)
    list(APPEND KCSDR_LIBS ${FTUSB_LIBRARIES})
endif(KC908_1)

if(KC908_N)
    add_subdirectory(${PROJECT_SOURCE_DIR}/device/kc908_n)
    include_directories(${PROJECT_SOURCE_DIR}/device/kc908_n)

    add_subdirectory(${PROJECT_SOURCE_DIR}/lib/mdns)
    include_directories(${PROJECT_SOURCE_DIR}/lib/mdns)

    add_definitions(-DKC908_N_ENABLE)
    set(KC908_N_ENABLE "1")
endif(KC908_N)

if(USB30_EN)
    add_subdirectory(${PROJECT_SOURCE_DIR}/lib/ftdi_usb30)
    include_directories(${PROJECT_SOURCE_DIR}/lib/ftdi_usb30)
    if(UNIX)
        include_directories(${PROJECT_SOURCE_DIR}/lib/ftdi_usb30/linux)
    elseif(WIN32)
        include_directories(${PROJECT_SOURCE_DIR}/lib/ftdi_usb30/win)
    endif(UNIX)
endif(USB30_EN)

configure_file (
    "${PROJECT_SOURCE_DIR}/config.h.in"
    "${PROJECT_SOURCE_DIR}/config.h"
)

#build
set(CMAKE_BUILD_TYPE "Release")
add_library(${PROJ_NAME} SHARED ${KCSDR_SOURCES})
target_link_libraries(${PROJ_NAME} ${KCSDR_LIBS})

if(UNIX)
    install(TARGETS ${PROJ_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
    install(FILES ${PROJECT_SOURCE_DIR}/api/kcsdr.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include/kcsdr)
endif(UNIX)