if { ![have_spec foc] && ![have_spec hw] && ![have_spec nova] &&
     ![have_spec okl4] && ![have_spec sel4] } {
	puts "Run script is not supported on this platform"
	exit 0
}

set build_components {
	core
	init
	drivers/timer
	server/cpu_sampler
	test/cpu_sampler
}

if {[have_spec foc] || [have_spec nova]} {
	lappend build_components lib/cpu_sampler_platform-$::env(KERNEL)
} else {
	lappend build_components lib/cpu_sampler_platform-generic
}

build $build_components

create_boot_directory

install_config {
	<config>
		<parent-provides>
			<service name="CPU"/>
			<service name="IO_PORT"/>
			<service name="IO_MEM"/>
			<service name="IRQ"/>
			<service name="LOG"/>
			<service name="PD"/>
			<service name="ROM"/>
		</parent-provides>
		<default-route>
			<any-service> <parent/> <any-child/> </any-service>
		</default-route>
		<default caps="100"/>
		<start name="timer">
			<resource name="RAM" quantum="1M"/>
			<provides>
				<service name="Timer"/>
			</provides>
		</start>
		<start name="cpu_sampler">
			<resource name="RAM" quantum="4M"/>
			<provides>
				<service name="CPU"/>
			</provides>
			<config sample_interval_ms="100" sample_duration_s="1">
				<policy label="test-cpu_sampler -> ep" />
			</config>
		</start>
		<start name="test-cpu_sampler">
			<resource name="RAM" quantum="1M"/>
			<config ld_verbose="yes"/>
			<route>
				<service name="CPU"> <child name="cpu_sampler"/> </service>
				<any-service> <parent/> </any-service>
			</route>
		</start>
	</config>
}

#
# Boot modules
#

# evaluated by the run tool
proc binary_name_cpu_sampler_platform_lib_so { } {
	if {[have_spec foc] || [have_spec nova]} {
		return "cpu_sampler_platform-$::env(KERNEL).lib.so"
	} else {
		return "cpu_sampler_platform-generic.lib.so"
	}
}

build_boot_image {
	core ld.lib.so init timer
	cpu_sampler cpu_sampler_platform.lib.so
	test-cpu_sampler
}

append qemu_args "-nographic "

set match_string "Test started. func: 0x(\[0-9a-f\]+).*\n"

run_genode_until "$match_string" 20

regexp $match_string $output all func

run_genode_until "\\\[init -> cpu_sampler -> samples -> test-cpu_sampler -> ep\\\.1] \[0\]*$func" 2 [output_spawn_id]
