idf_build_get_property(target IDF_TARGET)

if(${target} STREQUAL "linux")
    return() # This component is not supported by the POSIX/Linux simulator
endif()

set(srcs "")
set(includes "")

if(CONFIG_ULP_COPROC_ENABLED OR CONFIG_IDF_DOC_BUILD)
    list(APPEND includes
        ulp_common/include)
endif()

if(CONFIG_ULP_COPROC_TYPE_FSM OR (CONFIG_IDF_DOC_BUILD AND CONFIG_SOC_ULP_FSM_SUPPORTED))
    list(APPEND includes
        ulp_fsm/include
        ulp_fsm/include/${target})
endif()

if(CONFIG_ULP_COPROC_TYPE_RISCV OR CONFIG_IDF_DOC_BUILD)
    list(APPEND includes
        ulp_riscv/include
        ulp_riscv/shared/include)
endif()

if(CONFIG_ULP_COPROC_TYPE_LP_CORE OR CONFIG_IDF_DOC_BUILD)
    list(APPEND includes
         lp_core/include
         lp_core/shared/include)
endif()

if(CONFIG_ULP_COPROC_TYPE_FSM OR CONFIG_ULP_COPROC_TYPE_RISCV)

    list(APPEND srcs
        "ulp_common/ulp_common.c"
        "ulp_common/ulp_adc.c")

    if(CONFIG_ULP_COPROC_TYPE_FSM)
        list(APPEND srcs
            "ulp_fsm/ulp.c"
            "ulp_fsm/ulp_macro.c")
    endif()

    if(CONFIG_ULP_COPROC_TYPE_RISCV)
        list(APPEND srcs
            "ulp_riscv/ulp_riscv.c"
            "ulp_riscv/ulp_riscv_lock.c"
            "ulp_riscv/ulp_riscv_i2c.c")
    endif()
endif()

if(CONFIG_ULP_COPROC_TYPE_LP_CORE)
    list(APPEND srcs
        "lp_core/lp_core.c"
        "lp_core/shared/ulp_lp_core_memory_shared.c"
        "lp_core/shared/ulp_lp_core_critical_section_shared.c")

    if(CONFIG_SOC_ULP_LP_UART_SUPPORTED)
        list(APPEND srcs
        "lp_core/lp_core_uart.c"
        "lp_core/shared/ulp_lp_core_lp_uart_shared.c")
    endif()

    if(CONFIG_SOC_LP_CORE_SUPPORT_I2C)
        list(APPEND srcs "lp_core/lp_core_i2c.c")
    endif()

    if(CONFIG_SOC_RTC_TIMER_V2 OR CONFIG_SOC_RTC_TIMER_V3)
        list(APPEND srcs "lp_core/shared/ulp_lp_core_lp_timer_shared.c")
    endif()

    if(CONFIG_SOC_LP_SPI_SUPPORTED)
        list(APPEND srcs "lp_core/lp_core_spi.c")
    endif()

    if(CONFIG_SOC_LP_CORE_SUPPORT_ETM)
        list(APPEND srcs "lp_core/lp_core_etm.c")
    endif()

    if(CONFIG_SOC_LP_ADC_SUPPORTED)
        list(APPEND srcs "lp_core/shared/ulp_lp_core_lp_adc_shared.c")
    endif()

    if(CONFIG_SOC_LP_VAD_SUPPORTED)
        list(APPEND srcs "lp_core/shared/ulp_lp_core_lp_vad_shared.c")
    endif()

    list(APPEND srcs "lp_core/lp_core_mailbox.c")
    if(CONFIG_SOC_LP_MAILBOX_SUPPORTED)
        list(APPEND srcs "lp_core/lp_core_mailbox_impl_hw.c")
    else()
        list(APPEND srcs "lp_core/lp_core_mailbox_impl_sw.c")
    endif()

endif()

idf_component_register(
    SRCS ${srcs}
    INCLUDE_DIRS ${includes}
    REQUIRES esp_adc esp_driver_gpio esp_driver_uart esp_driver_i2s
             esp_hal_i2c esp_hal_touch_sens esp_hal_gpspi esp_hal_pmu esp_hal_rtc_timer esp_hal_clock
    PRIV_REQUIRES bootloader_support esp_mm
)

idf_define_esp_err_codes(HEADERS ulp_fsm/include/ulp_fsm_common.h)
