genode/repos/ports/run/noux_tool_chain_auto.run
Norman Feske bf62d6b896 Move timer from os to base repository
Since the timer and timeout handling is part of the base library (the
dynamic linker), it belongs to the base repository.

Besides moving the timer and its related infrastructure (alarm, timeout
libs, tests) to the base repository, this patch also moves the timer
from the 'drivers' subdirectory directly to 'src' and disamibuates the
timer's build locations for the various kernels. Otherwise the different
timer implementations could interfere with each other when using one
build directory with multiple kernels.

Note that this patch changes the include paths for the former os/timer,
os/alarm.h, os/duration.h, and os/timed_semaphore.h to base/.

Issue #3101
2019-01-14 12:33:57 +01:00

293 lines
6.6 KiB
Tcl

#
# Configuration variables for the platform-specific run scripts:
# $platform - name of the platform passed to the 'create_builddir' script
#
set verbose_mode "no"
#
# The Linux version of Noux lacks the support for the fork system call. Hence,
# the run script is expected to fail.
#
if {[have_spec linux]} {
puts "Linux is unsupported."
exit 0
}
if {[get_cmd_switch --autopilot] && [have_include "power_on/qemu"]} {
puts "\nRunning tool-chain auto test in autopilot on Qemu is not recommended."
exit 0
}
if {[have_spec pistachio] || [have_spec sel4]} {
puts "Platform is unsupported."
exit 0
}
set use_usb_input [expr ![have_spec ps2] && ![have_spec sdl] && [have_spec usb]]
create_boot_directory
set build_components {
core init timer noux lib/libc_noux
server/log_terminal server/ram_fs
test/libports/ncurses
}
#
# Disable syntax check for config file
#
# The syntax check fails because the content of the '.bash_profile' is
# specified using an '<inline>' node but it is no valid XML. I.e., xmllint
# complains about the sequence '&&'.
#
proc check_xml_with_schema {xml_file} { }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
lappend_if $use_usb_input build_components drivers/usb
set cc_march ""
set tool_chain_timeout 600
if {[have_spec arm]} {
set binutils "binutils_arm"
set gcc "gcc_arm"
set tool_prefix "genode-arm-"
set noux_boot_timeout 350
if {[have_spec panda]} {
set platform "panda"
}
if {[have_spec arndale]} {
set platform "arndale"
}
if {[have_spec pbxa9]} { set platform "pbxa9" }
if {![info exists platform]} {
puts "\n Run script is not supported on this platform. \n"
exit 0
}
}
if {[have_spec x86]} {
set binutils "binutils_x86"
set gcc "gcc_x86"
set tool_prefix "genode-x86-"
set noux_boot_timeout 100
set platform "x86_64"
}
#
# Build Noux packages only once
#
set noux_pkgs "bash coreutils vim grep sed findutils make which $binutils $gcc tclsh"
foreach pkg $noux_pkgs {
lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg }
build $build_components
# write default vimrc file
set vimrc_fd [open "bin/vimrc" w]
puts $vimrc_fd {
set noloadplugins
set hls
set nocompatible
set laststatus=2
set noswapfile
set viminfo=}
close $vimrc_fd
# write default .bash_profile file
set bash_profile_fd [open bin/bash_profile w]
puts $bash_profile_fd {
cp /bin/make /usr/bin/
cp /bin/echo /usr/bin/
cp /bin/mkdir /usr/bin/
cp /bin/tclsh /usr/bin/
echo 'creating build directory...'
mkdir -p "/home/build"
cp -r /genode/depot /home/build
}
puts $bash_profile_fd "./genode/tool/depot/create DEPOT_DIR=/home/build/depot \
test/bin/$platform/zlib CROSS_DEV_PREFIX=$tool_prefix && exit 234"
close $bash_profile_fd
exec mkdir -p [depot_dir]/test
exec $genode_dir/tool/depot/create DEPOT_DIR=[depot_dir] test/src/zlib
exec tar cvf bin/genode.tar -C $genode_dir tool repos/base \
repos/libports/recipes/src/zlib \
repos/libports/recipes/api
exec tar rvf bin/genode.tar -C [depot_dir]/.. [file tail [depot_dir]]/test
exec rm -rf [depot_dir]/test
append config {
<config verbose="yes">
<parent-provides>
<service name="ROM"/>
<service name="LOG"/>
<service name="RM"/>
<service name="CPU"/>
<service name="PD"/>
<service name="IRQ"/>
<service name="IO_PORT"/>
<service name="IO_MEM"/>
</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="log_terminal">
<resource name="RAM" quantum="2M"/>
<provides><service name="Terminal"/></provides>
<config/>
</start>
<start name="ram_fs" caps="200">
<resource name="RAM" quantum="124M"/>
<provides><service name="File_system"/></provides>
<config>
<content>
<dir name="home">
<dir name="user">
<rom name="bash_profile" as=".bash_profile"/>
</dir>
</dir>
<dir name="tmp" />
<dir name="usr">
<dir name="bin" />
</dir>
</content>
<!-- constrain sessions according to their labels -->
<policy label="noux -> root" root="/" />
<policy label="noux -> home" root="/home/user" writeable="yes" />
<policy label="noux -> tmp" root="/tmp" writeable="yes" />
<policy label="noux -> usr" root="/usr" writeable="yes" />
</config>
</start>
}
append config {
<start name="noux" caps="2000">
<resource name="RAM" quantum="1G" />
}
if {![info exists verbose_mode]} {set verbose_mode "yes"}
append config " <config verbose=\"$verbose_mode\">"
append config {
<fstab>
}
foreach pkg $noux_pkgs {
append config " <tar name=\"$pkg.tar\" />" }
append config {
<dir name="genode">
<tar name="genode.tar" />
</dir>
<dir name="bin">
} append config "
<symlink name=\"nm\" target=\"${tool_prefix}nm\"/>
" append config {
<symlink name="sh" target="bash"/>
</dir>
<dir name="share"> <dir name="vim"> <rom name="vimrc"/> </dir> </dir>
<dir name="dev">
<null />
</dir>
<dir name="home">
<fs label="home" />
</dir>
<dir name="tmp">
<fs label="tmp" />
</dir>
<dir name="usr">
<fs label="usr" />
</dir>
</fstab>
<start name="/bin/bash">
<env name="TERM" value="screen" />
<env name="HOME" value="/home" />
<env name="PATH" value="/bin" />
<arg value="--login" />
</start>
</config>
</start>
</config>
}
install_config $config
#
# Boot modules
#
# generic modules
set boot_modules {
core init timer ld.lib.so noux log_terminal ram_fs
libc.lib.so vfs.lib.so libm.lib.so libc_noux.lib.so ncurses.lib.so stdcxx.lib.so
pcre.lib.so posix.lib.so vimrc bash_profile
}
append boot_modules { gmp.lib.so mpfr.lib.so mpc.lib.so }
foreach pkg $noux_pkgs {
lappend boot_modules "$pkg.tar" }
append boot_modules { genode.tar }
build_boot_image $boot_modules
append qemu_args " -nographic -m 768 "
# wait until Noux started
run_genode_until {\[init -\> noux\].*--- noux started ---} $noux_boot_timeout
set serial_id [output_spawn_id]
# start the measurement
set time_start [ clock seconds ]
run_genode_until {child /bin/bash exited with exit value 234} $tool_chain_timeout $serial_id
set time_end [ clock seconds ]
# cleanup created tars
exec rm -f bin/genode.tar
# print infos about run
set git_info "unknown"
catch { set git_info [exec git --git-dir=$genode_dir/.git describe ] }
puts "Testing \" [ clock format $time_start -format "%Y-%m-%d %H:%M:%S"], commit: ($git_info)\" in : "
puts "Testing \"all\" in printf.wv:"
puts "! PERF: runtime [expr $time_end - $time_start ] seconds ok"
puts "Test succeeded"
# vi: set ft=tcl :