package embox.kernel.sched

module sched {
	option string log_level="LOG_NONE"
	source "sched_start.c"
	depends idle
	depends boot

	source "sched.c"
	depends embox.kernel.addr_space

	source "sched_signal.c"

	depends schedee

	depends embox.kernel.critical
	depends embox.profiler.trace

	depends wait_queue

	depends embox.kernel.timer.strategy.api
	depends embox.kernel.sched.current.api
}

module schedee {
	/* source "include/kernel/sched/schedee.h" */

	depends strategy.runq.api
	depends priority.priority
	depends affinity.affinity
}

@DefaultImpl(sched_ticker_preempt)
abstract module sched_ticker { }

module sched_ticker_preempt extends sched_ticker {
	source "sched_ticker.c"
	option number tick_interval = 100
	depends embox.kernel.timer.sys_timer /* for timeslices support */
}

module sched_ticker_stub extends sched_ticker {
	source "sched_ticker_stub.c"
}

module wait_queue {
	source "waitq.c"

	@NoRuntime depends embox.lib.libds
	depends waitq_protect_link
}

@DefaultImpl(waitq_protect_link_stub)
abstract module waitq_protect_link { }

module waitq_protect_link_stub extends waitq_protect_link {
	source "waitq_protect_link_stub.c"
	source "waitq_protect_link_stub.h"
}

module waitq_protect_link_store extends waitq_protect_link {
	source "waitq_protect_link_store.c"
	source "waitq_protect_link_store.h"
}

@DefaultImpl(idle_light)
abstract module idle { }

module idle_thread extends idle {
	option string log_level="LOG_NONE"
	source "idle_thread.c"

	depends embox.kernel.thread.core
	depends embox.kernel.task.kernel_task
}

module idle_light extends idle {
	source "idle_light.c"

	@NoRuntime depends embox.kernel.lthread.lthread
}

@DefaultImpl(boot_light)
abstract module boot { }

module boot_thread extends boot {
	option string log_level="LOG_NONE"
	source "boot_thread.c"

	depends embox.kernel.thread.core
	depends embox.kernel.task.kernel_task
}

module boot_light extends boot {
	source "boot_light.c"
}
