package embox.lib.cxx

module ConstructorsInvocator {
	source "cxx_invoke_constructors.c"
	source "cxx_invoke_constructors.h"
}

abstract module ConstructionPolicy {
	source "cxx_app_startup_termination.h"
}

module ConstructionGlobal extends ConstructionPolicy {
	depends DestructionPolicy
	depends ConstructorsInvocator
	source "cxx_constructors_global.c"
}

module ConstructionSingleApp extends ConstructionPolicy {
	depends DestructionPolicy
	depends ConstructorsInvocator
	source "cxx_constructors_singleapp.c"
}

module ConstructionNone extends ConstructionPolicy {
	source "cxx_constructors_none.c"
}

@DefaultImpl(DestructionStatic)
abstract module DestructionPolicy {
	source "cxx_invoke_destructors.h"
}

module DestructionStatic extends DestructionPolicy {
	option number table_size = 50
	source "cxx_destruction_static.c"
}
