cmake_minimum_required(VERSION 3.9)

project("blifexplorer")

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

find_package(Qt5Widgets)
find_package(Qt5Gui)
find_package(Qt5Core)

#Check dependencies
if(NOT Qt5Widgets_FOUND)
    message(FATAL_ERROR "Failed to find Qt5Widgets required for blifexplorer (on debian/ubuntu try 'sudo apt install qt5-default')")
endif()

if(NOT Qt5Gui_FOUND)
    message(FATAL_ERROR "Failed to find Qt5Gui required for blifexplorer (on debian/ubuntu try 'sudo apt install qt5-default')")
endif()

if(NOT Qt5Core_FOUND)
    message(FATAL_ERROR "Failed to find Qt5Core required for blifexplorer (on debian/ubuntu try 'sudo apt install qt5-default')")
endif()

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)

#Collect the source files
set(QRC_EXPLORERRES src/explorerres.qrc)

set(UI_CLOCKCONFIG src/clockconfig.ui)

file(GLOB_RECURSE EXEC_SOURCES src/*.cpp)

file(GLOB_RECURSE EXEC_HEADERS src/*.h)
files_to_dirs(EXEC_HEADERS EXEC_INCLUDE_DIRS)

#The generated header files appear in the CMAKE_CURRENT_BINARY_DIR, so ensure
#it is in the include directories
include_directories(${EXEC_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR})

#Create the executable
add_executable(blifexplorer 
                ${UI_CLOCKCONFIG}
                ${QRC_EXPLORERRES}
                ${EXEC_SOURCES} 
                ${EXEC_HEADERS}
)

target_link_libraries(blifexplorer
                        liblog
                        libarchfpga
                        libvtrutil
                        libodin_ii
                        libargparse
                        Qt5::Widgets
                        Qt5::Core
                        Qt5::Gui
                        ${CMAKE_DL_LIBS}
)

#Supress IPO link warnings if IPO is enabled
get_target_property(TEST_BLIFEXPLORER_USES_IPO blifexplorer INTERPROCEDURAL_OPTIMIZATION)
if (TEST_BLIFEXPLORER_USES_IPO)
    set_target_properties(blifexplorer PROPERTIES LINK_FLAGS ${IPO_LINK_WARN_SUPRESS_FLAGS})
endif()


install(TARGETS blifexplorer DESTINATION bin)
