cmake_minimum_required (VERSION 3.15)
project(appnotes C)


# Macro to configure appnote executables with proper RPATH for macOS
macro(configure_appnote_target target)
    set_target_properties(${target} PROPERTIES FOLDER "Application Notes")
    if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
        set_target_properties(${target} PROPERTIES
            INSTALL_RPATH "@loader_path"
            BUILD_WITH_INSTALL_RPATH TRUE)
    endif()
endmacro()


# App Note USB/HID -------------------------------------------------------------
add_executable(appnote_usb_hid usb_hid/appnote_usb_hid.c)
target_link_libraries(appnote_usb_hid baltech_api)
configure_appnote_target(appnote_usb_hid)

add_executable(appnote_usb_hid_enumerate usb_hid/appnote_usb_hid_enumerate.c)
target_link_libraries(appnote_usb_hid_enumerate baltech_api)
configure_appnote_target(appnote_usb_hid_enumerate)


# App Note USB/CDC -------------------------------------------------------------
add_executable(appnote_usb_cdc usb_cdc/appnote_usb_cdc.c)
target_link_libraries(appnote_usb_cdc baltech_api)
configure_appnote_target(appnote_usb_cdc)


# App Note Autoread ------------------------------------------------------------
add_executable(appnote_autoread autoread/appnote_autoread.c)
target_link_libraries(appnote_autoread baltech_api)
configure_appnote_target(appnote_autoread)


# App Note VHL & Autoread ------------------------------------------------------
add_executable(appnote_vhl_autoread vhl_autoread/appnote_vhl_autoread.c)
target_link_libraries(appnote_vhl_autoread baltech_api)
configure_appnote_target(appnote_vhl_autoread)


# App Note Secure Communication ------------------------------------------------
add_executable(appnote_secure_communication secure_communication/appnote_secure_communication.c)
target_link_libraries(appnote_secure_communication baltech_api)
configure_appnote_target(appnote_secure_communication)


#- Appnote Reader Update -------------------------------------------------------
add_executable(appnote_reader_update reader_update/appnote_reader_update.c)
target_link_libraries(appnote_reader_update baltech_api)
configure_appnote_target(appnote_reader_update)


# App Note BrpDriver -----------------------------------------------------------
add_executable(appnote_brpdriver brpdriver/appnote_BrpDriver.c)
target_link_libraries(appnote_brpdriver BrpDriver)
configure_appnote_target(appnote_brpdriver)


# App Note CSharp --------------------------------------------------------------
include(CheckLanguage)
check_language(CSharp)
if(CMAKE_CSharp_COMPILER)
    enable_language(CSharp)
    add_executable(appnote_c_sharp c_sharp/appnote_c_sharp.cs)
    target_link_libraries(appnote_c_sharp brp_lib)
    set_property(TARGET appnote_c_sharp PROPERTY WIN32_EXECUTABLE FALSE)
    configure_appnote_target(appnote_c_sharp)
elseif(DEFINED ENV{CI} AND CMAKE_SYSTEM_NAME MATCHES "Windows")
    message(FATAL_ERROR "C# compiler not found - required for CI builds. Install a C# compiler (e.g., .NET SDK) to enable C# appnote compilation.")
else()
    message(WARNING "C# compiler not found - skipping C# appnote build. Install a C# compiler (e.g., .NET SDK) to enable C# appnote compilation.")
endif()


# App Note MemPool -------------------------------------------------------------
add_executable(appnote_mempool mempool/appnote_mempool.c)
target_link_libraries(appnote_mempool baltech_api)
configure_appnote_target(appnote_mempool)
