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}" "$") 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()