package embox.kernel.thread

module thread_none {
	@IncludeExport(path="kernel/thread", target_name="types.h")
	source "thread_none.h"
}

module core {
	option number thread_stack_align=8
	option number thread_stack_size=8192
	option number thread_pool_size=16
	option string log_level="LOG_NONE"

	source "core.c"
	source "thread_switch.c"

	@IncludeExport(path="kernel/thread", target_name="types.h")
	source "thread_types.h"

	depends thread_allocator
	depends sched_wait

	@NoRuntime depends embox.kernel.sched.sched
	@NoRuntime depends embox.kernel.sched.sched_ticker
	@NoRuntime depends embox.kernel.sched.timing.timing
	@NoRuntime depends embox.arch.context

	@NoRuntime depends embox.kernel.sched.boot_thread

	depends stack_api
	depends thread_local
	depends thread_cancel
	depends signal_api

	depends embox.compat.libc.assert

	depends embox.kernel.cpu.common
	depends embox.kernel.sched.current.api

	depends stack_protect
}

module sched_wait {
	source "thread_sched_wait.c"
}

@DefaultImpl(signal_impl)
abstract module signal_api { }

module signal_stub extends signal_api {
	source "signal_stub.c"
	@NoRuntime depends embox.kernel.thread.signal.sigstate_stub
	@NoRuntime depends embox.kernel.thread.signal.siginfoq_stub
	@NoRuntime depends embox.kernel.thread.signal.lock_stub
}

module signal_impl extends signal_api {
	source "signal.c"
	@NoRuntime depends embox.kernel.thread.signal.sigstate
	@NoRuntime depends embox.kernel.thread.signal.siginfoq
	@NoRuntime depends embox.kernel.thread.signal.lock
	depends embox.kernel.task.resource.sig_table
}

@DefaultImpl(fixed_stack)
abstract module stack_api {
}

module stack_none extends stack_api {
	source "stack_none.h"
}

module fixed_stack extends stack_api {
	source "fixed_stack.c"
	source "fixed_stack.h"
}
