Convert SDL to a Nitpicker client library

Fixes #138
This commit is contained in:
Emery Hemingway
2019-02-19 17:20:57 +01:00
committed by Norman Feske
parent 693a1f7f8c
commit a6de6457d2
24 changed files with 192 additions and 912 deletions

View File

@@ -1 +1 @@
b24c400f7a93a67b3b92d819bd6946c8e94a88e9
eb3143d9b96a51dd960e53a4229df48bff1daccd

View File

@@ -2,7 +2,7 @@ LICENSE := MIT
VERSION := git
DOWNLOADS := libxml2.git
URL(libxml2) := git://git.gnome.org/libxml2
URL(libxml2) := https://gitlab.gnome.org/GNOME/libxml2.git
DIR(libxml2) := src/lib/libxml2
REV(libxml2) := v2.9.4

View File

@@ -2,7 +2,6 @@ _/raw/abuse
_/src/abuse
_/src/jpeg
_/src/libc
_/src/nit_fb
_/src/sdl
_/src/sdl_image
_/src/sdl_mixer

View File

@@ -1,23 +1,21 @@
<runtime ram="64M" caps="512" binary="init">
<runtime ram="64M" caps="512" binary="abuse">
<requires>
<audio_out/>
<file_system/>
<nitpicker/>
<timer/>
<rtc/>
</requires>
<content>
<rom label="abuse"/>
<rom label="abuse.tar"/>
<rom label="init"/>
<rom label="jpeg.lib.so"/>
<rom label="ld.lib.so"/>
<rom label="libc.lib.so"/>
<rom label="libm.lib.so"/>
<rom label="libpng.lib.so"/>
<rom label="nit_fb"/>
<rom label="pthread.lib.so"/>
<rom label="sdl_image.lib.so"/>
<rom label="sdl.lib.so"/>
<rom label="sdl_mixer.lib.so"/>
@@ -27,46 +25,17 @@
<rom label="zlib.lib.so"/>
</content>
<config>
<parent-provides>
<service name="CPU"/>
<service name="LOG"/>
<service name="PD"/>
<service name="RM"/>
<service name="ROM"/>
<service name="Nitpicker"/>
<service name="Report"/>
<service name="Timer"/>
<service name="Audio_out"/>
<service name="File_system"/>
</parent-provides>
<default-route>
<any-service> <parent/> <any-child/> </any-service>
</default-route>
<start name="nit_fb" caps="96">
<resource name="RAM" quantum="4M"/>
<provides>
<service name="Framebuffer"/>
<service name="Input"/>
</provides>
<config initial_width="640" initial_height="400"/>
</start>
<start name="abuse" caps="200">
<resource name="RAM" quantum="128M"/>
<config>
<libc stdout="/dev/log" stderr="/dev/log" rtc="/dev/rtc"/>
<vfs>
<tar name="abuse.tar"/>
<fs/>
<dir name="dev">
<log/>
<inline name="rtc">1996-02-29 12:00</inline>
<log/> <rtc/>
</dir>
</vfs>
<arg value="abuse"/>
<arg value="-datadir"/> <arg value="/"/>
</config>
</start>
</config>
</runtime>

View File

@@ -1,7 +1,6 @@
_/src/chocolate-doom
cnuke/raw/shareware-wads/18.08
_/src/libc
_/src/nit_fb
_/src/sdl
_/src/sdl_mixer
_/src/sdl_net

View File

@@ -1,15 +1,11 @@
<runtime ram="80M" caps="512" binary="init">
<runtime ram="80M" caps="512" binary="chocolate-doom">
<requires> <audio_out/> <nitpicker/> <nic/> <timer/> </requires>
<requires> <audio_out/> <nitpicker/> <nic/> <timer/> <rtc/> </requires>
<content>
<rom label="ld.lib.so"/>
<rom label="init"/>
<rom label="init.config"/>
<rom label="nit_fb"/>
<rom label="chocolate-doom"/>
<rom label="libc.lib.so"/>
<rom label="pthread.lib.so"/>
<rom label="libm.lib.so"/>
<rom label="sdl.lib.so"/>
<rom label="sdl_mixer.lib.so"/>
@@ -18,48 +14,14 @@
<rom label="doom1.wad"/>
</content>
<config>
<parent-provides>
<service name="ROM"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
<service name="Timer"/>
<service name="Audio_out"/>
<service name="Nitpicker"/>
<service name="Nic"/>
</parent-provides>
<default-route> <any-service> <parent/> <any-child/> </any-service> </default-route>
<default caps="100"/>
<start name="nit_fb">
<resource name="RAM" quantum="16M"/>
<provides> <service name="Framebuffer"/> <service name="Input"/> </provides>
<config initial_width="1024" initial_height="768"/>
</start>
<start name="doom" caps="300">
<binary name="chocolate-doom"/>
<resource name="RAM" quantum="64M"/>
<config>
<libc stdout="/dev/log" stderr="/dev/log" stdin="/dev/null" rtc="/dev/rtc"/>
<vfs>
<dir name="dev">
<log/>
<inline name="rtc">2018-08-31 18:00</inline>
<log/> <rtc/>
</dir>
<rom name="doom1.wad"/>
</vfs>
</config>
<route>
<service name="Framebuffer"> <child name="nit_fb"/> </service>
<service name="Input"> <child name="nit_fb"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
</config>
</runtime>

