88 lines
2.5 KiB
CMake
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()
|