package embox.mem

@DefaultImpl(heap_bm)
abstract module heap_api {
	option number heap_size = 524288
	option number align = 4
	depends embox.kernel.task.resource.task_heap
}

@DefaultImpl(heap_afterfree_default)
abstract module heap_afterfree { }

@DefaultImpl(sysmalloc_task_based)
abstract module sysmalloc_api { }

module boundary_markers {
	source "heap_bm.c"

	depends heap_afterfree
}

module mspace_malloc {
	option string log_level="LOG_ERR"
	/* Each task tries to allocate as much memory as possible */
	option boolean task_is_greed = false

	@IncludeExport(path="mem/heap")
	source "mspace_malloc.h"

	source "mspace_malloc.c"

	depends boundary_markers

	depends page_api
	depends embox.mem.heap_place
}

module heap_bm extends heap_api {
	source "malloc.c"

	depends mspace_malloc

	depends embox.kernel.task.resource.task_heap
	depends embox.kernel.task.kernel_task
	depends embox.kernel.task.api
}

module heap_simple extends heap_api {
	option string log_level="LOG_ERR"
	source "heap_simple.c"

	depends embox.mem.heap_place
	@NoRuntime depends embox.lib.libds
}

module sysmalloc_task_based extends sysmalloc_api {
	source "sysmalloc.c"

	depends mspace_malloc

	depends embox.kernel.task.resource.task_heap
	depends embox.kernel.task.kernel_task
}

@DefaultImpl(static_heap)
abstract module heap_place {

}

module static_heap extends heap_place {
	option number heap_size = 1048576
	option string section = ".bss..reserve"
	option string start_symbol = "_heap_start"
	option string end_symbol = "_heap_end"
	option string allocator_name = "__heap_pgallocator"

	source "heap.lds.S"
	source "static_heap.c"

	depends embox.mem.bitmask
}

module static_heap2 {
	option number heap_size = 1048576
	option string section = ".bss..reserve"
	option string start_symbol = "_heap_start2"
	option string end_symbol = "_heap_end2"
	option string allocator_name = "__heap_pgallocator2"

	source "heap2.lds.S"
	source "static_heap2.c"

	depends embox.mem.bitmask
}

module heap_afterfree_default extends heap_afterfree {
	source "heap_afterfree.c"
}

module heap_afterfree_random extends heap_afterfree {
	source "heap_afterfree_random.c"
}
