mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-24 07:46:42 +00:00
parent
451ea47dd8
commit
18869199ca
17
repos/gems/recipes/src/mixer_gui_qt6/content.mk
Normal file
17
repos/gems/recipes/src/mixer_gui_qt6/content.mk
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
MIRROR_FROM_REP_DIR := src/app/mixer_gui_qt6
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_REP_DIR) LICENSE
|
||||||
|
|
||||||
|
$(MIRROR_FROM_REP_DIR):
|
||||||
|
$(mirror_from_rep_dir)
|
||||||
|
|
||||||
|
MIRROR_FROM_OS := include/mixer
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_OS)
|
||||||
|
|
||||||
|
$(MIRROR_FROM_OS):
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
cp -r $(GENODE_DIR)/repos/os/$@ $(dir $@)
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(GENODE_DIR)/LICENSE $@
|
1
repos/gems/recipes/src/mixer_gui_qt6/hash
Normal file
1
repos/gems/recipes/src/mixer_gui_qt6/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-08-08 e0c80c1e04f8b05725ba904c9bd0f45d619e6d7b
|
10
repos/gems/recipes/src/mixer_gui_qt6/used_apis
Normal file
10
repos/gems/recipes/src/mixer_gui_qt6/used_apis
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
base
|
||||||
|
libc
|
||||||
|
mesa
|
||||||
|
os
|
||||||
|
qoost
|
||||||
|
qt6_base
|
||||||
|
qt6_component
|
||||||
|
report_session
|
||||||
|
stdcxx
|
||||||
|
vfs
|
9
repos/gems/recipes/src/test-tiled_wm_qt6/content.mk
Normal file
9
repos/gems/recipes/src/test-tiled_wm_qt6/content.mk
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
MIRROR_FROM_REP_DIR := src/test/tiled_wm_qt6
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_REP_DIR) LICENSE
|
||||||
|
|
||||||
|
$(MIRROR_FROM_REP_DIR):
|
||||||
|
$(mirror_from_rep_dir)
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(GENODE_DIR)/LICENSE $@
|
1
repos/gems/recipes/src/test-tiled_wm_qt6/hash
Normal file
1
repos/gems/recipes/src/test-tiled_wm_qt6/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-08-07 2a2c41fe5c6449c94e1346d9b7aeb6c525c7647f
|
11
repos/gems/recipes/src/test-tiled_wm_qt6/used_apis
Normal file
11
repos/gems/recipes/src/test-tiled_wm_qt6/used_apis
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
base
|
||||||
|
libc
|
||||||
|
mesa
|
||||||
|
os
|
||||||
|
qoost
|
||||||
|
qt6_base
|
||||||
|
qt6_component
|
||||||
|
report_session
|
||||||
|
stdcxx
|
||||||
|
timer_session
|
||||||
|
vfs
|
83
repos/gems/run/mixer_gui_qt6_test.run
Normal file
83
repos/gems/run/mixer_gui_qt6_test.run
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
source ${genode_dir}/repos/libports/run/qt6_common.inc
|
||||||
|
|
||||||
|
import_from_depot [depot_user]/src/dynamic_rom \
|
||||||
|
[depot_user]/src/mixer_gui_qt6
|
||||||
|
|
||||||
|
#
|
||||||
|
# Generate config
|
||||||
|
#
|
||||||
|
|
||||||
|
install_config {
|
||||||
|
<config>
|
||||||
|
<parent-provides>
|
||||||
|
} [qt6_parent_provides] {
|
||||||
|
</parent-provides>
|
||||||
|
<default caps="100"/>
|
||||||
|
<default-route>
|
||||||
|
<any-service> <parent/> <any-child/> </any-service>
|
||||||
|
</default-route>
|
||||||
|
} [qt6_start_nodes] {
|
||||||
|
<start name="dynamic_rom">
|
||||||
|
<resource name="RAM" quantum="4M"/>
|
||||||
|
<provides><service name="ROM"/></provides>
|
||||||
|
<config verbose="yes">
|
||||||
|
<rom name="channel_list">
|
||||||
|
<sleep milliseconds="1000" />
|
||||||
|
<inline description="first config update">
|
||||||
|
<channel_list>
|
||||||
|
<channel type="input" label="test-audio_out0" name="right" number="1" active="1" volume="0" muted="0"/>
|
||||||
|
<channel type="input" label="test-audio_out_click" name="left" number="0" active="1" volume="75" muted="0"/>
|
||||||
|
<channel type="input" label="fancy_init -> test-audio_out1" name="left" number="0" active="1" volume="75" muted="0"/>
|
||||||
|
<channel type="input" label="test-audio_out0" name="left" number="0" active="1" volume="0" muted="0"/>
|
||||||
|
<channel type="input" label="test-audio_out_click" name="right" number="1" active="1" volume="75" muted="0"/>
|
||||||
|
<channel type="input" label="fancy_init -> test-audio_out1" name="right" number="1" active="1" volume="75" muted="0"/>
|
||||||
|
<channel type="output" label="master" name="left" number="0" active="1" volume="100" muted="0"/>
|
||||||
|
<channel type="output" label="master" name="right" number="1" active="1" volume="100" muted="0"/>
|
||||||
|
</channel_list>
|
||||||
|
</inline>
|
||||||
|
<sleep milliseconds="1000" />
|
||||||
|
<inline description="second config update">
|
||||||
|
<channel_list>
|
||||||
|
<channel type="input" label="test-audio_out0" name="right" number="1" active="1" volume="100" muted="0"/>
|
||||||
|
<channel type="input" label="test-audio_out_click" name="left" number="0" active="1" volume="75" muted="1"/>
|
||||||
|
<channel type="input" label="fancy_init -> test-audio_out1" name="left" number="0" active="1" volume="25" muted="0"/>
|
||||||
|
<channel type="input" label="test-audio_out0" name="left" number="0" active="1" volume="100" muted="0"/>
|
||||||
|
<channel type="input" label="test-audio_out_click" name="right" number="1" active="1" volume="15" muted="1"/>
|
||||||
|
<channel type="input" label="fancy_init -> test-audio_out1" name="right" number="1" active="1" volume="25" muted="0"/>
|
||||||
|
<channel type="output" label="master" name="left" number="0" active="1" volume="100" muted="0"/>
|
||||||
|
<channel type="output" label="master" name="right" number="1" active="1" volume="100" muted="0"/>
|
||||||
|
</channel_list>
|
||||||
|
</inline>
|
||||||
|
</rom>
|
||||||
|
</config>
|
||||||
|
</start>
|
||||||
|
|
||||||
|
<start name="mixer_gui_qt" caps="200">
|
||||||
|
<resource name="RAM" quantum="32M"/>
|
||||||
|
<config>
|
||||||
|
<vfs>
|
||||||
|
<dir name="dev">
|
||||||
|
<log/>
|
||||||
|
<inline name="rtc">2018-01-01 00:01</inline>
|
||||||
|
</dir>
|
||||||
|
<dir name="pipe"> <pipe/> </dir>
|
||||||
|
<tar name="qt6_dejavusans.tar"/>
|
||||||
|
<tar name="qt6_libqgenode.tar"/>
|
||||||
|
</vfs>
|
||||||
|
<libc stdout="/dev/log" stderr="/dev/log" pipe="/pipe" rtc="/dev/rtc"/>
|
||||||
|
</config>
|
||||||
|
<route>
|
||||||
|
<service name="Gui"> <child name="wm"/> </service>
|
||||||
|
<service name="Report" label="shape"> <child name="wm"/> </service>
|
||||||
|
<service name="ROM" label="channel_list"> <child name="dynamic_rom" /> </service>
|
||||||
|
<service name="ROM" label="mesa_gpu.lib.so"> <parent label="mesa_gpu-softpipe.lib.so" /> </service>
|
||||||
|
<any-service> <parent/> <any-child/> </any-service>
|
||||||
|
</route>
|
||||||
|
</start>
|
||||||
|
</config>}
|
||||||
|
|
||||||
|
build_boot_image [qt6_boot_modules]
|
||||||
|
|
||||||
|
run_genode_until forever
|
||||||
|
|
||||||
|
# vi: set ft=tcl :
|
228
repos/gems/run/tiled_wm_qt6.run
Normal file
228
repos/gems/run/tiled_wm_qt6.run
Normal file
@ -0,0 +1,228 @@
|
|||||||
|
source ${genode_dir}/repos/libports/run/qt6_common.inc
|
||||||
|
|
||||||
|
import_from_depot [depot_user]/src/qt6_component \
|
||||||
|
[depot_user]/src/qt6_textedit \
|
||||||
|
[depot_user]/src/dynamic_rom \
|
||||||
|
[depot_user]/src/test-tiled_wm_qt6
|
||||||
|
|
||||||
|
#
|
||||||
|
# Generate config
|
||||||
|
#
|
||||||
|
|
||||||
|
proc qt6_layouter_config { } {
|
||||||
|
return { <config rules="rom"> <report rules="no"/> </config>}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc qt6_decorator_binary { } { return "themed_decorator" }
|
||||||
|
|
||||||
|
proc qt6_decorator_config { } {
|
||||||
|
return {
|
||||||
|
<config>
|
||||||
|
<vfs>
|
||||||
|
<dir name="theme">
|
||||||
|
<inline name="metadata">
|
||||||
|
<theme>
|
||||||
|
<aura top="0" bottom="0" left="0" right="0"/>
|
||||||
|
<decor top="0" bottom="0" left="0" right="0"/>
|
||||||
|
</theme>
|
||||||
|
</inline>
|
||||||
|
</dir>
|
||||||
|
</vfs>
|
||||||
|
<libc/>
|
||||||
|
<default-policy/>
|
||||||
|
</config>}
|
||||||
|
}
|
||||||
|
|
||||||
|
install_config {
|
||||||
|
<config>
|
||||||
|
<parent-provides>} [qt6_parent_provides] {
|
||||||
|
</parent-provides>
|
||||||
|
<default caps="100"/>
|
||||||
|
<default-route>
|
||||||
|
<any-service> <parent/> <any-child/> </any-service>
|
||||||
|
</default-route>} [qt6_start_nodes] {
|
||||||
|
|
||||||
|
<start name="test_reports">
|
||||||
|
<binary name="report_rom"/>
|
||||||
|
<resource name="RAM" quantum="1M"/>
|
||||||
|
<provides> <service name="Report"/> <service name="ROM"/> </provides>
|
||||||
|
<config verbose="no">
|
||||||
|
<policy label="test-tiled_wm-panel -> apps" report="test-tiled_wm-manager -> apps"/>
|
||||||
|
<policy label="test-tiled_wm-panel -> overlay" report="test-tiled_wm-manager -> overlay"/>
|
||||||
|
<policy label="test-tiled_wm-manager -> content_request" report="test-tiled_wm-panel -> content_request"/>
|
||||||
|
<policy label="test-tiled_wm-manager -> overlay_request" report="test-tiled_wm-panel -> overlay_request"/>
|
||||||
|
</config>
|
||||||
|
</start>
|
||||||
|
<start name="wifi_reports">
|
||||||
|
<binary name="dynamic_rom"/>
|
||||||
|
<resource name="RAM" quantum="4M"/>
|
||||||
|
<provides> <service name="ROM"/> </provides>
|
||||||
|
<config verbose="no">
|
||||||
|
<rom name="accesspoints">
|
||||||
|
<inline>
|
||||||
|
<accesspoints>
|
||||||
|
<accesspoint ssid="skynet" bssid="00:01:02:03:04:05" quality="40"/>
|
||||||
|
<accesspoint ssid="foobar" bssid="01:02:03:04:05:06" quality="70" protection="WPA2"/>
|
||||||
|
<accesspoint ssid="foobar" bssid="01:02:03:04:05:07" quality="10" protection="WPA2"/>
|
||||||
|
</accesspoints>
|
||||||
|
</inline>
|
||||||
|
<sleep milliseconds="60000" />
|
||||||
|
<inline>
|
||||||
|
<accesspoints>
|
||||||
|
</accesspoints>
|
||||||
|
</inline>
|
||||||
|
<sleep milliseconds="60000" />
|
||||||
|
</rom>
|
||||||
|
<rom name="state">
|
||||||
|
<inline>
|
||||||
|
<state>
|
||||||
|
<accesspoint ssid="foobar" bssid="01:02:03:04:05:06" quality="70" freq="2418" state="disconnected"/>
|
||||||
|
</state>
|
||||||
|
</inline>
|
||||||
|
<sleep milliseconds="60000" />
|
||||||
|
<inline>
|
||||||
|
<state>
|
||||||
|
<accesspoint ssid="foobar" bssid="01:02:03:04:05:06" quality="70" freq="2418" state="connecting"/>
|
||||||
|
</state>
|
||||||
|
</inline>
|
||||||
|
<sleep milliseconds="60000" />
|
||||||
|
</rom>
|
||||||
|
</config>
|
||||||
|
</start>
|
||||||
|
|
||||||
|
<start name="test-tiled_wm-manager" caps="120">
|
||||||
|
<resource name="RAM" quantum="8M"/>
|
||||||
|
<route>
|
||||||
|
<service name="ROM" label="content_request"> <child name="test_reports" /> </service>
|
||||||
|
<service name="ROM" label="overlay_request"> <child name="test_reports" /> </service>
|
||||||
|
<service name="Report" label="layout_rules"> <child name="wm_report_rom" label="layout_rules"/> </service>
|
||||||
|
<service name="Report"> <child name="test_reports"/> </service>
|
||||||
|
<any-service> <parent /> <any-child/> </any-service>
|
||||||
|
</route>
|
||||||
|
</start>
|
||||||
|
<start name="test-tiled_wm-panel" caps="250">
|
||||||
|
<resource name="RAM" quantum="32M"/>
|
||||||
|
<config>
|
||||||
|
<libc stdout="/dev/log" stderr="/dev/log" pipe="/pipe" rtc="/dev/rtc"/>
|
||||||
|
<vfs>
|
||||||
|
<dir name="dev">
|
||||||
|
<log/>
|
||||||
|
<inline name="rtc">2018-01-01 00:01</inline>
|
||||||
|
</dir>
|
||||||
|
<dir name="pipe"> <pipe/> </dir>
|
||||||
|
<dir name="fs"> <ram/> </dir>
|
||||||
|
<tar name="qt6_dejavusans.tar"/>
|
||||||
|
<tar name="qt6_libqgenode.tar"/>
|
||||||
|
</vfs>
|
||||||
|
</config>
|
||||||
|
<route>
|
||||||
|
<service name="Gui"> <child name="wm"/> </service>
|
||||||
|
<service name="Report" label="shape"> <child name="wm"/> </service>
|
||||||
|
<service name="ROM" label="mesa_gpu.lib.so"> <parent label="mesa_gpu-softpipe.lib.so" /> </service>
|
||||||
|
|
||||||
|
<service name="ROM" label="apps"> <child name="test_reports" /> </service>
|
||||||
|
<service name="ROM" label="overlay"> <child name="test_reports" /> </service>
|
||||||
|
<service name="Report"> <child name="test_reports"/> </service>
|
||||||
|
<any-service> <parent /> <any-child/> </any-service>
|
||||||
|
</route>
|
||||||
|
</start>
|
||||||
|
<start name="test-tiled_wm-overlay" caps="250">
|
||||||
|
<resource name="RAM" quantum="32M"/>
|
||||||
|
<config>
|
||||||
|
<libc stdout="/dev/log" stderr="/dev/log" pipe="/pipe" rtc="/dev/rtc"/>
|
||||||
|
<vfs>
|
||||||
|
<dir name="dev">
|
||||||
|
<log/>
|
||||||
|
<inline name="rtc">2018-01-01 00:01</inline>
|
||||||
|
</dir>
|
||||||
|
<dir name="pipe"> <pipe/> </dir>
|
||||||
|
<dir name="fs"> <ram/> </dir>
|
||||||
|
<tar name="qt6_dejavusans.tar"/>
|
||||||
|
<tar name="qt6_libqgenode.tar"/>
|
||||||
|
</vfs>
|
||||||
|
</config>
|
||||||
|
<route>
|
||||||
|
<service name="Gui"> <child name="wm"/> </service>
|
||||||
|
<service name="Report" label="shape"> <child name="wm"/> </service>
|
||||||
|
<service name="ROM" label="mesa_gpu.lib.so"> <parent label="mesa_gpu-softpipe.lib.so" /> </service>
|
||||||
|
<any-service> <parent /> <any-child/> </any-service>
|
||||||
|
</route>
|
||||||
|
</start>
|
||||||
|
<start name="test-tiled_wm-app-1" caps="250">
|
||||||
|
<binary name="test-tiled_wm-app"/>
|
||||||
|
<resource name="RAM" quantum="32M"/>
|
||||||
|
<config name="app1">
|
||||||
|
<libc stdout="/dev/log" stderr="/dev/log" pipe="/pipe" rtc="/dev/rtc"/>
|
||||||
|
<vfs>
|
||||||
|
<dir name="dev">
|
||||||
|
<log/>
|
||||||
|
<inline name="rtc">2018-01-01 00:01</inline>
|
||||||
|
</dir>
|
||||||
|
<dir name="pipe"> <pipe/> </dir>
|
||||||
|
<dir name="fs"> <ram/> </dir>
|
||||||
|
<tar name="qt6_dejavusans.tar"/>
|
||||||
|
<tar name="qt6_libqgenode.tar"/>
|
||||||
|
</vfs>
|
||||||
|
</config>
|
||||||
|
<route>
|
||||||
|
<service name="Gui"> <child name="wm"/> </service>
|
||||||
|
<service name="Report" label="shape"> <child name="wm"/> </service>
|
||||||
|
<service name="ROM" label="mesa_gpu.lib.so"> <parent label="mesa_gpu-softpipe.lib.so" /> </service>
|
||||||
|
<any-service> <parent /> <any-child/> </any-service>
|
||||||
|
</route>
|
||||||
|
</start>
|
||||||
|
<start name="test-tiled_wm-app-2" caps="250">
|
||||||
|
<binary name="test-tiled_wm-app"/>
|
||||||
|
<resource name="RAM" quantum="32M"/>
|
||||||
|
<config name="app2">
|
||||||
|
<libc stdout="/dev/log" stderr="/dev/log" pipe="/pipe" rtc="/dev/rtc"/>
|
||||||
|
<vfs>
|
||||||
|
<dir name="dev">
|
||||||
|
<log/>
|
||||||
|
<inline name="rtc">2018-01-01 00:01</inline>
|
||||||
|
</dir>
|
||||||
|
<dir name="pipe"> <pipe/> </dir>
|
||||||
|
<dir name="fs"> <ram/> </dir>
|
||||||
|
<tar name="qt6_dejavusans.tar"/>
|
||||||
|
<tar name="qt6_libqgenode.tar"/>
|
||||||
|
</vfs>
|
||||||
|
</config>
|
||||||
|
<route>
|
||||||
|
<service name="Gui"> <child name="wm"/> </service>
|
||||||
|
<service name="Report" label="shape"> <child name="wm"/> </service>
|
||||||
|
<service name="ROM" label="mesa_gpu.lib.so"> <parent label="mesa_gpu-softpipe.lib.so" /> </service>
|
||||||
|
<any-service> <parent /> <any-child/> </any-service>
|
||||||
|
</route>
|
||||||
|
</start>
|
||||||
|
<start name="textedit" caps="250">
|
||||||
|
<resource name="RAM" quantum="70M"/>
|
||||||
|
<config>
|
||||||
|
<libc stdout="/dev/log" stderr="/dev/log" pipe="/pipe" rtc="/dev/rtc"/>
|
||||||
|
<vfs>
|
||||||
|
<dir name="dev">
|
||||||
|
<log/>
|
||||||
|
<inline name="rtc">2018-01-01 00:01</inline>
|
||||||
|
</dir>
|
||||||
|
<dir name="pipe"> <pipe/> </dir>
|
||||||
|
<dir name="fs"> <ram/> </dir>
|
||||||
|
<tar name="qt6_dejavusans.tar"/>
|
||||||
|
<tar name="qt6_libqgenode.tar"/>
|
||||||
|
</vfs>
|
||||||
|
</config>
|
||||||
|
<route>
|
||||||
|
<service name="Gui"> <child name="wm"/> </service>
|
||||||
|
<service name="Report" label="shape"> <child name="wm"/> </service>
|
||||||
|
<service name="ROM" label="mesa_gpu.lib.so"> <parent label="mesa_gpu-softpipe.lib.so" /> </service>
|
||||||
|
<any-service> <parent /> <any-child/> </any-service>
|
||||||
|
</route>
|
||||||
|
</start>
|
||||||
|
</config>
|
||||||
|
}
|
||||||
|
|
||||||
|
build_boot_image [qt6_boot_modules]
|
||||||
|
|
||||||
|
append qemu_args " -device nec-usb-xhci,id=xhci -device usb-tablet"
|
||||||
|
|
||||||
|
run_genode_until forever
|
||||||
|
|
||||||
|
# vi: set ft=tcl :
|
131
repos/gems/src/app/mixer_gui_qt6/main.cpp
Normal file
131
repos/gems/src/app/mixer_gui_qt6/main.cpp
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
/*
|
||||||
|
* \brief Mixer frontend
|
||||||
|
* \author Josef Soentgen
|
||||||
|
* \date 2015-10-15
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015-2020 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU Affero General Public License version 3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Genode includes */
|
||||||
|
#include <base/log.h>
|
||||||
|
#include <base/thread.h>
|
||||||
|
#include <base/attached_rom_dataspace.h>
|
||||||
|
#include <libc/component.h>
|
||||||
|
|
||||||
|
/* Qt includes */
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QFile>
|
||||||
|
|
||||||
|
/* qt6_component includes */
|
||||||
|
#include <qt6_component/qpa_init.h>
|
||||||
|
|
||||||
|
/* application includes */
|
||||||
|
#include "main_window.h"
|
||||||
|
|
||||||
|
|
||||||
|
enum { SIGNAL_EP_STACK_SIZE = 16*1024 };
|
||||||
|
|
||||||
|
|
||||||
|
struct Report_handler
|
||||||
|
{
|
||||||
|
QMember<Report_proxy> proxy;
|
||||||
|
|
||||||
|
Genode::Attached_rom_dataspace channels_rom;
|
||||||
|
|
||||||
|
Genode::Entrypoint sig_ep;
|
||||||
|
Genode::Signal_handler<Report_handler> channels_handler;
|
||||||
|
|
||||||
|
Genode::Blockade _report_blockade { };
|
||||||
|
|
||||||
|
bool window_connected { false };
|
||||||
|
|
||||||
|
void _report(char const *data, size_t size)
|
||||||
|
{
|
||||||
|
Genode::Xml_node node(data, size);
|
||||||
|
proxy->report_changed(&_report_blockade, &node);
|
||||||
|
|
||||||
|
/* wait until the report was handled */
|
||||||
|
_report_blockade.block();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _handle_channels()
|
||||||
|
{
|
||||||
|
if (!window_connected)
|
||||||
|
return;
|
||||||
|
|
||||||
|
channels_rom.update();
|
||||||
|
|
||||||
|
if (channels_rom.valid())
|
||||||
|
_report(channels_rom.local_addr<char>(), channels_rom.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
Report_handler(Genode::Env &env)
|
||||||
|
:
|
||||||
|
channels_rom(env, "channel_list"),
|
||||||
|
sig_ep(env, SIGNAL_EP_STACK_SIZE, "signal ep",
|
||||||
|
Genode::Affinity::Location()),
|
||||||
|
channels_handler(sig_ep, *this, &Report_handler::_handle_channels)
|
||||||
|
{
|
||||||
|
channels_rom.sigh(channels_handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
void connect_window(Main_window *win)
|
||||||
|
{
|
||||||
|
QObject::connect(proxy, SIGNAL(report_changed(void *,void const*)),
|
||||||
|
win, SLOT(report_changed(void *, void const*)),
|
||||||
|
Qt::QueuedConnection);
|
||||||
|
|
||||||
|
window_connected = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static inline void load_stylesheet()
|
||||||
|
{
|
||||||
|
QFile file(":style.qss");
|
||||||
|
if (!file.open(QFile::ReadOnly)) {
|
||||||
|
qWarning() << "Warning:" << file.errorString()
|
||||||
|
<< "opening file" << file.fileName();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
qApp->setStyleSheet(QLatin1String(file.readAll()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Libc::Component::construct(Libc::Env &env)
|
||||||
|
{
|
||||||
|
Libc::with_libc([&] {
|
||||||
|
|
||||||
|
qpa_init(env);
|
||||||
|
|
||||||
|
int argc = 1;
|
||||||
|
char const *argv[] = { "mixer_gui_qt", 0 };
|
||||||
|
|
||||||
|
Report_handler *report_handler;
|
||||||
|
try { report_handler = new Report_handler(env); }
|
||||||
|
catch (...) {
|
||||||
|
Genode::error("Could not create Report_handler");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
QApplication app(argc, (char**)argv);
|
||||||
|
|
||||||
|
load_stylesheet();
|
||||||
|
|
||||||
|
QMember<Main_window> main_window(env);
|
||||||
|
main_window->show();
|
||||||
|
|
||||||
|
report_handler->connect_window(main_window);
|
||||||
|
|
||||||
|
app.connect(&app, SIGNAL(lastWindowClosed()), SLOT(quit()));
|
||||||
|
|
||||||
|
exit(app.exec());
|
||||||
|
});
|
||||||
|
}
|
463
repos/gems/src/app/mixer_gui_qt6/main_window.cpp
Normal file
463
repos/gems/src/app/mixer_gui_qt6/main_window.cpp
Normal file
@ -0,0 +1,463 @@
|
|||||||
|
/*
|
||||||
|
* \brief Main window of the mixer frontend
|
||||||
|
* \author Josef Soentgen
|
||||||
|
* \date 2015-10-15
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015-2017 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU Affero General Public License version 3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Genode includes */
|
||||||
|
#include <base/log.h>
|
||||||
|
#include <mixer/channel.h>
|
||||||
|
#include <base/attached_rom_dataspace.h>
|
||||||
|
#include <os/reporter.h>
|
||||||
|
#include <rom_session/connection.h>
|
||||||
|
|
||||||
|
/* Qt includes */
|
||||||
|
#include <QCheckBox>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QFrame>
|
||||||
|
#include <QGuiApplication>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QSlider>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
/* application includes */
|
||||||
|
#include "main_window.h"
|
||||||
|
|
||||||
|
|
||||||
|
/************
|
||||||
|
** helper **
|
||||||
|
************/
|
||||||
|
|
||||||
|
using Channel = Mixer::Channel;
|
||||||
|
|
||||||
|
static struct Names {
|
||||||
|
char const *name;
|
||||||
|
Channel::Number number;
|
||||||
|
} names[] = {
|
||||||
|
{ "left", Channel::Number::LEFT },
|
||||||
|
{ "front left", Channel::Number::LEFT },
|
||||||
|
{ "right", Channel::Number::RIGHT },
|
||||||
|
{ "front right", Channel::Number::RIGHT },
|
||||||
|
{ nullptr, Channel::Number::MAX_CHANNELS }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static char const *channel_string_from_number(Channel::Number ch)
|
||||||
|
{
|
||||||
|
for (Names *n = names; n->name; ++n)
|
||||||
|
if (ch == n->number)
|
||||||
|
return n->name;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* keep sorted! */
|
||||||
|
static struct Types {
|
||||||
|
char const *name;
|
||||||
|
Channel::Type type;
|
||||||
|
} types[] = {
|
||||||
|
{ "invalid", Channel::Type::TYPE_INVALID },
|
||||||
|
{ "input", Channel::Type::INPUT },
|
||||||
|
{ "output", Channel::Type::OUTPUT }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static char const *type_to_string(Channel::Type t) { return types[t].name; }
|
||||||
|
|
||||||
|
|
||||||
|
class Channel_widget : public Compound_widget<QFrame, QVBoxLayout>,
|
||||||
|
public Genode::List<Channel_widget>::Element
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
Channel::Number _number;
|
||||||
|
Channel::Type _type;
|
||||||
|
|
||||||
|
QCheckBox _muted_checkbox;
|
||||||
|
QSlider _slider { Qt::Vertical };
|
||||||
|
QHBoxLayout _slider_hbox;
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
|
||||||
|
void channel_changed();
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Channel_widget(Channel::Type type, Channel::Number number)
|
||||||
|
:
|
||||||
|
_number(number), _type(type),
|
||||||
|
_muted_checkbox("mute")
|
||||||
|
{
|
||||||
|
_slider.setMinimum(Channel::Volume_level::MIN);
|
||||||
|
_slider.setMaximum(Channel::Volume_level::MAX);
|
||||||
|
|
||||||
|
_slider_hbox.addStretch();
|
||||||
|
_slider_hbox.addWidget(&_slider, Qt::AlignCenter);
|
||||||
|
_slider_hbox.addStretch();
|
||||||
|
|
||||||
|
_layout->addLayout(&_slider_hbox);
|
||||||
|
_layout->addWidget(&_muted_checkbox);
|
||||||
|
|
||||||
|
connect(&_slider, SIGNAL(sliderReleased()),
|
||||||
|
this, SIGNAL(channel_changed()));
|
||||||
|
connect(&_muted_checkbox, SIGNAL(clicked(bool)),
|
||||||
|
this, SIGNAL(channel_changed()));
|
||||||
|
}
|
||||||
|
|
||||||
|
Channel::Number number() const { return _number; }
|
||||||
|
Channel::Type type() const { return _type; }
|
||||||
|
int volume() const { return _slider.value(); }
|
||||||
|
void volume(int v) { _slider.setValue(v); }
|
||||||
|
bool muted() const { return _muted_checkbox.checkState() == Qt::Checked; }
|
||||||
|
void muted(bool v) { _muted_checkbox.setChecked(v); }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class Client_widget : public Compound_widget<QFrame, QVBoxLayout>,
|
||||||
|
public Genode::List<Client_widget>::Element
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
bool valid { true };
|
||||||
|
|
||||||
|
void _sorted_insert(Channel_widget *cw)
|
||||||
|
{
|
||||||
|
Channel::Number const nr = cw->number();
|
||||||
|
|
||||||
|
Channel_widget const *last = nullptr;
|
||||||
|
Channel_widget const *w = _list.first();
|
||||||
|
for (; w; w = w->next()) {
|
||||||
|
if (w->number() > nr)
|
||||||
|
break;
|
||||||
|
last = w;
|
||||||
|
}
|
||||||
|
_list.insert(cw, last);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
Genode::List<Channel_widget> _list;
|
||||||
|
Channel::Label _label;
|
||||||
|
|
||||||
|
QLabel _name;
|
||||||
|
QHBoxLayout _hlayout;
|
||||||
|
|
||||||
|
static char const *_strip_label(Channel::Label const &label)
|
||||||
|
{
|
||||||
|
char const * str = label.string();
|
||||||
|
int pos = 0;
|
||||||
|
for (int i = 0; str[i]; i++)
|
||||||
|
if (str[i] == '>') pos = i+1;
|
||||||
|
|
||||||
|
return str+pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
|
||||||
|
void client_changed();
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Client_widget(Channel::Label const &label)
|
||||||
|
:
|
||||||
|
_label(label),
|
||||||
|
_name(_strip_label(_label))
|
||||||
|
{
|
||||||
|
setFrameStyle(QFrame::Panel | QFrame::Raised);
|
||||||
|
setLineWidth(4);
|
||||||
|
setToolTip(_label.string());
|
||||||
|
|
||||||
|
_name.setAlignment(Qt::AlignCenter);
|
||||||
|
_name.setContentsMargins(0, 0, 0, 5);
|
||||||
|
|
||||||
|
_layout->addWidget(&_name);
|
||||||
|
_layout->addLayout(&_hlayout);
|
||||||
|
_layout->setContentsMargins(10, 10, 10, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
~Client_widget()
|
||||||
|
{
|
||||||
|
while (Channel_widget *ch = _list.first()) {
|
||||||
|
disconnect(ch, SIGNAL(channel_changed()));
|
||||||
|
_hlayout.removeWidget(ch);
|
||||||
|
_list.remove(ch);
|
||||||
|
delete ch;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Channel::Label const &label() const { return _label; }
|
||||||
|
|
||||||
|
Channel_widget* lookup_channel(Channel::Number const number)
|
||||||
|
{
|
||||||
|
for (Channel_widget *ch = _list.first(); ch; ch = ch->next())
|
||||||
|
if (number == ch->number())
|
||||||
|
return ch;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
Channel_widget* add_channel(Channel::Type const type,
|
||||||
|
Channel::Number const number)
|
||||||
|
{
|
||||||
|
Channel_widget *ch = new Channel_widget(type, number);
|
||||||
|
connect(ch, SIGNAL(channel_changed()),
|
||||||
|
this, SIGNAL(client_changed()));
|
||||||
|
|
||||||
|
_sorted_insert(ch);
|
||||||
|
_hlayout.addWidget(ch);
|
||||||
|
|
||||||
|
return ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
Channel_widget const* first_channel() const { return _list.first(); }
|
||||||
|
|
||||||
|
void only_show_first()
|
||||||
|
{
|
||||||
|
Channel_widget *cw = _list.first();
|
||||||
|
while ((cw = cw->next())) cw->hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool combined_control() const
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Having a seperate volume control widget for each channel is
|
||||||
|
* nice-to-have but for now it is unnecessary. We therefore disable
|
||||||
|
* it the hardcoded way.
|
||||||
|
*/
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class Client_widget_registry : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
Genode::List<Client_widget> _list;
|
||||||
|
|
||||||
|
void _remove_destroy(Client_widget *c)
|
||||||
|
{
|
||||||
|
disconnect(c, SIGNAL(client_changed()));
|
||||||
|
_list.remove(c);
|
||||||
|
delete c;
|
||||||
|
}
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
|
||||||
|
void registry_changed();
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Client_widget_registry() : QObject() { }
|
||||||
|
|
||||||
|
Client_widget* first() { return _list.first(); }
|
||||||
|
|
||||||
|
Client_widget* lookup(Channel::Label const &label)
|
||||||
|
{
|
||||||
|
for (Client_widget *c = _list.first(); c; c = c->next()) {
|
||||||
|
if (label == c->label())
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
Client_widget* alloc_insert(Channel::Label const &label)
|
||||||
|
{
|
||||||
|
Client_widget *c = lookup(label);
|
||||||
|
if (c == nullptr) {
|
||||||
|
c = new Client_widget(label);
|
||||||
|
connect(c, SIGNAL(client_changed()),
|
||||||
|
this, SIGNAL(registry_changed()));
|
||||||
|
_list.insert(c);
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
void invalidate_all()
|
||||||
|
{
|
||||||
|
for (Client_widget *c = _list.first(); c; c = c->next())
|
||||||
|
c->valid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void remove_invalid()
|
||||||
|
{
|
||||||
|
for (Client_widget *c = _list.first(); c; c = c->next())
|
||||||
|
if (c->valid == false) _remove_destroy(c);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static Client_widget_registry *client_registry()
|
||||||
|
{
|
||||||
|
static Client_widget_registry inst;
|
||||||
|
return &inst;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static char const * const config_file = "/config/mixer.config";
|
||||||
|
|
||||||
|
|
||||||
|
static int write_config(char const *file, char const *data, size_t length)
|
||||||
|
{
|
||||||
|
if (length == 0) return 0;
|
||||||
|
|
||||||
|
QFile mixer_file(file);
|
||||||
|
if (!mixer_file.open(QIODevice::WriteOnly)) {
|
||||||
|
Genode::error("could not open '", file, "'");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
mixer_file.write(data, length);
|
||||||
|
mixer_file.close();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Main_window::_update_config()
|
||||||
|
{
|
||||||
|
char xml_data[2048];
|
||||||
|
size_t xml_used = 0;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Genode::Xml_generator xml(xml_data, sizeof(xml_data), "config", [&] {
|
||||||
|
|
||||||
|
xml.node("default", [&] {
|
||||||
|
xml.attribute("out_volume", _default_out_volume);
|
||||||
|
xml.attribute("volume", _default_volume);
|
||||||
|
xml.attribute("muted", _default_muted);
|
||||||
|
});
|
||||||
|
|
||||||
|
xml.node("channel_list", [&] {
|
||||||
|
for (Client_widget const *c = client_registry()->first(); c; c = c->next()) {
|
||||||
|
bool const combined = c->combined_control();
|
||||||
|
|
||||||
|
static int vol = 0;
|
||||||
|
static bool muted = true;
|
||||||
|
if (combined) {
|
||||||
|
Channel_widget const *w = c->first_channel();
|
||||||
|
vol = w->volume();
|
||||||
|
muted = w->muted();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Channel_widget const *w = c->first_channel(); w; w = w->next()) {
|
||||||
|
Channel::Number const nr = w->number();
|
||||||
|
xml.node("channel", [&] {
|
||||||
|
xml.attribute("type", type_to_string(w->type()));
|
||||||
|
xml.attribute("label", c->label().string());
|
||||||
|
xml.attribute("name", channel_string_from_number(nr));
|
||||||
|
xml.attribute("number", nr);
|
||||||
|
xml.attribute("volume", combined ? vol : w->volume());
|
||||||
|
xml.attribute("muted", combined ? muted : w->muted());
|
||||||
|
});
|
||||||
|
|
||||||
|
if (_verbose)
|
||||||
|
Genode::log("label: '", c->label(), "' "
|
||||||
|
"volume: ", combined ? vol : w->volume(), " "
|
||||||
|
"muted: ", combined ? muted : w->muted());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
xml_used = xml.used();
|
||||||
|
|
||||||
|
} catch (...) { Genode::warning("could generate 'mixer.config'"); }
|
||||||
|
|
||||||
|
write_config(config_file, xml_data, xml_used);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Main_window::_update_clients(Genode::Xml_node &channels)
|
||||||
|
{
|
||||||
|
for (Client_widget *c = client_registry()->first(); c; c = c->next())
|
||||||
|
_layout->removeWidget(c);
|
||||||
|
|
||||||
|
client_registry()->invalidate_all();
|
||||||
|
|
||||||
|
channels.for_each_sub_node("channel", [&] (Genode::Xml_node const &node) {
|
||||||
|
try {
|
||||||
|
Channel ch(node);
|
||||||
|
|
||||||
|
Client_widget *c = client_registry()->lookup(ch.label);
|
||||||
|
if (c == nullptr)
|
||||||
|
c = client_registry()->alloc_insert(ch.label);
|
||||||
|
|
||||||
|
Channel_widget *w = c->lookup_channel(ch.number);
|
||||||
|
if (w == nullptr)
|
||||||
|
w = c->add_channel(ch.type, ch.number);
|
||||||
|
|
||||||
|
w->volume(ch.volume);
|
||||||
|
w->muted(ch.muted);
|
||||||
|
|
||||||
|
if (c->combined_control()) c->only_show_first();
|
||||||
|
else w->show();
|
||||||
|
|
||||||
|
c->valid = true;
|
||||||
|
|
||||||
|
_layout->addWidget(c);
|
||||||
|
resize(sizeHint());
|
||||||
|
} catch (Channel::Invalid_channel) { Genode::warning("invalid channel node"); }
|
||||||
|
});
|
||||||
|
|
||||||
|
client_registry()->remove_invalid();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets called from the Genode to Qt proxy object when the report was
|
||||||
|
* updated with a pointer to the XML document.
|
||||||
|
*/
|
||||||
|
void Main_window::report_changed(void *l, void const *p)
|
||||||
|
{
|
||||||
|
Genode::Blockade &blockade = *reinterpret_cast<Genode::Blockade*>(l);
|
||||||
|
Genode::Xml_node &node = *((Genode::Xml_node*)p);
|
||||||
|
|
||||||
|
if (node.has_type("channel_list"))
|
||||||
|
_update_clients(node);
|
||||||
|
|
||||||
|
blockade.wakeup();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Main_window::Main_window(Genode::Env &env)
|
||||||
|
:
|
||||||
|
_default_out_volume(0),
|
||||||
|
_default_volume(0),
|
||||||
|
_default_muted(true)
|
||||||
|
{
|
||||||
|
connect(client_registry(), SIGNAL(registry_changed()),
|
||||||
|
this, SLOT(_update_config()));
|
||||||
|
|
||||||
|
using namespace Genode;
|
||||||
|
|
||||||
|
Attached_rom_dataspace const config(env, "config");
|
||||||
|
_verbose = config.xml().attribute_value("verbose", false);
|
||||||
|
config.xml().with_sub_node("default",
|
||||||
|
[&] (Xml_node const &node) {
|
||||||
|
_default_out_volume = node.attribute_value("out_volume", 0L);
|
||||||
|
_default_volume = node.attribute_value("volume", 0L);
|
||||||
|
_default_muted = node.attribute_value("muted", 1L);
|
||||||
|
},
|
||||||
|
[&] { warning("no <default> node found, fallback is 'muted=1'"); }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Main_window::~Main_window()
|
||||||
|
{
|
||||||
|
disconnect(client_registry(), SIGNAL(registry_changed()));
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "main_window.moc"
|
75
repos/gems/src/app/mixer_gui_qt6/main_window.h
Normal file
75
repos/gems/src/app/mixer_gui_qt6/main_window.h
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
* \brief Main window of the mixer Qt frontend
|
||||||
|
* \author Josef Soentgen
|
||||||
|
* \date 2015-10-15
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015-2017 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU Affero General Public License version 3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _MAIN_WINDOW_H_
|
||||||
|
#define _MAIN_WINDOW_H_
|
||||||
|
|
||||||
|
/* Genode includes */
|
||||||
|
#include <base/env.h>
|
||||||
|
#include <util/xml_node.h>
|
||||||
|
|
||||||
|
/* Qt includes */
|
||||||
|
#include <QEvent>
|
||||||
|
#include <QHBoxLayout>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
/* Qoost includes */
|
||||||
|
#include <qoost/compound_widget.h>
|
||||||
|
#include <qoost/qmember.h>
|
||||||
|
|
||||||
|
/* application includes */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class proxies Genode signals to Qt signals
|
||||||
|
*/
|
||||||
|
struct Report_proxy : QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
|
||||||
|
void report_changed(void *, void const *);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class Main_window : public Compound_widget<QWidget, QHBoxLayout>
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
int _default_out_volume;
|
||||||
|
int _default_volume;
|
||||||
|
bool _default_muted;
|
||||||
|
|
||||||
|
bool _verbose;
|
||||||
|
|
||||||
|
void _update_clients(Genode::Xml_node &);
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
|
||||||
|
void _update_config();
|
||||||
|
|
||||||
|
public Q_SLOTS:
|
||||||
|
|
||||||
|
void report_changed(void *, void const *);
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Main_window(Genode::Env &);
|
||||||
|
|
||||||
|
~Main_window();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _MAIN_WINDOW_H_ */
|
7
repos/gems/src/app/mixer_gui_qt6/mixer_gui_qt.pro
Normal file
7
repos/gems/src/app/mixer_gui_qt6/mixer_gui_qt.pro
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
QT += core gui widgets
|
||||||
|
TEMPLATE = app
|
||||||
|
CONFIG += c++2a
|
||||||
|
SOURCES += main.cpp \
|
||||||
|
main_window.cpp
|
||||||
|
HEADERS += main_window.h
|
||||||
|
RESOURCES = style.qrc
|
6
repos/gems/src/app/mixer_gui_qt6/style.qrc
Normal file
6
repos/gems/src/app/mixer_gui_qt6/style.qrc
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<!DOCTYPE RCC>
|
||||||
|
<RCC version="1.0">
|
||||||
|
<qresource prefix="/">
|
||||||
|
<file>style.qss</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
5
repos/gems/src/app/mixer_gui_qt6/style.qss
Normal file
5
repos/gems/src/app/mixer_gui_qt6/style.qss
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Main_window { min-width: 100; min-height: 100px; }
|
||||||
|
|
||||||
|
Client_widget QFrame {
|
||||||
|
padding: 5px;
|
||||||
|
}
|
12
repos/gems/src/app/mixer_gui_qt6/target.mk
Normal file
12
repos/gems/src/app/mixer_gui_qt6/target.mk
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
QMAKE_PROJECT_FILE = $(PRG_DIR)/mixer_gui_qt.pro
|
||||||
|
|
||||||
|
QMAKE_TARGET_BINARIES = mixer_gui_qt
|
||||||
|
|
||||||
|
QT6_PORT_LIBS = libQt6Core libQt6Gui libQt6Widgets
|
||||||
|
|
||||||
|
LIBS = qt6_qmake base libc libm mesa stdcxx qoost
|
||||||
|
|
||||||
|
QT6_COMPONENT_LIB_SO =
|
||||||
|
|
||||||
|
QT6_GENODE_LIBS_APP += ld.lib.so
|
||||||
|
qmake_prepared.tag: $(addprefix build_dependencies/lib/,$(QT6_GENODE_LIBS_APP))
|
44
repos/gems/src/test/tiled_wm_qt6/app/app.cpp
Normal file
44
repos/gems/src/test/tiled_wm_qt6/app/app.cpp
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* \brief Tiled-WM test: example application widget
|
||||||
|
* \author Christian Helmuth
|
||||||
|
* \date 2018-09-28
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU Affero General Public License version 3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Qt includes */
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
|
/* local includes */
|
||||||
|
#include "app.h"
|
||||||
|
|
||||||
|
|
||||||
|
App::App(QString name)
|
||||||
|
{
|
||||||
|
_name->setText("This is <b>" + name + "</b> an example application for the tiled-WM test.");
|
||||||
|
_entry->setPlaceholderText("Placeholder text");
|
||||||
|
|
||||||
|
_layout->addWidget(new Spacer(), 1);
|
||||||
|
_layout->addWidget(_name);
|
||||||
|
_layout->addWidget(new Spacer(), 1);
|
||||||
|
_layout->addWidget(_entry);
|
||||||
|
_layout->addWidget(new Spacer(), 1);
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; ++i) {
|
||||||
|
QLabel *l = new QLabel(QString("QLabel No." + QString::number(i)));
|
||||||
|
l->setToolTip(QString::number(i) + " is just a number.");
|
||||||
|
_layout->addWidget(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
_layout->addWidget(new Spacer(), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
App::~App()
|
||||||
|
{
|
||||||
|
}
|
46
repos/gems/src/test/tiled_wm_qt6/app/app.h
Normal file
46
repos/gems/src/test/tiled_wm_qt6/app/app.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* \brief TIled-WM test: example application widget
|
||||||
|
* \author Christian Helmuth
|
||||||
|
* \date 2018-09-28
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU Affero General Public License version 3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _TEST__TILED_WM__APP__APP_H_
|
||||||
|
#define _TEST__TILED_WM__APP__APP_H_
|
||||||
|
|
||||||
|
/* Qt includes */
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QLineEdit>
|
||||||
|
|
||||||
|
/* Qoost includes */
|
||||||
|
#include <qoost/compound_widget.h>
|
||||||
|
#include <qoost/qmember.h>
|
||||||
|
|
||||||
|
/* local includes */
|
||||||
|
#include <util.h>
|
||||||
|
|
||||||
|
|
||||||
|
class App : public Compound_widget<QWidget, QVBoxLayout>
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
QMember<QLabel> _name;
|
||||||
|
QMember<QLineEdit> _entry;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
App(QString name);
|
||||||
|
~App();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _TEST__TILED_WM__APP__APP_H_ */
|
7
repos/gems/src/test/tiled_wm_qt6/app/app.pro
Normal file
7
repos/gems/src/test/tiled_wm_qt6/app/app.pro
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
TEMPLATE = app
|
||||||
|
TARGET = test-tiled_wm-app
|
||||||
|
QT = core gui widgets
|
||||||
|
CONFIG += c++2a
|
||||||
|
SOURCES += main.cpp app.cpp
|
||||||
|
HEADERS += app.h ../util.h
|
||||||
|
RESOURCES = app.qrc
|
8
repos/gems/src/test/tiled_wm_qt6/app/app.qrc
Normal file
8
repos/gems/src/test/tiled_wm_qt6/app/app.qrc
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<!DOCTYPE RCC>
|
||||||
|
<RCC version="1.0">
|
||||||
|
<qresource prefix="/">
|
||||||
|
<file>../style.qss</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
||||||
|
|
||||||
|
<!-- vi: set ft=xml : -->
|
55
repos/gems/src/test/tiled_wm_qt6/app/main.cpp
Normal file
55
repos/gems/src/test/tiled_wm_qt6/app/main.cpp
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* \brief Tiled-WM test: example application
|
||||||
|
* \author Christian Helmuth
|
||||||
|
* \date 2018-09-26
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU Affero General Public License version 3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Genode includes */
|
||||||
|
#include <base/attached_rom_dataspace.h>
|
||||||
|
|
||||||
|
/* local includes */
|
||||||
|
#include <util.h>
|
||||||
|
#include "app.h"
|
||||||
|
|
||||||
|
|
||||||
|
struct Main
|
||||||
|
{
|
||||||
|
Libc::Env &env;
|
||||||
|
|
||||||
|
Genode::Attached_rom_dataspace config { env, "config" };
|
||||||
|
|
||||||
|
QApplication &app { qt6_initialization(env) };
|
||||||
|
|
||||||
|
QMember<App> widget { name_from_config() };
|
||||||
|
|
||||||
|
QString name_from_config()
|
||||||
|
{
|
||||||
|
Name name = config.xml().attribute_value("name", Name("no name"));
|
||||||
|
|
||||||
|
return QString(name.string());
|
||||||
|
}
|
||||||
|
|
||||||
|
Main(Libc::Env &env) : env(env)
|
||||||
|
{
|
||||||
|
widget->show();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void Libc::Component::construct(Libc::Env &env)
|
||||||
|
{
|
||||||
|
Libc::with_libc([&] {
|
||||||
|
|
||||||
|
static Main main { env };
|
||||||
|
|
||||||
|
exit(main.app.exec());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
4
repos/gems/src/test/tiled_wm_qt6/app/target.mk
Normal file
4
repos/gems/src/test/tiled_wm_qt6/app/target.mk
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
QMAKE_PROJECT_FILE = $(PRG_DIR)/app.pro
|
||||||
|
QMAKE_TARGET_BINARIES = test-tiled_wm-app
|
||||||
|
|
||||||
|
include $(PRG_DIR)/../target.inc
|
210
repos/gems/src/test/tiled_wm_qt6/manager/main.cc
Normal file
210
repos/gems/src/test/tiled_wm_qt6/manager/main.cc
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
/*
|
||||||
|
* \brief Tiled-WM test: GUI manager
|
||||||
|
* \author Christian Helmuth
|
||||||
|
* \date 2018-09-26
|
||||||
|
*
|
||||||
|
* GUI manager implements the user-visible display state machine.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU Affero General Public License version 3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Genode includes */
|
||||||
|
#include <base/component.h>
|
||||||
|
#include <util/string.h>
|
||||||
|
#include <base/log.h>
|
||||||
|
#include <base/attached_rom_dataspace.h>
|
||||||
|
#include <os/reporter.h>
|
||||||
|
|
||||||
|
|
||||||
|
using Name = Genode::String<32>;
|
||||||
|
|
||||||
|
|
||||||
|
namespace Test { struct Manager; }
|
||||||
|
|
||||||
|
struct Test::Manager
|
||||||
|
{
|
||||||
|
Genode::Env &env;
|
||||||
|
|
||||||
|
Genode::Attached_rom_dataspace content_request_rom { env, "content_request" };
|
||||||
|
Genode::Attached_rom_dataspace overlay_request_rom { env, "overlay_request" };
|
||||||
|
|
||||||
|
Genode::Signal_handler<Manager> content_request_handler {
|
||||||
|
env.ep(), *this, &Manager::handle_content_request };
|
||||||
|
Genode::Signal_handler<Manager> overlay_request_handler {
|
||||||
|
env.ep(), *this, &Manager::handle_overlay_request };
|
||||||
|
|
||||||
|
Genode::Reporter apps_report { env, "apps" };
|
||||||
|
Genode::Reporter overlay_report { env, "overlay" };
|
||||||
|
|
||||||
|
Genode::Reporter layout_rules_report { env, "rules", "layout_rules" };
|
||||||
|
|
||||||
|
struct App {
|
||||||
|
char const *label;
|
||||||
|
char const *name;
|
||||||
|
bool visible;
|
||||||
|
} apps[3] {
|
||||||
|
{ "test-tiled_wm-app-1", "app1", true },
|
||||||
|
{ "test-tiled_wm-app-2", "app2", false },
|
||||||
|
{ "textedit", "textedit", false }
|
||||||
|
};
|
||||||
|
|
||||||
|
bool overlay_visible { false };
|
||||||
|
|
||||||
|
void report_apps();
|
||||||
|
void report_overlay();
|
||||||
|
void report_layout_rules();
|
||||||
|
|
||||||
|
void handle_content_request();
|
||||||
|
void handle_overlay_request();
|
||||||
|
|
||||||
|
Manager(Genode::Env &env);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void Test::Manager::handle_content_request()
|
||||||
|
{
|
||||||
|
content_request_rom.update();
|
||||||
|
|
||||||
|
Name requested_app =
|
||||||
|
content_request_rom.xml().attribute_value("name", Name());
|
||||||
|
|
||||||
|
if (!requested_app.valid()) return;
|
||||||
|
|
||||||
|
App *found = nullptr;
|
||||||
|
for (App &app : apps) {
|
||||||
|
if (requested_app != app.name) continue;
|
||||||
|
found = &app;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!found || found->visible) return;
|
||||||
|
|
||||||
|
for (App &app : apps) {
|
||||||
|
if (&app == found) {
|
||||||
|
app.visible = true;
|
||||||
|
} else {
|
||||||
|
app.visible = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
report_apps();
|
||||||
|
report_layout_rules();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Test::Manager::handle_overlay_request()
|
||||||
|
{
|
||||||
|
overlay_request_rom.update();
|
||||||
|
|
||||||
|
bool const request_visible =
|
||||||
|
overlay_request_rom.xml().attribute_value("visible", false);
|
||||||
|
|
||||||
|
if (request_visible == overlay_visible) return;
|
||||||
|
|
||||||
|
overlay_visible = request_visible;
|
||||||
|
|
||||||
|
report_overlay();
|
||||||
|
report_layout_rules();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Test::Manager::report_apps()
|
||||||
|
{
|
||||||
|
Genode::Reporter::Xml_generator xml(apps_report, [&] () {
|
||||||
|
for (App &app : apps) {
|
||||||
|
xml.node("app", [&] () {
|
||||||
|
xml.attribute("name", app.name);
|
||||||
|
xml.attribute("visible", app.visible);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Test::Manager::report_overlay()
|
||||||
|
{
|
||||||
|
Genode::Reporter::Xml_generator xml(overlay_report, [&] () {
|
||||||
|
xml.attribute("visible", overlay_visible);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Test::Manager::report_layout_rules()
|
||||||
|
{
|
||||||
|
Genode::Reporter::Xml_generator xml(layout_rules_report, [&] () {
|
||||||
|
xml.node("screen", [&] () {
|
||||||
|
xml.node("column", [&] () {
|
||||||
|
xml.attribute("name", "screen");
|
||||||
|
xml.attribute("layer", "1");
|
||||||
|
xml.node("row", [&] () {
|
||||||
|
xml.attribute("name", "panel");
|
||||||
|
xml.attribute("layer", "2");
|
||||||
|
xml.attribute("height", "24");
|
||||||
|
});
|
||||||
|
xml.node("row", [&] () {
|
||||||
|
xml.attribute("name", "content");
|
||||||
|
xml.attribute("layer", "4");
|
||||||
|
xml.node("column", [&] () {
|
||||||
|
xml.attribute("weight", "2");
|
||||||
|
});
|
||||||
|
xml.node("column", [&] () {
|
||||||
|
xml.attribute("name", "overlay");
|
||||||
|
xml.attribute("layer", "3");
|
||||||
|
xml.attribute("weight", "1");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
xml.node("assign", [&] () {
|
||||||
|
xml.attribute("label_prefix", "test-tiled_wm-panel");
|
||||||
|
xml.attribute("target", "panel");
|
||||||
|
});
|
||||||
|
xml.node("assign", [&] () {
|
||||||
|
xml.attribute("label_prefix", "test-tiled_wm-overlay");
|
||||||
|
xml.attribute("target", "overlay");
|
||||||
|
if (!overlay_visible)
|
||||||
|
xml.attribute("visible", false);
|
||||||
|
});
|
||||||
|
|
||||||
|
/* debug */
|
||||||
|
if (false) {
|
||||||
|
xml.node("assign", [&] () {
|
||||||
|
xml.attribute("label_prefix", "");
|
||||||
|
xml.attribute("target", "screen");
|
||||||
|
xml.attribute("xpos", "any");
|
||||||
|
xml.attribute("ypos", "any");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (App &app : apps) {
|
||||||
|
xml.node("assign", [&] () {
|
||||||
|
xml.attribute("label_prefix", app.label);
|
||||||
|
xml.attribute("target", "content");
|
||||||
|
if (!app.visible)
|
||||||
|
xml.attribute("visible", "false");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Test::Manager::Manager(Genode::Env &env) : env(env)
|
||||||
|
{
|
||||||
|
apps_report.enabled(true);
|
||||||
|
overlay_report.enabled(true);
|
||||||
|
layout_rules_report.enabled(true);
|
||||||
|
|
||||||
|
content_request_rom.sigh(content_request_handler);
|
||||||
|
overlay_request_rom.sigh(overlay_request_handler);
|
||||||
|
|
||||||
|
report_apps();
|
||||||
|
report_overlay();
|
||||||
|
report_layout_rules();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Component::construct(Genode::Env &env) { static Test::Manager manager(env); }
|
3
repos/gems/src/test/tiled_wm_qt6/manager/target.mk
Normal file
3
repos/gems/src/test/tiled_wm_qt6/manager/target.mk
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
TARGET = test-tiled_wm-manager
|
||||||
|
SRC_CC = main.cc
|
||||||
|
LIBS = base
|
43
repos/gems/src/test/tiled_wm_qt6/overlay/main.cpp
Normal file
43
repos/gems/src/test/tiled_wm_qt6/overlay/main.cpp
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* \brief Tiled-WM test: example overlay
|
||||||
|
* \author Christian Helmuth
|
||||||
|
* \date 2018-09-28
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU Affero General Public License version 3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* local includes */
|
||||||
|
#include <util.h>
|
||||||
|
#include "overlay.h"
|
||||||
|
|
||||||
|
|
||||||
|
struct Main
|
||||||
|
{
|
||||||
|
Libc::Env &env;
|
||||||
|
|
||||||
|
QApplication &app { qt6_initialization(env) };
|
||||||
|
|
||||||
|
QMember<Overlay> widget { };
|
||||||
|
|
||||||
|
Main(Libc::Env &env) : env(env)
|
||||||
|
{
|
||||||
|
widget->show();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void Libc::Component::construct(Libc::Env &env)
|
||||||
|
{
|
||||||
|
Libc::with_libc([&] {
|
||||||
|
|
||||||
|
static Main main { env };
|
||||||
|
|
||||||
|
exit(main.app.exec());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
36
repos/gems/src/test/tiled_wm_qt6/overlay/overlay.cpp
Normal file
36
repos/gems/src/test/tiled_wm_qt6/overlay/overlay.cpp
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* \brief Tiled-WM test: overlay widget
|
||||||
|
* \author Christian Helmuth
|
||||||
|
* \date 2018-09-28
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU Affero General Public License version 3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Qt includes */
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
|
/* local includes */
|
||||||
|
#include "overlay.h"
|
||||||
|
|
||||||
|
|
||||||
|
Overlay::Overlay()
|
||||||
|
{
|
||||||
|
_label->setText("WiFi overlay");
|
||||||
|
_entry->setEchoMode(QLineEdit::Password);
|
||||||
|
|
||||||
|
_layout->addWidget(new Spacer(), 1);
|
||||||
|
_layout->addWidget(_label);
|
||||||
|
_layout->addWidget(new Spacer(), 1);
|
||||||
|
_layout->addWidget(_entry);
|
||||||
|
_layout->addWidget(new Spacer(), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Overlay::~Overlay()
|
||||||
|
{
|
||||||
|
}
|
46
repos/gems/src/test/tiled_wm_qt6/overlay/overlay.h
Normal file
46
repos/gems/src/test/tiled_wm_qt6/overlay/overlay.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* \brief Tiled-WM test: overlay widget
|
||||||
|
* \author Christian Helmuth
|
||||||
|
* \date 2018-09-28
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU Affero General Public License version 3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _TEST__TILED_WM__OVERLAY__OVERLAY_H_
|
||||||
|
#define _TEST__TILED_WM__OVERLAY__OVERLAY_H_
|
||||||
|
|
||||||
|
/* Qt includes */
|
||||||
|
#include <QHBoxLayout>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QLineEdit>
|
||||||
|
|
||||||
|
/* Qoost includes */
|
||||||
|
#include <qoost/compound_widget.h>
|
||||||
|
#include <qoost/qmember.h>
|
||||||
|
|
||||||
|
/* local includes */
|
||||||
|
#include <util.h>
|
||||||
|
|
||||||
|
|
||||||
|
class Overlay : public Compound_widget<QWidget, QHBoxLayout>
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
QMember<QLabel> _label;
|
||||||
|
QMember<QLineEdit> _entry;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Overlay();
|
||||||
|
~Overlay();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _TEST__TILED_WM__OVERLAY__OVERLAY_H_ */
|
7
repos/gems/src/test/tiled_wm_qt6/overlay/overlay.pro
Normal file
7
repos/gems/src/test/tiled_wm_qt6/overlay/overlay.pro
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
TEMPLATE = app
|
||||||
|
TARGET = test-tiled_wm-overlay
|
||||||
|
QT = core gui widgets
|
||||||
|
CONFIG += c++2a
|
||||||
|
SOURCES += main.cpp overlay.cpp
|
||||||
|
HEADERS += overlay.h ../util.h
|
||||||
|
RESOURCES = overlay.qrc
|
8
repos/gems/src/test/tiled_wm_qt6/overlay/overlay.qrc
Normal file
8
repos/gems/src/test/tiled_wm_qt6/overlay/overlay.qrc
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<!DOCTYPE RCC>
|
||||||
|
<RCC version="1.0">
|
||||||
|
<qresource prefix="/">
|
||||||
|
<file>../style.qss</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
||||||
|
|
||||||
|
<!-- vi: set ft=xml : -->
|
4
repos/gems/src/test/tiled_wm_qt6/overlay/target.mk
Normal file
4
repos/gems/src/test/tiled_wm_qt6/overlay/target.mk
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
QMAKE_PROJECT_FILE = $(PRG_DIR)/overlay.pro
|
||||||
|
QMAKE_TARGET_BINARIES = test-tiled_wm-overlay
|
||||||
|
|
||||||
|
include $(PRG_DIR)/../target.inc
|
46
repos/gems/src/test/tiled_wm_qt6/panel/main.cpp
Normal file
46
repos/gems/src/test/tiled_wm_qt6/panel/main.cpp
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* \brief Tiled-WM test: panel
|
||||||
|
* \author Christian Helmuth
|
||||||
|
* \date 2018-09-26
|
||||||
|
*
|
||||||
|
* Panel is a Qt6-based example panel at the bottom of the screen.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU Affero General Public License version 3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* local includes */
|
||||||
|
#include "panel.h"
|
||||||
|
|
||||||
|
|
||||||
|
struct Main
|
||||||
|
{
|
||||||
|
Libc::Env &env;
|
||||||
|
|
||||||
|
Genode::Entrypoint signal_ep { env, 0x4000, "signal ep",
|
||||||
|
Genode::Affinity::Location() };
|
||||||
|
|
||||||
|
QApplication &app { qt6_initialization(env) };
|
||||||
|
|
||||||
|
QMember<Panel> widget { env, signal_ep };
|
||||||
|
|
||||||
|
Main(Libc::Env &env) : env(env)
|
||||||
|
{
|
||||||
|
widget->show();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void Libc::Component::construct(Libc::Env &env)
|
||||||
|
{
|
||||||
|
Libc::with_libc([&] {
|
||||||
|
|
||||||
|
static Main main { env };
|
||||||
|
|
||||||
|
exit(main.app.exec());
|
||||||
|
});
|
||||||
|
}
|
148
repos/gems/src/test/tiled_wm_qt6/panel/panel.cpp
Normal file
148
repos/gems/src/test/tiled_wm_qt6/panel/panel.cpp
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
/*
|
||||||
|
* \brief Tiled-WM test: panel widget
|
||||||
|
* \author Christian Helmuth
|
||||||
|
* \date 2018-09-28
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU Affero General Public License version 3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Qt includes */
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
|
/* local includes */
|
||||||
|
#include "panel.h"
|
||||||
|
|
||||||
|
|
||||||
|
void Panel_button::_clicked() { Q_EMIT clicked(text()); if (text() == "Panel") showMenu(); }
|
||||||
|
void Panel_button::_toggled(bool checked) { Q_EMIT toggled(checked, text()); }
|
||||||
|
|
||||||
|
|
||||||
|
Panel_button::Panel_button(QString label)
|
||||||
|
{
|
||||||
|
if (!label.isNull()) {
|
||||||
|
setText(label);
|
||||||
|
}
|
||||||
|
|
||||||
|
setCheckable(true);
|
||||||
|
setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
|
||||||
|
|
||||||
|
_layout->addWidget(_icon, 0, Qt::AlignCenter);
|
||||||
|
|
||||||
|
if (label == "Panel") {
|
||||||
|
_menu->addAction("Action");
|
||||||
|
setMenu(_menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
connect(this, SIGNAL(clicked()), SLOT(_clicked()));
|
||||||
|
connect(this, SIGNAL(toggled(bool)), SLOT(_toggled(bool)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Panel_button::~Panel_button() { }
|
||||||
|
|
||||||
|
|
||||||
|
void App_bar::_app_button(QAbstractButton *b, bool checked)
|
||||||
|
{
|
||||||
|
if (!checked) return;
|
||||||
|
|
||||||
|
if (Panel_button *button = qobject_cast<Panel_button *>(b)) {
|
||||||
|
Name name { button->text().toUtf8().constData() };
|
||||||
|
|
||||||
|
Genode::Reporter::Xml_generator xml(_content_request, [&] () {
|
||||||
|
xml.attribute("name", name);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void App_bar::_handle_apps()
|
||||||
|
{
|
||||||
|
/* empty bar before adding current apps */
|
||||||
|
while (QLayoutItem *item = _layout->takeAt(0)) {
|
||||||
|
if (Panel_button *button = qobject_cast<Panel_button *>(item->widget())) {
|
||||||
|
_button_group->removeButton(button);
|
||||||
|
button->deleteLater();
|
||||||
|
}
|
||||||
|
delete item;
|
||||||
|
}
|
||||||
|
|
||||||
|
_apps.update();
|
||||||
|
|
||||||
|
Panel_button *visible_app_button = nullptr;
|
||||||
|
|
||||||
|
_apps.xml().for_each_sub_node("app", [&] (Genode::Xml_node node) {
|
||||||
|
QString const name { node.attribute_value("name", Name("no name")).string() };
|
||||||
|
bool const visible { node.attribute_value("visible", false) };
|
||||||
|
Panel_button *button { new Panel_button(name) };
|
||||||
|
|
||||||
|
if (visible) visible_app_button = button;
|
||||||
|
|
||||||
|
_button_group->addButton(button);
|
||||||
|
_layout->addWidget(button);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (visible_app_button) visible_app_button->setChecked(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
App_bar::App_bar(Genode::Env &env, Genode::Entrypoint &sig_ep)
|
||||||
|
:
|
||||||
|
_apps(env, "apps"), _content_request(env, "content_request"),
|
||||||
|
_apps_proxy(sig_ep)
|
||||||
|
{
|
||||||
|
_content_request.enabled(true);
|
||||||
|
|
||||||
|
_button_group->setExclusive(true);
|
||||||
|
|
||||||
|
_handle_apps();
|
||||||
|
|
||||||
|
_apps.sigh(*_apps_proxy);
|
||||||
|
|
||||||
|
connect(_apps_proxy, SIGNAL(signal()), SLOT(_handle_apps()));
|
||||||
|
connect(_button_group, SIGNAL(buttonToggled(QAbstractButton *, bool)),
|
||||||
|
SLOT(_app_button(QAbstractButton *, bool)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
App_bar::~App_bar() { }
|
||||||
|
|
||||||
|
|
||||||
|
void Panel::_wifi_toggled(bool checked)
|
||||||
|
{
|
||||||
|
Genode::Reporter::Xml_generator xml(_overlay_request, [&] () {
|
||||||
|
xml.attribute("visible", checked);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Panel::Panel(Genode::Env &env, Genode::Entrypoint &sig_ep)
|
||||||
|
:
|
||||||
|
_overlay(env, "overlay"), _overlay_request(env, "overlay_request"),
|
||||||
|
_panel_button("Panel"), _app_bar(env, sig_ep)
|
||||||
|
{
|
||||||
|
_layout->addWidget(_panel_button);
|
||||||
|
_layout->addWidget(new Spacer(), 1);
|
||||||
|
_layout->addWidget(_app_bar);
|
||||||
|
_layout->addWidget(new Spacer(), 1);
|
||||||
|
_layout->addWidget(_wifi_button);
|
||||||
|
|
||||||
|
_panel_button->setCheckable(false);
|
||||||
|
_panel_button->setToolTip("This panel is just an example.");
|
||||||
|
|
||||||
|
_wifi_button->setObjectName("wifi");
|
||||||
|
_wifi_button->setToolTip("Open WiFi overlay");
|
||||||
|
|
||||||
|
_overlay_request.enabled(true);
|
||||||
|
|
||||||
|
_wifi_toggled(_wifi_button->isChecked());
|
||||||
|
|
||||||
|
connect(_wifi_button, SIGNAL(toggled(bool)), SLOT(_wifi_toggled(bool)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Panel::~Panel() { }
|
111
repos/gems/src/test/tiled_wm_qt6/panel/panel.h
Normal file
111
repos/gems/src/test/tiled_wm_qt6/panel/panel.h
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
/*
|
||||||
|
* \brief Tiled-WM test: panel widget
|
||||||
|
* \author Christian Helmuth
|
||||||
|
* \date 2018-09-27
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU Affero General Public License version 3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _TEST__TILED_WM__PANEL__PANEL_H_
|
||||||
|
#define _TEST__TILED_WM__PANEL__PANEL_H_
|
||||||
|
|
||||||
|
/* Qt includes */
|
||||||
|
#include <QHBoxLayout>
|
||||||
|
#include <QPushButton>
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QButtonGroup>
|
||||||
|
#include <QMenu>
|
||||||
|
|
||||||
|
/* Qoost includes */
|
||||||
|
#include <qoost/compound_widget.h>
|
||||||
|
#include <qoost/qmember.h>
|
||||||
|
|
||||||
|
/* Genode includes */
|
||||||
|
#include <base/attached_rom_dataspace.h>
|
||||||
|
#include <os/reporter.h>
|
||||||
|
|
||||||
|
/* local includes */
|
||||||
|
#include <util.h>
|
||||||
|
#include <icon.h> /* build-dir copy of qoost/icon.h works around missing "vtable for Icon" */
|
||||||
|
|
||||||
|
|
||||||
|
class Panel_button : public Compound_widget<QPushButton, QHBoxLayout>
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
QMember<Icon> _icon;
|
||||||
|
QMember<QMenu> _menu;
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
|
||||||
|
void _clicked();
|
||||||
|
void _toggled(bool);
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Panel_button(QString label = QString());
|
||||||
|
~Panel_button();
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
|
||||||
|
void clicked(QString label);
|
||||||
|
void toggled(bool checked, QString label);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class App_bar : public Compound_widget<QWidget, QHBoxLayout>
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
Genode::Attached_rom_dataspace _apps;
|
||||||
|
Genode::Reporter _content_request;
|
||||||
|
|
||||||
|
QMember<QButtonGroup> _button_group;
|
||||||
|
QMember<Genode_signal_proxy> _apps_proxy;
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
|
||||||
|
void _handle_apps();
|
||||||
|
void _app_button(QAbstractButton *, bool);
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
App_bar(Genode::Env &, Genode::Entrypoint &);
|
||||||
|
~App_bar();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class Panel : public Compound_widget<QWidget, QHBoxLayout>
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
Genode::Attached_rom_dataspace _overlay;
|
||||||
|
Genode::Reporter _overlay_request;
|
||||||
|
|
||||||
|
QMember<Panel_button> _panel_button;
|
||||||
|
QMember<App_bar> _app_bar;
|
||||||
|
QMember<Panel_button> _wifi_button;
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
|
||||||
|
void _wifi_toggled(bool);
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Panel(Genode::Env &, Genode::Entrypoint &);
|
||||||
|
~Panel();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _TEST__TILED_WM__PANEL__PANEL_H_ */
|
7
repos/gems/src/test/tiled_wm_qt6/panel/panel.pro
Normal file
7
repos/gems/src/test/tiled_wm_qt6/panel/panel.pro
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
TEMPLATE = app
|
||||||
|
TARGET = test-tiled_wm-panel
|
||||||
|
QT = core gui widgets
|
||||||
|
CONFIG += c++2a
|
||||||
|
SOURCES += main.cpp panel.cpp
|
||||||
|
HEADERS += panel.h icon.h ../util.h
|
||||||
|
RESOURCES = panel.qrc
|
9
repos/gems/src/test/tiled_wm_qt6/panel/panel.qrc
Normal file
9
repos/gems/src/test/tiled_wm_qt6/panel/panel.qrc
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<!DOCTYPE RCC>
|
||||||
|
<RCC version="1.0">
|
||||||
|
<qresource prefix="/">
|
||||||
|
<file>../style.qss</file>
|
||||||
|
<file>wifi.png</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
||||||
|
|
||||||
|
<!-- vi: set ft=xml : -->
|
6
repos/gems/src/test/tiled_wm_qt6/panel/target.mk
Normal file
6
repos/gems/src/test/tiled_wm_qt6/panel/target.mk
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
QMAKE_PROJECT_FILE = $(PRG_DIR)/panel.pro
|
||||||
|
QMAKE_TARGET_BINARIES = test-tiled_wm-panel
|
||||||
|
|
||||||
|
qmake_prepared.tag: icon.h
|
||||||
|
|
||||||
|
include $(PRG_DIR)/../target.inc
|
BIN
repos/gems/src/test/tiled_wm_qt6/panel/wifi.png
Normal file
BIN
repos/gems/src/test/tiled_wm_qt6/panel/wifi.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.4 KiB |
22
repos/gems/src/test/tiled_wm_qt6/style.qss
Normal file
22
repos/gems/src/test/tiled_wm_qt6/style.qss
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
Panel, Overlay, App { min-width: 100px; min-height: 100px; }
|
||||||
|
|
||||||
|
QFrame { padding: 5px; }
|
||||||
|
QLabel { color: white; }
|
||||||
|
/*QPushButton { border: none; outline: none; }*/
|
||||||
|
|
||||||
|
Panel {
|
||||||
|
background-color: rgb(51, 93, 128);
|
||||||
|
}
|
||||||
|
|
||||||
|
Panel_button Icon { qproperty-iconSize: 18px; }
|
||||||
|
Panel_button#wifi Icon { qproperty-iconFile: url(:/wifi.png); }
|
||||||
|
|
||||||
|
Overlay {
|
||||||
|
background-color: rgba(25, 69, 105, 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
App {
|
||||||
|
background-color: rgb(96, 130, 159);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vi: set ft=css : */
|
25
repos/gems/src/test/tiled_wm_qt6/target.inc
Normal file
25
repos/gems/src/test/tiled_wm_qt6/target.inc
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
QT6_PORT_LIBS = libQt6Core libQt6Gui libQt6Widgets
|
||||||
|
|
||||||
|
LIBS = qt6_qmake base libc libm mesa stdcxx qoost
|
||||||
|
|
||||||
|
QT6_COMPONENT_LIB_SO =
|
||||||
|
|
||||||
|
QT6_GENODE_LIBS_APP += ld.lib.so
|
||||||
|
qmake_prepared.tag: $(addprefix build_dependencies/lib/,$(QT6_GENODE_LIBS_APP))
|
||||||
|
|
||||||
|
INC_DIR += $(PRG_DIR)/..
|
||||||
|
|
||||||
|
#
|
||||||
|
# We need Qt headers in a local directory for MOC to work correctly
|
||||||
|
#
|
||||||
|
|
||||||
|
# icon.h from the qoost API package
|
||||||
|
ICON_H = $(call select_from_repositories,include/qoost/icon.h)
|
||||||
|
|
||||||
|
# fall-back to the qoost port directory if that fails
|
||||||
|
ifeq ($(ICON_H),)
|
||||||
|
ICON_H := $(call select_from_ports,qoost)/include/qoost/icon.h
|
||||||
|
endif
|
||||||
|
|
||||||
|
icon.h: $(ICON_H)
|
||||||
|
$(VERBOSE)cp $(ICON_H) .
|
116
repos/gems/src/test/tiled_wm_qt6/util.h
Normal file
116
repos/gems/src/test/tiled_wm_qt6/util.h
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
/*
|
||||||
|
* \brief Tiled-WM test: utilities
|
||||||
|
* \author Christian Helmuth
|
||||||
|
* \date 2018-09-26
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018-2020 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU Affero General Public License version 3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _TEST__TILED_WM__UTIL_H_
|
||||||
|
#define _TEST__TILED_WM__UTIL_H_
|
||||||
|
|
||||||
|
/* Genode includes */
|
||||||
|
#include <base/signal.h>
|
||||||
|
#include <base/thread.h>
|
||||||
|
#include <base/log.h>
|
||||||
|
#include <util/string.h>
|
||||||
|
|
||||||
|
/* Qt includes */
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QObject>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QFrame>
|
||||||
|
|
||||||
|
/* Qoost includes */
|
||||||
|
#include <qoost/qmember.h>
|
||||||
|
|
||||||
|
/* Libc includes */
|
||||||
|
#include <libc/component.h>
|
||||||
|
|
||||||
|
/* qt6_component includes */
|
||||||
|
#include <qt6_component/qpa_init.h>
|
||||||
|
|
||||||
|
using Name = Genode::String<32>;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Genode signal to queued Qt signal proxy
|
||||||
|
*/
|
||||||
|
class Genode_signal_proxy : public QObject,
|
||||||
|
public Genode::Signal_handler<Genode_signal_proxy>
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Genode_signal_proxy(Genode::Entrypoint &sig_ep)
|
||||||
|
:
|
||||||
|
Genode::Signal_handler<Genode_signal_proxy>(
|
||||||
|
sig_ep, *this, &Genode_signal_proxy::handle_genode_signal)
|
||||||
|
{
|
||||||
|
connect(this, SIGNAL(internal_signal()),
|
||||||
|
this, SIGNAL(signal()),
|
||||||
|
Qt::QueuedConnection);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* called by signal handler / emits internal signal in context of
|
||||||
|
* signal-entrypoint thread */
|
||||||
|
void handle_genode_signal() { Q_EMIT internal_signal(); }
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
|
||||||
|
/* internal_signal() is Qt::QueuedConnection to signal() */
|
||||||
|
void internal_signal();
|
||||||
|
|
||||||
|
/* finally signal() is emitted in the context of the Qt main thread */
|
||||||
|
void signal();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Qt initialization
|
||||||
|
*/
|
||||||
|
|
||||||
|
static inline QApplication & qt6_initialization(Libc::Env &env)
|
||||||
|
{
|
||||||
|
qpa_init(env);
|
||||||
|
|
||||||
|
char const *argv[] = { "qt6_app", 0 };
|
||||||
|
int argc = sizeof(argv)/sizeof(*argv);
|
||||||
|
|
||||||
|
static QApplication app(argc, (char**)argv);
|
||||||
|
|
||||||
|
QFile file(":style.qss");
|
||||||
|
if (!file.open(QFile::ReadOnly)) {
|
||||||
|
qWarning() << "Warning:" << file.errorString()
|
||||||
|
<< "opening file" << file.fileName();
|
||||||
|
} else {
|
||||||
|
qApp->setStyleSheet(QLatin1String(file.readAll()));
|
||||||
|
}
|
||||||
|
|
||||||
|
app.connect(&app, SIGNAL(lastWindowClosed()), SLOT(quit()));
|
||||||
|
|
||||||
|
return app;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Widget utilities
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct Spacer : QFrame
|
||||||
|
{
|
||||||
|
Q_OBJECT public:
|
||||||
|
|
||||||
|
Spacer(QString const &style_id = "") { setObjectName(style_id); }
|
||||||
|
|
||||||
|
~Spacer() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _TEST__TILED_WM__UTIL_H_ */
|
60
repos/libports/include/qt6_component/qpa_init.h
Normal file
60
repos/libports/include/qt6_component/qpa_init.h
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* \brief QPA plugin initialization
|
||||||
|
* \author Christian Prochaska
|
||||||
|
* \date 2020-06-28
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2020 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU Affero General Public License version 3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _INCLUDE__QPA_INIT_H_
|
||||||
|
#define _INCLUDE__QPA_INIT_H_
|
||||||
|
|
||||||
|
/* Genode includes */
|
||||||
|
#include <base/env.h>
|
||||||
|
|
||||||
|
/* libc includes */
|
||||||
|
#include <dlfcn.h> /* 'dlopen' */
|
||||||
|
#include <stdio.h> /* 'fprintf' */
|
||||||
|
#include <stdlib.h> /* 'exit' */
|
||||||
|
#include <unistd.h> /* 'access' */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the QPA plugin
|
||||||
|
*
|
||||||
|
* When Qt loads the plugin again, it will get the same handle.
|
||||||
|
*/
|
||||||
|
static inline void qpa_init(Genode::Env &env)
|
||||||
|
{
|
||||||
|
char const *qpa_plugin = "/qt/plugins/platforms/libqgenode.lib.so";
|
||||||
|
|
||||||
|
void *qpa_plugin_handle = nullptr;
|
||||||
|
|
||||||
|
/* check existence with 'access()' first to avoid ld error messages */
|
||||||
|
if (access(qpa_plugin, F_OK) == 0)
|
||||||
|
qpa_plugin_handle = dlopen(qpa_plugin, RTLD_LAZY);
|
||||||
|
|
||||||
|
if (qpa_plugin_handle) {
|
||||||
|
|
||||||
|
typedef void (*initialize_qpa_plugin_t)(Genode::Env &);
|
||||||
|
|
||||||
|
initialize_qpa_plugin_t initialize_qpa_plugin =
|
||||||
|
(initialize_qpa_plugin_t) dlsym(qpa_plugin_handle,
|
||||||
|
"initialize_qpa_plugin");
|
||||||
|
|
||||||
|
if (!initialize_qpa_plugin) {
|
||||||
|
fprintf(stderr, "Could not find 'initialize_qpa_plugin' \
|
||||||
|
function in QPA plugin\n");
|
||||||
|
dlclose(qpa_plugin_handle);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
initialize_qpa_plugin(env);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* _INCLUDE__QPA_INIT_H_ */
|
87
repos/libports/lib/import/import-qt6.inc
Normal file
87
repos/libports/lib/import/import-qt6.inc
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
QT_TOOLS_DIR = /usr/local/genode/tool/23.05/qt6
|
||||||
|
|
||||||
|
ifeq ($(filter-out $(SPECS),arm),)
|
||||||
|
QT_PLATFORM = genode-arm-g++
|
||||||
|
else ifeq ($(filter-out $(SPECS),arm_64),)
|
||||||
|
QT_PLATFORM = genode-aarch64-g++
|
||||||
|
else ifeq ($(filter-out $(SPECS),x86_32),)
|
||||||
|
QT_PLATFORM = genode-x86_32-g++
|
||||||
|
else ifeq ($(filter-out $(SPECS),x86_64),)
|
||||||
|
QT_PLATFORM = genode-x86_64-g++
|
||||||
|
else
|
||||||
|
$(error Error: unsupported platform)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONTRIB_DIR),)
|
||||||
|
QT_DIR = $(call select_from_repositories,src/lib/qt6)
|
||||||
|
QT_API_DIR = $(call select_from_repositories,mkspecs)/..
|
||||||
|
abi_symbol_path = $(wildcard $(call select_from_repositories,lib/symbols/$1))
|
||||||
|
else
|
||||||
|
QT_PORT_DIR := $(call select_from_ports,qt6)
|
||||||
|
QT_DIR = $(QT_PORT_DIR)/src/lib/qt6
|
||||||
|
QT_API_DIR = $(QT_DIR)/genode/api
|
||||||
|
abi_symbol_path = $(wildcard $(addprefix $(QT_API_DIR)/lib/symbols/,$1))
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(VERBOSE),)
|
||||||
|
MAKE_VERBOSE="1"
|
||||||
|
else
|
||||||
|
QT6_OUTPUT_FILTER = > /dev/null
|
||||||
|
endif
|
||||||
|
|
||||||
|
#
|
||||||
|
# Genode libraries to be linked to Qt applications and libraries
|
||||||
|
#
|
||||||
|
|
||||||
|
QT6_COMPONENT_LIB_SO ?= qt6_component.lib.so
|
||||||
|
QT6_GENODE_LIBS_COMMON += libc.lib.so libm.lib.so stdcxx.lib.so
|
||||||
|
QT6_GENODE_LIBS_APP += $(QT6_GENODE_LIBS_COMMON) $(QT6_COMPONENT_LIB_SO)
|
||||||
|
QT6_GENODE_LIBS_SHLIB += $(QT6_GENODE_LIBS_COMMON)
|
||||||
|
|
||||||
|
#
|
||||||
|
# common 'build_dependencies' rules
|
||||||
|
#
|
||||||
|
|
||||||
|
build_dependencies:
|
||||||
|
$(VERBOSE)mkdir -p $@
|
||||||
|
|
||||||
|
build_dependencies/include: build_dependencies
|
||||||
|
$(VERBOSE)mkdir -p $@
|
||||||
|
$(VERBOSE)ln -snf $(QT_API_DIR)/include/* $@/
|
||||||
|
|
||||||
|
build_dependencies/lib: build_dependencies
|
||||||
|
$(VERBOSE)mkdir -p $@
|
||||||
|
|
||||||
|
build_dependencies/lib/%.lib.so: build_dependencies/lib
|
||||||
|
$(VERBOSE)ln -sf $(BUILD_BASE_DIR)/var/libcache/$*/$*.abi.so $@
|
||||||
|
|
||||||
|
build_dependencies/lib/%.lib.a: build_dependencies/lib
|
||||||
|
$(VERBOSE)ln -sf $(BUILD_BASE_DIR)/var/libcache/$*/$*.lib.a $@
|
||||||
|
|
||||||
|
#
|
||||||
|
# rules for generating .lib.so files from port symbol files
|
||||||
|
#
|
||||||
|
|
||||||
|
lib_name = $(notdir $(1:.lib.so=))
|
||||||
|
abi_name = $(notdir $(1:.abi.so=))
|
||||||
|
abi_path = build_dependencies/abi/$(call abi_name,$1)/$(call abi_name,$1).abi.so
|
||||||
|
so_path = build_dependencies/lib/$(call lib_name,$1).lib.so
|
||||||
|
|
||||||
|
BUILD_DEPENDENCIES_QT6_SO_FILES := $(foreach L,$(QT6_PORT_LIBS),$(call so_path,$L))
|
||||||
|
BUILD_DEPENDENCIES_QT6_ABI_FILES := $(foreach L,$(QT6_PORT_LIBS),$(call abi_path,$L))
|
||||||
|
|
||||||
|
$(BUILD_DEPENDENCIES_QT6_ABI_FILES):
|
||||||
|
$(VERBOSE)mkdir -p $(dir $@)
|
||||||
|
$(VERBOSE)$(MAKE) -C $(dir $@) -f $(BASE_DIR)/mk/abi.mk \
|
||||||
|
SYMBOLS=$(call abi_symbol_path,$(call abi_name,$@)) \
|
||||||
|
LIB=$(call abi_name,$@) \
|
||||||
|
BUILD_BASE_DIR=$(BUILD_BASE_DIR) \
|
||||||
|
SHELL=$(SHELL)
|
||||||
|
|
||||||
|
$(BUILD_DEPENDENCIES_QT6_SO_FILES): $(BUILD_DEPENDENCIES_QT6_ABI_FILES)
|
||||||
|
|
||||||
|
.PHONY: qt6_so_files
|
||||||
|
|
||||||
|
qt6_so_files: $(BUILD_DEPENDENCIES_QT6_SO_FILES)
|
||||||
|
$(VERBOSE)for l in $(QT6_PORT_LIBS); do \
|
||||||
|
ln -sf ../abi/$$l/$$l.abi.so build_dependencies/lib/$$l.lib.so; done
|
142
repos/libports/lib/import/import-qt6_cmake.mk
Normal file
142
repos/libports/lib/import/import-qt6_cmake.mk
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
#
|
||||||
|
# The following externally defined variables are evaluated:
|
||||||
|
#
|
||||||
|
# CMAKE_LISTS_DIR: path to the CMakeLists.txt file
|
||||||
|
# CMAKE_TARGET_BINARIES binaries to be stripped and linked into 'bin' and 'debug' directories
|
||||||
|
# QT6_PORT_LIBS: Qt6 libraries used from port (for example libQt6Core)
|
||||||
|
# QT6_COMPONENT_LIB_SO: if defined empty, disables linking with qt6_component.lib.so
|
||||||
|
#
|
||||||
|
|
||||||
|
include $(call select_from_repositories,lib/import/import-qt6.inc)
|
||||||
|
|
||||||
|
#
|
||||||
|
# flags to be passed to CMake
|
||||||
|
#
|
||||||
|
|
||||||
|
GENODE_CMAKE_CFLAGS += \
|
||||||
|
-D__FreeBSD__=12 \
|
||||||
|
-D__GENODE__ \
|
||||||
|
-ffunction-sections \
|
||||||
|
-fno-strict-aliasing \
|
||||||
|
$(CC_OPT_NOSTDINC) \
|
||||||
|
$(CC_MARCH) \
|
||||||
|
$(CC_OPT_PIC) \
|
||||||
|
$(filter-out -I.,$(INCLUDES)) \
|
||||||
|
-I$(CURDIR)/build_dependencies/mkspecs/$(QT_PLATFORM)
|
||||||
|
|
||||||
|
GENODE_CMAKE_LFLAGS_APP += \
|
||||||
|
$(addprefix $(LD_OPT_PREFIX),$(LD_MARCH)) \
|
||||||
|
$(addprefix $(LD_OPT_PREFIX),$(LD_OPT_GC_SECTIONS)) \
|
||||||
|
$(addprefix $(LD_OPT_PREFIX),$(LD_OPT_ALIGN_SANE)) \
|
||||||
|
$(addprefix $(LD_OPT_PREFIX),--dynamic-list=$(BASE_DIR)/src/ld/genode_dyn.dl) \
|
||||||
|
$(LD_OPT_NOSTDLIB) \
|
||||||
|
-Wl,-Ttext=0x01000000 \
|
||||||
|
$(CC_MARCH) \
|
||||||
|
-Wl,--dynamic-linker=$(DYNAMIC_LINKER).lib.so \
|
||||||
|
-Wl,--eh-frame-hdr \
|
||||||
|
-Wl,-rpath-link=. \
|
||||||
|
-Wl,-T -Wl,$(LD_SCRIPT_DYN) \
|
||||||
|
-L$(CURDIR)/build_dependencies/lib \
|
||||||
|
-Wl,--whole-archive \
|
||||||
|
-Wl,--start-group \
|
||||||
|
$(addprefix -l:,$(QT6_GENODE_LIBS_APP)) \
|
||||||
|
$(shell $(CC) $(CC_MARCH) -print-libgcc-file-name) \
|
||||||
|
-Wl,--end-group \
|
||||||
|
-Wl,--no-whole-archive
|
||||||
|
|
||||||
|
GENODE_CMAKE_LFLAGS_SHLIB += \
|
||||||
|
$(LD_OPT_NOSTDLIB) \
|
||||||
|
-Wl,-shared \
|
||||||
|
-Wl,--eh-frame-hdr \
|
||||||
|
$(addprefix $(LD_OPT_PREFIX),$(LD_MARCH)) \
|
||||||
|
$(addprefix $(LD_OPT_PREFIX),$(LD_OPT_GC_SECTIONS)) \
|
||||||
|
$(addprefix $(LD_OPT_PREFIX),$(LD_OPT_ALIGN_SANE)) \
|
||||||
|
-Wl,-T -Wl,$(LD_SCRIPT_SO) \
|
||||||
|
$(addprefix $(LD_OPT_PREFIX),--entry=0x0) \
|
||||||
|
-L$(CURDIR)/build_dependencies/lib \
|
||||||
|
-Wl,--whole-archive \
|
||||||
|
-Wl,--start-group \
|
||||||
|
$(addprefix -l:,$(QT6_GENODE_LIBS_SHLIB)) \
|
||||||
|
$(shell $(CC) $(CC_MARCH) -print-libgcc-file-name) \
|
||||||
|
-l:ldso_so_support.lib.a \
|
||||||
|
-Wl,--end-group \
|
||||||
|
-Wl,--no-whole-archive
|
||||||
|
|
||||||
|
##
|
||||||
|
## prepare a directory named 'build_dependencies' where CMake can find needed files
|
||||||
|
##
|
||||||
|
|
||||||
|
build_dependencies/lib/cmake: build_dependencies/lib
|
||||||
|
$(VERBOSE)ln -snf $(QT_API_DIR)/lib/cmake $@
|
||||||
|
|
||||||
|
build_dependencies/metatypes: build_dependencies
|
||||||
|
$(VERBOSE)ln -snf $(QT_API_DIR)/metatypes $@
|
||||||
|
|
||||||
|
build_dependencies/mkspecs: build_dependencies
|
||||||
|
$(VERBOSE)ln -snf $(QT_API_DIR)/mkspecs $@
|
||||||
|
|
||||||
|
cmake_prepared.tag: \
|
||||||
|
build_dependencies/include \
|
||||||
|
build_dependencies/lib/cmake \
|
||||||
|
build_dependencies/lib/libc.lib.so \
|
||||||
|
build_dependencies/lib/libm.lib.so \
|
||||||
|
build_dependencies/lib/egl.lib.so \
|
||||||
|
build_dependencies/lib/mesa.lib.so \
|
||||||
|
build_dependencies/lib/qt6_component.lib.so \
|
||||||
|
build_dependencies/lib/stdcxx.lib.so \
|
||||||
|
build_dependencies/lib/ldso_so_support.lib.a \
|
||||||
|
build_dependencies/metatypes \
|
||||||
|
build_dependencies/mkspecs
|
||||||
|
$(VERBOSE)touch $@
|
||||||
|
|
||||||
|
.PHONY: build_with_cmake
|
||||||
|
|
||||||
|
# 'make' called by CMake uses '/bin/sh', which does not understand '-o pipefail'
|
||||||
|
unexport .SHELLFLAGS
|
||||||
|
|
||||||
|
build_with_cmake: cmake_prepared.tag qt6_so_files
|
||||||
|
$(VERBOSE)cmake \
|
||||||
|
-G "Unix Makefiles" \
|
||||||
|
-DCMAKE_PREFIX_PATH="$(CURDIR)/build_dependencies" \
|
||||||
|
-DCMAKE_MODULE_PATH="$(CURDIR)/build_dependencies/lib/cmake/Modules" \
|
||||||
|
-DCMAKE_SYSTEM_NAME="Genode" \
|
||||||
|
-DCMAKE_AR="$(AR)" \
|
||||||
|
-DCMAKE_C_COMPILER="$(CC)" \
|
||||||
|
-DCMAKE_C_FLAGS="$(GENODE_CMAKE_CFLAGS)" \
|
||||||
|
-DCMAKE_CXX_COMPILER="$(CXX)" \
|
||||||
|
-DCMAKE_CXX_FLAGS="$(GENODE_CMAKE_CFLAGS)" \
|
||||||
|
-DCMAKE_EXE_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_APP)" \
|
||||||
|
-DCMAKE_SHARED_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_SHLIB)" \
|
||||||
|
-DCMAKE_MODULE_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_SHLIB)" \
|
||||||
|
--no-warn-unused-cli \
|
||||||
|
$(CMAKE_LISTS_DIR) \
|
||||||
|
$(QT6_OUTPUT_FILTER)
|
||||||
|
|
||||||
|
$(VERBOSE)$(MAKE) VERBOSE=$(MAKE_VERBOSE)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Not every CMake project has an 'install' target, so execute
|
||||||
|
# this target only if a binary to be installed has "install/" in
|
||||||
|
# its path.
|
||||||
|
#
|
||||||
|
ifneq ($(findstring install/,$(CMAKE_TARGET_BINARIES)),)
|
||||||
|
$(VERBOSE)$(MAKE) VERBOSE=$(MAKE_VERBOSE) DESTDIR=install install
|
||||||
|
endif
|
||||||
|
|
||||||
|
$(VERBOSE)for cmake_target_binary in $(CMAKE_TARGET_BINARIES); do \
|
||||||
|
$(OBJCOPY) --only-keep-debug $${cmake_target_binary} $${cmake_target_binary}.debug; \
|
||||||
|
$(STRIP) $${cmake_target_binary} -o $${cmake_target_binary}.stripped; \
|
||||||
|
$(OBJCOPY) --add-gnu-debuglink=$${cmake_target_binary}.debug $${cmake_target_binary}.stripped; \
|
||||||
|
ln -sf $(CURDIR)/$${cmake_target_binary}.stripped $(PWD)/bin/`basename $${cmake_target_binary}`; \
|
||||||
|
ln -sf $(CURDIR)/$${cmake_target_binary}.stripped $(PWD)/debug/`basename $${cmake_target_binary}`; \
|
||||||
|
ln -sf $(CURDIR)/$${cmake_target_binary}.debug $(PWD)/debug/; \
|
||||||
|
done
|
||||||
|
|
||||||
|
BUILD_ARTIFACTS += $(notdir $(CMAKE_TARGET_BINARIES))
|
||||||
|
|
||||||
|
#
|
||||||
|
# build applications with CMake
|
||||||
|
#
|
||||||
|
TARGET ?= $(CMAKE_LISTS_DIR).cmake_target
|
||||||
|
.PHONY: $(TARGET)
|
||||||
|
$(TARGET): build_with_cmake $(QT6_EXTRA_TARGET_DEPS)
|
176
repos/libports/lib/import/import-qt6_qmake.mk
Normal file
176
repos/libports/lib/import/import-qt6_qmake.mk
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
#
|
||||||
|
# The following externally defined variables are evaluated:
|
||||||
|
#
|
||||||
|
# QMAKE_PROJECT_FILE: path to the qmake project file (for applications with target.mk)
|
||||||
|
# QMAKE_TARGET_BINARIES binaries to be stripped and linked into 'bin' and 'debug' directories
|
||||||
|
# QT6_PORT_LIBS: Qt6 libraries used from port (for example libQt6Core)
|
||||||
|
# QT6_COMPONENT_LIB_SO: if defined empty, disables linking with qt6_component.lib.so
|
||||||
|
#
|
||||||
|
|
||||||
|
include $(call select_from_repositories,lib/import/import-qt6.inc)
|
||||||
|
|
||||||
|
QMAKE = build_dependencies/bin/qmake
|
||||||
|
|
||||||
|
#
|
||||||
|
# flags to be passed to qmake via env.sh and mkspecs/common/genode.conf
|
||||||
|
#
|
||||||
|
|
||||||
|
GENODE_QMAKE_CFLAGS += \
|
||||||
|
-D__FreeBSD__=12 \
|
||||||
|
-D__GENODE__ \
|
||||||
|
-ffunction-sections \
|
||||||
|
-fno-strict-aliasing \
|
||||||
|
$(CC_OPT_NOSTDINC) \
|
||||||
|
$(CC_MARCH) \
|
||||||
|
$(CC_OPT_PIC) \
|
||||||
|
$(filter-out -I.,$(INCLUDES)) \
|
||||||
|
-I$(CURDIR)/build_dependencies/include/QtCore/spec/$(QT_PLATFORM)
|
||||||
|
|
||||||
|
GENODE_QMAKE_LFLAGS_APP += \
|
||||||
|
$(addprefix $(LD_OPT_PREFIX),$(LD_MARCH)) \
|
||||||
|
$(addprefix $(LD_OPT_PREFIX),$(LD_OPT_GC_SECTIONS)) \
|
||||||
|
$(addprefix $(LD_OPT_PREFIX),$(LD_OPT_ALIGN_SANE)) \
|
||||||
|
$(addprefix $(LD_OPT_PREFIX),--dynamic-list=$(BASE_DIR)/src/ld/genode_dyn.dl) \
|
||||||
|
$(LD_OPT_NOSTDLIB) \
|
||||||
|
-Wl,-Ttext=0x01000000 \
|
||||||
|
$(CC_MARCH) \
|
||||||
|
-Wl,--dynamic-linker=$(DYNAMIC_LINKER).lib.so \
|
||||||
|
-Wl,--eh-frame-hdr \
|
||||||
|
-Wl,-rpath-link=. \
|
||||||
|
-Wl,-T -Wl,$(LD_SCRIPT_DYN) \
|
||||||
|
-L$(CURDIR)/build_dependencies/lib \
|
||||||
|
-Wl,--whole-archive \
|
||||||
|
-Wl,--start-group \
|
||||||
|
$(addprefix -l:,$(QT6_GENODE_LIBS_APP)) \
|
||||||
|
-Wl,--end-group \
|
||||||
|
-Wl,--no-whole-archive
|
||||||
|
|
||||||
|
GENODE_QMAKE_LFLAGS_SHLIB += \
|
||||||
|
$(LD_OPT_NOSTDLIB) \
|
||||||
|
-Wl,-shared \
|
||||||
|
-Wl,--eh-frame-hdr \
|
||||||
|
$(addprefix $(LD_OPT_PREFIX),$(LD_MARCH)) \
|
||||||
|
$(addprefix $(LD_OPT_PREFIX),$(LD_OPT_GC_SECTIONS)) \
|
||||||
|
$(addprefix $(LD_OPT_PREFIX),$(LD_OPT_ALIGN_SANE)) \
|
||||||
|
-Wl,-T -Wl,$(LD_SCRIPT_SO) \
|
||||||
|
$(addprefix $(LD_OPT_PREFIX),--entry=0x0) \
|
||||||
|
-L$(CURDIR)/build_dependencies/lib \
|
||||||
|
-Wl,--whole-archive \
|
||||||
|
-Wl,--start-group \
|
||||||
|
$(addprefix -l:,$(QT6_GENODE_LIBS_SHLIB)) \
|
||||||
|
-l:ldso_so_support.lib.a \
|
||||||
|
-Wl,--end-group \
|
||||||
|
-Wl,--no-whole-archive
|
||||||
|
|
||||||
|
#
|
||||||
|
# libgcc must appear on the command line after all other libs
|
||||||
|
# (including those added by qmake) and using the QMAKE_LIBS
|
||||||
|
# variable achieves this, fortunately
|
||||||
|
#
|
||||||
|
GENODE_QMAKE_LIBS = \
|
||||||
|
$(shell $(CC) $(CC_MARCH) -print-libgcc-file-name)
|
||||||
|
|
||||||
|
ifeq ($(CONTRIB_DIR),)
|
||||||
|
GENODE_QMAKE_INCDIR_OPENGL = $(call select_from_repositories,include/GL)/..
|
||||||
|
GENODE_QMAKE_INCDIR_EGL = $(call select_from_repositories,include/EGL)/..
|
||||||
|
else
|
||||||
|
GENODE_QMAKE_INCDIR_OPENGL := $(call select_from_ports,mesa)/include
|
||||||
|
GENODE_QMAKE_INCDIR_EGL := $(call select_from_ports,mesa)/include
|
||||||
|
endif
|
||||||
|
|
||||||
|
GENODE_QMAKE_LIBS_OPENGL = $(CURDIR)/build_dependencies/lib/mesa.lib.so
|
||||||
|
GENODE_QMAKE_LIBS_EGL = $(CURDIR)/build_dependencies/lib/egl.lib.so
|
||||||
|
|
||||||
|
#
|
||||||
|
# export variables for qmake.conf
|
||||||
|
#
|
||||||
|
|
||||||
|
env.sh:
|
||||||
|
$(VERBOSE)rm -f $@
|
||||||
|
$(VERBOSE)echo "export GENODE_QMAKE_CC='$(CC)'" >> $@
|
||||||
|
$(VERBOSE)echo "export GENODE_QMAKE_CXX='$(CXX)'" >> $@
|
||||||
|
$(VERBOSE)echo "export GENODE_QMAKE_LINK='$(CXX)'" >> $@
|
||||||
|
$(VERBOSE)echo "export GENODE_QMAKE_AR='$(AR)'" >> $@
|
||||||
|
$(VERBOSE)echo "export GENODE_QMAKE_OBJCOPY='$(OBJCOPY)'" >> $@
|
||||||
|
$(VERBOSE)echo "export GENODE_QMAKE_NM='$(NM)'" >> $@
|
||||||
|
$(VERBOSE)echo "export GENODE_QMAKE_STRIP='$(STRIP)'" >> $@
|
||||||
|
$(VERBOSE)echo "export GENODE_QMAKE_CFLAGS='$(GENODE_QMAKE_CFLAGS)'" >> $@
|
||||||
|
$(VERBOSE)echo "export GENODE_QMAKE_LFLAGS_APP='$(GENODE_QMAKE_LFLAGS_APP)'" >> $@
|
||||||
|
$(VERBOSE)echo "export GENODE_QMAKE_LFLAGS_SHLIB='$(GENODE_QMAKE_LFLAGS_SHLIB)'" >> $@
|
||||||
|
$(VERBOSE)echo "export GENODE_QMAKE_LIBS='$(GENODE_QMAKE_LIBS)'" >> $@
|
||||||
|
$(VERBOSE)echo "export GENODE_QMAKE_INCDIR_OPENGL='$(GENODE_QMAKE_INCDIR_OPENGL)'" >> $@
|
||||||
|
$(VERBOSE)echo "export GENODE_QMAKE_LIBS_OPENGL='$(GENODE_QMAKE_LIBS_OPENGL)'" >> $@
|
||||||
|
$(VERBOSE)echo "export GENODE_QMAKE_INCDIR_EGL='$(GENODE_QMAKE_INCDIR_EGL)'" >> $@
|
||||||
|
$(VERBOSE)echo "export GENODE_QMAKE_LIBS_EGL='$(GENODE_QMAKE_LIBS_EGL)'" >> $@
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# prepare a directory named 'build_dependencies' where qmake can find needed files
|
||||||
|
#
|
||||||
|
|
||||||
|
build_dependencies/bin: build_dependencies
|
||||||
|
$(VERBOSE)mkdir -p $@
|
||||||
|
$(VERBOSE)ln -sf $(QT_TOOLS_DIR)/bin/* $@/
|
||||||
|
|
||||||
|
build_dependencies/lib/libQt6Core.so.6: build_dependencies/lib
|
||||||
|
$(VERBOSE)ln -sf $(QT_TOOLS_DIR)/lib/libQt6Core.so.6 $@
|
||||||
|
|
||||||
|
build_dependencies/libexec: build_dependencies
|
||||||
|
$(VERBOSE)mkdir -p $@
|
||||||
|
$(VERBOSE)ln -sf $(QT_TOOLS_DIR)/libexec/* $@/
|
||||||
|
|
||||||
|
build_dependencies/mkspecs: build_dependencies
|
||||||
|
$(VERBOSE)mkdir -p $@
|
||||||
|
$(VERBOSE)ln -sf $(QT_API_DIR)/mkspecs/* $@/
|
||||||
|
$(VERBOSE)rm -f $@/modules
|
||||||
|
$(VERBOSE)mkdir $@/modules
|
||||||
|
$(VERBOSE)ln -snf $(QT_API_DIR)/mkspecs/modules/* $@/modules/
|
||||||
|
$(VERBOSE)ln -sf $(QT_PLATFORM)/qconfig.pri $@/
|
||||||
|
$(VERBOSE)ln -sf $(QT_PLATFORM)/qmodule.pri $@/
|
||||||
|
|
||||||
|
qmake_prepared.tag: env.sh \
|
||||||
|
build_dependencies/bin \
|
||||||
|
build_dependencies/include \
|
||||||
|
build_dependencies/lib/libQt6Core.so.6 \
|
||||||
|
build_dependencies/lib/libc.lib.so \
|
||||||
|
build_dependencies/lib/libm.lib.so \
|
||||||
|
build_dependencies/lib/egl.lib.so \
|
||||||
|
build_dependencies/lib/mesa.lib.so \
|
||||||
|
build_dependencies/lib/qt6_component.lib.so \
|
||||||
|
build_dependencies/lib/stdcxx.lib.so \
|
||||||
|
build_dependencies/lib/ldso_so_support.lib.a \
|
||||||
|
build_dependencies/libexec \
|
||||||
|
build_dependencies/mkspecs
|
||||||
|
$(VERBOSE)touch $@
|
||||||
|
|
||||||
|
.PHONY: build_with_qmake
|
||||||
|
|
||||||
|
build_with_qmake: qmake_prepared.tag qt6_so_files
|
||||||
|
|
||||||
|
$(VERBOSE)source env.sh && $(QMAKE) \
|
||||||
|
-spec build_dependencies/mkspecs/$(QT_PLATFORM) \
|
||||||
|
-qtconf build_dependencies/mkspecs/$(QT_PLATFORM)/qt.conf \
|
||||||
|
-nocache \
|
||||||
|
$(QMAKE_PROJECT_FILE) \
|
||||||
|
"CONFIG += force_debug_info" \
|
||||||
|
$(QT6_OUTPUT_FILTER)
|
||||||
|
|
||||||
|
$(VERBOSE)source env.sh && $(MAKE) $(QT6_OUTPUT_FILTER)
|
||||||
|
|
||||||
|
$(VERBOSE)for qmake_target_binary in $(QMAKE_TARGET_BINARIES); do \
|
||||||
|
$(OBJCOPY) --only-keep-debug $${qmake_target_binary} $${qmake_target_binary}.debug; \
|
||||||
|
$(STRIP) $${qmake_target_binary} -o $${qmake_target_binary}.stripped; \
|
||||||
|
$(OBJCOPY) --add-gnu-debuglink=$${qmake_target_binary}.debug $${qmake_target_binary}.stripped; \
|
||||||
|
ln -sf $(CURDIR)/$${qmake_target_binary}.stripped $(PWD)/bin/$${qmake_target_binary}; \
|
||||||
|
ln -sf $(CURDIR)/$${qmake_target_binary}.stripped $(PWD)/debug/$${qmake_target_binary}; \
|
||||||
|
ln -sf $(CURDIR)/$${qmake_target_binary}.debug $(PWD)/debug/; \
|
||||||
|
done
|
||||||
|
|
||||||
|
BUILD_ARTIFACTS += $(notdir $(QMAKE_TARGET_BINARIES))
|
||||||
|
|
||||||
|
#
|
||||||
|
# build applications with qmake
|
||||||
|
#
|
||||||
|
TARGET ?= $(notdir $(QMAKE_PROJECT_FILE)).qmake_target
|
||||||
|
.PHONY: $(TARGET)
|
||||||
|
$(TARGET): build_with_qmake $(QT6_EXTRA_TARGET_DEPS)
|
118
repos/libports/lib/mk/qt6_base.mk
Normal file
118
repos/libports/lib/mk/qt6_base.mk
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
LIBS = qt6_cmake ldso_so_support libc libm stdcxx qt6_component egl mesa base qoost
|
||||||
|
|
||||||
|
INSTALL_LIBS = lib/libQt6Concurrent.lib.so \
|
||||||
|
lib/libQt6Core.lib.so \
|
||||||
|
lib/libQt6Gui.lib.so \
|
||||||
|
lib/libQt6Network.lib.so \
|
||||||
|
lib/libQt6OpenGL.lib.so \
|
||||||
|
lib/libQt6OpenGLWidgets.lib.so \
|
||||||
|
lib/libQt6PrintSupport.lib.so \
|
||||||
|
lib/libQt6Sql.lib.so \
|
||||||
|
lib/libQt6Test.lib.so \
|
||||||
|
lib/libQt6Widgets.lib.so \
|
||||||
|
lib/libQt6Xml.lib.so \
|
||||||
|
plugins/platforms/libqgenode.lib.so \
|
||||||
|
plugins/imageformats/libqjpeg.lib.so \
|
||||||
|
plugins/sqldrivers/libqsqlite.lib.so
|
||||||
|
|
||||||
|
BUILD_ARTIFACTS = $(notdir $(INSTALL_LIBS)) \
|
||||||
|
qt6_libqgenode.tar \
|
||||||
|
qt6_libqjpeg.tar \
|
||||||
|
qt6_libqsqlite.tar
|
||||||
|
|
||||||
|
cmake_prepared.tag: build_dependencies/lib/ld.lib.so
|
||||||
|
|
||||||
|
build: cmake_prepared.tag
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# run cmake
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)cmake \
|
||||||
|
-G "Unix Makefiles" \
|
||||||
|
-DQT_SILENCE_CMAKE_GENERATOR_WARNING=ON \
|
||||||
|
-DCMAKE_SYSTEM_NAME="Genode" \
|
||||||
|
-DCMAKE_AR="$(AR)" \
|
||||||
|
-DCMAKE_C_COMPILER="$(CC)" \
|
||||||
|
-DCMAKE_C_FLAGS="$(GENODE_CMAKE_CFLAGS)" \
|
||||||
|
-DCMAKE_CXX_COMPILER="$(CXX)" \
|
||||||
|
-DCMAKE_CXX_FLAGS="$(GENODE_CMAKE_CFLAGS)" \
|
||||||
|
-DCMAKE_EXE_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_APP)" \
|
||||||
|
-DCMAKE_SHARED_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_SHLIB)" \
|
||||||
|
-DCMAKE_MODULE_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_SHLIB)" \
|
||||||
|
-DQT_QMAKE_TARGET_MKSPEC=$(QT_PLATFORM) \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=/qt \
|
||||||
|
-DQT_HOST_PATH="$(QT_TOOLS_DIR)" \
|
||||||
|
-DBUILD_WITH_PCH=OFF \
|
||||||
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||||
|
-DQT_BUILD_EXAMPLES=OFF \
|
||||||
|
-DQT_QPA_DEFAULT_PLATFORM=genode \
|
||||||
|
-DFEATURE_cxx20=ON \
|
||||||
|
-DFEATURE_relocatable=OFF \
|
||||||
|
-DFEATURE_evdev=OFF \
|
||||||
|
-DFEATURE_icu=OFF \
|
||||||
|
-DFEATURE_system_harfbuzz=OFF \
|
||||||
|
-DFEATURE_backtrace=OFF \
|
||||||
|
-DFEATURE_glib=OFF \
|
||||||
|
-DFEATURE_zstd=OFF \
|
||||||
|
-DFEATURE_system_pcre2=OFF \
|
||||||
|
-DFEATURE_system_zlib=OFF \
|
||||||
|
-DFEATURE_dbus=OFF \
|
||||||
|
-DFEATURE_libudev=OFF \
|
||||||
|
-DFEATURE_opengl_desktop=ON \
|
||||||
|
-DFEATURE_egl=ON \
|
||||||
|
-DFEATURE_xkbcommon=OFF \
|
||||||
|
-DFEATURE_networkinterface=OFF \
|
||||||
|
-DFEATURE_vulkan=OFF \
|
||||||
|
-DFEATURE_reduce_relocations=OFF \
|
||||||
|
-DFEATURE_pkg_config=OFF \
|
||||||
|
$(QT_DIR)/qtbase \
|
||||||
|
$(QT6_OUTPUT_FILTER)
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# build
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)$(MAKE) VERBOSE=$(MAKE_VERBOSE)
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# install into local 'install' directory
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)$(MAKE) VERBOSE=$(MAKE_VERBOSE) DESTDIR=install install
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# remove shared library existence checks since many libs are not
|
||||||
|
@# present and not needed at build time
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)find $(CURDIR)/install/qt/lib/cmake -name "*.cmake" \
|
||||||
|
-exec sed -i "/list(APPEND _IMPORT_CHECK_TARGETS /d" {} \;
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# strip libs and create symlinks in 'bin' and 'debug' directories
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)for LIB in $(INSTALL_LIBS); do \
|
||||||
|
cd $(CURDIR)/install/qt/$$(dirname $${LIB}) && \
|
||||||
|
$(OBJCOPY) --only-keep-debug $$(basename $${LIB}) $$(basename $${LIB}).debug && \
|
||||||
|
$(STRIP) $$(basename $${LIB}) -o $$(basename $${LIB}).stripped && \
|
||||||
|
$(OBJCOPY) --add-gnu-debuglink=$$(basename $${LIB}).debug $$(basename $${LIB}).stripped; \
|
||||||
|
ln -sf $(CURDIR)/install/qt/$${LIB}.stripped $(PWD)/bin/$$(basename $${LIB}); \
|
||||||
|
ln -sf $(CURDIR)/install/qt/$${LIB}.stripped $(PWD)/debug/$$(basename $${LIB}); \
|
||||||
|
ln -sf $(CURDIR)/install/qt/$${LIB}.debug $(PWD)/debug/; \
|
||||||
|
done
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# create tar archives
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)tar chf $(PWD)/bin/qt6_libqgenode.tar $(TAR_OPT) --transform='s/\.stripped//' -C install qt/plugins/platforms/libqgenode.lib.so.stripped
|
||||||
|
$(VERBOSE)tar chf $(PWD)/bin/qt6_libqjpeg.tar $(TAR_OPT) --transform='s/\.stripped//' -C install qt/plugins/imageformats/libqjpeg.lib.so.stripped
|
||||||
|
$(VERBOSE)tar chf $(PWD)/bin/qt6_libqsqlite.tar $(TAR_OPT) --transform='s/\.stripped//' -C install qt/plugins/sqldrivers/libqsqlite.lib.so.stripped
|
||||||
|
|
||||||
|
.PHONY: build
|
||||||
|
|
||||||
|
ifeq ($(called_from_lib_mk),yes)
|
||||||
|
all: build
|
||||||
|
endif
|
4
repos/libports/lib/mk/qt6_cmake.mk
Normal file
4
repos/libports/lib/mk/qt6_cmake.mk
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#
|
||||||
|
# This is a dummy library description file for the implicit inclusion of
|
||||||
|
# import-qt6_cmake.mk.
|
||||||
|
#
|
9
repos/libports/lib/mk/qt6_component.mk
Normal file
9
repos/libports/lib/mk/qt6_component.mk
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
SRC_CC = qt_component.cc
|
||||||
|
|
||||||
|
LIBS = libc
|
||||||
|
|
||||||
|
SHARED_LIB = yes
|
||||||
|
|
||||||
|
vpath qt_component.cc $(REP_DIR)/src/lib/qt6_component
|
||||||
|
|
||||||
|
CC_CXX_WARN_STRICT =
|
140
repos/libports/lib/mk/qt6_declarative.mk
Normal file
140
repos/libports/lib/mk/qt6_declarative.mk
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
QT6_PORT_LIBS = libQt6Core libQt6Gui libQt6OpenGL libQt6Network libQt6Sql libQt6Test libQt6Widgets
|
||||||
|
|
||||||
|
LIBS = qt6_cmake ldso_so_support libc libm mesa egl qt6_component stdcxx
|
||||||
|
|
||||||
|
INSTALL_LIBS = lib/libQt6LabsAnimation.lib.so \
|
||||||
|
lib/libQt6LabsFolderListModel.lib.so \
|
||||||
|
lib/libQt6LabsQmlModels.lib.so \
|
||||||
|
lib/libQt6LabsSettings.lib.so \
|
||||||
|
lib/libQt6LabsSharedImage.lib.so \
|
||||||
|
lib/libQt6LabsWavefrontMesh.lib.so \
|
||||||
|
lib/libQt6Qml.lib.so \
|
||||||
|
lib/libQt6QmlCompiler.lib.so \
|
||||||
|
lib/libQt6QmlCore.lib.so \
|
||||||
|
lib/libQt6QmlLocalStorage.lib.so \
|
||||||
|
lib/libQt6QmlModels.lib.so \
|
||||||
|
lib/libQt6QmlWorkerScript.lib.so \
|
||||||
|
lib/libQt6QmlXmlListModel.lib.so \
|
||||||
|
lib/libQt6Quick.lib.so \
|
||||||
|
lib/libQt6QuickControls2.lib.so \
|
||||||
|
lib/libQt6QuickControls2Impl.lib.so \
|
||||||
|
lib/libQt6QuickDialogs2.lib.so \
|
||||||
|
lib/libQt6QuickDialogs2QuickImpl.lib.so \
|
||||||
|
lib/libQt6QuickDialogs2Utils.lib.so \
|
||||||
|
lib/libQt6QuickEffects.lib.so \
|
||||||
|
lib/libQt6QuickLayouts.lib.so \
|
||||||
|
lib/libQt6QuickParticles.lib.so \
|
||||||
|
lib/libQt6QuickShapes.lib.so \
|
||||||
|
lib/libQt6QuickTemplates2.lib.so \
|
||||||
|
lib/libQt6QuickTest.lib.so \
|
||||||
|
lib/libQt6QuickWidgets.lib.so \
|
||||||
|
qml/Qt/labs/animation/liblabsanimationplugin.lib.so \
|
||||||
|
qml/Qt/labs/folderlistmodel/libqmlfolderlistmodelplugin.lib.so \
|
||||||
|
qml/Qt/labs/platform/libqtlabsplatformplugin.lib.so \
|
||||||
|
qml/Qt/labs/qmlmodels/liblabsmodelsplugin.lib.so \
|
||||||
|
qml/Qt/labs/settings/libqmlsettingsplugin.lib.so \
|
||||||
|
qml/Qt/labs/sharedimage/libsharedimageplugin.lib.so \
|
||||||
|
qml/Qt/labs/wavefrontmesh/libqmlwavefrontmeshplugin.lib.so \
|
||||||
|
qml/QtQml/Base/libqmlplugin.lib.so \
|
||||||
|
qml/QtQml/Models/libmodelsplugin.lib.so \
|
||||||
|
qml/QtQml/WorkerScript/libworkerscriptplugin.lib.so \
|
||||||
|
qml/QtQml/XmlListModel/libqmlxmllistmodelplugin.lib.so \
|
||||||
|
qml/QtQml/libqmlmetaplugin.lib.so \
|
||||||
|
qml/QtQuick/Controls/Basic/libqtquickcontrols2basicstyleplugin.lib.so \
|
||||||
|
qml/QtQuick/Controls/Basic/impl/libqtquickcontrols2basicstyleimplplugin.lib.so \
|
||||||
|
qml/QtQuick/Controls/Fusion/libqtquickcontrols2fusionstyleplugin.lib.so \
|
||||||
|
qml/QtQuick/Controls/Fusion/impl/libqtquickcontrols2fusionstyleimplplugin.lib.so \
|
||||||
|
qml/QtQuick/Controls/Imagine/libqtquickcontrols2imaginestyleplugin.lib.so \
|
||||||
|
qml/QtQuick/Controls/Imagine/impl/libqtquickcontrols2imaginestyleimplplugin.lib.so \
|
||||||
|
qml/QtQuick/Controls/Material/libqtquickcontrols2materialstyleplugin.lib.so \
|
||||||
|
qml/QtQuick/Controls/Material/impl/libqtquickcontrols2materialstyleimplplugin.lib.so \
|
||||||
|
qml/QtQuick/Controls/Universal/libqtquickcontrols2universalstyleplugin.lib.so \
|
||||||
|
qml/QtQuick/Controls/Universal/impl/libqtquickcontrols2universalstyleimplplugin.lib.so \
|
||||||
|
qml/QtQuick/Controls/libqtquickcontrols2plugin.lib.so \
|
||||||
|
qml/QtQuick/Controls/impl/libqtquickcontrols2implplugin.lib.so \
|
||||||
|
qml/QtQuick/Dialogs/libqtquickdialogsplugin.lib.so \
|
||||||
|
qml/QtQuick/Dialogs/quickimpl/libqtquickdialogs2quickimplplugin.lib.so \
|
||||||
|
qml/QtQuick/Effects/libeffectsplugin.lib.so \
|
||||||
|
qml/QtQuick/Layouts/libqquicklayoutsplugin.lib.so \
|
||||||
|
qml/QtQuick/LocalStorage/libqmllocalstorageplugin.lib.so \
|
||||||
|
qml/QtQuick/NativeStyle/libqtquickcontrols2nativestyleplugin.lib.so \
|
||||||
|
qml/QtQuick/Particles/libparticlesplugin.lib.so \
|
||||||
|
qml/QtQuick/Shapes/libqmlshapesplugin.lib.so \
|
||||||
|
qml/QtQuick/Templates/libqtquicktemplates2plugin.lib.so \
|
||||||
|
qml/QtQuick/Window/libquickwindowplugin.lib.so \
|
||||||
|
qml/QtQuick/tooling/libquicktoolingplugin.lib.so \
|
||||||
|
qml/QtQuick/libqtquick2plugin.lib.so \
|
||||||
|
qml/QtTest/libquicktestplugin.lib.so
|
||||||
|
|
||||||
|
BUILD_ARTIFACTS = $(notdir $(INSTALL_LIBS)) \
|
||||||
|
qt6_declarative_qml.tar
|
||||||
|
|
||||||
|
build: cmake_prepared.tag qt6_so_files
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# run cmake
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)cmake \
|
||||||
|
-G "Unix Makefiles" \
|
||||||
|
-DCMAKE_PREFIX_PATH="$(CURDIR)/build_dependencies" \
|
||||||
|
-DCMAKE_MODULE_PATH="$(CURDIR)/build_dependencies/lib/cmake/Modules" \
|
||||||
|
-DCMAKE_SYSTEM_NAME="Genode" \
|
||||||
|
-DCMAKE_AR="$(AR)" \
|
||||||
|
-DCMAKE_C_COMPILER="$(CC)" \
|
||||||
|
-DCMAKE_C_FLAGS="$(GENODE_CMAKE_CFLAGS)" \
|
||||||
|
-DCMAKE_CXX_COMPILER="$(CXX)" \
|
||||||
|
-DCMAKE_CXX_FLAGS="$(GENODE_CMAKE_CFLAGS)" \
|
||||||
|
-DCMAKE_EXE_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_APP)" \
|
||||||
|
-DCMAKE_SHARED_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_SHLIB)" \
|
||||||
|
-DCMAKE_MODULE_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_SHLIB)" \
|
||||||
|
-DQT_QMAKE_TARGET_MKSPEC=$(QT_PLATFORM) \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=/qt \
|
||||||
|
$(QT_DIR)/qtdeclarative \
|
||||||
|
$(QT6_OUTPUT_FILTER)
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# build
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)$(MAKE) VERBOSE=$(MAKE_VERBOSE)
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# install into local 'install' directory
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)$(MAKE) VERBOSE=$(MAKE_VERBOSE) DESTDIR=install install
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# remove shared library existence checks since many libs are not
|
||||||
|
@# present and not needed at build time
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)find $(CURDIR)/install/qt/lib/cmake -name "*.cmake" \
|
||||||
|
-exec sed -i "/list(APPEND _IMPORT_CHECK_TARGETS /d" {} \;
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# strip libs and create symlinks in 'bin' and 'debug' directories
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)for LIB in $(INSTALL_LIBS); do \
|
||||||
|
cd $(CURDIR)/install/qt/$$(dirname $${LIB}) && \
|
||||||
|
$(OBJCOPY) --only-keep-debug $$(basename $${LIB}) $$(basename $${LIB}).debug && \
|
||||||
|
$(STRIP) $$(basename $${LIB}) -o $$(basename $${LIB}).stripped && \
|
||||||
|
$(OBJCOPY) --add-gnu-debuglink=$$(basename $${LIB}).debug $$(basename $${LIB}).stripped; \
|
||||||
|
ln -sf $(CURDIR)/install/qt/$${LIB}.stripped $(PWD)/bin/$$(basename $${LIB}); \
|
||||||
|
ln -sf $(CURDIR)/install/qt/$${LIB}.stripped $(PWD)/debug/$$(basename $${LIB}); \
|
||||||
|
ln -sf $(CURDIR)/install/qt/$${LIB}.debug $(PWD)/debug/; \
|
||||||
|
done
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# create tar archives
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)tar chf $(PWD)/bin/qt6_declarative_qml.tar $(TAR_OPT) --exclude='*.lib.so' --transform='s/\.stripped//' -C install qt/qml
|
||||||
|
|
||||||
|
.PHONY: build
|
||||||
|
|
||||||
|
ifeq ($(called_from_lib_mk),yes)
|
||||||
|
all: build
|
||||||
|
endif
|
4
repos/libports/lib/mk/qt6_qmake.mk
Normal file
4
repos/libports/lib/mk/qt6_qmake.mk
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#
|
||||||
|
# This is a dummy library description file for the implicit inclusion of
|
||||||
|
# import-qt6_qmake.mk.
|
||||||
|
#
|
71
repos/libports/lib/mk/qt6_shadertools.mk
Normal file
71
repos/libports/lib/mk/qt6_shadertools.mk
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
QT6_PORT_LIBS = libQt6Core libQt6Gui
|
||||||
|
|
||||||
|
LIBS = qt6_cmake ldso_so_support libc libm egl mesa qt6_component stdcxx
|
||||||
|
|
||||||
|
INSTALL_LIBS = lib/libQt6ShaderTools.lib.so
|
||||||
|
|
||||||
|
BUILD_ARTIFACTS = $(notdir $(INSTALL_LIBS))
|
||||||
|
|
||||||
|
build: cmake_prepared.tag qt6_so_files
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# run cmake
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)cmake \
|
||||||
|
-G "Unix Makefiles" \
|
||||||
|
-DCMAKE_PREFIX_PATH="$(CURDIR)/build_dependencies" \
|
||||||
|
-DCMAKE_MODULE_PATH="$(CURDIR)/build_dependencies/lib/cmake/Modules" \
|
||||||
|
-DCMAKE_SYSTEM_NAME="Genode" \
|
||||||
|
-DCMAKE_AR="$(AR)" \
|
||||||
|
-DCMAKE_C_COMPILER="$(CC)" \
|
||||||
|
-DCMAKE_C_FLAGS="$(GENODE_CMAKE_CFLAGS)" \
|
||||||
|
-DCMAKE_CXX_COMPILER="$(CXX)" \
|
||||||
|
-DCMAKE_CXX_FLAGS="$(GENODE_CMAKE_CFLAGS)" \
|
||||||
|
-DCMAKE_EXE_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_APP)" \
|
||||||
|
-DCMAKE_SHARED_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_SHLIB)" \
|
||||||
|
-DCMAKE_MODULE_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_SHLIB)" \
|
||||||
|
-DQT_QMAKE_TARGET_MKSPEC=$(QT_PLATFORM) \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=/qt \
|
||||||
|
$(QT_DIR)/qtshadertools \
|
||||||
|
$(QT6_OUTPUT_FILTER)
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# build
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)$(MAKE) VERBOSE=$(MAKE_VERBOSE)
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# install into local 'install' directory
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)$(MAKE) VERBOSE=$(MAKE_VERBOSE) DESTDIR=install install
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# remove shared library existence checks since many libs are not
|
||||||
|
@# present and not needed at build time
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)find $(CURDIR)/install/qt/lib/cmake -name "*.cmake" \
|
||||||
|
-exec sed -i "/list(APPEND _IMPORT_CHECK_TARGETS /d" {} \;
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# strip libs and create symlinks in 'bin' and 'debug' directories
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)for LIB in $(INSTALL_LIBS); do \
|
||||||
|
cd $(CURDIR)/install/qt/$$(dirname $${LIB}) && \
|
||||||
|
$(OBJCOPY) --only-keep-debug $$(basename $${LIB}) $$(basename $${LIB}).debug && \
|
||||||
|
$(STRIP) $$(basename $${LIB}) -o $$(basename $${LIB}).stripped && \
|
||||||
|
$(OBJCOPY) --add-gnu-debuglink=$$(basename $${LIB}).debug $$(basename $${LIB}).stripped; \
|
||||||
|
ln -sf $(CURDIR)/install/qt/$${LIB}.stripped $(PWD)/bin/$$(basename $${LIB}); \
|
||||||
|
ln -sf $(CURDIR)/install/qt/$${LIB}.stripped $(PWD)/debug/$$(basename $${LIB}); \
|
||||||
|
ln -sf $(CURDIR)/install/qt/$${LIB}.debug $(PWD)/debug/; \
|
||||||
|
done
|
||||||
|
|
||||||
|
.PHONY: build
|
||||||
|
|
||||||
|
ifeq ($(called_from_lib_mk),yes)
|
||||||
|
all: build
|
||||||
|
endif
|
71
repos/libports/lib/mk/qt6_svg.mk
Normal file
71
repos/libports/lib/mk/qt6_svg.mk
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
QT6_PORT_LIBS = libQt6Core libQt6Gui libQt6Widgets
|
||||||
|
|
||||||
|
LIBS = qt6_cmake ldso_so_support libc libm egl mesa qt6_component stdcxx
|
||||||
|
|
||||||
|
INSTALL_LIBS = lib/libQt6Svg.lib.so
|
||||||
|
|
||||||
|
BUILD_ARTIFACTS = $(notdir $(INSTALL_LIBS))
|
||||||
|
|
||||||
|
build: cmake_prepared.tag qt6_so_files
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# run cmake
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)cmake \
|
||||||
|
-G "Unix Makefiles" \
|
||||||
|
-DCMAKE_PREFIX_PATH="$(CURDIR)/build_dependencies" \
|
||||||
|
-DCMAKE_MODULE_PATH="$(CURDIR)/build_dependencies/lib/cmake/Modules" \
|
||||||
|
-DCMAKE_SYSTEM_NAME="Genode" \
|
||||||
|
-DCMAKE_AR="$(AR)" \
|
||||||
|
-DCMAKE_C_COMPILER="$(CC)" \
|
||||||
|
-DCMAKE_C_FLAGS="$(GENODE_CMAKE_CFLAGS)" \
|
||||||
|
-DCMAKE_CXX_COMPILER="$(CXX)" \
|
||||||
|
-DCMAKE_CXX_FLAGS="$(GENODE_CMAKE_CFLAGS)" \
|
||||||
|
-DCMAKE_EXE_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_APP)" \
|
||||||
|
-DCMAKE_SHARED_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_SHLIB)" \
|
||||||
|
-DCMAKE_MODULE_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_SHLIB)" \
|
||||||
|
-DQT_QMAKE_TARGET_MKSPEC=$(QT_PLATFORM) \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=/qt \
|
||||||
|
$(QT_DIR)/qtsvg \
|
||||||
|
$(QT6_OUTPUT_FILTER)
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# build
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)$(MAKE) VERBOSE=$(MAKE_VERBOSE)
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# install into local 'install' directory
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)$(MAKE) VERBOSE=$(MAKE_VERBOSE) DESTDIR=install install
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# remove shared library existence checks since many libs are not
|
||||||
|
@# present and not needed at build time
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)find $(CURDIR)/install/qt/lib/cmake -name "*.cmake" \
|
||||||
|
-exec sed -i "/list(APPEND _IMPORT_CHECK_TARGETS /d" {} \;
|
||||||
|
|
||||||
|
@#
|
||||||
|
@# strip libs and create symlinks in 'bin' and 'debug' directories
|
||||||
|
@#
|
||||||
|
|
||||||
|
$(VERBOSE)for LIB in $(INSTALL_LIBS); do \
|
||||||
|
cd $(CURDIR)/install/qt/$$(dirname $${LIB}) && \
|
||||||
|
$(OBJCOPY) --only-keep-debug $$(basename $${LIB}) $$(basename $${LIB}).debug && \
|
||||||
|
$(STRIP) $$(basename $${LIB}) -o $$(basename $${LIB}).stripped && \
|
||||||
|
$(OBJCOPY) --add-gnu-debuglink=$$(basename $${LIB}).debug $$(basename $${LIB}).stripped; \
|
||||||
|
ln -sf $(CURDIR)/install/qt/$${LIB}.stripped $(PWD)/bin/$$(basename $${LIB}); \
|
||||||
|
ln -sf $(CURDIR)/install/qt/$${LIB}.stripped $(PWD)/debug/$$(basename $${LIB}); \
|
||||||
|
ln -sf $(CURDIR)/install/qt/$${LIB}.debug $(PWD)/debug/; \
|
||||||
|
done
|
||||||
|
|
||||||
|
.PHONY: build
|
||||||
|
|
||||||
|
ifeq ($(called_from_lib_mk),yes)
|
||||||
|
all: build
|
||||||
|
endif
|
7
repos/libports/lib/symbols/qt6_component
Normal file
7
repos/libports/lib/symbols/qt6_component
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
_ZN4Libc9Component9constructERNS_3EnvE T
|
||||||
|
#
|
||||||
|
# Make sure there is an undefined reference to "main". Because Qt6 apps don't
|
||||||
|
# link the posix library (where main is also undefined), we need this so "main"
|
||||||
|
# does not get garbage collected during linking.
|
||||||
|
#
|
||||||
|
main U
|
1
repos/libports/ports/qt6-host.hash
Normal file
1
repos/libports/ports/qt6-host.hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
65bfe06368aa913897c75ac819acb9d1efdf367f
|
8
repos/libports/ports/qt6-host.port
Normal file
8
repos/libports/ports/qt6-host.port
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
LICENSE := GPL
|
||||||
|
VERSION := 6.6.2
|
||||||
|
|
||||||
|
DOWNLOADS := qt6.archive
|
||||||
|
|
||||||
|
URL(qt6) := https://download.qt.io/official_releases/qt/6.6/6.6.2/single/qt-everywhere-src-6.6.2.tar.xz
|
||||||
|
SHA(qt6) := 3c1e42b3073ade1f7adbf06863c01e2c59521b7cc2349df2f74ecd7ebfcb922d
|
||||||
|
DIR(qt6) := src/lib/qt6
|
1
repos/libports/ports/qt6.hash
Normal file
1
repos/libports/ports/qt6.hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
22e90c4bc425795166ebec55fd1853311862bc99
|
8
repos/libports/ports/qt6.port
Normal file
8
repos/libports/ports/qt6.port
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
LICENSE := GPL
|
||||||
|
VERSION := 6.6.2
|
||||||
|
|
||||||
|
DOWNLOADS := qt6.git
|
||||||
|
|
||||||
|
URL(qt6) := https://github.com/cproc/qt6.git
|
||||||
|
REV(qt6) := issue5325
|
||||||
|
DIR(qt6) := src/lib/qt6
|
48
repos/libports/recipes/api/qt6_base/content.mk
Normal file
48
repos/libports/recipes/api/qt6_base/content.mk
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
MIRROR_FROM_REP_DIR := lib/import/import-qt6.inc \
|
||||||
|
lib/import/import-qt6_cmake.mk \
|
||||||
|
lib/import/import-qt6_qmake.mk \
|
||||||
|
lib/mk/qt6_cmake.mk \
|
||||||
|
lib/mk/qt6_qmake.mk
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_REP_DIR)
|
||||||
|
|
||||||
|
$(MIRROR_FROM_REP_DIR):
|
||||||
|
$(mirror_from_rep_dir)
|
||||||
|
|
||||||
|
PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt6)
|
||||||
|
API_DIR := $(PORT_DIR)/src/lib/qt6/genode/api
|
||||||
|
|
||||||
|
MIRROR_FROM_PORT_DIR := include \
|
||||||
|
metatypes \
|
||||||
|
mkspecs \
|
||||||
|
lib/cmake \
|
||||||
|
|
||||||
|
MIRROR_SYMBOLS := lib/symbols/libQt6Concurrent \
|
||||||
|
lib/symbols/libQt6Core \
|
||||||
|
lib/symbols/libQt6Gui \
|
||||||
|
lib/symbols/libQt6Network \
|
||||||
|
lib/symbols/libQt6OpenGL \
|
||||||
|
lib/symbols/libQt6OpenGLWidgets \
|
||||||
|
lib/symbols/libQt6PrintSupport \
|
||||||
|
lib/symbols/libQt6Sql \
|
||||||
|
lib/symbols/libQt6Test \
|
||||||
|
lib/symbols/libQt6Widgets \
|
||||||
|
lib/symbols/libQt6Xml \
|
||||||
|
lib/symbols/libqgenode
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_PORT_DIR)
|
||||||
|
|
||||||
|
$(MIRROR_FROM_PORT_DIR):
|
||||||
|
cp -r $(API_DIR)/$@ $@
|
||||||
|
|
||||||
|
content: $(MIRROR_SYMBOLS)
|
||||||
|
|
||||||
|
$(MIRROR_SYMBOLS):
|
||||||
|
mkdir -p lib/symbols
|
||||||
|
cp $(API_DIR)/$@ lib/symbols
|
||||||
|
|
||||||
|
|
||||||
|
content: LICENSE
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(PORT_DIR)/src/lib/qt6/LICENSE.LGPL3 $@
|
1
repos/libports/recipes/api/qt6_base/hash
Normal file
1
repos/libports/recipes/api/qt6_base/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-07-20 2e4d78a8311cb2ea12f3318ab8e055eeec6cf44d
|
10
repos/libports/recipes/api/qt6_component/content.mk
Normal file
10
repos/libports/recipes/api/qt6_component/content.mk
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
MIRROR_FROM_REP_DIR := include/qt6_component \
|
||||||
|
lib/symbols/qt6_component
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_REP_DIR) LICENSE
|
||||||
|
|
||||||
|
$(MIRROR_FROM_REP_DIR):
|
||||||
|
$(mirror_from_rep_dir)
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(GENODE_DIR)/LICENSE $@
|
1
repos/libports/recipes/api/qt6_component/hash
Normal file
1
repos/libports/recipes/api/qt6_component/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-02-25 2ab86f26cd18d37d2313fc1a998103d98e2dc37f
|
39
repos/libports/recipes/api/qt6_declarative/content.mk
Normal file
39
repos/libports/recipes/api/qt6_declarative/content.mk
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt6)
|
||||||
|
|
||||||
|
MIRROR_LIB_SYMBOLS := libQt6LabsAnimation \
|
||||||
|
libQt6LabsFolderListModel \
|
||||||
|
libQt6LabsQmlModels \
|
||||||
|
libQt6LabsSettings \
|
||||||
|
libQt6LabsSharedImage \
|
||||||
|
libQt6LabsWavefrontMesh \
|
||||||
|
libQt6Qml \
|
||||||
|
libQt6QmlCompiler \
|
||||||
|
libQt6QmlCore \
|
||||||
|
libQt6QmlLocalStorage \
|
||||||
|
libQt6QmlModels \
|
||||||
|
libQt6QmlWorkerScript \
|
||||||
|
libQt6QmlXmlListModel \
|
||||||
|
libQt6Quick \
|
||||||
|
libQt6QuickControls2 \
|
||||||
|
libQt6QuickControls2Impl \
|
||||||
|
libQt6QuickDialogs2 \
|
||||||
|
libQt6QuickDialogs2QuickImpl \
|
||||||
|
libQt6QuickDialogs2Utils \
|
||||||
|
libQt6QuickEffects \
|
||||||
|
libQt6QuickLayouts \
|
||||||
|
libQt6QuickParticles \
|
||||||
|
libQt6QuickShapes \
|
||||||
|
libQt6QuickTemplates2 \
|
||||||
|
libQt6QuickTest \
|
||||||
|
libQt6QuickWidgets
|
||||||
|
|
||||||
|
content: $(MIRROR_LIB_SYMBOLS)
|
||||||
|
|
||||||
|
$(MIRROR_LIB_SYMBOLS):
|
||||||
|
mkdir -p lib/symbols
|
||||||
|
cp $(PORT_DIR)/src/lib/qt6/genode/api/lib/symbols/$@ lib/symbols/
|
||||||
|
|
||||||
|
content: LICENSE
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(PORT_DIR)/src/lib/qt6/LICENSE.LGPL3 $@
|
1
repos/libports/recipes/api/qt6_declarative/hash
Normal file
1
repos/libports/recipes/api/qt6_declarative/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-08-13 b019a06ae7a5361afab6fbde1d2f81911936adc7
|
14
repos/libports/recipes/api/qt6_shadertools/content.mk
Normal file
14
repos/libports/recipes/api/qt6_shadertools/content.mk
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt6)
|
||||||
|
|
||||||
|
MIRROR_LIB_SYMBOLS := libQt6ShaderTools
|
||||||
|
|
||||||
|
content: $(MIRROR_LIB_SYMBOLS)
|
||||||
|
|
||||||
|
$(MIRROR_LIB_SYMBOLS):
|
||||||
|
mkdir -p lib/symbols
|
||||||
|
cp $(PORT_DIR)/src/lib/qt6/genode/api/lib/symbols/$@ lib/symbols/
|
||||||
|
|
||||||
|
content: LICENSE
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(PORT_DIR)/src/lib/qt6/LICENSE.LGPL3 $@
|
1
repos/libports/recipes/api/qt6_shadertools/hash
Normal file
1
repos/libports/recipes/api/qt6_shadertools/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-08-13 b019a06ae7a5361afab6fbde1d2f81911936adc7
|
14
repos/libports/recipes/api/qt6_svg/content.mk
Normal file
14
repos/libports/recipes/api/qt6_svg/content.mk
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt6)
|
||||||
|
|
||||||
|
MIRROR_LIB_SYMBOLS := libQt6Svg
|
||||||
|
|
||||||
|
content: $(MIRROR_LIB_SYMBOLS)
|
||||||
|
|
||||||
|
$(MIRROR_LIB_SYMBOLS):
|
||||||
|
mkdir -p lib/symbols
|
||||||
|
cp $(PORT_DIR)/src/lib/qt6/genode/api/lib/symbols/$@ lib/symbols/
|
||||||
|
|
||||||
|
content: LICENSE
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(PORT_DIR)/src/lib/qt6/LICENSE.LGPL3 $@
|
1
repos/libports/recipes/api/qt6_svg/hash
Normal file
1
repos/libports/recipes/api/qt6_svg/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-08-13 b019a06ae7a5361afab6fbde1d2f81911936adc7
|
14
repos/libports/recipes/raw/qt6_dejavusans/content.mk
Normal file
14
repos/libports/recipes/raw/qt6_dejavusans/content.mk
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
content: qt6_dejavusans.tar LICENSE
|
||||||
|
|
||||||
|
PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt6)
|
||||||
|
|
||||||
|
qt/lib/fonts/DejaVuSans.ttf:
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
cp $(PORT_DIR)/src/lib/qt6/qtbase/src/3rdparty/wasm/$(notdir $@) $@
|
||||||
|
|
||||||
|
qt6_dejavusans.tar: qt/lib/fonts/DejaVuSans.ttf
|
||||||
|
tar --owner=0 --group=0 --numeric-owner --mode='go=' --mtime='1970-01-01 00:00+00' -cf $@ qt
|
||||||
|
rm -rf qt
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(PORT_DIR)/src/lib/qt6/qtbase/src/3rdparty/wasm/DEJAVU-LICENSE $@
|
1
repos/libports/recipes/raw/qt6_dejavusans/hash
Normal file
1
repos/libports/recipes/raw/qt6_dejavusans/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-08-07 38b1c2c107e85224612d1997f05e80e65b1e70f0
|
32
repos/libports/recipes/raw/qt6_samegame/content.mk
Normal file
32
repos/libports/recipes/raw/qt6_samegame/content.mk
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
content: qt6_samegame.tar
|
||||||
|
|
||||||
|
PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt6)
|
||||||
|
|
||||||
|
SAMEGAME3_RESOURCES := samegame.qml \
|
||||||
|
Dialog.qml \
|
||||||
|
Button.qml \
|
||||||
|
Block.qml \
|
||||||
|
samegame.js
|
||||||
|
|
||||||
|
SAMEGAME_RESOURCES := background.jpg \
|
||||||
|
blueStone.png \
|
||||||
|
greenStone.png \
|
||||||
|
redStone.png
|
||||||
|
|
||||||
|
samegame:
|
||||||
|
mkdir -p $@
|
||||||
|
|
||||||
|
samegame/pics:
|
||||||
|
mkdir -p $@
|
||||||
|
|
||||||
|
$(addprefix samegame/, $(SAMEGAME3_RESOURCES)): samegame
|
||||||
|
cp $(PORT_DIR)/src/lib/qt6/qtdeclarative/examples/quick/tutorials/samegame/samegame3/$(notdir $@) $@
|
||||||
|
|
||||||
|
$(addprefix samegame/pics/, $(SAMEGAME_RESOURCES)): samegame/pics
|
||||||
|
cp $(PORT_DIR)/src/lib/qt6/qtdeclarative/examples/quick/tutorials/samegame/samegame3/pics/$(notdir $@) $@
|
||||||
|
|
||||||
|
|
||||||
|
qt6_samegame.tar: $(addprefix samegame/, $(SAMEGAME3_RESOURCES)) \
|
||||||
|
$(addprefix samegame/pics/, $(SAMEGAME_RESOURCES))
|
||||||
|
tar --owner=0 --group=0 --numeric-owner --mode='go=' --mtime='1970-01-01 00:00+00' -cf $@ -C samegame .
|
||||||
|
rm -rf samegame/
|
1
repos/libports/recipes/raw/qt6_samegame/hash
Normal file
1
repos/libports/recipes/raw/qt6_samegame/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-08-14 d1e0a594a9f6c6ed6f6ce1b54afd2ac9ef8c86dd
|
1
repos/libports/recipes/src/qt6_base/api
Normal file
1
repos/libports/recipes/src/qt6_base/api
Normal file
@ -0,0 +1 @@
|
|||||||
|
qt6_base
|
29
repos/libports/recipes/src/qt6_base/content.mk
Normal file
29
repos/libports/recipes/src/qt6_base/content.mk
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
MIRROR_FROM_REP_DIR := lib/mk/qt6_base.mk
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_REP_DIR)
|
||||||
|
|
||||||
|
$(MIRROR_FROM_REP_DIR):
|
||||||
|
$(mirror_from_rep_dir)
|
||||||
|
|
||||||
|
PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt6)
|
||||||
|
|
||||||
|
MIRROR_FROM_PORT_DIR := src/lib/qt6/qtbase
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_PORT_DIR)
|
||||||
|
|
||||||
|
$(MIRROR_FROM_PORT_DIR):
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
cp -r $(PORT_DIR)/$@ $(dir $@)
|
||||||
|
|
||||||
|
MIRROR_FROM_OS := include/pointer/shape_report.h
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_OS)
|
||||||
|
|
||||||
|
$(MIRROR_FROM_OS):
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
cp -r $(GENODE_DIR)/repos/os/$@ $(dir $@)
|
||||||
|
|
||||||
|
content: LICENSE
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(PORT_DIR)/src/lib/qt6/LICENSE.LGPL3 $@
|
1
repos/libports/recipes/src/qt6_base/hash
Normal file
1
repos/libports/recipes/src/qt6_base/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-08-07 a283d25ca59402458edd6637d3f6d6d0110462a1
|
15
repos/libports/recipes/src/qt6_base/used_apis
Normal file
15
repos/libports/recipes/src/qt6_base/used_apis
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
base
|
||||||
|
blit
|
||||||
|
expat
|
||||||
|
framebuffer_session
|
||||||
|
gui_session
|
||||||
|
input_session
|
||||||
|
libc
|
||||||
|
mesa
|
||||||
|
os
|
||||||
|
qoost
|
||||||
|
qt6_component
|
||||||
|
report_session
|
||||||
|
so
|
||||||
|
stdcxx
|
||||||
|
timer_session
|
20
repos/libports/recipes/src/qt6_calculatorform/content.mk
Normal file
20
repos/libports/recipes/src/qt6_calculatorform/content.mk
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
MIRROR_FROM_REP_DIR := src/app/qt6/examples/calculatorform
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_REP_DIR) LICENSE
|
||||||
|
|
||||||
|
$(MIRROR_FROM_REP_DIR):
|
||||||
|
$(mirror_from_rep_dir)
|
||||||
|
|
||||||
|
PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt6)
|
||||||
|
|
||||||
|
MIRROR_FROM_PORT_DIR := src/lib/qt6/qttools/examples/designer/calculatorform
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_PORT_DIR)
|
||||||
|
|
||||||
|
$(MIRROR_FROM_PORT_DIR):
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
cp -r $(PORT_DIR)/$@ $(dir $@)
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(PORT_DIR)/src/lib/qt6/LICENSE.GPL3 $@
|
||||||
|
|
1
repos/libports/recipes/src/qt6_calculatorform/hash
Normal file
1
repos/libports/recipes/src/qt6_calculatorform/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-08-07 13465c2fe1317113b33085babc73e5f87501867a
|
6
repos/libports/recipes/src/qt6_calculatorform/used_apis
Normal file
6
repos/libports/recipes/src/qt6_calculatorform/used_apis
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
libc
|
||||||
|
mesa
|
||||||
|
qt6_base
|
||||||
|
qt6_component
|
||||||
|
so
|
||||||
|
stdcxx
|
1
repos/libports/recipes/src/qt6_component/api
Normal file
1
repos/libports/recipes/src/qt6_component/api
Normal file
@ -0,0 +1 @@
|
|||||||
|
qt6_component
|
10
repos/libports/recipes/src/qt6_component/content.mk
Normal file
10
repos/libports/recipes/src/qt6_component/content.mk
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
MIRROR_FROM_REP_DIR := lib/mk/qt6_component.mk \
|
||||||
|
src/lib/qt6_component/qt_component.cc
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_REP_DIR) LICENSE
|
||||||
|
|
||||||
|
$(MIRROR_FROM_REP_DIR):
|
||||||
|
$(mirror_from_rep_dir)
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(GENODE_DIR)/LICENSE $@
|
1
repos/libports/recipes/src/qt6_component/hash
Normal file
1
repos/libports/recipes/src/qt6_component/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-06-19 57ef88b3254475486e091dc8f0f954d2f9528cba
|
3
repos/libports/recipes/src/qt6_component/used_apis
Normal file
3
repos/libports/recipes/src/qt6_component/used_apis
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
base
|
||||||
|
libc
|
||||||
|
so
|
1
repos/libports/recipes/src/qt6_declarative/api
Normal file
1
repos/libports/recipes/src/qt6_declarative/api
Normal file
@ -0,0 +1 @@
|
|||||||
|
qt6_declarative
|
21
repos/libports/recipes/src/qt6_declarative/content.mk
Normal file
21
repos/libports/recipes/src/qt6_declarative/content.mk
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIRROR_FROM_REP_DIR := lib/mk/qt6_declarative.mk
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_REP_DIR)
|
||||||
|
|
||||||
|
$(MIRROR_FROM_REP_DIR):
|
||||||
|
$(mirror_from_rep_dir)
|
||||||
|
|
||||||
|
PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt6)
|
||||||
|
|
||||||
|
MIRROR_FROM_PORT_DIR := src/lib/qt6/qtdeclarative
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_PORT_DIR)
|
||||||
|
|
||||||
|
$(MIRROR_FROM_PORT_DIR):
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
cp -r $(PORT_DIR)/$@ $(dir $@)
|
||||||
|
|
||||||
|
content: LICENSE
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(PORT_DIR)/src/lib/qt6/LICENSE.LGPL3 $@
|
1
repos/libports/recipes/src/qt6_declarative/hash
Normal file
1
repos/libports/recipes/src/qt6_declarative/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-08-13 0823c7e39fe4c746ee577f1067992139bb73e731
|
6
repos/libports/recipes/src/qt6_declarative/used_apis
Normal file
6
repos/libports/recipes/src/qt6_declarative/used_apis
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
libc
|
||||||
|
mesa
|
||||||
|
qt6_base
|
||||||
|
qt6_component
|
||||||
|
so
|
||||||
|
stdcxx
|
27
repos/libports/recipes/src/qt6_launchpad/content.mk
Normal file
27
repos/libports/recipes/src/qt6_launchpad/content.mk
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
MIRROR_FROM_REP_DIR := src/app/qt6/qt_launchpad
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_REP_DIR) LICENSE
|
||||||
|
|
||||||
|
$(MIRROR_FROM_REP_DIR):
|
||||||
|
$(mirror_from_rep_dir)
|
||||||
|
|
||||||
|
MIRROR_FROM_DEMO := include/launchpad \
|
||||||
|
lib/mk/launchpad.mk \
|
||||||
|
src/lib/launchpad
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_DEMO)
|
||||||
|
|
||||||
|
$(MIRROR_FROM_DEMO):
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
cp -r $(GENODE_DIR)/repos/demo/$@ $(dir $@)
|
||||||
|
|
||||||
|
MIRROR_FROM_OS := include/init/child_policy.h
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_OS)
|
||||||
|
|
||||||
|
$(MIRROR_FROM_OS):
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
cp -r $(GENODE_DIR)/repos/os/$@ $(dir $@)
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(GENODE_DIR)/LICENSE $@
|
1
repos/libports/recipes/src/qt6_launchpad/hash
Normal file
1
repos/libports/recipes/src/qt6_launchpad/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-08-07 1299305e19d2c766c212224b796691fb690a740e
|
9
repos/libports/recipes/src/qt6_launchpad/used_apis
Normal file
9
repos/libports/recipes/src/qt6_launchpad/used_apis
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
base
|
||||||
|
libc
|
||||||
|
mesa
|
||||||
|
os
|
||||||
|
qt6_base
|
||||||
|
qt6_component
|
||||||
|
stdcxx
|
||||||
|
timer_session
|
||||||
|
vfs
|
20
repos/libports/recipes/src/qt6_openglwindow/content.mk
Normal file
20
repos/libports/recipes/src/qt6_openglwindow/content.mk
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
MIRROR_FROM_REP_DIR := src/app/qt6/examples/openglwindow
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_REP_DIR) LICENSE
|
||||||
|
|
||||||
|
$(MIRROR_FROM_REP_DIR):
|
||||||
|
$(mirror_from_rep_dir)
|
||||||
|
|
||||||
|
PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt6)
|
||||||
|
|
||||||
|
MIRROR_FROM_PORT_DIR := src/lib/qt6/qtbase/examples/opengl/openglwindow
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_PORT_DIR)
|
||||||
|
|
||||||
|
$(MIRROR_FROM_PORT_DIR):
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
cp -r $(PORT_DIR)/$@ $(dir $@)
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(PORT_DIR)/src/lib/qt6/LICENSE.GPL3 $@
|
||||||
|
|
1
repos/libports/recipes/src/qt6_openglwindow/hash
Normal file
1
repos/libports/recipes/src/qt6_openglwindow/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-08-07 5ef331819960c41bda9d050f7dd8c7f73b76d134
|
5
repos/libports/recipes/src/qt6_openglwindow/used_apis
Normal file
5
repos/libports/recipes/src/qt6_openglwindow/used_apis
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
libc
|
||||||
|
mesa
|
||||||
|
qt6_base
|
||||||
|
qt6_component
|
||||||
|
stdcxx
|
9
repos/libports/recipes/src/qt6_samegame/content.mk
Normal file
9
repos/libports/recipes/src/qt6_samegame/content.mk
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
MIRROR_FROM_REP_DIR := src/app/qt6/examples/samegame
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_REP_DIR) LICENSE
|
||||||
|
|
||||||
|
$(MIRROR_FROM_REP_DIR):
|
||||||
|
$(mirror_from_rep_dir)
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(GENODE_DIR)/LICENSE $@
|
1
repos/libports/recipes/src/qt6_samegame/hash
Normal file
1
repos/libports/recipes/src/qt6_samegame/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-08-14 eadc4679251c14144de7ea807f2ffe25d96d437b
|
6
repos/libports/recipes/src/qt6_samegame/used_apis
Normal file
6
repos/libports/recipes/src/qt6_samegame/used_apis
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
libc
|
||||||
|
mesa
|
||||||
|
qt6_base
|
||||||
|
qt6_component
|
||||||
|
qt6_declarative
|
||||||
|
stdcxx
|
1
repos/libports/recipes/src/qt6_shadertools/api
Normal file
1
repos/libports/recipes/src/qt6_shadertools/api
Normal file
@ -0,0 +1 @@
|
|||||||
|
qt6_shadertools
|
21
repos/libports/recipes/src/qt6_shadertools/content.mk
Normal file
21
repos/libports/recipes/src/qt6_shadertools/content.mk
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIRROR_FROM_REP_DIR := lib/mk/qt6_shadertools.mk
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_REP_DIR)
|
||||||
|
|
||||||
|
$(MIRROR_FROM_REP_DIR):
|
||||||
|
$(mirror_from_rep_dir)
|
||||||
|
|
||||||
|
PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt6)
|
||||||
|
|
||||||
|
MIRROR_FROM_PORT_DIR := src/lib/qt6/qtshadertools
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_PORT_DIR)
|
||||||
|
|
||||||
|
$(MIRROR_FROM_PORT_DIR):
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
cp -r $(PORT_DIR)/$@ $(dir $@)
|
||||||
|
|
||||||
|
content: LICENSE
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(PORT_DIR)/src/lib/qt6/LICENSE.LGPL3 $@
|
1
repos/libports/recipes/src/qt6_shadertools/hash
Normal file
1
repos/libports/recipes/src/qt6_shadertools/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-08-13 0823c7e39fe4c746ee577f1067992139bb73e731
|
6
repos/libports/recipes/src/qt6_shadertools/used_apis
Normal file
6
repos/libports/recipes/src/qt6_shadertools/used_apis
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
libc
|
||||||
|
mesa
|
||||||
|
qt6_base
|
||||||
|
qt6_component
|
||||||
|
so
|
||||||
|
stdcxx
|
1
repos/libports/recipes/src/qt6_svg/api
Normal file
1
repos/libports/recipes/src/qt6_svg/api
Normal file
@ -0,0 +1 @@
|
|||||||
|
qt6_svg
|
21
repos/libports/recipes/src/qt6_svg/content.mk
Normal file
21
repos/libports/recipes/src/qt6_svg/content.mk
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIRROR_FROM_REP_DIR := lib/mk/qt6_svg.mk
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_REP_DIR)
|
||||||
|
|
||||||
|
$(MIRROR_FROM_REP_DIR):
|
||||||
|
$(mirror_from_rep_dir)
|
||||||
|
|
||||||
|
PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt6)
|
||||||
|
|
||||||
|
MIRROR_FROM_PORT_DIR := src/lib/qt6/qtsvg
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_PORT_DIR)
|
||||||
|
|
||||||
|
$(MIRROR_FROM_PORT_DIR):
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
cp -r $(PORT_DIR)/$@ $(dir $@)
|
||||||
|
|
||||||
|
content: LICENSE
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(PORT_DIR)/src/lib/qt6/LICENSE.LGPL3 $@
|
1
repos/libports/recipes/src/qt6_svg/hash
Normal file
1
repos/libports/recipes/src/qt6_svg/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2024-08-13 0823c7e39fe4c746ee577f1067992139bb73e731
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user