set(mchp_dir "${AFR_VENDORS_DIR}/microchip") set(ecc608a_dir "${mchp_dir}/secure_elements") set(ECC608_IN_USE TRUE) set(afr_ports_dir "${CMAKE_CURRENT_LIST_DIR}/ports") set(board_demos_dir "${CMAKE_CURRENT_LIST_DIR}/aws_demos") set(board_tests_dir "${CMAKE_CURRENT_LIST_DIR}/aws_tests") if(AFR_IS_TESTING) set(board_dir "${board_tests_dir}") else() set(board_dir "${board_demos_dir}") endif() # ------------------------------------------------------------------------------------------------- # FreeRTOS Console metadata # ------------------------------------------------------------------------------------------------- if("${AFR_BOARD_NAME}" STREQUAL "ecc608a_plus_winsim") include("${CMAKE_CURRENT_LIST_DIR}/ecc608a_plus_winsim.cmake") endif() # ------------------------------------------------------------------------------------------------- # Compiler settings # ------------------------------------------------------------------------------------------------- afr_mcu_port(compiler) target_compile_definitions( AFR::compiler::mcu_port INTERFACE __free_rtos__ _CONSOLE _CRT_SECURE_NO_WARNINGS ) target_compile_options( AFR::compiler::mcu_port INTERFACE "/MP" "/wd4210" "/wd4127" "/wd4244" "/wd4310" ) # ------------------------------------------------------------------------------------------------- # FreeRTOS portable layers # ------------------------------------------------------------------------------------------------- # Normally the portable layer for kernel should be vendor's driver code. afr_mcu_port(kernel) target_sources( AFR::kernel::mcu_port INTERFACE "${AFR_KERNEL_DIR}/portable/MSVC-MingW/port.c" "${AFR_KERNEL_DIR}/portable/MSVC-MingW/portmacro.h" "${AFR_KERNEL_DIR}/portable/MemMang/heap_4.c" ) target_include_directories( AFR::kernel::mcu_port INTERFACE "${AFR_KERNEL_DIR}/portable/MSVC-MingW" "${board_dir}/config_files" "${board_dir}/application_code" "${ecc608a_dir}/lib" "${ecc608a_dir}/third_party/hidapi/hidapi" # Need aws_clientcredential.h "$<IF:${AFR_IS_TESTING},${AFR_TESTS_DIR},${AFR_DEMOS_DIR}>/include" ) target_link_libraries( AFR::kernel::mcu_port INTERFACE 3rdparty::tracealyzer_recorder ) # POSIX afr_mcu_port(posix) target_sources( AFR::posix::mcu_port INTERFACE "${afr_ports_dir}/posix/FreeRTOS_POSIX_portable.h" ) target_include_directories( AFR::posix::mcu_port INTERFACE "${afr_ports_dir}/posix" ) target_link_libraries( AFR::posix::mcu_port INTERFACE AFR::freertos_plus_posix ) # PKCS11 afr_mcu_port(pkcs11_implementation DEPENDS AFR::pkcs11_ecc608a) set( ecc608a_hid_src "${ecc608a_dir}/third_party/hidapi/windows/hid.c" ) set( ecc608a_hal_src "${ecc608a_dir}/lib/hal/atca_hal.c" "${ecc608a_dir}/lib/hal/hal_all_platforms_kit_hidapi.c" "${ecc608a_dir}/lib/hal/hal_freertos.c" "${ecc608a_dir}/lib/hal/hal_windows.c" "${ecc608a_dir}/lib/hal/kit_protocol.c" "${ecc608a_dir}/lib/hal/atca_hal.h" "${ecc608a_dir}/lib/hal/hal_all_platforms_kit_hidapi.h" "${ecc608a_dir}/lib/hal/kit_phy.h" "${ecc608a_dir}/lib/hal/kit_protocol.h" ) target_sources( AFR::pkcs11_implementation::mcu_port INTERFACE "${ecc608a_hal_src}" "${ecc608a_hid_src}" ) # FreeRTOS Plus TCP afr_mcu_port(freertos_plus_tcp) target_sources( AFR::freertos_plus_tcp::mcu_port INTERFACE "${AFR_MODULES_FREERTOS_PLUS_DIR}/standard/freertos_plus_tcp/portable/BufferManagement/BufferAllocation_2.c" "${AFR_MODULES_FREERTOS_PLUS_DIR}/standard/freertos_plus_tcp/portable/NetworkInterface/WinPCap/NetworkInterface.c" # Header files added to the target so that these are available in code downloaded from the FreeRTOS console. "${AFR_MODULES_FREERTOS_PLUS_DIR}/standard/freertos_plus_tcp/portable/Compiler/MSVC/pack_struct_end.h" "${AFR_MODULES_FREERTOS_PLUS_DIR}/standard/freertos_plus_tcp/portable/Compiler/MSVC/pack_struct_start.h" ) target_include_directories( AFR::freertos_plus_tcp::mcu_port INTERFACE "${AFR_MODULES_FREERTOS_PLUS_DIR}/standard/freertos_plus_tcp/portable/Compiler/MSVC" ) target_link_libraries( AFR::freertos_plus_tcp::mcu_port INTERFACE 3rdparty::win_pcap ) # Secure sockets afr_mcu_port(secure_sockets) target_link_libraries( AFR::secure_sockets::mcu_port INTERFACE AFR::secure_sockets_freertos_plus_tcp ) # Over-the-air Updates afr_mcu_port(ota) target_sources( AFR::ota::mcu_port INTERFACE "${afr_ports_dir}/ota_pal_for_aws/ota_pal.c" "${afr_ports_dir}/ota_pal_for_aws/ota_pal.h" ) target_include_directories( AFR::ota::mcu_port INTERFACE "${afr_ports_dir}/ota_pal_for_aws" ) target_link_libraries( AFR::ota::mcu_port INTERFACE AFR::crypto AFR::pkcs11 AFR::ota ) if(AFR_ENABLE_TESTS) target_include_directories( AFR::ota::mcu_port INTERFACE "${PROJECT_SOURCE_DIR}/tests/integration_test/ota_pal" ) endif() # ------------------------------------------------------------------------------------------------- # FreeRTOS demos and tests # ------------------------------------------------------------------------------------------------- # TODO, remove network manager src. afr_glob_src(network_manager_src DIRECTORY "${AFR_DEMOS_DIR}/network_manager") if(AFR_IS_TESTING) set(exe_target aws_tests) else() set(exe_target aws_demos) set(extra_src ${network_manager_src}) endif() add_executable( ${exe_target} "${board_dir}/application_code/main.c" "${board_demos_dir}/application_code/aws_demo_logging.c" "${board_demos_dir}/application_code/aws_entropy_hardware_poll.c" "${board_demos_dir}/application_code/aws_run-time-stats-utils.c" ${extra_src} ) target_include_directories( ${exe_target} PRIVATE "${board_demos_dir}/application_code" ) target_link_libraries( ${exe_target} PRIVATE AFR::freertos_plus_tcp AFR::utils AFR::dev_mode_key_provisioning setupapi.lib )