First commit
For now xserver refuse to compile dues to missing dependencies
This commit is contained in:
commit
3d3a37d79f
34 changed files with 1570 additions and 0 deletions
21
Dockerfile
Normal file
21
Dockerfile
Normal file
|
@ -0,0 +1,21 @@
|
|||
FROM debian:bullseye-slim
|
||||
|
||||
RUN apt update \
|
||||
&& apt install --no-install-recommends -y libext2fs2 \
|
||||
mmdebstrap \
|
||||
parted \
|
||||
multistrap \
|
||||
udisks2 \
|
||||
qemu-system-aarch64 \
|
||||
qemu-user-static \
|
||||
binfmt-support \
|
||||
arch-test \
|
||||
curl \
|
||||
bash
|
||||
|
||||
RUN echo "none /proc/sys/fs/binfmt_misc binfmt_misc defaults 0 0" > /etc/fstab
|
||||
COPY docker/entrypoint.sh /tmp
|
||||
COPY src/ /tmp
|
||||
WORKDIR /tmp
|
||||
CMD bash
|
||||
# CMD /tmp/entrypoint.sh
|
51
README.md
Normal file
51
README.md
Normal file
|
@ -0,0 +1,51 @@
|
|||
MNT Reform Debian userland creation
|
||||
-----------------------------------
|
||||
|
||||
This script built an userland "filesystem" for MNT Reform 2 laptop computer.
|
||||
**Work in Progress**: for now there is some dependencies missing for compiling
|
||||
xservser.
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
make_userland -r <recipe> -m <mirror> -o <output> -h
|
||||
```
|
||||
|
||||
* `recipe`: recipe to apply, see recipe section below, default:`default`
|
||||
* `mirroir`: Debian mirror to use, default: `http://ftp.debian.org`
|
||||
* `output`: output directory, default: `/tmp`, a directory named with recipe
|
||||
name will be createdin this directory.
|
||||
|
||||
## Recipe
|
||||
|
||||
A recipe is a collection of scripts and attached files inside a subdirectory
|
||||
of `recipes/`. Theses script are executed into a chroot of the destination
|
||||
directory by `mmdebstrap` and use its hook system.
|
||||
|
||||
## Docker
|
||||
|
||||
You can find a Dockerfile and an entrypoint script to help you create userland
|
||||
filesystem. This container is created to work on a x86 machine then you need to
|
||||
run the container with the `-privileged` parameter.
|
||||
|
||||
First you need to build the container :
|
||||
|
||||
```
|
||||
git clone https://git.epha.se/ephase/reform_mkuserland
|
||||
cd reform_mkuserland
|
||||
docker build -t reform_make_userland
|
||||
[...]
|
||||
```
|
||||
|
||||
And run it :
|
||||
|
||||
```
|
||||
docker run -v /home/docker/output:/output --rm --privileged reform_make_userland
|
||||
```
|
||||
|
||||
## Licence
|
||||
|
||||
This work is derivated from MNT script found [here][l_mnt_image] and licenced
|
||||
under the GPLv3 Licence
|
||||
|
||||
[l_mnt_image]:https://source.mnt.re/reform/reform-system-image/
|
12
docker/entrypoint.sh
Executable file
12
docker/entrypoint.sh
Executable file
|
@ -0,0 +1,12 @@
|
|||
#!/bin/bash
|
||||
|
||||
[[ -z $RECIPE ]] && RECIPE="default"
|
||||
|
||||
sleep 2
|
||||
mount -a
|
||||
echo ':qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:OCF' > /proc/sys/fs/binfmt_misc/register
|
||||
|
||||
if ! ./make_userland.sh -r "$RECIPE" -o /output
|
||||
then
|
||||
printf "Error when create userland\n"
|
||||
fi
|
74
src/init_target.sh
Executable file
74
src/init_target.sh
Executable file
|
@ -0,0 +1,74 @@
|
|||
#!/bin/bash
|
||||
|
||||
# populate Debian image
|
||||
#
|
||||
|
||||
# create a file descriptor for storing log
|
||||
|
||||
exec 3>/tmp/error.log
|
||||
|
||||
function error {
|
||||
>&2 printf "\e[31mE\e[0m: %s\n" "$1"
|
||||
}
|
||||
|
||||
erase_display_char () {
|
||||
local i
|
||||
local nchar
|
||||
nchar=$1
|
||||
i=0
|
||||
|
||||
while [ "$i" -lt "$nchar" ]; do
|
||||
printf "\b \b"
|
||||
((i=i + 1))
|
||||
done
|
||||
}
|
||||
|
||||
install_packages () {
|
||||
local package
|
||||
package="$1"
|
||||
|
||||
printf "Install %s: " "$package"
|
||||
apt-get install -y "$package" 2>&3 | while read -r x; do
|
||||
display=""
|
||||
pkg_name=""
|
||||
case $x in
|
||||
Get*)
|
||||
pkg_name=$(echo "$x" | awk '{ printf $5 }')
|
||||
display="downloading $pkg_name"
|
||||
;;
|
||||
Unpack*)
|
||||
pkg_name=$(echo "$x" | awk '{ printf $2 }')
|
||||
display="Unpacking $pkg_name"
|
||||
;;
|
||||
*already*newest*)
|
||||
pkg_name=$(echo "$x" | awk '{ printf $1 }')
|
||||
display="Already Installed"
|
||||
break
|
||||
;;
|
||||
esac
|
||||
if [[ -n "$display" ]]
|
||||
then
|
||||
display="$display $pkg_name"
|
||||
erase_display_char "$nchar"
|
||||
printf "%s" "$display"
|
||||
nchar=${#display}
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )"
|
||||
RECIPE_DIR="${SCRIPT_DIR}/recipe"
|
||||
|
||||
[[ ! -d "$RECIPE_DIR" ]] && { error "Recipe dir ${RECIPE_DIR} does not exist"; exit 10; }
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
export DEBCONF_NONINTERACTIVE_SEEN=true
|
||||
export LC_ALL=C
|
||||
export LANGUAGE=C
|
||||
export LANG=C
|
||||
|
||||
for i in $RECIPE_DIR/*.sh
|
||||
do
|
||||
source $i
|
||||
done
|
||||
|
||||
exit 0
|
157
src/make_userland.sh
Executable file
157
src/make_userland.sh
Executable file
|
@ -0,0 +1,157 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
function usage {
|
||||
|
||||
cat <<EOF
|
||||
|
||||
Create Debian userland filesystem for MNT Reform
|
||||
---
|
||||
This script create an userland system for the MNT Reform 2 laptop
|
||||
|
||||
USAGE:
|
||||
make_userland.sh -t <target> -r <recipe> -m <mirror>
|
||||
|
||||
<target>
|
||||
|
||||
<recipe>.
|
||||
EOF
|
||||
}
|
||||
|
||||
function error {
|
||||
>&2 printf "\e[31mE\e[0m %s\n" "$1"
|
||||
}
|
||||
|
||||
function clean {
|
||||
rm -rf "$output"
|
||||
}
|
||||
|
||||
function process_args {
|
||||
|
||||
while :; do
|
||||
case $1 in
|
||||
-h|-\?|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
-r|--recipe)
|
||||
recipe_name="$2"
|
||||
shift
|
||||
;;
|
||||
-m|--mirror)
|
||||
local http_response
|
||||
http_response=$(curl -o /dev/null -s -L -I -w "%{http_code}\n" "$2")
|
||||
if [ ! "$http_response" -eq 200 ]
|
||||
then
|
||||
error "Mirror $1 seems to have problem."
|
||||
exit 5
|
||||
fi
|
||||
debian_mirror="$2"
|
||||
shift
|
||||
;;
|
||||
-o|--output)
|
||||
if [ ! -d "$2" ]
|
||||
then
|
||||
error "output directory $2 not exist."
|
||||
exit 5
|
||||
fi
|
||||
output_dir=$2
|
||||
;;
|
||||
*)
|
||||
break
|
||||
esac
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
function process_packagefile () {
|
||||
local packagesfile
|
||||
local packageslist
|
||||
packagesfile="$1"
|
||||
packageslist="$2"
|
||||
|
||||
if [ ! -f "$packagesfile" ]
|
||||
then
|
||||
error "Package file $packagesfile not found"
|
||||
return
|
||||
fi
|
||||
while read -r pkg
|
||||
do
|
||||
if [[ -z $packageslist ]]
|
||||
then
|
||||
packageslist="$pkg"
|
||||
else
|
||||
packageslist="${packageslist},${pkg}"
|
||||
fi
|
||||
done < "$packagesfile"
|
||||
printf "%s" "$packageslist"
|
||||
}
|
||||
|
||||
for c in curl mmdebstrap
|
||||
do
|
||||
if ! command -v "$c" >/dev/null
|
||||
then
|
||||
error "This script need $c to work properly"
|
||||
exit 6
|
||||
fi
|
||||
done
|
||||
|
||||
# default values
|
||||
debian_mirror="http://ftp.debian.org/debian"
|
||||
output_dir="/tmp"
|
||||
recipe_name="default"
|
||||
|
||||
process_args "$@"
|
||||
export RECIPE="recipes/$recipe_name"
|
||||
|
||||
printf "Make userland script, dir:%s recipe:%s" "$(pwd)" "$recipe"
|
||||
|
||||
if [ ! -d "$RECIPE" ]
|
||||
then
|
||||
error "recipe folder $RECIPE not found"
|
||||
usage
|
||||
exit 2
|
||||
fi
|
||||
|
||||
output="$output_dir/$recipe_name"
|
||||
if [ -f "$output" ]
|
||||
then
|
||||
error "$output directory exist, remove it and launch $0 again"
|
||||
exit 20
|
||||
fi
|
||||
trap clean ERR SIGINT
|
||||
|
||||
include=""
|
||||
if [ -d "$RECIPE/packages" ]
|
||||
then
|
||||
|
||||
for f in "$RECIPE"/packages/*.list
|
||||
do
|
||||
printf "Add package list for mmdebstrap: %s\n" "$f"
|
||||
include="$( process_packagefile "$f" "$include")"
|
||||
done
|
||||
fi
|
||||
|
||||
if [ -d "$RECIPE"/hook ]
|
||||
then
|
||||
hook="--hook-directory=$(pwd)/${RECIPE}/hook"
|
||||
fi
|
||||
|
||||
command="mmdebstrap --architectures=arm64 --components=main --variant=minbase"
|
||||
|
||||
[[ -n "$include" ]] && command="$command --include=$include"
|
||||
[[ -n "$hook" ]] && command="$command $hook"
|
||||
command="$command sid $output $debian_mirror"
|
||||
|
||||
$command || exit 20
|
||||
|
||||
exit
|
||||
#mkdir "$output/root/recipe" || exit 21
|
||||
#
|
||||
#cp init_target.sh "$output/root/" || exit 40
|
||||
#cp -r "$recipe"/* "$output/root/recipe" || exit 41
|
||||
#
|
||||
#chroot "$output" /root/init_target.sh
|
||||
#
|
||||
#exit 0
|
28
src/recipes/default/hook/customize.sh
Executable file
28
src/recipes/default/hook/customize.sh
Executable file
|
@ -0,0 +1,28 @@
|
|||
#!/bin/bash
|
||||
|
||||
printf "Customize hook script for mmdebstrap %s\n\n" "$RECIPE"
|
||||
|
||||
printf "Add MNT repository and key\n"
|
||||
chroot $1 apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 376511EB67AD7BAF
|
||||
echo "deb https://mntre.com/reform-debian sid/" | chroot $1 tee /etc/apt/sources.list.d/mntre.list
|
||||
chroot $1 apt update
|
||||
|
||||
printf "Install MNT packages\n"
|
||||
chroot $1 apt install -y reform-tools reform-handbook
|
||||
|
||||
source="${RECIPE}/hook/data/overlay"
|
||||
printf "Sync overlay directory from %s to %s\n" "$source" "$1"
|
||||
if [ -d $source ]
|
||||
then
|
||||
printf " -> source exist\n"
|
||||
cp -Raf ${RECIPE}/hook/data/overlay/* $1
|
||||
else
|
||||
printf "Can't find %s directory\n" "$source"
|
||||
fi
|
||||
|
||||
# Procfs is needed to build DRM
|
||||
mount -t proc /proc $1/proc
|
||||
|
||||
chroot $1 /root/build_script.sh
|
||||
|
||||
exit 0
|
85
src/recipes/default/hook/data/overlay/etc/adduser.conf
Normal file
85
src/recipes/default/hook/data/overlay/etc/adduser.conf
Normal file
|
@ -0,0 +1,85 @@
|
|||
# /etc/adduser.conf: `adduser' configuration.
|
||||
# See adduser(8) and adduser.conf(5) for full documentation.
|
||||
|
||||
# The DSHELL variable specifies the default login shell on your
|
||||
# system.
|
||||
DSHELL=/bin/bash
|
||||
|
||||
# The DHOME variable specifies the directory containing users' home
|
||||
# directories.
|
||||
DHOME=/home
|
||||
|
||||
# If GROUPHOMES is "yes", then the home directories will be created as
|
||||
# /home/groupname/user.
|
||||
GROUPHOMES=no
|
||||
|
||||
# If LETTERHOMES is "yes", then the created home directories will have
|
||||
# an extra directory - the first letter of the user name. For example:
|
||||
# /home/u/user.
|
||||
LETTERHOMES=no
|
||||
|
||||
# The SKEL variable specifies the directory containing "skeletal" user
|
||||
# files; in other words, files such as a sample .profile that will be
|
||||
# copied to the new user's home directory when it is created.
|
||||
SKEL=/etc/skel
|
||||
|
||||
# FIRST_SYSTEM_[GU]ID to LAST_SYSTEM_[GU]ID inclusive is the range for UIDs
|
||||
# for dynamically allocated administrative and system accounts/groups.
|
||||
# Please note that system software, such as the users allocated by the base-passwd
|
||||
# package, may assume that UIDs less than 100 are unallocated.
|
||||
FIRST_SYSTEM_UID=100
|
||||
LAST_SYSTEM_UID=999
|
||||
|
||||
FIRST_SYSTEM_GID=100
|
||||
LAST_SYSTEM_GID=999
|
||||
|
||||
# FIRST_[GU]ID to LAST_[GU]ID inclusive is the range of UIDs of dynamically
|
||||
# allocated user accounts/groups.
|
||||
FIRST_UID=1000
|
||||
LAST_UID=59999
|
||||
|
||||
FIRST_GID=1000
|
||||
LAST_GID=59999
|
||||
|
||||
# The USERGROUPS variable can be either "yes" or "no". If "yes" each
|
||||
# created user will be given their own group to use as a default. If
|
||||
# "no", each created user will be placed in the group whose gid is
|
||||
# USERS_GID (see below).
|
||||
USERGROUPS=yes
|
||||
|
||||
# If USERGROUPS is "no", then USERS_GID should be the GID of the group
|
||||
# `users' (or the equivalent group) on your system.
|
||||
USERS_GID=100
|
||||
|
||||
# If DIR_MODE is set, directories will be created with the specified
|
||||
# mode. Otherwise the default mode 0755 will be used.
|
||||
DIR_MODE=0755
|
||||
|
||||
# If SETGID_HOME is "yes" home directories for users with their own
|
||||
# group the setgid bit will be set. This was the default for
|
||||
# versions << 3.13 of adduser. Because it has some bad side effects we
|
||||
# no longer do this per default. If you want it nevertheless you can
|
||||
# still set it here.
|
||||
SETGID_HOME=no
|
||||
|
||||
# If QUOTAUSER is set, a default quota will be set from that user with
|
||||
# `edquota -p QUOTAUSER newuser'
|
||||
QUOTAUSER=""
|
||||
|
||||
# If SKEL_IGNORE_REGEX is set, adduser will ignore files matching this
|
||||
# regular expression when creating a new home directory
|
||||
SKEL_IGNORE_REGEX="dpkg-(old|new|dist|save)"
|
||||
|
||||
# Set this if you want the --add_extra_groups option to adduser to add
|
||||
# new users to other groups.
|
||||
# This is the list of groups that new non-system users will be added to
|
||||
# Default:
|
||||
EXTRA_GROUPS="dialout cdrom floppy audio video plugdev users"
|
||||
|
||||
# If ADD_EXTRA_GROUPS is set to something non-zero, the EXTRA_GROUPS
|
||||
# option above will be default behavior for adding new, non-system users
|
||||
ADD_EXTRA_GROUPS=1
|
||||
|
||||
|
||||
# check user and group names also against this regular expression.
|
||||
#NAME_REGEX="^[a-z][-a-z0-9_]*\$"
|
54
src/recipes/default/hook/data/overlay/etc/dhcp/dhclient.conf
Normal file
54
src/recipes/default/hook/data/overlay/etc/dhcp/dhclient.conf
Normal file
|
@ -0,0 +1,54 @@
|
|||
# Configuration file for /sbin/dhclient.
|
||||
#
|
||||
# This is a sample configuration file for dhclient. See dhclient.conf's
|
||||
# man page for more information about the syntax of this file
|
||||
# and a more comprehensive list of the parameters understood by
|
||||
# dhclient.
|
||||
#
|
||||
# Normally, if the DHCP server provides reasonable information and does
|
||||
# not leave anything out (like the domain name, for example), then
|
||||
# few changes must be made to this file, if any.
|
||||
#
|
||||
|
||||
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
|
||||
|
||||
send host-name = gethostname();
|
||||
request subnet-mask, broadcast-address, time-offset, routers,
|
||||
domain-name, domain-name-servers, domain-search, host-name,
|
||||
dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
|
||||
netbios-name-servers, netbios-scope, interface-mtu,
|
||||
rfc3442-classless-static-routes, ntp-servers;
|
||||
|
||||
#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
|
||||
#send dhcp-lease-time 3600;
|
||||
#supersede domain-name "fugue.com home.vix.com";
|
||||
#prepend domain-name-servers 127.0.0.1;
|
||||
#require subnet-mask, domain-name-servers;
|
||||
timeout 5;
|
||||
#retry 60;
|
||||
#reboot 10;
|
||||
#select-timeout 5;
|
||||
#initial-interval 2;
|
||||
#script "/sbin/dhclient-script";
|
||||
#media "-link0 -link1 -link2", "link0 link1";
|
||||
#reject 192.33.137.209;
|
||||
|
||||
#alias {
|
||||
# interface "eth0";
|
||||
# fixed-address 192.5.5.213;
|
||||
# option subnet-mask 255.255.255.255;
|
||||
#}
|
||||
|
||||
#lease {
|
||||
# interface "eth0";
|
||||
# fixed-address 192.33.137.200;
|
||||
# medium "link0 link1";
|
||||
# option host-name "andare.swiftmedia.com";
|
||||
# option subnet-mask 255.255.255.0;
|
||||
# option broadcast-address 192.33.137.255;
|
||||
# option routers 192.33.137.250;
|
||||
# option domain-name-servers 127.0.0.1;
|
||||
# renew 2 2000/1/12 00:00:01;
|
||||
# rebind 2 2000/1/12 00:00:01;
|
||||
# expire 2 2000/1/12 00:00:01;
|
||||
#}
|
2
src/recipes/default/hook/data/overlay/etc/hostname
Normal file
2
src/recipes/default/hook/data/overlay/etc/hostname
Normal file
|
@ -0,0 +1,2 @@
|
|||
reform
|
||||
|
4
src/recipes/default/hook/data/overlay/etc/hosts
Normal file
4
src/recipes/default/hook/data/overlay/etc/hosts
Normal file
|
@ -0,0 +1,4 @@
|
|||
127.0.0.1 localhost reform
|
||||
::1 localhost ip6-localhost ip6-loopback reform
|
||||
ff02::1 ip6-allnodes
|
||||
ff02::2 ip6-allrouters
|
4
src/recipes/default/hook/data/overlay/etc/ld.so.conf
Normal file
4
src/recipes/default/hook/data/overlay/etc/ld.so.conf
Normal file
|
@ -0,0 +1,4 @@
|
|||
/usr/local/lib
|
||||
/usr/local/lib/dri
|
||||
|
||||
include /etc/ld.so.conf.d/*.conf
|
14
src/recipes/default/hook/data/overlay/etc/motd
Normal file
14
src/recipes/default/hook/data/overlay/etc/motd
Normal file
|
@ -0,0 +1,14 @@
|
|||
%G
|
||||
|
||||
▒ ▒ ▒
|
||||
██▒ ██▒ ██▒ Welcome to Debian GNU/Linux
|
||||
████▒ ████▒ ████▒ ██████▒ on MNT Reform
|
||||
██████▒ ██████▒ ██████▒ ██████▒ System Image: 2021-03-04
|
||||
███████████████████████████
|
||||
███▒███████▒███████▒███████ https://mntre.com/reform
|
||||
███ ▒█████ ▒█████ ▒█████ https://www.debian.org
|
||||
▒███ ▒███ ▒███
|
||||
▒█ ▒█ ▒█ [31;1m████[33;1m████[32;1m████[0m[36m████[34;1m████[0m[35m████[0m
|
||||
|
||||
|
||||
|
1
src/recipes/default/hook/data/overlay/etc/resolv.conf
Normal file
1
src/recipes/default/hook/data/overlay/etc/resolv.conf
Normal file
|
@ -0,0 +1 @@
|
|||
nameserver 8.8.8.8
|
|
@ -0,0 +1,11 @@
|
|||
[Unit]
|
||||
Description=MNT Reform Hardware Defaults Setup
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/sbin/reform-hw-setup.sh
|
||||
StandardOutput=journal
|
||||
|
||||
[Install]
|
||||
WantedBy=sysinit.target
|
||||
|
85
src/recipes/default/hook/data/overlay/root/build_script.sh
Executable file
85
src/recipes/default/hook/data/overlay/root/build_script.sh
Executable file
|
@ -0,0 +1,85 @@
|
|||
#!/bin/bash
|
||||
|
||||
exec 3>/tmp/build_error.log
|
||||
|
||||
function error {
|
||||
>&2 printf "\e[31mE\e[0m: %s\n" "$1"
|
||||
}
|
||||
|
||||
function get_current_dir {
|
||||
# this function return the absolute path of the script
|
||||
|
||||
local script_path
|
||||
script_path="$(dirname $0)"
|
||||
|
||||
# If the path begin with /, this is an absolute part
|
||||
if [[ "$script_path" =~ ^/[[:graph:]]*$ ]]
|
||||
then
|
||||
printf "%s" "$script_path"
|
||||
return
|
||||
fi
|
||||
|
||||
local current_path
|
||||
current_path="$(pwd)"
|
||||
if [[ $script_path == "." ]]
|
||||
then
|
||||
script_path=""
|
||||
elif [[ $script_path =~ ^./[[:graph:]]*$ ]]
|
||||
then
|
||||
script_path=${script_path##./}
|
||||
echo " $current_path trad: $script_path"
|
||||
else
|
||||
while [[ $script_path =~ ^../[[:graph:]]*$ ]]
|
||||
do
|
||||
script_path="${script_path##../}"
|
||||
current_path="${current_path%/*}"
|
||||
done
|
||||
fi
|
||||
printf "%s/%s" "${current_path}" "${script_path}"
|
||||
|
||||
}
|
||||
|
||||
current_dir=$(get_current_dir)
|
||||
scripts_dir="${current_dir}/scripts"
|
||||
|
||||
for script in ${scripts_dir}/*.sh
|
||||
do
|
||||
source $script
|
||||
printf "\nBuilding %s\n" "$name"
|
||||
printf " >> cloning repository\n"
|
||||
$clone_command 2>&3 || {
|
||||
error "Error when cloning $name"
|
||||
exit 1
|
||||
}
|
||||
post_clone_hook
|
||||
|
||||
cd $clone_directory
|
||||
if [[ ! $patches_dir == 0 ]]
|
||||
then
|
||||
printf " >> patching\n"
|
||||
for patch in ${current_dir}/${patches_dir}/*
|
||||
do
|
||||
printf " > patchfile: %s" "$patch"
|
||||
patch -p1 < "$patch" || {
|
||||
error "Error whan applying patch, check log\n";
|
||||
exit 1;
|
||||
}
|
||||
done
|
||||
fi
|
||||
|
||||
printf " >> configure\n"
|
||||
$configure_command 2>&3 1>/dev/null|| {
|
||||
error "Error when configuring $name, command: $configure_command"
|
||||
exit 1
|
||||
}
|
||||
post_configure_hook
|
||||
|
||||
printf " >> Build and install\n"
|
||||
$build_command 2>&3 || {
|
||||
error "Error when buildind and installing $name, command: $build_command"
|
||||
exit 1
|
||||
}
|
||||
cd ..
|
||||
post_install_hook
|
||||
done
|
||||
exit 0
|
|
@ -0,0 +1,436 @@
|
|||
From 96106df17897b862b87937d6222a3e6483f45480 Mon Sep 17 00:00:00 2001
|
||||
From: Lucas Stach <l.stach@pengutronix.de>
|
||||
Date: Fri, 13 Nov 2020 14:26:23 +0100
|
||||
Subject: [PATCH 1/6] frontend/dri: copy image use in dup_image
|
||||
|
||||
Don't lose the use flags when dup'ing an image.
|
||||
|
||||
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
|
||||
---
|
||||
src/gallium/frontends/dri/dri2.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c
|
||||
index 0c0168497a2..1cd42cd8114 100644
|
||||
--- a/src/gallium/frontends/dri/dri2.c
|
||||
+++ b/src/gallium/frontends/dri/dri2.c
|
||||
@@ -1308,6 +1308,7 @@ dri2_dup_image(__DRIimage *image, void *loaderPrivate)
|
||||
img->dri_format = image->dri_format;
|
||||
/* This should be 0 for sub images, but dup is also used for base images. */
|
||||
img->dri_components = image->dri_components;
|
||||
+ img->use = image->use;
|
||||
img->loader_private = loaderPrivate;
|
||||
|
||||
return img;
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 00add4be8620175ccc69869e22479962dacdce9d Mon Sep 17 00:00:00 2001
|
||||
From: Lucas Stach <l.stach@pengutronix.de>
|
||||
Date: Fri, 13 Nov 2020 14:38:41 +0100
|
||||
Subject: [PATCH 2/6] dri: bring back use flags for createImageWithModifiers
|
||||
|
||||
createImageWithModifiers dropped the use flags that were present with
|
||||
the createImage interface as it was believed at the time that all those
|
||||
use flags could be expressed as a modifier. This turned out to be untrue,
|
||||
as there are some use flags like SCANOUT and the BACKBUFFER hint that
|
||||
won't ever get a eqivalent modifier expression.
|
||||
|
||||
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
|
||||
---
|
||||
include/GL/internal/dri_interface.h | 1 +
|
||||
src/egl/drivers/dri2/platform_wayland.c | 4 ++--
|
||||
src/gallium/frontends/dri/dri2.c | 5 ++---
|
||||
src/gbm/backends/dri/gbm_dri.c | 2 +-
|
||||
src/loader/loader_dri3_helper.c | 3 +++
|
||||
src/mesa/drivers/dri/i965/intel_screen.c | 2 +-
|
||||
6 files changed, 10 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h
|
||||
index 39d5dd07533..222821428d0 100644
|
||||
--- a/include/GL/internal/dri_interface.h
|
||||
+++ b/include/GL/internal/dri_interface.h
|
||||
@@ -1678,6 +1678,7 @@ struct __DRIimageExtensionRec {
|
||||
int width, int height, int format,
|
||||
const uint64_t *modifiers,
|
||||
const unsigned int modifier_count,
|
||||
+ unsigned int use,
|
||||
void *loaderPrivate);
|
||||
|
||||
/*
|
||||
diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
|
||||
index c0b26c4b623..bb508cbe421 100644
|
||||
--- a/src/egl/drivers/dri2/platform_wayland.c
|
||||
+++ b/src/egl/drivers/dri2/platform_wayland.c
|
||||
@@ -595,7 +595,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf)
|
||||
dri2_surf->base.Height,
|
||||
linear_dri_image_format,
|
||||
&linear_mod,
|
||||
- 1,
|
||||
+ 1, use_flags,
|
||||
NULL);
|
||||
} else {
|
||||
dri2_surf->back->linear_copy =
|
||||
@@ -624,7 +624,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf)
|
||||
dri2_surf->base.Height,
|
||||
dri_image_format,
|
||||
modifiers,
|
||||
- num_modifiers,
|
||||
+ num_modifiers, use_flags,
|
||||
NULL);
|
||||
} else {
|
||||
dri2_surf->back->dri_image =
|
||||
diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c
|
||||
index 1cd42cd8114..1f1e7a9a65e 100644
|
||||
--- a/src/gallium/frontends/dri/dri2.c
|
||||
+++ b/src/gallium/frontends/dri/dri2.c
|
||||
@@ -1074,12 +1074,11 @@ static __DRIimage *
|
||||
dri2_create_image_with_modifiers(__DRIscreen *dri_screen,
|
||||
int width, int height, int format,
|
||||
const uint64_t *modifiers,
|
||||
- const unsigned count,
|
||||
+ const unsigned count, unsigned int use,
|
||||
void *loaderPrivate)
|
||||
{
|
||||
return dri2_create_image_common(dri_screen, width, height, format,
|
||||
- __DRI_IMAGE_USE_SHARE, modifiers, count,
|
||||
- loaderPrivate);
|
||||
+ use, modifiers, count, loaderPrivate);
|
||||
}
|
||||
|
||||
static bool
|
||||
diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c
|
||||
index b5634741554..aff3a107e7d 100644
|
||||
--- a/src/gbm/backends/dri/gbm_dri.c
|
||||
+++ b/src/gbm/backends/dri/gbm_dri.c
|
||||
@@ -1173,7 +1173,7 @@ gbm_dri_bo_create(struct gbm_device *gbm,
|
||||
width, height,
|
||||
dri_format,
|
||||
modifiers, count,
|
||||
- bo);
|
||||
+ dri_use, bo);
|
||||
|
||||
if (bo->image) {
|
||||
/* The client passed in a list of invalid modifiers */
|
||||
diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c
|
||||
index ccf8d1795e7..6fc6a2b705a 100644
|
||||
--- a/src/loader/loader_dri3_helper.c
|
||||
+++ b/src/loader/loader_dri3_helper.c
|
||||
@@ -1407,6 +1407,9 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable *draw, unsigned int format,
|
||||
format,
|
||||
modifiers,
|
||||
count,
|
||||
+ __DRI_IMAGE_USE_SHARE |
|
||||
+ __DRI_IMAGE_USE_SCANOUT |
|
||||
+ __DRI_IMAGE_USE_BACKBUFFER,
|
||||
buffer);
|
||||
}
|
||||
|
||||
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
|
||||
index 4492d43c040..4511b962eef 100644
|
||||
--- a/src/mesa/drivers/dri/i965/intel_screen.c
|
||||
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
|
||||
@@ -893,7 +893,7 @@ static __DRIimage *
|
||||
intel_create_image_with_modifiers(__DRIscreen *dri_screen,
|
||||
int width, int height, int format,
|
||||
const uint64_t *modifiers,
|
||||
- const unsigned count,
|
||||
+ const unsigned count, unsigned int use,
|
||||
void *loaderPrivate)
|
||||
{
|
||||
return intel_create_image_common(dri_screen, width, height, format, 0,
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 587aac46dbadf2aca1489aadd4216e592e11e17b Mon Sep 17 00:00:00 2001
|
||||
From: Lucas Stach <l.stach@pengutronix.de>
|
||||
Date: Fri, 13 Nov 2020 14:59:52 +0100
|
||||
Subject: [PATCH 3/6] frontend/dri: add EXPLICIT_FLUSH hint in
|
||||
dri2_resource_get_param
|
||||
|
||||
dri2_resource_get_param() is called from two different places right now.
|
||||
Only one of them adds the EXPLICIT_FLUSH hint to the handle usage, which
|
||||
may disable the optimizations provided by this hint without a reason.
|
||||
|
||||
Make sure to always add this hint when appropriate.
|
||||
|
||||
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
|
||||
---
|
||||
src/gallium/frontends/dri/dri2.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c
|
||||
index 1f1e7a9a65e..7851ebceb3e 100644
|
||||
--- a/src/gallium/frontends/dri/dri2.c
|
||||
+++ b/src/gallium/frontends/dri/dri2.c
|
||||
@@ -1198,6 +1198,9 @@ dri2_resource_get_param(__DRIimage *image, enum pipe_resource_param param,
|
||||
if (!pscreen->resource_get_param)
|
||||
return false;
|
||||
|
||||
+ if (image->use & __DRI_IMAGE_USE_BACKBUFFER)
|
||||
+ handle_usage |= PIPE_HANDLE_USAGE_EXPLICIT_FLUSH;
|
||||
+
|
||||
return pscreen->resource_get_param(pscreen, NULL, image->texture,
|
||||
image->plane, 0, 0, param, handle_usage,
|
||||
value);
|
||||
@@ -1242,9 +1245,6 @@ dri2_query_image_by_resource_param(__DRIimage *image, int attrib, int *value)
|
||||
|
||||
handle_usage = PIPE_HANDLE_USAGE_FRAMEBUFFER_WRITE;
|
||||
|
||||
- if (image->use & __DRI_IMAGE_USE_BACKBUFFER)
|
||||
- handle_usage |= PIPE_HANDLE_USAGE_EXPLICIT_FLUSH;
|
||||
-
|
||||
if (!dri2_resource_get_param(image, param, handle_usage, &res_param))
|
||||
return false;
|
||||
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 59f74212bbb5e28badd0775929e42856c9a01d35 Mon Sep 17 00:00:00 2001
|
||||
From: Lucas Stach <l.stach@pengutronix.de>
|
||||
Date: Fri, 13 Nov 2020 15:03:37 +0100
|
||||
Subject: [PATCH 4/6] etnaviv: remove double assigment of surface->texture
|
||||
|
||||
surf->base.texture is already assigned earlier via a proper
|
||||
pipe_resource_reference call. Remove the superfluous assignement.
|
||||
|
||||
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
|
||||
Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
|
||||
---
|
||||
src/gallium/drivers/etnaviv/etnaviv_surface.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/src/gallium/drivers/etnaviv/etnaviv_surface.c b/src/gallium/drivers/etnaviv/etnaviv_surface.c
|
||||
index c78973bdb09..52a937652d2 100644
|
||||
--- a/src/gallium/drivers/etnaviv/etnaviv_surface.c
|
||||
+++ b/src/gallium/drivers/etnaviv/etnaviv_surface.c
|
||||
@@ -112,7 +112,6 @@ etna_create_surface(struct pipe_context *pctx, struct pipe_resource *prsc,
|
||||
etna_screen_resource_alloc_ts(pctx->screen, rsc);
|
||||
}
|
||||
|
||||
- surf->base.texture = &rsc->base;
|
||||
surf->base.format = templat->format;
|
||||
surf->base.width = rsc->levels[level].width;
|
||||
surf->base.height = rsc->levels[level].height;
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 570908323e02c4558f5a9abc2d82621056cd65ab Mon Sep 17 00:00:00 2001
|
||||
From: Lucas Stach <l.stach@pengutronix.de>
|
||||
Date: Tue, 17 Nov 2020 12:08:13 +0100
|
||||
Subject: [PATCH 5/6] etnaviv: compact etna_state_updates
|
||||
|
||||
Just reclaim a bit of screen real estate, purely cosmetic change.
|
||||
|
||||
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
|
||||
---
|
||||
src/gallium/drivers/etnaviv/etnaviv_state.c | 18 ++++++------------
|
||||
1 file changed, 6 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/src/gallium/drivers/etnaviv/etnaviv_state.c b/src/gallium/drivers/etnaviv/etnaviv_state.c
|
||||
index 1b4a7040b50..84fea58ecb5 100644
|
||||
--- a/src/gallium/drivers/etnaviv/etnaviv_state.c
|
||||
+++ b/src/gallium/drivers/etnaviv/etnaviv_state.c
|
||||
@@ -749,24 +749,18 @@ struct etna_state_updater {
|
||||
static const struct etna_state_updater etna_state_updates[] = {
|
||||
{
|
||||
etna_shader_update_vertex, ETNA_DIRTY_SHADER | ETNA_DIRTY_VERTEX_ELEMENTS,
|
||||
- },
|
||||
- {
|
||||
+ }, {
|
||||
etna_shader_link, ETNA_DIRTY_SHADER,
|
||||
- },
|
||||
- {
|
||||
+ }, {
|
||||
etna_update_blend, ETNA_DIRTY_BLEND | ETNA_DIRTY_FRAMEBUFFER
|
||||
- },
|
||||
- {
|
||||
+ }, {
|
||||
etna_update_blend_color, ETNA_DIRTY_BLEND_COLOR | ETNA_DIRTY_FRAMEBUFFER,
|
||||
- },
|
||||
- {
|
||||
+ }, {
|
||||
etna_update_ts_config, ETNA_DIRTY_DERIVE_TS,
|
||||
- },
|
||||
- {
|
||||
+ }, {
|
||||
etna_update_clipping, ETNA_DIRTY_SCISSOR | ETNA_DIRTY_FRAMEBUFFER |
|
||||
ETNA_DIRTY_RASTERIZER | ETNA_DIRTY_VIEWPORT,
|
||||
- },
|
||||
- {
|
||||
+ }, {
|
||||
etna_update_zsa, ETNA_DIRTY_ZSA | ETNA_DIRTY_SHADER,
|
||||
}
|
||||
};
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 537c7a6ea3fd2e5a6433e52b406ba39b89f520d9 Mon Sep 17 00:00:00 2001
|
||||
From: Lucas Stach <l.stach@pengutronix.de>
|
||||
Date: Fri, 13 Nov 2020 15:05:55 +0100
|
||||
Subject: [PATCH 6/6] etnaviv: flush used render buffers on context flush when
|
||||
neccessary
|
||||
|
||||
Some resources like backbuffers are explicitly flushed by the frontend
|
||||
at the appropriate time, others however won't get flushed explicitly.
|
||||
Remember those resources when they get emitted as a render buffer and
|
||||
flush them on a context flush to make their content visible to other
|
||||
entities sharing the buffer.
|
||||
|
||||
We still keep the optimized path for most resources where the frontend
|
||||
promises to do the flushing for us and only enable implicit flushing
|
||||
when a buffer handle is exported/imported without the
|
||||
PIPE_HANDLE_USAGE_EXPLICIT_FLUSH flag set.
|
||||
|
||||
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
|
||||
---
|
||||
src/gallium/drivers/etnaviv/etnaviv_context.c | 16 ++++++++++++++++
|
||||
src/gallium/drivers/etnaviv/etnaviv_context.h | 3 +++
|
||||
src/gallium/drivers/etnaviv/etnaviv_resource.c | 7 +++++++
|
||||
src/gallium/drivers/etnaviv/etnaviv_resource.h | 2 ++
|
||||
src/gallium/drivers/etnaviv/etnaviv_state.c | 17 +++++++++++++++++
|
||||
5 files changed, 45 insertions(+)
|
||||
|
||||
diff --git a/src/gallium/drivers/etnaviv/etnaviv_context.c b/src/gallium/drivers/etnaviv/etnaviv_context.c
|
||||
index 9c334a450c6..80c5d430419 100644
|
||||
--- a/src/gallium/drivers/etnaviv/etnaviv_context.c
|
||||
+++ b/src/gallium/drivers/etnaviv/etnaviv_context.c
|
||||
@@ -128,6 +128,9 @@ etna_context_destroy(struct pipe_context *pctx)
|
||||
_mesa_set_destroy(ctx->used_resources_write, NULL);
|
||||
|
||||
}
|
||||
+ if (ctx->flush_resources)
|
||||
+ _mesa_set_destroy(ctx->flush_resources, NULL);
|
||||
+
|
||||
mtx_unlock(&ctx->lock);
|
||||
|
||||
if (ctx->dummy_desc_bo)
|
||||
@@ -475,6 +478,14 @@ etna_flush(struct pipe_context *pctx, struct pipe_fence_handle **fence,
|
||||
list_for_each_entry(struct etna_acc_query, aq, &ctx->active_acc_queries, node)
|
||||
etna_acc_query_suspend(aq, ctx);
|
||||
|
||||
+ /* flush all resources that need an implicit flush */
|
||||
+ set_foreach(ctx->flush_resources, entry) {
|
||||
+ struct pipe_resource *prsc = (struct pipe_resource *)entry->key;
|
||||
+
|
||||
+ pctx->flush_resource(pctx, prsc);
|
||||
+ }
|
||||
+ _mesa_set_clear(ctx->flush_resources, NULL);
|
||||
+
|
||||
etna_cmd_stream_flush(ctx->stream, ctx->in_fence_fd,
|
||||
(flags & PIPE_FLUSH_FENCE_FD) ? &out_fence_fd : NULL);
|
||||
|
||||
@@ -581,6 +592,11 @@ etna_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
|
||||
if (!ctx->used_resources_write)
|
||||
goto fail;
|
||||
|
||||
+ ctx->flush_resources = _mesa_set_create(NULL, _mesa_hash_pointer,
|
||||
+ _mesa_key_pointer_equal);
|
||||
+ if (!ctx->flush_resources)
|
||||
+ goto fail;
|
||||
+
|
||||
mtx_init(&ctx->lock, mtx_recursive);
|
||||
|
||||
/* context ctxate setup */
|
||||
diff --git a/src/gallium/drivers/etnaviv/etnaviv_context.h b/src/gallium/drivers/etnaviv/etnaviv_context.h
|
||||
index dd6af3d93e6..112902aac8a 100644
|
||||
--- a/src/gallium/drivers/etnaviv/etnaviv_context.h
|
||||
+++ b/src/gallium/drivers/etnaviv/etnaviv_context.h
|
||||
@@ -206,6 +206,9 @@ struct etna_context {
|
||||
struct set *used_resources_read;
|
||||
struct set *used_resources_write;
|
||||
|
||||
+ /* resources that must be flushed implicitly at the context flush time */
|
||||
+ struct set *flush_resources;
|
||||
+
|
||||
mtx_t lock;
|
||||
};
|
||||
|
||||
diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.c b/src/gallium/drivers/etnaviv/etnaviv_resource.c
|
||||
index ae4f24b9b44..0c8c28e66aa 100644
|
||||
--- a/src/gallium/drivers/etnaviv/etnaviv_resource.c
|
||||
+++ b/src/gallium/drivers/etnaviv/etnaviv_resource.c
|
||||
@@ -265,6 +265,7 @@ etna_resource_alloc(struct pipe_screen *pscreen, unsigned layout,
|
||||
rsc->base.nr_samples = nr_samples;
|
||||
rsc->layout = layout;
|
||||
rsc->halign = halign;
|
||||
+ rsc->explicit_flush = true;
|
||||
|
||||
pipe_reference_init(&rsc->base.reference, 1);
|
||||
util_range_init(&rsc->valid_buffer_range);
|
||||
@@ -519,6 +520,9 @@ etna_resource_from_handle(struct pipe_screen *pscreen,
|
||||
rsc->layout = modifier_to_layout(handle->modifier);
|
||||
rsc->halign = TEXTURE_HALIGN_FOUR;
|
||||
|
||||
+ if (usage & PIPE_HANDLE_USAGE_EXPLICIT_FLUSH)
|
||||
+ rsc->explicit_flush = true;
|
||||
+
|
||||
level->width = tmpl->width0;
|
||||
level->height = tmpl->height0;
|
||||
level->depth = tmpl->depth0;
|
||||
@@ -584,6 +588,9 @@ etna_resource_get_handle(struct pipe_screen *pscreen,
|
||||
handle->offset = rsc->levels[0].offset;
|
||||
handle->modifier = layout_to_modifier(rsc->layout);
|
||||
|
||||
+ if (!(usage & PIPE_HANDLE_USAGE_EXPLICIT_FLUSH))
|
||||
+ rsc->explicit_flush = false;
|
||||
+
|
||||
if (handle->type == WINSYS_HANDLE_TYPE_SHARED) {
|
||||
return etna_bo_get_name(rsc->bo, &handle->handle) == 0;
|
||||
} else if (handle->type == WINSYS_HANDLE_TYPE_KMS) {
|
||||
diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.h b/src/gallium/drivers/etnaviv/etnaviv_resource.h
|
||||
index cb83e891d34..167cf4ed069 100644
|
||||
--- a/src/gallium/drivers/etnaviv/etnaviv_resource.h
|
||||
+++ b/src/gallium/drivers/etnaviv/etnaviv_resource.h
|
||||
@@ -93,6 +93,8 @@ struct etna_resource {
|
||||
struct pipe_resource *texture;
|
||||
/* for when PE doesn't support the base layout */
|
||||
struct pipe_resource *render;
|
||||
+ /* frontend flushes resource via an explicit call to flush_resource */
|
||||
+ bool explicit_flush;
|
||||
|
||||
enum etna_resource_status status;
|
||||
|
||||
diff --git a/src/gallium/drivers/etnaviv/etnaviv_state.c b/src/gallium/drivers/etnaviv/etnaviv_state.c
|
||||
index 84fea58ecb5..5848735ab14 100644
|
||||
--- a/src/gallium/drivers/etnaviv/etnaviv_state.c
|
||||
+++ b/src/gallium/drivers/etnaviv/etnaviv_state.c
|
||||
@@ -741,6 +741,21 @@ etna_update_zsa(struct etna_context *ctx)
|
||||
return true;
|
||||
}
|
||||
|
||||
+static bool
|
||||
+etna_record_flush_resources(struct etna_context *ctx)
|
||||
+{
|
||||
+ struct pipe_framebuffer_state *fb = &ctx->framebuffer_s;
|
||||
+
|
||||
+ if (fb->nr_cbufs > 0) {
|
||||
+ struct etna_surface *surf = etna_surface(fb->cbufs[0]);
|
||||
+
|
||||
+ if (!etna_resource(surf->prsc)->explicit_flush)
|
||||
+ _mesa_set_add(ctx->flush_resources, surf->prsc);
|
||||
+ }
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
struct etna_state_updater {
|
||||
bool (*update)(struct etna_context *ctx);
|
||||
uint32_t dirty;
|
||||
@@ -762,6 +777,8 @@ static const struct etna_state_updater etna_state_updates[] = {
|
||||
ETNA_DIRTY_RASTERIZER | ETNA_DIRTY_VIEWPORT,
|
||||
}, {
|
||||
etna_update_zsa, ETNA_DIRTY_ZSA | ETNA_DIRTY_SHADER,
|
||||
+ }, {
|
||||
+ etna_record_flush_resources, ETNA_DIRTY_FRAMEBUFFER,
|
||||
}
|
||||
};
|
||||
|
||||
--
|
||||
GitLab
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
--- a/src/gallium/drivers/etnaviv/etnaviv_screen.c
|
||||
+++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c
|
||||
@@ -445,6 +445,10 @@ etna_screen_is_format_supported(struct pipe_screen *pscreen,
|
||||
struct etna_screen *screen = etna_screen(pscreen);
|
||||
unsigned allowed = 0;
|
||||
|
||||
+ /* HACK to disable all MSAA, as is causes GPU crashes */
|
||||
+ if (sample_count > 1)
|
||||
+ return false;
|
||||
+
|
||||
if (!gpu_supports_texture_target(screen, target))
|
||||
return false;
|
19
src/recipes/default/hook/data/overlay/root/scripts/10.drm.sh
Normal file
19
src/recipes/default/hook/data/overlay/root/scripts/10.drm.sh
Normal file
|
@ -0,0 +1,19 @@
|
|||
name="DRM"
|
||||
patches_dir=0
|
||||
clone_directory="drm"
|
||||
clone_command="git clone --depth 1 https://gitlab.freedesktop.org/mesa/drm.git"
|
||||
configure_command="meson build -Detnaviv=true -Dradeon=false -Damdgpu=false -Dvmwgfx=false -Dfreedreno=false -Dvc4=false -Dnouveau=false"
|
||||
build_command="ninja -C build install"
|
||||
|
||||
## Hooks
|
||||
function post_clone_hook {
|
||||
return
|
||||
}
|
||||
|
||||
function post_configure_hook {
|
||||
return
|
||||
}
|
||||
|
||||
function post_install_hook {
|
||||
ldconfig
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
name="MESA"
|
||||
patches_dir="mesa_patches"
|
||||
clone_directory="mesa"
|
||||
clone_command="git clone --depth 1 --branch mesa-20.3.4 https://gitlab.freedesktop.org/mesa/mesa.git"
|
||||
configure_command="meson build -Dplatforms=x11,wayland -Ddri3=true -Dgallium-drivers=swrast,etnaviv,kmsro,virgl -Dgbm=enabled -Degl=enabled -Dbuildtype=release -Db_ndebug=true"
|
||||
build_command="ninja -C build install"
|
||||
|
||||
## Hooks
|
||||
function post_clone_hook {
|
||||
return
|
||||
}
|
||||
|
||||
function post_configure_hook {
|
||||
return
|
||||
}
|
||||
|
||||
function post_install_hook {
|
||||
ldconfig
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
name="Wayland"
|
||||
patches_dir=0
|
||||
clone_directory="wayland"
|
||||
clone_command="git clone --depth 1 https://github.com/wayland-project/wayland.git"
|
||||
configure_command="meson build -Ddocumentation=false"
|
||||
build_command="ninja -C build install"
|
||||
|
||||
## Hooks
|
||||
function post_clone_hook {
|
||||
return
|
||||
}
|
||||
|
||||
function post_configure_hook {
|
||||
return
|
||||
}
|
||||
|
||||
function post_install_hook {
|
||||
ldconfig
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
name="wlroots"
|
||||
patches_dir=0
|
||||
clone_directory="wlroots"
|
||||
clone_command="git clone --depth 1 --branch=0.12.0 https://github.com/swaywm/wlroots.git"
|
||||
configure_command="meson build"
|
||||
build_command="ninja -C build install"
|
||||
|
||||
## Hooks
|
||||
function post_clone_hook {
|
||||
return
|
||||
}
|
||||
|
||||
function post_configure_hook {
|
||||
return
|
||||
}
|
||||
|
||||
function post_install_hook {
|
||||
ldconfig
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
name="sway"
|
||||
patches_dir=0
|
||||
clone_directory="sway"
|
||||
clone_command="git clone --depth 1 --branch=1.5.1 https://github.com/swaywm/sway.git"
|
||||
configure_command="meson build"
|
||||
build_command="ninja -C build install"
|
||||
|
||||
## Hooks
|
||||
function post_clone_hook {
|
||||
return
|
||||
}
|
||||
|
||||
function post_configure_hook {
|
||||
return
|
||||
}
|
||||
|
||||
function post_install_hook {
|
||||
chmod +s /usr/local/bin/sway
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
name="xserver"
|
||||
patches_dir="xserver_patches"
|
||||
clone_directory="xserver"
|
||||
clone_command="git clone --depth 1 --branch-xorg-server-1.20.11 https://gitlab.freedesktop.org/xorg/xserver.git"
|
||||
configure_command="meson build -Dxorg=true -Dxwayland=true -Dglamor=true -Dxwayland_eglstream=false -Dxnest=false -Ddmx=false -Dxvfb=true -Dxwin=false -Dxephyr=false -Ddri3=true"
|
||||
build_command="ninja -C build install"
|
||||
|
||||
## Hooks
|
||||
function post_clone_hook {
|
||||
return
|
||||
}
|
||||
|
||||
function post_configure_hook {
|
||||
return
|
||||
}
|
||||
|
||||
function post_install_hook {
|
||||
# overwrite /usr/bin/Xwayland with symlink to our Xwayland (FIXME: brittle)
|
||||
rm -f /usr/bin/Xwayland
|
||||
ln -s /usr/local/bin/Xwayland /usr/bin/Xwayland
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
name="Waybar"
|
||||
patches_dir=0
|
||||
clone_directory="Waybar"
|
||||
clone_command="git clone --depth 1 https://github.com/Alexays/Waybar.git"
|
||||
configure_command="meson build"
|
||||
build_command="ninja -C build install"
|
||||
|
||||
## Hooks
|
||||
function post_clone_hook {
|
||||
return
|
||||
}
|
||||
|
||||
function post_configure_hook {
|
||||
return
|
||||
}
|
||||
|
||||
function post_install_hook {
|
||||
return
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
name="WayVNC"
|
||||
patches_dir=0
|
||||
clone_directory="Waybar"
|
||||
clone_command="git clone --depth 1 https://github.com/any1/wayvnc.git"
|
||||
configure_command="meson build"
|
||||
build_command="ninja -C build install"
|
||||
|
||||
## Hooks
|
||||
function post_clone_hook {
|
||||
printf " >> post-clone hook : clone subproject\n"
|
||||
cd $clone_directory
|
||||
mkdir subprojects
|
||||
cd subprojects
|
||||
git clone https://github.com/any1/neatvnc.git 1>/dev/null || {
|
||||
error "Error when cloning netvnc.\n";
|
||||
exit 1;
|
||||
}
|
||||
|
||||
git clone https://github.com/any1/aml.git 1>/dev/null || {
|
||||
error "Error when cloning aml.\n";
|
||||
exit 1;
|
||||
}
|
||||
cd ..
|
||||
}
|
||||
|
||||
function post_configure_hook {
|
||||
return
|
||||
}
|
||||
|
||||
function post_install_hook {
|
||||
return
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
name="Cage"
|
||||
patches_dir=0
|
||||
clone_directory="cage"
|
||||
clone_command="git clone --depth 1 https://github.com/Hjdskes/cage.git"
|
||||
configure_command="meson build"
|
||||
build_command="ninja -C build install"
|
||||
|
||||
## Hooks
|
||||
function post_clone_hook {
|
||||
return
|
||||
}
|
||||
|
||||
function post_configure_hook {
|
||||
return
|
||||
}
|
||||
|
||||
function post_install_hook {
|
||||
return
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
|
||||
index be0741a..1dd2876 100644
|
||||
--- a/glamor/glamor_render.c
|
||||
+++ b/glamor/glamor_render.c
|
||||
@@ -1584,6 +1584,8 @@ glamor_composite_clipped_region(CARD8 op,
|
||||
if (prect != rect)
|
||||
free(prect);
|
||||
out:
|
||||
+ glFinish();
|
||||
+
|
||||
if (temp_src != source)
|
||||
FreePicture(temp_src, 0);
|
||||
if (temp_mask != mask)
|
|
@ -0,0 +1,98 @@
|
|||
# This file is part of PulseAudio.
|
||||
#
|
||||
# PulseAudio is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License as
|
||||
# published by the Free Software Foundation; either version 2.1 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# PulseAudio is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
; Analog input path for MNT Reform, which has a headset mic input
|
||||
; that is only on the left channel (mono).
|
||||
|
||||
[General]
|
||||
priority = 100
|
||||
|
||||
[Element Capture]
|
||||
switch = mute
|
||||
volume = ignore
|
||||
|
||||
[Element Mic]
|
||||
required-absent = any
|
||||
|
||||
[Element Mic Boost]
|
||||
required-absent = any
|
||||
|
||||
[Element Dock Mic]
|
||||
required-absent = any
|
||||
|
||||
[Element Dock Mic Boost]
|
||||
required-absent = any
|
||||
|
||||
[Element Front Mic]
|
||||
required-absent = any
|
||||
|
||||
[Element Front Mic Boost]
|
||||
required-absent = any
|
||||
|
||||
[Element Int Mic]
|
||||
required-absent = any
|
||||
|
||||
[Element Int Mic Boost]
|
||||
required-absent = any
|
||||
|
||||
[Element Internal Mic]
|
||||
required-absent = any
|
||||
|
||||
[Element Internal Mic Boost]
|
||||
required-absent = any
|
||||
|
||||
[Element Rear Mic]
|
||||
required-absent = any
|
||||
|
||||
[Element Rear Mic Boost]
|
||||
required-absent = any
|
||||
|
||||
[Element Headset]
|
||||
required-absent = any
|
||||
|
||||
[Element Headset Mic]
|
||||
required-absent = any
|
||||
|
||||
[Element Headset Mic Boost]
|
||||
required-absent = any
|
||||
|
||||
[Element Headphone Mic]
|
||||
required-absent = any
|
||||
|
||||
[Element Headphone Mic Boost]
|
||||
required-absent = any
|
||||
|
||||
[Element Line]
|
||||
required-absent = any
|
||||
|
||||
[Element Line Boost]
|
||||
required-absent = any
|
||||
|
||||
[Element Aux]
|
||||
required-absent = any
|
||||
|
||||
[Element Video]
|
||||
required-absent = any
|
||||
|
||||
[Element Mic/Line]
|
||||
required-absent = any
|
||||
|
||||
[Element TV Tuner]
|
||||
required-absent = any
|
||||
|
||||
[Element FM]
|
||||
required-absent = any
|
||||
|
||||
.include analog-input.conf.common
|
|
@ -0,0 +1,24 @@
|
|||
[General]
|
||||
auto-profiles = yes
|
||||
|
||||
[Mapping stereo-out]
|
||||
device-strings = hw:0
|
||||
fallback = yes
|
||||
channel-map = left,right
|
||||
paths-output = analog-output analog-output-speaker analog-output-headphones
|
||||
direction = output
|
||||
priority = 1
|
||||
|
||||
[Mapping headset-mono-in]
|
||||
device-strings = hw:0
|
||||
fallback = yes
|
||||
channel-map = mono
|
||||
paths-input = analog-input-reform
|
||||
direction = input
|
||||
priority = 1
|
||||
|
||||
[Profile output:stereo-out+input:mono-in]
|
||||
description = MNT Reform
|
||||
output-mappings = stereo-out
|
||||
input-mappings = headset-mono-in
|
||||
|
10
src/recipes/default/hook/essential.sh
Executable file
10
src/recipes/default/hook/essential.sh
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
printf "Essential hook script for mmdebstrap\n\n"
|
||||
printf "Configure locales\n"
|
||||
chroot $1 ln --force --symbolic /usr/share/zoneinfo/Europe/Paris /etc/localtime
|
||||
echo "locales locales/default_environment_locale select en_US.UTF-8" | chroot $1 debconf-set-selections
|
||||
echo "locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8" | chroot $1 debconf-set-selections
|
||||
chroot $1 dpkg --configure -a
|
||||
|
||||
exit 0
|
5
src/recipes/default/hook/extract.sh
Executable file
5
src/recipes/default/hook/extract.sh
Executable file
|
@ -0,0 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
printf "Extract hook script for mmdebstrap\n\n"
|
||||
|
||||
exit 0
|
5
src/recipes/default/hook/setup.sh
Executable file
5
src/recipes/default/hook/setup.sh
Executable file
|
@ -0,0 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
printf "Setup hook script for mmdebstrap\n\n"
|
||||
|
||||
exit 0
|
92
src/recipes/default/packages/packages.list
Normal file
92
src/recipes/default/packages/packages.list
Normal file
|
@ -0,0 +1,92 @@
|
|||
alsa-utils
|
||||
arc-theme
|
||||
bash-completion
|
||||
breeze-icon-theme
|
||||
brightness-udev
|
||||
brightnessctl
|
||||
bsdmainutils
|
||||
ca-certificates
|
||||
connman-gtk
|
||||
console-data
|
||||
console-setup
|
||||
coreutils
|
||||
cpio
|
||||
cron
|
||||
cryptsetup
|
||||
curl
|
||||
debian-archive-keyring
|
||||
dosfstools
|
||||
e2fsprogs
|
||||
engrampa
|
||||
eog
|
||||
evince
|
||||
fbset
|
||||
file
|
||||
fonts-noto-color-emoji
|
||||
gedit
|
||||
git
|
||||
gpg
|
||||
gnome-disk-utility
|
||||
gnome-icon-theme
|
||||
gnome-system-monitor
|
||||
gpgv
|
||||
gpm
|
||||
grim
|
||||
htop
|
||||
ifupdown
|
||||
init-system-helpers
|
||||
iproute2
|
||||
iptables
|
||||
iputils-ping
|
||||
ircii
|
||||
isc-dhcp-client
|
||||
kbd
|
||||
less
|
||||
libblockdev-crypto2
|
||||
libblockdev-dm2
|
||||
libpam-systemd
|
||||
lm-sensors
|
||||
locales
|
||||
lxpolkit
|
||||
man-db
|
||||
mesa-utils
|
||||
micro
|
||||
mpv
|
||||
nano
|
||||
ncdu
|
||||
ncurses-term
|
||||
net-tools
|
||||
netbase
|
||||
netcat-traditional
|
||||
nfacct
|
||||
ntp
|
||||
ntpdate
|
||||
parted
|
||||
pavucontrol
|
||||
pciutils
|
||||
policykit-1
|
||||
procps
|
||||
pulseaudio
|
||||
python3-psutil
|
||||
readline-common
|
||||
rfkill
|
||||
rofi
|
||||
screen
|
||||
slurp
|
||||
sudo
|
||||
sway
|
||||
systemd
|
||||
systemd-sysv
|
||||
telnet
|
||||
thunar
|
||||
tmux
|
||||
traceroute
|
||||
unicode-data
|
||||
usbutils
|
||||
vim
|
||||
w3m
|
||||
wget
|
||||
wpasupplicant
|
||||
xfce4-terminal
|
||||
xterm
|
||||
xwayland
|
86
src/recipes/default/packages/packages_build.list
Normal file
86
src/recipes/default/packages/packages_build.list
Normal file
|
@ -0,0 +1,86 @@
|
|||
autoconf
|
||||
autopoint
|
||||
bison
|
||||
cmake
|
||||
expat
|
||||
flex
|
||||
g++
|
||||
gcc
|
||||
gettext
|
||||
git
|
||||
intltool
|
||||
libbsd-dev
|
||||
libdbus-1-dev
|
||||
libdbusmenu-gtk3-dev
|
||||
libdrm-dev
|
||||
libepoxy-dev
|
||||
libevdev-dev
|
||||
libflac-dev
|
||||
libfmt-dev
|
||||
libgarcon-1-dev
|
||||
libgbm-dev
|
||||
libgirepository1.0-dev
|
||||
libgtkmm-3.0-dev
|
||||
libinput-dev
|
||||
libjson-c-dev
|
||||
libjsoncpp-dev
|
||||
libmpdclient-dev
|
||||
libmpeg2-4-dev
|
||||
libmpg123-dev
|
||||
libmtdev-dev
|
||||
libnl-3-dev
|
||||
libnl-genl-3-dev
|
||||
libpango1.0-dev
|
||||
libpciaccess-dev
|
||||
libpcre3-dev
|
||||
libpixman-1-dev
|
||||
libpng-dev
|
||||
libpulse-dev
|
||||
libsdl2-dev
|
||||
libsdl2-gfx-dev
|
||||
libsdl2-image-dev
|
||||
libsdl2-mixer-dev
|
||||
libsdl2-net-dev
|
||||
libsdl2-ttf-dev
|
||||
libsigc++-2.0-dev
|
||||
libspdlog-dev
|
||||
libsystemd-dev
|
||||
libtool
|
||||
libudev-dev
|
||||
libunwind-dev
|
||||
libwayland-dev
|
||||
libwayland-egl-backend-dev
|
||||
libx11-dev
|
||||
libx11-xcb-dev
|
||||
libxcb-composite0-dev
|
||||
libxcb-dri2-0-dev
|
||||
libxcb-dri3-dev
|
||||
libxcb-glx0-dev
|
||||
libxcb-icccm4-dev
|
||||
libxcb-present-dev
|
||||
libxcb-sync-dev
|
||||
libxcb-xfixes0-dev
|
||||
libxcb-xinput-dev
|
||||
libxdamage-dev
|
||||
libxext-dev
|
||||
libxfce4ui-2-dev
|
||||
libxfixes-dev
|
||||
libxfont-dev
|
||||
libxkbcommon-dev
|
||||
libxkbfile-dev
|
||||
libxml2-dev
|
||||
libxrandr-dev
|
||||
libxshmfence-dev
|
||||
libxxf86vm-dev
|
||||
llvm-dev
|
||||
make
|
||||
meson
|
||||
nettle-dev
|
||||
patch
|
||||
python3-mako
|
||||
python3-setuptools
|
||||
wayland-protocols
|
||||
xfce4-dev-tools
|
||||
xfonts-utils
|
||||
xutils-dev
|
||||
zlib1g-dev
|
Loading…
Add table
Add a link
Reference in a new issue