Files

88 lines
2.5 KiB
CMake

cmake_minimum_required(VERSION 3.16)
project(mag160c_c LANGUAGES C)
option(MAG160C_BUILD_TESTS "Build MAG160C C tests" ON)
option(MAG160C_BUILD_CLI "Build MAG160C C CLI" ON)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)
find_package(PkgConfig QUIET)
if(PkgConfig_FOUND)
pkg_check_modules(LIBUSB QUIET libusb-1.0)
endif()
# Windows fallback: bundled libusb-1.0 (x64) under third_party/libusb/win64
if(NOT LIBUSB_FOUND AND WIN32)
set(LIBUSB_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libusb/win64")
if(EXISTS "${LIBUSB_ROOT}/libusb-1.0.x64.a" AND EXISTS "${LIBUSB_ROOT}/libusb.h")
set(LIBUSB_FOUND TRUE)
set(LIBUSB_INCLUDE_DIRS "${LIBUSB_ROOT}")
set(LIBUSB_LIBRARIES "${LIBUSB_ROOT}/libusb-1.0.x64.a")
set(LIBUSB_CFLAGS_OTHER "")
set(MAG160C_LIBUSB_DLL "${LIBUSB_ROOT}/libusb-1.0.dll")
endif()
endif()
if(LIBUSB_FOUND)
set(MAG160C_HAS_LIBUSB 1)
else()
set(MAG160C_HAS_LIBUSB 0)
endif()
if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin" OR MINGW)
set(MAG160C_HAS_THREADS 1)
else()
set(MAG160C_HAS_THREADS 0)
endif()
add_library(mag160c_c STATIC
src/mag160c_error.c
src/mag160c_frame.c
src/mag160c_temp.c
src/mag160c_display.c
src/mag160c_tcm.c
src/mag160c_ir.c
)
target_include_directories(mag160c_c
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
)
target_compile_definitions(mag160c_c PUBLIC
MAG160C_HAS_LIBUSB=${MAG160C_HAS_LIBUSB}
MAG160C_HAS_THREADS=${MAG160C_HAS_THREADS}
)
if(LIBUSB_FOUND)
target_include_directories(mag160c_c PRIVATE ${LIBUSB_INCLUDE_DIRS})
target_link_libraries(mag160c_c PRIVATE ${LIBUSB_LIBRARIES})
target_compile_options(mag160c_c PRIVATE ${LIBUSB_CFLAGS_OTHER})
if(DEFINED MAG160C_LIBUSB_DLL AND TARGET mag160c-cli)
add_custom_command(TARGET mag160c-cli POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${MAG160C_LIBUSB_DLL}" "$<TARGET_FILE_DIR:mag160c-cli>")
endif()
endif()
if(MINGW)
target_link_libraries(mag160c_c PUBLIC pthread)
endif()
if(MAG160C_BUILD_CLI)
add_executable(mag160c-cli tools/mag160c_cli.c)
target_link_libraries(mag160c-cli PRIVATE mag160c_c)
endif()
if(MAG160C_BUILD_TESTS)
enable_testing()
foreach(t test_frame test_temp test_display test_tcm test_api)
add_executable(${t} tests/${t}.c)
target_link_libraries(${t} PRIVATE mag160c_c)
add_test(NAME ${t} COMMAND ${t})
endforeach()
endif()