View File

@@ -6,4 +6,5 @@ zlib
audio_out_session
framebuffer_session
input_session
nitpicker_session
timer_session

View File

@@ -34,4 +34,4 @@ set boot_modules {
vfs.lib.so
}
source ${genode_dir}/repos/world/run/framebuffer_app.inc
source ${genode_dir}/repos/world/run/nitpicker_app.inc

View File

@@ -1,18 +1,4 @@
#
# Build
#
set build_components {
core init
timer
drivers/framebuffer drivers/input drivers/audio
app/avplay drivers/acpi
}
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components
set build_components { app/avplay }
#
# Download media file
@@ -24,71 +10,7 @@ if {![file exists bin/mediafile]} {
catch { exec wget -O bin/mediafile $media_url }
}
proc audio_drv_attr { } {
if {[have_spec linux]} {
return {ld="no"} }
return "";
}
#
# Generate config
#
create_boot_directory
set config {
<config>
<parent-provides>
<service name="ROM"/>
<service name="IRQ"/>
<service name="IO_MEM"/>
<service name="IO_PORT"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
</parent-provides>
<default-route>
<any-service> <parent/> <any-child/> </any-service>
</default-route>
<default caps="100"/>
}
append_if [have_spec sdl] config {
<start name="fb_sdl" ld="no">
<resource name="RAM" quantum="4M"/>
<provides>
<service name="Input"/>
<service name="Framebuffer"/>
</provides>
<config width="1024" height="768"/>
</start>}
append_platform_drv_config
append_if [have_spec framebuffer] config {
<start name="fb_drv">
<resource name="RAM" quantum="12M"/>
<provides><service name="Framebuffer"/></provides>
<config buffered="yes" width="1024" height="768"/>
</start>}
append_if [have_spec ps2] config {
<start name="ps2_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Input"/></provides>
</start> }
append config {
<start name="timer">
<resource name="RAM" quantum="1M"/>
<provides><service name="Timer"/></provides>
</start>
<start name="audio_drv" } [audio_drv_attr] {>
<binary name="} [audio_drv_binary] {"/>
<resource name="RAM" quantum="8M"/>
<provides> <service name="Audio_out"/> </provides>
</start>
set app_config {
<start name="avplay" caps="200">
<resource name="RAM" quantum="64M"/>
<config>
@@ -103,38 +25,14 @@ append config {
</vfs>
<libc rtc="/dev/rtc" stdout="/dev/log" stderr="/dev/log"/>
</config>
<route>
<service name="Platform"> <any-child /> </service>
<service name="Audio_out"> <child name="audio_drv"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
</config>
}
</start>}
install_config $config
#
# Boot modules
#
append boot_modules {
core init timer } [audio_drv_binary] { avplay
ld.lib.so libc.lib.so vfs.lib.so vfs.lib.so vfs.lib.so libm.lib.so zlib.lib.so sdl.lib.so
set boot_modules {
avplay
libc.lib.so vfs.lib.so vfs.lib.so vfs.lib.so libm.lib.so zlib.lib.so sdl.lib.so
avfilter.lib.so avutil.lib.so avcodec.lib.so avformat.lib.so swscale.lib.so
avresample.lib.so
mediafile
}
lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules
append qemu_args " -soundhw es1370"
run_genode_until forever
source ${genode_dir}/repos/world/run/nitpicker_app.inc

View File

@@ -1,140 +1,6 @@
#
# Build
#
set build_components { app/chocolate-doom/doom }
if {[have_include "power_on/qemu"]} {
puts "\nRunning on Qemu is not recommended.\n"
exit 1
}
#
# On x86 systems w/o ps2 only use usb input
#
set use_usb_input_only 0
set use_audio [expr ![have_spec arm]]
set build_components {
core init
timer
drivers/framebuffer
drivers/input
app/chocolate-doom/doom
}
if {[have_spec linux]} {
set use_usb_input_only 1
}
lappend_if $use_audio build_components drivers/audio
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
lappend_if [expr ![have_spec linux]] build_components drivers/usb
lappend_if [expr !$use_usb_input_only] build_components server/input_merger
build $build_components
create_boot_directory
#
# Generate config
#
append config {
<config>
<parent-provides>
<service name="ROM"/>
<service name="RAM"/>
<service name="IRQ"/>
<service name="IO_MEM"/>
<service name="IO_PORT"/>
<service name="CAP"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
<service name="SIGNAL"/>
</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>}
append_if [have_spec sdl] config {
<start name="fb_sdl" ld="no">
<resource name="RAM" quantum="4M"/>
<provides>
<service name="Input"/>
<service name="Framebuffer"/>
</provides>
</start>}
append_platform_drv_config
append_if [have_spec vesa] config {
<start name="fb_drv">
<resource name="RAM" quantum="10M"/>
<provides><service name="Framebuffer"/></provides>
<config buffered="yes"/>
</start>}
append_if [have_spec pl11x] config {
<start name="fb_drv">
<resource name="RAM" quantum="2M"/>
<provides><service name="Framebuffer"/></provides>
</start>}
append_if [expr [have_spec ps2] && !$use_usb_input_only] config {
<start name="ps2_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Input"/></provides>
</start>}
append_if [expr ![have_spec linux]] config {
<start name="usb_drv">
<resource name="RAM" quantum="12M"/>
<provides><service name="Input"/></provides>
<config uhci="yes" ehci="yes" xhci="yes">
<hid/>
</config>
</start>}
append_if $use_audio config {
<start name="audio_drv">
<binary name="} [audio_drv_binary] {"/>
<resource name="RAM" quantum="8M"/>
<provides><service name="Audio_out"/></provides>
</start>}
append_if [expr !$use_usb_input_only] config {
<start name="input_merger">
<resource name="RAM" quantum="1M" />
<provides>
<service name="Input" />
</provides>
<config>
<input label="ps2" />
<input label="usb_hid" />
</config>
<route>
<service name="Input" label="ps2"> <child name="ps2_drv" /> </service>
<service name="Input" label="usb_hid"> <child name="usb_drv" /> </service>
<any-service> <parent /> <any-child /> </any-service>
</route>
</start>}
append config {
set app_config {
<start name="chocolate-doom" caps="300">
<resource name="RAM" quantum="32M"/>
<config>
@@ -146,16 +12,8 @@ append config {
</vfs>
</libc>
</config>
<route>}
append_if [expr !$use_usb_input_only] config {
<service name="Input"><child name="input_merger" /></service>}
append config {
<any-service> <parent /> <any-child /></any-service>
</route>
</start>
</config>}
</start>}
install_config $config
if {![file exists bin/data.tar]} {
if {![file exists bin/doom1.wad]} {
@@ -168,29 +26,10 @@ if {![file exists bin/data.tar]} {
}
}
#
# Boot modules
#
# generic modules
append boot_modules {
core init timer } [audio_drv_binary] {
ld.lib.so libc.lib.so vfs.lib.so libm.lib.so pthread.lib.so
set boot_modules {
libc.lib.so vfs.lib.so libm.lib.so
sdl.lib.so sdl_net.lib.so sdl_mixer.lib.so
chocolate-doom doom1.wad
}
# platform-specific modules
append_platform_drv_boot_modules
lappend_if $use_audio boot_modules audio_drv
lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec vesa] boot_modules fb_drv
lappend_if [expr ![have_spec linux]] boot_modules usb_drv
lappend_if [expr !$use_usb_input_only] boot_modules input_merger
lappend_if [expr [have_spec ps2] && !$use_usb_input_only] boot_modules ps2_drv
lappend_if [have_spec pl11x] boot_modules fb_drv
build_boot_image $boot_modules
run_genode_until forever
source ${genode_dir}/repos/world/run/nitpicker_app.inc

View File

@@ -1,97 +1,6 @@
#
# Build
#
set build_components {
core init
timer
app/grafx2 server/ram_fs
drivers/framebuffer drivers/platform drivers/input
}
lappend_if [have_spec usb] build_components drivers/usb
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components
create_boot_directory
#
# Generate config
#
append config {
<config prio_levels="4">
<parent-provides>
<service name="ROM"/>
<service name="RAM"/>
<service name="IRQ"/>
<service name="IO_MEM"/>
<service name="IO_PORT"/>
<service name="CAP"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
<service name="SIGNAL"/>
</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>}
append_platform_drv_config
append_if [have_spec sdl] config {
<start name="fb_sdl" ld="no">
<resource name="RAM" quantum="4M"/>
<provides>
<service name="Input"/>
<service name="Framebuffer"/>
</provides>
</start>}
append_if [have_spec platform_rpi] config {
<start name="platform_drv" priority="-1">
<resource name="RAM" quantum="1M"/>
<provides><service name="Platform"/></provides>
<config/>
</start>}
append_if [have_spec framebuffer] config {
<start name="fb_drv" priority="-1">
<resource name="RAM" quantum="6M"/>
<provides><service name="Framebuffer"/></provides>
<config buffered="yes" />
</start>}
append_if [have_spec ps2] config {
<start name="ps2_drv" priority="-1">
<resource name="RAM" quantum="1M"/>
<provides><service name="Input"/></provides>
</start>}
append_if [expr ![have_spec ps2] && [have_spec usb]] config {
<start name="usb_drv">
<resource name="RAM" quantum="12M"/>
<provides><service name="Input"/></provides>
<config ehci="yes" uhci="yes" xhci="no"> <hid/> </config>
</start> }
append config {
<start name="ram_fs" priority="-1">
<resource name="RAM" quantum="4M"/>
<provides> <service name="File_system"/> </provides>
<config> <default-policy writeable="yes" root="/"/> </config>
</start>
set build_components { app/grafx2 }
set app_config {
<start name="grafx2" priority="-2" caps="200">
<resource name="RAM" quantum="64M"/>
<config>
@@ -99,30 +8,18 @@ append config {
<vfs>
<tar name="grafx2_data.tar" />
<dir name="dev"> <log/> </dir>
<fs/>
<ram/>
</vfs>
</libc>
</config>
</start>
</config>}
</start>}
install_config $config
#
# Boot modules
#
# generic modules
set boot_modules {
core init
timer ram_fs
grafx2
jpeg.lib.so
ld.lib.so
libc.lib.so vfs.lib.so
libm.lib.so
libpng.lib.so
pthread.lib.so
sdl_image.lib.so
sdl.lib.so
zlib.lib.so
@@ -130,17 +27,4 @@ set boot_modules {
grafx2_data.tar
}
# platform-specific modules
append_platform_drv_boot_modules
# platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv
lappend_if [have_spec usb] boot_modules usb_drv
lappend_if [have_spec platform_rpi] boot_modules platform_drv
build_boot_image $boot_modules
run_genode_until forever
source ${genode_dir}/repos/world/run/nitpicker_app.inc

View File

@@ -1,18 +1,6 @@
set build_components { app/ltris server/ram_fs }
set build_components { app/ltris }
set app_config {
<start name="ram_fs" priority="-1">
<resource name="RAM" quantum="4M"/>
<provides> <service name="File_system"/> </provides>
<config>
<default-policy root="/" writeable="yes" />
<content>
<dir name="var"/>
</content>
</config>
</start>
<start name="ltris" priority="-2" caps="200">
<resource name="RAM" quantum="64M"/>
<config>
@@ -22,17 +10,16 @@ set app_config {
<dir name="dev">
<log/> <inline name="rtc">2000-01-01 00:00</inline>
</dir>
<fs/>
<dir name="var"> <ram/> </dir>
<ram/>
</vfs>
</config>
</start> }
set boot_modules {
ram_fs
ltris
libc.lib.so vfs.lib.so
libm.lib.so
pthread.lib.so
sdl_mixer.lib.so
sdl.lib.so
stdcxx.lib.so
@@ -40,6 +27,4 @@ set boot_modules {
ltris_data.tar
}
set fb_config {<config buffered="yes" width="640" height="480"/>}
source ${genode_dir}/repos/world/run/framebuffer_app.inc
source ${genode_dir}/repos/world/run/nitpicker_app.inc

View File

@@ -11,9 +11,11 @@
create_boot_directory
import_from_depot genodelabs/src/[base_src] \
genodelabs/pkg/[drivers_interactive_pkg] \
genodelabs/src/init
import_from_depot [depot_user]/src/[base_src] \
[depot_user]/pkg/[drivers_interactive_pkg] \
[depot_user]/src/init \
[depot_user]/src/nitpicker \
[depot_user]/pkg/motif_wm \
if {![info exists fb_config]} {
@@ -39,6 +41,8 @@ install_config {
</parent-provides>
<default-route>
<service name="Nitpicker">
<child name="wm"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</default-route>
@@ -63,12 +67,52 @@ install_config {
<provides><service name="Timer"/></provides>
</start>
<start name="nitpicker">
<resource name="RAM" quantum="4M"/>
<provides><service name="Nitpicker"/></provides>
<config focus="rom">
<domain name="pointer" layer="1" content="client" label="no" origin="pointer" />
<domain name="default" layer="2" content="client" label="no" hover="always"/>
<policy label_prefix="pointer" domain="pointer"/>
<default-policy domain="default"/>
</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="wm" caps="1000">
<resource name="RAM" quantum="32M"/>
<binary name="init"/>
<provides> <service name="Nitpicker"/> </provides>
<route>
<service name="ROM" label="config"> <parent label="wm.config"/> </service>
<service name="Nitpicker"> <child name="nitpicker"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
} $app_config {
</config>}
build $build_components
#
# Pin the nitpicker focus to the window manager by providing a static focus ROM
#
set fd [open [run_dir]/genode/focus w]
puts $fd "<focus label=\"wm -> wm -> \"/>"
close $fd
file copy -force [genode_dir]/repos/gems/recipes/raw/motif_wm/wm.config [run_dir]/genode/
build_boot_image $boot_modules
run_genode_until forever

View File

@@ -1,15 +1,6 @@
set build_components { app/numptyphysics server/ram_fs }
set fb_config { <config buffered="yes" width="800" height="600"/> }
set build_components { app/numptyphysics }
set app_config {
<start name="ram_fs" priority="-1">
<resource name="RAM" quantum="4M"/>
<provides> <service name="File_system"/> </provides>
<config> <default-policy writeable="yes" root="/"/> </config>
</start>
<start name="numptyphysics" priority="-2" caps="200">
<resource name="RAM" quantum="64M"/>
<config>
@@ -19,20 +10,18 @@ set app_config {
<dir name="dev">
<log/> <inline name="rtc">2000-01-01 00:00</inline>
</dir>
<fs/>
<ram/>
</vfs>
</config>
</start>}
set boot_modules {
ram_fs
numptyphysics
freetype.lib.so
jpeg.lib.so
libc.lib.so vfs.lib.so
libm.lib.so
libpng.lib.so
pthread.lib.so
sdl_image.lib.so
sdl.lib.so
sdl_ttf.lib.so
@@ -41,4 +30,4 @@ set boot_modules {
numptyphysics_data.tar
}
source ${genode_dir}/repos/world/run/framebuffer_app.inc
source ${genode_dir}/repos/world/run/nitpicker_app.inc

View File

@@ -1,101 +1,17 @@
#
# Build
#
set build_components { test/sdl }
set build_components {
core init
timer
test/sdl
drivers/framebuffer drivers/input
}
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components
create_boot_directory
#
# Generate config
#
append config {
<config>
<parent-provides>
<service name="ROM"/>
<service name="IRQ"/>
<service name="IO_MEM"/>
<service name="IO_PORT"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
</parent-provides>
<default-route>
<any-service> <parent/> <any-child/> </any-service>
</default-route>
<default caps="100"/>}
append_if [have_spec sdl] config {
<start name="fb_sdl" ld="no">
<resource name="RAM" quantum="4M"/>
<provides>
<service name="Input"/>
<service name="Framebuffer"/>
</provides>
</start>}
append_platform_drv_config
append_if [have_spec framebuffer] config {
<start name="fb_drv" caps="200">
<resource name="RAM" quantum="4M"/>
<provides><service name="Framebuffer"/></provides>
</start>}
append_if [have_spec ps2] config {
<start name="ps2_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Input"/></provides>
</start>}
append config {
<start name="timer">
<resource name="RAM" quantum="1M"/>
<provides><service name="Timer"/></provides>
</start>
set app_config {
<start name="test-sdl">
<resource name="RAM" quantum="32M"/>
<config>
<vfs> <dir name="dev"> <log/> </dir> </vfs>
<libc stdout="/dev/log"/>
</config>
</start>
</config>}
</start>}
install_config $config
#
# Boot modules
#
# generic modules
set boot_modules {
core init
timer
test-sdl
ld.lib.so libc.lib.so vfs.lib.so libm.lib.so sdl.lib.so
libc.lib.so vfs.lib.so libm.lib.so sdl.lib.so
}
# platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules
run_genode_until forever
source ${genode_dir}/repos/world/run/nitpicker_app.inc

View File

@@ -1,13 +1,6 @@
set build_components { app/supertux server/ram_fs }
set build_components { app/supertux }
set app_config {
<start name="ram_fs" priority="-1">
<resource name="RAM" quantum="4M"/>
<provides> <service name="File_system"/> </provides>
<config> <default-policy writeable="yes" root="/"/> </config>
</start>
<start name="supertux" priority="-2" caps="200">
<resource name="RAM" quantum="64M"/>
<config>
@@ -17,19 +10,17 @@ set app_config {
<dir name="dev">
<log/> <inline name="rtc">2000-01-01 00:00</inline>
</dir>
<fs/>
<ram/>
</vfs>
</config>
</start>}
set boot_modules {
ram_fs
supertux
jpeg.lib.so
libc.lib.so vfs.lib.so
libm.lib.so
libpng.lib.so
pthread.lib.so
sdl_image.lib.so
sdl_mixer.lib.so
sdl.lib.so
@@ -38,4 +29,4 @@ set boot_modules {
supertux_data.tar
}
source ${genode_dir}/repos/world/run/framebuffer_app.inc
source ${genode_dir}/repos/world/run/nitpicker_app.inc

View File

@@ -1,8 +1,8 @@
set build_components { app/tuxmath }
set app_config {
<start name="tuxmath" priority="-2" caps="200">
<resource name="RAM" quantum="64M"/>
<start name="tuxmath" priority="-2" caps="384">
<resource name="RAM" quantum="96M"/>
<config>
<libc stdout="/dev/log" stderr="/dev/log" rtc="/dev/rtc"/>
<vfs>
@@ -18,7 +18,6 @@ set boot_modules {
tuxmath
libc.lib.so vfs.lib.so
libm.lib.so
pthread.lib.so
libiconv.lib.so
jpeg.lib.so
freetype.lib.so
@@ -32,4 +31,4 @@ set boot_modules {
tuxmath_data.tar
}
source ${genode_dir}/repos/world/run/framebuffer_app.inc
source ${genode_dir}/repos/world/run/nitpicker_app.inc

View File

@@ -1,104 +1,8 @@
#
# Build
#
set build_components { app/opentyrian }
set build_components {
core init
drivers/audio
drivers/framebuffer
drivers/input
drivers/input/dummy
timer
app/opentyrian
}
source ${genode_dir}/repos/base/run/platform_drv.inc
# override default platform driver policy
proc platform_drv_policy {} {
return {
<policy label_prefix="ps2_drv"> <device name="PS2"/> </policy>
<policy label_prefix="usb_drv"> <pci class="USB"/> </policy>
<policy label_prefix="fb_drv"> <pci class="VGA"/> </policy>
<policy label_prefix="audio_drv"> <pci class="AUDIO"/> <pci class="HDAUDIO"/> </policy>}
}
append_platform_drv_build_components
build $build_components
create_boot_directory
#
# Generate config
#
append config {
<config>
<default caps="128"/>
<parent-provides>
<service name="CAP"/>
<service name="CPU"/>
<service name="IO_MEM"/>
<service name="IO_PORT"/>
<service name="IRQ"/>
<service name="LOG"/>
<service name="PD"/>
<service name="RM"/>
<service name="ROM"/>
<service name="SIGNAL"/>
</parent-provides>
<default-route>
<any-service> <parent/> <any-child/> </any-service>
</default-route>
<default caps="100"/>}
append_platform_drv_config
append_if [have_spec sdl] config {
<start name="fb_sdl">
<resource name="RAM" quantum="4M"/>
<provides>
<service name="Input"/>
<service name="Framebuffer"/>
</provides>
<config width="640" height="400" />
</start>
<alias name="input_drv" child="fb_sdl"/>
<alias name="fb_drv" child="fb_sdl"/>}
append_if [have_spec vesa] config {
<start name="fb_drv">
<resource name="RAM" quantum="4M"/>
<provides><service name="Framebuffer"/></provides>
<config width="640" height="400" />
</start>}
append_if [have_spec pl11x] config {
<start name="fb_drv">
<resource name="RAM" quantum="2M"/>
<provides><service name="Framebuffer"/></provides>
<config width="640" height="400" />
</start>}
append_if [have_spec ps2] config {
<start name="ps2_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Input"/></provides>
</start>}
append config {
<start name="timer">
<resource name="RAM" quantum="1M"/>
<provides><service name="Timer"/></provides>
</start>
<start name="audio_drv">
<binary name="} [audio_drv_binary] {"/>
<resource name="RAM" quantum="6M"/>
<provides><service name="Audio_out"/></provides>
</start>
set app_config {
<start name="opentyrian">
<exit propagate="yes"/>
<resource name="RAM" quantum="128M"/>
<config>
<sdl_audio_volume value="100"/>
@@ -109,45 +13,19 @@ append config {
<ram/>
</vfs>
</config>
</start>
</config>}
</start>}
install_config $config
create_boot_directory
#
# Boot modules
#
file copy -force app/opentyrian/tyrian.tar [run_dir]/genode
file copy -force app/opentyrian/tyrian.tar bin
# generic modules
append boot_modules {
core init
} [audio_drv_binary] {
dummy_input_drv
ld.lib.so
set boot_modules {
libc.lib.so vfs.lib.so
libm.lib.so
libpng.lib.so
pthread.lib.so
posix.lib.so
sdl.lib.so
sdl_net.lib.so
stdcxx.lib.so
timer
opentyrian tyrian.tar
}
# platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec vesa] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv
lappend_if [have_spec pl11x] boot_modules fb_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules
append qemu_args " -soundhw es1370 "
run_genode_until forever
source ${genode_dir}/repos/world/run/nitpicker_app.inc

View File

@@ -1,115 +1,27 @@
# Build
#
set build_components {
core init
timer
drivers/audio
drivers/usb
drivers/framebuffer drivers/input
app/uhexen2
lib/vfs/lwip
server/nic_loopback
}
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components
create_boot_directory
#
# Generate config
#
append config {
<config>
<parent-provides>
<service name="ROM"/>
<service name="RAM"/>
<service name="IRQ"/>
<service name="IO_MEM"/>
<service name="IO_PORT"/>
<service name="CAP"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
<service name="SIGNAL"/>
</parent-provides>
<default-route>
<any-service> <parent/> <any-child/> </any-service>
</default-route>
<default caps="100"/>
<start name="timer">
set app_config {
<start name="nic_loopback" priority="-1">
<resource name="RAM" quantum="1M"/>
<provides><service name="Timer"/></provides>
</start>}
append_if [have_spec sdl] config {
<start name="fb_sdl" ld="no">
<resource name="RAM" quantum="4M"/>
<provides>
<service name="Input"/>
<service name="Framebuffer"/>
</provides>
</start>}
append_platform_drv_config
append_if [have_spec vesa] config {
<start name="fb_drv">
<resource name="RAM" quantum="16M"/>
<provides><service name="Framebuffer"/></provides>
<!--
Limit the resolution because the software renderer of UHexen2
only supports up to 1280x1024 currently.
-->
<config width="1024" height="768" buffered="yes"/>
<route>
<service name="PCI"><child name="acpi" /></service>
<any-service> <parent /> <any-child /></any-service>
</route>
</start>}
append_if [have_spec pl11x] config {
<start name="fb_drv">
<resource name="RAM" quantum="2M"/>
<provides><service name="Framebuffer"/></provides>
</start>}
append_if [have_spec ps2] config {
<start name="ps2_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Input"/></provides>
</start>}
append config {
<start name="audio_drv">
<binary name="} [audio_drv_binary] {"/>
<resource name="RAM" quantum="8M"/>
<provides><service name="Audio_out"/></provides>
<provides> <service name="Nic"/> </provides>
</start>
<start name="uhexen2">
<start name="uhexen2" caps="256">
<resource name="RAM" quantum="128M"/>
<config>
<sdl_audio_volume value="100"/>
<libc stdout="/dev/log" stderr="/dev/log">
<libc stdout="/dev/log" stderr="/dev/log" socket="/socket"/>
<vfs>
<dir name="dev"> <log/> </dir>
<dir name="socket">
<lwip ip_addr="127.0.0.1" netmask="255.0.0.0" gateway="0.0.0.0"/> </dir>
<tar name="hexen2demo_data.tar" />
</vfs>
</libc>
</config>
<route>
<any-service> <parent /> <any-child /></any-service>
</route>
</start>
</config>}
install_config $config
</start>}
if {![file exists bin/hexen2demo_data.tar]} {
set hexen2demo_dir "hexen2demo_nov1997"
@@ -137,22 +49,11 @@ if {![file exists bin/hexen2demo_data.tar]} {
# generic modules
append boot_modules {
core init timer } [audio_drv_binary] {
ld.lib.so libc.lib.so vfs.lib.so libm.lib.solwip_legacy.lib.so
pthread.lib.so sdl.lib.so sdl_mixer.lib.so
libc.lib.so vfs.lib.so libm.lib.so
sdl.lib.so sdl_mixer.lib.so
uhexen2 hexen2demo_data.tar
vfs_lwip.lib.so
nic_loopback
}
# platform-specific modules
append_platform_drv_boot_modules
lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec vesa] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv
lappend_if [have_spec pl11x] boot_modules fb_drv
build_boot_image $boot_modules
append qemu_args " -soundhw es1370 "
run_genode_until forever
source ${genode_dir}/repos/world/run/nitpicker_app.inc

View File

@@ -138,8 +138,7 @@ int UDP_OpenSocket (int port)
if ((newsocket = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
return -1;
if (ioctl (newsocket, FIONBIO, (char *)&_true) == -1)
goto ErrorReturn;
ioctl (newsocket, FIONBIO, (char *)&_true);
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;

View File

@@ -118,7 +118,7 @@ CC_OPT += -DNO_ALSA_AUDIO -DNO_OSS_AUDIO -DNO_SUN_AUDIO
CC_OPT += -DDEMOBUILD
LIBS = libc libc_lwip lwip libm sdl sdlmain sdl_mixer
LIBS = libc libm sdl sdlmain sdl_mixer
vpath % $(UHEXEN2_DIR)/common
vpath % $(UHEXEN2_DIR)/engine/hexen2

View File

@@ -30,6 +30,7 @@
*/
/* Genode includes */
#include <nitpicker_session/connection.h>
#include <base/log.h>
#include <input_session/connection.h>
#include <input/event.h>
@@ -45,15 +46,26 @@ Video video_events;
static Genode::Env *_global_env = nullptr;
static Genode::Constructible<Nitpicker::Connection> _global_nitpicker { };
Genode::Env *global_env()
Genode::Env &global_env()
{
if (!_global_env) {
Genode::error("sdl_init_genode() not called, aborting");
throw Genode::Exception();
}
return _global_env;
return *_global_env;
}
Nitpicker::Connection &global_nitpicker()
{
if (!_global_nitpicker.constructed())
_global_nitpicker.construct(global_env(), "SDL");
return *_global_nitpicker;
}
@@ -71,7 +83,7 @@ extern "C" {
#include "SDL_genode_fb_events.h"
static Genode::Constructible<Input::Connection> input;
static Genode::Constructible<Input::Session_client> input;
static const int KEYNUM_MAX = 512;
static SDLKey keymap[KEYNUM_MAX];
static int buttonmap[KEYNUM_MAX];
@@ -154,7 +166,8 @@ extern "C" {
void Genode_Fb_InitOSKeymap(SDL_VideoDevice *t)
{
try {
input.construct(*_global_env);
input.construct(_global_env->rm(),
_global_nitpicker->input_session());
} catch (...) {
Genode::error("no input driver available!");
return;

View File

@@ -32,13 +32,14 @@
/* Genode includes */
#include <base/log.h>
#include <base/env.h>
#include <framebuffer_session/connection.h>
#include <nitpicker_session/connection.h>
/* local includes */
#include <SDL_genode_internal.h>
extern Genode::Env *global_env();
extern Genode::Env &global_env();
extern Nitpicker::Connection &global_nitpicker();
extern Genode::Lock event_lock;
extern Video video_events;
@@ -62,15 +63,15 @@ extern "C" {
struct Sdl_framebuffer
{
Genode::Env &_env;
Framebuffer::Mode _mode;
Framebuffer::Connection _fb { _env, _mode };
Nitpicker::Connection &_nitpicker;
Nitpicker::Session::View_handle _view {
_nitpicker.create_view() };
void _handle_mode_change()
{
Genode::Lock_guard<Genode::Lock> guard(event_lock);
Framebuffer::Mode mode = _fb.mode();
Framebuffer::Mode mode = _nitpicker.mode();
df_mode.w = mode.width();
df_mode.h = mode.height();
@@ -82,22 +83,41 @@ extern "C" {
Genode::Signal_handler<Sdl_framebuffer> _mode_handler {
_env.ep(), *this, &Sdl_framebuffer::_handle_mode_change };
Sdl_framebuffer(Genode::Env &env) : _env(env) {
_fb.mode_sigh(_mode_handler); }
bool valid() const { return _fb.cap().valid(); }
Sdl_framebuffer(Genode::Env &env, Nitpicker::Connection &nitpicker)
: _env(env), _nitpicker(nitpicker) {
_nitpicker.mode_sigh(_mode_handler); }
/************************************
** Framebuffer::Session Interface **
************************************/
Genode::Dataspace_capability dataspace() { return _fb.dataspace(); }
Genode::Dataspace_capability dataspace(int width, int height)
{
_nitpicker.buffer(
::Framebuffer::Mode(width, height, Framebuffer::Mode::RGB565),
false);
Framebuffer::Mode mode() const { return _fb.mode(); }
::Framebuffer::Mode mode = _nitpicker.framebuffer()->mode();
using namespace Nitpicker;
Area area(
Genode::min(mode.width(), width),
Genode::min(mode.height(), height));
typedef Nitpicker::Session::Command Command;
_nitpicker.enqueue<Command::Geometry>(
_view, Rect(Point(0, 0), area));
_nitpicker.execute();
return _nitpicker.framebuffer()->dataspace();
}
Framebuffer::Mode mode() const {
return _nitpicker.mode(); }
void refresh(int x, int y, int w, int h) {
_fb.refresh(x, y, w, h); }
_nitpicker.framebuffer()->refresh(x, y, w, h); }
};
static Genode::Constructible<Sdl_framebuffer> framebuffer;
@@ -265,12 +285,7 @@ extern "C" {
static int Genode_Fb_Available(void)
{
if (!framebuffer.constructed()) {
framebuffer.construct(*global_env());
}
if (!framebuffer->valid()) {
Genode::error("could not obtain framebuffer session");
return 0;
framebuffer.construct(global_env(), global_nitpicker());
}
return 1;
@@ -362,6 +377,7 @@ extern "C" {
/* Get the framebuffer size and mode infos */
scr_mode = framebuffer->mode();
t->info.current_w = scr_mode.width();
t->info.current_h = scr_mode.height();
Genode::log("Framebuffer has "
@@ -407,22 +423,20 @@ extern "C" {
}
if (t->hidden->buffer) {
global_env()->rm().detach(t->hidden->buffer);
global_env().rm().detach(t->hidden->buffer);
t->hidden->buffer = nullptr;
}
}
/**
* List the available video modes for the given pixel format,
* sorted from largest to smallest.
* Any mode is okay if the pixel format is 16bit
*/
SDL_Rect **Genode_Fb_ListModes(SDL_VideoDevice *t,
SDL_PixelFormat *format,
Uint32 flags)
{
if(format->BitsPerPixel != 16) { return (SDL_Rect **) 0; }
return modes;
return (SDL_Rect **)((format->BitsPerPixel == 16) ? -1 : 0);
}
@@ -457,17 +471,18 @@ extern "C" {
}
/* Map the buffer */
Genode::Dataspace_capability fb_ds_cap = framebuffer->dataspace();
Genode::Dataspace_capability fb_ds_cap =
framebuffer->dataspace(width, height);
if (!fb_ds_cap.valid()) {
Genode::error("could not request dataspace for frame buffer");
return nullptr;
}
if (t->hidden->buffer) {
global_env()->rm().detach(t->hidden->buffer);
global_env().rm().detach(t->hidden->buffer);
}
t->hidden->buffer = global_env()->rm().attach(fb_ds_cap);
t->hidden->buffer = global_env().rm().attach(fb_ds_cap);
if (!t->hidden->buffer) {
Genode::error("no buffer for requested mode");

View File

@@ -34,7 +34,6 @@
/* Genode includes */
#include <base/env.h>
#include <base/printf.h>
#include <timer_session/connection.h>