#
# Build
#
if {![have_spec linux]} {
	puts "Runs on Linux only"
	exit 0
}

set build_components {
	core init drivers/timer drivers/framebuffer/sdl
	server/dynamic_rom server/nitpicker app/scout server/nit_fader
	app/pointer
}

build $build_components

create_boot_directory

#
# Generate config
#

append config {
<config>
	<parent-provides>
		<service name="ROM"/>
		<service name="RAM"/>
		<service name="RM"/>
		<service name="LOG"/>
		<service name="IRQ"/>
		<service name="IO_MEM"/>
		<service name="IO_PORT"/>
		<service name="CAP"/>
		<service name="SIGNAL"/>
	</parent-provides>
	<default-route>
		<any-service> <parent/> <any-child/> </any-service>
	</default-route>
	<start name="fb_sdl">
		<resource name="RAM" quantum="4M"/>
		<provides>
			<service name="Input"/>
			<service name="Framebuffer"/>
		</provides>
	</start>
	<start name="timer">
		<resource name="RAM" quantum="1M"/>
		<provides><service name="Timer"/></provides>
	</start>
	<start name="nitpicker">
		<resource name="RAM" quantum="1M"/>
		<provides><service name="Nitpicker"/></provides>
		<config>
			<domain name="pointer" layer="1" xray="no" origin="pointer" />
			<domain name="" layer="3" />

			<policy label="pointer"    domain="pointer"/>
			<policy label="" domain=""/>

			<global-key name="KEY_SCROLLLOCK" operation="xray" />
			<global-key name="KEY_SYSRQ"      operation="kill" />
			<global-key name="KEY_PRINT"      operation="kill" />
			<global-key name="KEY_F11"        operation="kill" />
			<global-key name="KEY_F12"        operation="xray" />
		</config>
	</start>
	<start name="pointer">
		<resource name="RAM" quantum="1M"/>
		<route>
			<service name="Nitpicker"> <child name="nitpicker" /> </service>
			<any-service> <parent/> <any-child/> </any-service>
		</route>
	</start>
	<start name="dynamic_rom">
		<resource name="RAM" quantum="4M"/>
		<provides><service name="ROM"/></provides>
		<config verbose="yes">
			<rom name="nit_fader.config">
				<inline description="initial state">
					<config />
				</inline>
				<sleep milliseconds="500" />
				<inline description="make visible">
					<config alpha="255" />
				</inline>
				<sleep milliseconds="3000" />
				<inline description="reduce alpha">
					<config alpha="120" />
				</inline>
				<sleep milliseconds="3000" />
				<inline description="make invisible">
					<config alpha="0" />
				</inline>
				<sleep milliseconds="2000" />
				<empty />
			</rom>
		</config>
	</start>
	<start name="nit_fader">
		<resource name="RAM" quantum="5M"/>
		<provides><service name="Nitpicker"/></provides>
		<configfile name="nit_fader.config" />
		<route>
			<service name="ROM"> <if-arg key="label" value="nit_fader.config"/>
				<child name="dynamic_rom" />
			</service>
			<service name="Nitpicker"> <child name="nitpicker" /> </service>
			<any-service> <parent/> <any-child/> </any-service>
		</route>
	</start>
	<start name="scout">
		<resource name="RAM" quantum="8M"/>
		<route>
			<service name="Nitpicker"> <child name="nit_fader" /> </service>
			<any-service> <parent/> <any-child/> </any-service>
		</route>
	</start>
	<start name="scout2">
		<binary name="scout" />
		<resource name="RAM" quantum="8M"/>
		<route>
			<service name="Nitpicker"> <child name="nitpicker" /> </service>
			<any-service> <parent/> <any-child/> </any-service>
		</route>
	</start>
</config>}

install_config $config

#
# Boot modules
#

# generic modules
set boot_modules {
	core init timer dynamic_rom fb_sdl nitpicker nit_fader scout pointer
}

build_boot_image $boot_modules

run_genode_until forever
