#set(SYSPROGS_CPPUTEST_DIRECTORY ${LOCALAPPDATA}/${PLATFORM}/TestFrameworks/com.sysprogs.unittest.CppUTest)
set(SYSPROGS_CPPUTEST_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})


if(NOT DEFINED BSP_CONFIGURATION_com.sysprogs.testsettings.timeout)
    set(BSP_CONFIGURATION_com.sysprogs.testsettings.timeout "1800")
endif()

add_library(SysprogsCppUTest STATIC)
target_sources(SysprogsCppUTest PRIVATE
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/CommandLineArguments.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/CommandLineTestRunner.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/JUnitTestOutput.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/MemoryLeakDetector.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/MemoryLeakWarningPlugin.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/SimpleMutex.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/SimpleString.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/TeamCityTestOutput.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/TestFailure.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/TestFilter.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/TestHarness_c.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/TestMemoryAllocator.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/TestOutput.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/TestPlugin.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/TestRegistry.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/TestResult.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/TestTestingFixture.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/src/CppUTest/Utest.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/Platforms/SysprogsTestHooks.cpp"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/CommandLineArguments.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/CommandLineTestRunner.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/CppUTestConfig.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/CppUTestGeneratedConfig.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/JUnitTestOutput.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/MemoryLeakDetector.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/MemoryLeakDetectorMallocMacros.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/MemoryLeakDetectorNewMacros.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/MemoryLeakWarningPlugin.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/PlatformSpecificFunctions.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/PlatformSpecificFunctions_c.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/SimpleMutex.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/SimpleString.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/StandardCLibrary.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/TeamCityTestOutput.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/TestFailure.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/TestFilter.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/TestHarness.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/TestHarness_c.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/TestMemoryAllocator.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/TestOutput.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/TestPlugin.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/TestRegistry.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/TestResult.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/TestTestingFixture.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/Utest.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include/CppUTest/UtestMacros.h"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/Platforms/SysprogsTestHooks.h"
)
target_sources(SysprogsCppUTest PRIVATE
    "${SYSPROGS_CPPUTEST_DIRECTORY}/Platforms/Embedded/UtestPlatformEmbedded.cpp"
)
target_include_directories(SysprogsCppUTest SYSTEM PUBLIC
    "${SYSPROGS_CPPUTEST_DIRECTORY}/include"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/Platforms"
    "${SYSPROGS_CPPUTEST_DIRECTORY}/Platforms/Embedded"
)
target_compile_definitions(SysprogsCppUTest PUBLIC
    CPPUTEST_STD_CPP_LIB_DISABLED # This appears to be to turn off exception support
    SYSPROGS_TEST_PLATFORM_EMBEDDED
    CPPUTEST_HAVE_LONG_LONG_INT
    # TODO: some definition here? ${BSP_CONFIGURATION_com.sysprogs.testsettings.timeout}
)
# Turn off warnings we don't want to handle
target_compile_options(SysprogsCppUTest PRIVATE
    -Wno-old-style-cast
    -Wno-zero-as-null-pointer-constant
    -Wno-cast-qual
    -Wno-unused-variable
    -Wno-unused-parameter
    -Wno-sign-conversion
    -Wno-missing-declarations
    -Wno-useless-cast
    -Wno-undef
    -Wno-cast-align
    -Wno-shadow
    -Wno-null-dereference # It breaks my heart
)
target_link_libraries(SysprogsCppUTest PRIVATE EFPTesting)
