mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-24 07:46:42 +00:00
bf62d6b896
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
293 lines
6.6 KiB
Tcl
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 :
|