project(RPIDemoDevice CXX C)
cmake_minimum_required(VERSION 2.8)

#########################
##### CMAKE OPTIONS #####
#########################

option(ON_RPI "Compile for RPI" OFF)

set (EXAMPLE_APP_OUTPUT_DIR "${PROJECT_SOURCE_DIR}/bins")
set (WISE_SDK_LIB_DIR "${PROJECT_SOURCE_DIR}/libs/wisesdk")

#################
##### FLAGS #####
#################

if(MSVC)
    # Force to always compile with W4
    if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
        string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
    else()
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
    endif()
elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fdata-sections -ffunction-sections -Wl,--gc-sections")
endif()

#####################
##### LIBRARIES #####
#####################

##### WISE SDK #####
list(APPEND EXAMPLE_APP_INCLUDE_DIRS
        ${PROJECT_SOURCE_DIR}/include
        ${WISE_SDK_LIB_DIR}/include
        ${WISE_SDK_LIB_DIR}/include/paho
        )

list(APPEND EXAMPLE_APP_LINK_DIRS
        ${WISE_SDK_LIB_DIR}/lib)
list(APPEND EXAMPLE_APP_LINK_LIBS
        wisesdk)

if(ON_RPI)
    list(APPEND EXAMPLE_APP_LINK_LIBS
        wiringPi)
    add_definitions(-DON_RPI)
endif()


###################
##### SOURCES #####
###################

file(GLOB_RECURSE EXAMPLE_APP_SOURCE_FILES
    "src/*.cpp")

file(GLOB_RECURSE EXAMPLE_APP_HEADER_FILES
    "include/*.h")

file(GLOB_RECURSE LOG_SOURCE_FILES
    "src/humblelogging/*.cpp"
    )

file(GLOB_RECURSE LOG_HEADER_FILES
    "include/humblelogging/*.h"
    )

#######################
#### DOCUMENTATION ####
#######################
find_package(Doxygen)
if (DOXYGEN_FOUND)
    if (ON_RPI)
        set(DOXYGEN_IN ${PROJECT_SOURCE_DIR}/doc/doxygen_rpi.in)
        set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/doc/doxygen_rpi.out)
    else()
        set(DOXYGEN_IN ${PROJECT_SOURCE_DIR}/doc/doxygen_pc.in)
        set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/doc/doxygen_pc.out)
    endif()

    configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY)

    add_custom_target( doc_doxygen
        COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
        WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/doc
        COMMENT "Generating API documentation with Doxygen"
        VERBATIM )
else (DOXYGEN_FOUND)
  message(STATUS "Doxygen need to be installed to generate the doxygen documentation")
  message(STATUS "Recommended is to install dot (graphviz)")
endif (DOXYGEN_FOUND)

#######################
##### APPLICATION #####
#######################

include_directories(${EXAMPLE_APP_INCLUDE_DIRS})
link_directories(${EXAMPLE_APP_LINK_DIRS})

add_executable(rpiDevice ${EXAMPLE_APP_SOURCE_FILES} ${EXAMPLE_APP_HEADER_FILES} ${LOG_SOURCE_FILES} ${LOG_HEADER_FILES})

target_link_libraries(rpiDevice ${EXAMPLE_APP_LINK_LIBS})

set_target_properties( rpiDevice PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${EXAMPLE_APP_OUTPUT_DIR} )
