idf_build_get_property(target IDF_TARGET) # On Linux, we only support a few features, hence this simple component registration if(${target} STREQUAL "linux") idf_component_register(SRCS "heap_caps_linux.c" INCLUDE_DIRS "include") return() endif() set(srcs "heap_caps_base.c" "heap_caps.c" "heap_caps_init.c" "multi_heap.c") # the root dir of TLSF submodule contains headers with static inline # functions used in the esp_rom component for TLSF patches. Therefore, # the tlsf/ dir must be included in the list of public includes. set(includes "include" "tlsf") # The TLSF "public" includes should only be used # inside the heap component and are therefore added # to the list of the private includes from the heap # component perspective set(priv_includes "tlsf/include") if(NOT CONFIG_HEAP_TLSF_USE_ROM_IMPL) list(APPEND srcs "tlsf/tlsf.c") endif() if(NOT CONFIG_HEAP_POISONING_DISABLED) list(APPEND srcs "multi_heap_poisoning.c") endif() if(CONFIG_HEAP_TASK_TRACKING) list(APPEND srcs "heap_task_info.c") endif() if(CONFIG_HEAP_TRACING_STANDALONE) list(APPEND srcs "heap_trace_standalone.c") set_source_files_properties(heap_trace_standalone.c PROPERTIES COMPILE_FLAGS -Wno-frame-address) endif() # Add SoC memory layout to the sources if(NOT BOOTLOADER_BUILD) list(APPEND srcs "port/memory_layout_utils.c") list(APPEND srcs "port/${target}/memory_layout.c") endif() idf_component_register(SRCS "${srcs}" INCLUDE_DIRS ${includes} PRIV_INCLUDE_DIRS ${priv_includes} LDFRAGMENTS linker.lf PRIV_REQUIRES soc) if(CONFIG_HEAP_TRACING) set(WRAP_FUNCTIONS heap_caps_realloc_base heap_caps_malloc_base heap_caps_aligned_alloc_base heap_caps_free) foreach(wrap ${WRAP_FUNCTIONS}) target_link_libraries(${COMPONENT_LIB} INTERFACE "-Wl,--wrap=${wrap}") endforeach() endif() if(NOT CMAKE_BUILD_EARLY_EXPANSION) idf_build_get_property(build_components BUILD_COMPONENTS) if(freertos IN_LIST build_components) target_compile_options(${COMPONENT_TARGET} PRIVATE "-DMULTI_HEAP_FREERTOS") endif() endif()