summarylogtreecommitdiffstats
path: root/PKGBUILD
diff options
context:
space:
mode:
Diffstat (limited to 'PKGBUILD')
-rw-r--r--PKGBUILD275
1 files changed, 155 insertions, 120 deletions
diff --git a/PKGBUILD b/PKGBUILD
index 3cc438f828b2..be4909472ea9 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,19 +1,16 @@
# Maintainer: Joan Figueras <ffigue at gmail dot com>
# Contributor: Torge Matthies <openglfreak at googlemail dot com>
-# Contributor: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
-# Contributor: Yoshi2889 <rick.2889 at gmail dot com>
-# Contributor: Tobias Powalowski <tpowa@archlinux.org>
-# Contributor: Thomas Baechler <thomas@archlinux.org>
+# Contributor: Jan Alexander Steffens (heftig) <heftig@archlinux.org>
##
## The following variables can be customized at build time. Use env or export to change at your wish
##
-## Example: env _microarchitecture=25 use_numa=n use_tracers=n use_pds=n makepkg -sc
+## Example: env _microarchitecture=98 use_numa=n use_tracers=n makepkg -sc
##
## Look inside 'choose-gcc-optimization.sh' to choose your microarchitecture
-## Valid numbers between: 0 to 42
+## Valid numbers between: 0 to 99
## Default is: 0 => generic
-## Good option if your package is for one machine: 42 => native
+## Good option if your package is for one machine: 98 (Intel native) or 99 (AMD native)
if [ -z ${_microarchitecture+x} ]; then
_microarchitecture=0
fi
@@ -26,29 +23,36 @@ if [ -z ${use_numa+x} ]; then
use_numa=y
fi
-## For performance you can disable FUNCTION_TRACER/GRAPH_TRACER. Limits debugging and analyzing of the kernel.
-## Stock Archlinux and Xanmod have this enabled.
-## Set variable "use_tracers" to: n to disable (possibly increase performance)
-## y to enable (stock default)
+## Since upstream disabled CONFIG_STACK_TRACER (limits debugging and analyzing of the kernel)
+## you can enable them setting this option. Caution, because they have an impact in performance.
+## Stock Archlinux has this enabled.
+## Set variable "use_tracers" to: n to disable (possibly increase performance, XanMod default)
+## y to enable (Archlinux default)
if [ -z ${use_tracers+x} ]; then
- use_tracers=y
+ use_tracers=n
fi
-## Enable Cachy CPU scheduler by default https://github.com/xanmod/linux/blob/5.8/Documentation/scheduler/sched-Cachy.rst
-## Set variable "use_cachy" to: n to disable (stock Xanmod)
-## y to enable
-if [ -z ${use_cachy+x} ]; then
- use_cachy=n
+# Unique compiler supported upstream is GCC
+## Choose between GCC and CLANG config (default is GCC)
+## Use the environment variable "_compiler=clang"
+if [ "${_compiler}" = "clang" ]; then
+ _compiler_flags="CC=clang HOSTCC=clang LLVM=1 LLVM_IAS=1"
fi
-## Enable CONFIG_USER_NS_UNPRIVILEGED flag https://aur.archlinux.org/cgit/aur.git/tree/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch?h=linux-ck
-## Set variable "use_ns" to: n to disable (stock Xanmod)
-## y to enable (stock Archlinux)
-if [ -z ${use_ns+x} ]; then
- use_ns=n
+# Choose between the 4 main configs for stable branch. Default x86-64-v1 which use CONFIG_GENERIC_CPU2:
+# Possible values: config_x86-64-v1 / config_x86-64-v2 (default) / config_x86-64-v3 / config_x86-64-v4
+# This will be overwritten by selecting any option in microarchitecture script
+# Source files: https://github.com/xanmod/linux/tree/5.17/CONFIGS/xanmod/gcc
+if [ -z ${_config+x} ]; then
+ _config=config_x86-64-v2
fi
-# Compile ONLY used modules to VASTLYreduce the number of modules built
+# Compress modules with ZSTD (to save disk space)
+if [ -z ${_compress_modules+x} ]; then
+ _compress_modules=n
+fi
+
+# Compile ONLY used modules to VASTLY reduce the number of modules built
# and the build time.
#
# To keep track of which modules are needed for your specific system/hardware,
@@ -61,53 +65,60 @@ if [ -z ${_localmodcfg} ]; then
fi
# Tweak kernel options prior to a build via nconfig
-_makenconfig=
+if [ -z ${_makenconfig} ]; then
+ _makenconfig=n
+fi
### IMPORTANT: Do no edit below this line unless you know what you're doing
pkgbase=linux-xanmod-anbox
-pkgver=5.9.10
-_major=5.9
-_branch=5.x
+_major=6.8
+pkgver=${_major}.9
+_branch=6.x
xanmod=1
+_revision=
+_sf_branch=main
pkgrel=${xanmod}
-pkgdesc='Linux Xanmod with ashmem and binder enabled for Anbox'
+pkgdesc='Linux Xanmod with ashmem and binder enabled for Anbox - Stable Mainline [MAIN]'
url="http://www.xanmod.org/"
arch=(x86_64)
-
license=(GPL2)
makedepends=(
- xmlto kmod inetutils bc libelf cpio
+ bc
+ cpio
+ gettext
+ libelf
+ pahole
+ perl
+ python
+ tar
+ xz
)
+if [ "${_compiler}" = "clang" ]; then
+ makedepends+=(clang llvm lld)
+fi
options=('!strip')
_srcname="linux-${pkgver}-xanmod${xanmod}"
source=("https://cdn.kernel.org/pub/linux/kernel/v${_branch}/linux-${_major}.tar."{xz,sign}
- "https://github.com/xanmod/linux/releases/download/${pkgver}-xanmod${xanmod}/patch-${pkgver}-xanmod${xanmod}.xz"
- choose-gcc-optimization.sh
- '0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-CLONE_NEWUSER.patch')
+ "patch-${pkgver}-xanmod${xanmod}${_revision}.xz::https://sourceforge.net/projects/xanmod/files/releases/${_sf_branch}/${pkgver}-xanmod${xanmod}/patch-${pkgver}-xanmod${xanmod}.xz/download"
+ choose-gcc-optimization.sh)
validpgpkeys=(
'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linux Torvalds
'647F28654894E3BD457199BE38DBBDC86092693E' # Greg Kroah-Hartman
)
# Archlinux patches
-_commits=""
-for _patch in $_commits; do
- source+=("${_patch}.patch::https://git.archlinux.org/linux.git/patch/?id=${_patch}")
+_commit="ec9e9a4219fe221dec93fa16fddbe44a34933d8d"
+_patches=()
+for _patch in ${_patches[@]}; do
+ source+=("${_patch}::https://raw.githubusercontent.com/archlinux/svntogit-packages/${_commit}/trunk/${_patch}")
done
-sha256sums=('3239a4ee1250bf2048be988cc8cb46c487b2c8a0de5b1b032d38394d5c6b1a06'
+sha256sums=('c969dea4e8bb6be991bbf7c010ba0e0a5643a3a8d8fb0a2aaa053406f1e965f3'
'SKIP'
- 'e897b0f10a200e46373dfe09bcb0829366c5a3ad5ccf1b3aa06ff4bd18eceea7'
- '2c7369218e81dee86f8ac15bda741b9bb34fa9cefcb087760242277a8207d511'
- '6c66dba73251440352f93ff32b72f5dd49536d0f17ef9347867660fd3a626991')
-
-# If use_cachy=y then download cachy patch
-if [ "$use_cachy" = "y" ]; then
- source+=("https://github.com/xanmod/linux/releases/download/${pkgver}-xanmod${xanmod}-cachy/patch-${pkgver}-xanmod${xanmod}-cachy.xz")
- sha256sums+=('8dc6a2bc5270b7cc784c52650bb15a3b66792f5d49ef1d49a38da19a660e1472')
-fi
+ '59556cb5c51d70141200ac0d8d8d2b240601e77549e22034e7166451e0c6f9f1'
+ 'a8b38eb482eb685944757182c4886404abc12703e5e56ec39c7d61298d17d71f')
export KBUILD_BUILD_HOST=${KBUILD_BUILD_HOST:-archlinux}
export KBUILD_BUILD_USER=${KBUILD_BUILD_USER:-makepkg}
@@ -117,14 +128,9 @@ prepare() {
cd linux-${_major}
# Apply Xanmod patch
- if [ "$use_cachy" = "y" ]; then
- patch -Np1 -i ../patch-${pkgver}-xanmod${xanmod}-cachy
- else
- patch -Np1 -i ../patch-${pkgver}-xanmod${xanmod}
- fi
+ patch -Np1 -i ../patch-${pkgver}-xanmod${xanmod}${_revision}
msg2 "Setting version..."
- scripts/setlocalversion --save-scmversion
echo "-$pkgrel" > localversion.10-pkgrel
echo "${pkgbase#linux-xanmod-anbox}" > localversion.20-pkgname
@@ -138,8 +144,11 @@ prepare() {
patch -Np1 < "../$src"
done
- # CONFIG_STACK_VALIDATION gives better stack traces. Also is enabled in all official kernel packages by Archlinux team
- scripts/config --enable CONFIG_STACK_VALIDATION
+ # Applying configuration
+ cp -vf CONFIGS/xanmod/gcc/${_config} .config
+ # enable LTO_CLANG_THIN
+ if [ "${_compiler}" = "clang" ]; then
+ scripts/config --disable LTO_CLANG_FULL
# Anbox compatibility
msg2 "Enabling ashmem and binder modules"
@@ -148,16 +157,28 @@ prepare() {
scripts/config --enable CONFIG_ANDROID_BINDER_IPC
scripts/config --enable CONFIG_ANDROID_BINDERFS
scripts/config --set-str CONFIG_ANDROID_BINDER_DEVICES "binder,hwbinder,vndbinder"
+ scripts/config --enable LTO_CLANG_THIN
+ fi
+
+ # CONFIG_STACK_VALIDATION gives better stack traces. Also is enabled in all official kernel packages by Archlinux team
+ scripts/config --enable CONFIG_STACK_VALIDATION
# Enable IKCONFIG following Arch's philosophy
scripts/config --enable CONFIG_IKCONFIG \
--enable CONFIG_IKCONFIG_PROC
+ # Requested by Alexandre Frade to fix issues in python-gbinder
+ scripts/config --enable CONFIG_ANDROID_BINDERFS
+ scripts/config --enable CONFIG_ANDROID_BINDER_IPC
+
# User set. See at the top of this file
- if [ "$use_tracers" = "n" ]; then
- msg2 "Disabling FUNCTION_TRACER/GRAPH_TRACER..."
- scripts/config --disable CONFIG_FUNCTION_TRACER \
- --disable CONFIG_STACK_TRACER
+ if [ "$use_tracers" = "y" ]; then
+ msg2 "Enabling CONFIG_FTRACE only if we are not compiling with clang..."
+ if [ "${_compiler}" = "gcc" ] || [ "${_compiler}q" = "q" ]; then
+ scripts/config --enable CONFIG_FTRACE \
+ --enable CONFIG_FUNCTION_TRACER \
+ --enable CONFIG_STACK_TRACER
+ fi
fi
if [ "$use_numa" = "n" ]; then
@@ -165,85 +186,94 @@ prepare() {
scripts/config --disable CONFIG_NUMA
fi
- if [ "$use_cachy" = "y" ]; then
- msg2 "Enabling Cachy CPU scheduler by default (also NUMA and grouping for tasks, which are not compatible with Cachy)..."
- scripts/config --disable CONFIG_NUMA
- scripts/config --disable FAIR_GROUP_SCHED
- scripts/config --enable CONFIG_CACHY_SCHED
- fi
-
- if [ "$use_ns" = "n" ]; then
- msg2 "Disabling CONFIG_USER_NS_UNPRIVILEGED"
- scripts/config --disable CONFIG_USER_NS_UNPRIVILEGED
+ # Compress modules by default (following Arch's kernel)
+ if [ "$_compress_modules" = "y" ]; then
+ scripts/config --enable CONFIG_MODULE_COMPRESS_ZSTD
fi
# Let's user choose microarchitecture optimization in GCC
- sh ${srcdir}/choose-gcc-optimization.sh $_microarchitecture
+ # Use default microarchitecture only if we have not choosen another microarchitecture
+ if [ "$_microarchitecture" -ne "0" ]; then
+ ../choose-gcc-optimization.sh $_microarchitecture
+ fi
# This is intended for the people that want to build this package with their own config
- # Put the file "myconfig" at the package folder to use this feature
- # If it's a full config, will be replaced
- # If not, you should use scripts/config commands, one by line
- if [ -f "${startdir}/myconfig" ]; then
- if ! grep -q 'scripts/config' "${startdir}/myconfig"; then
- # myconfig is a full config file. Replacing default .config
- msg2 "Using user CUSTOM config..."
- cp -f "${startdir}"/myconfig .config
- else
- # myconfig is a partial file. Applying every line
- msg2 "Applying configs..."
- cat "${startdir}"/myconfig | while read -r _linec ; do
- if echo "$_linec" | grep "scripts/config" ; then
- set -- $_linec
- "$@"
- else
- warning "Line format incorrect, ignoring..."
- fi
- done
+ # Put the file "myconfig" at the package folder (this will take preference) or "${XDG_CONFIG_HOME}/linux-xanmod-anbox/myconfig"
+ # If we detect partial file with scripts/config commands, we execute as a script
+ # If not, it's a full config, will be replaced
+ for _myconfig in "${SRCDEST}/myconfig" "${HOME}/.config/linux-xanmod-anbox/myconfig" "${XDG_CONFIG_HOME}/linux-xanmod-anbox/myconfig" ; do
+ if [ -f "${_myconfig}" ] && [ "$(wc -l <"${_myconfig}")" -gt "0" ]; then
+ if grep -q 'scripts/config' "${_myconfig}"; then
+ # myconfig is a partial file. Executing as a script
+ msg2 "Applying myconfig..."
+ bash -x "${_myconfig}"
+ else
+ # myconfig is a full config file. Replacing default .config
+ msg2 "Using user CUSTOM config..."
+ cp -f "${_myconfig}" .config
+ fi
+ echo
+ break
fi
- echo
- fi
-
- make olddefconfig
+ done
### Optionally load needed modules for the make localmodconfig
# See https://aur.archlinux.org/packages/modprobed-db
if [ "$_localmodcfg" = "y" ]; then
if [ -f $HOME/.config/modprobed.db ]; then
msg2 "Running Steven Rostedt's make localmodconfig now"
- make LSMOD=$HOME/.config/modprobed.db localmodconfig
+ make ${_compiler_flags} LSMOD=$HOME/.config/modprobed.db localmodconfig
else
msg2 "No modprobed.db data found"
- exit
+ exit 1
fi
fi
+ msg2 "make ${_compiler_flags} olddefconfig"
+ make ${_compiler_flags} olddefconfig
+ #diff -u CONFIGS/xanmod/gcc/${_config} .config || :
+
make -s kernelrelease > version
msg2 "Prepared %s version %s" "$pkgbase" "$(<version)"
- [[ -z "$_makenconfig" ]] || make nconfig
+ if [ "$_makenconfig" = "y" ]; then
+ make ${_compiler_flags} nconfig
+ fi
# save configuration for later reuse
- cat .config > "${startdir}/config.last"
+ cat .config > "${SRCDEST}/config.last"
}
build() {
cd linux-${_major}
- make all
+ make ${_compiler_flags} all
+ make -C tools/bpf/bpftool vmlinux.h feature-clang-bpf-co-re=1
}
_package() {
pkgdesc="The Linux kernel and modules with Xanmod patches and ashmem and binder enabled"
- depends=(coreutils kmod initramfs)
- optdepends=('crda: to set the correct wireless channels of your country'
- 'linux-firmware: firmware images needed for some devices')
- provides=('linux' 'linux-xanmod-anbox-git')
- replaces=('linux-xanmod-anbox-git')
- conflicts=('linux-xanmod-anbox-git')
+ depends=(
+ coreutils
+ initramfs
+ kmod
+ )
+ optdepends=(
+ 'wireless-regdb: to set the correct wireless channels of your country'
+ 'linux-firmware: firmware images needed for some devices'
+ )
+ provides=(
+ KSMBD-MODULE
+ VIRTUALBOX-GUEST-MODULES
+ WIREGUARD-MODULE
+ NTFS3-MODULE
+ )
+ replaces=(
+ virtualbox-guest-modules-arch
+ wireguard-arch
+ )
cd linux-${_major}
- local kernver="$(<version)"
- local modulesdir="$pkgdir/usr/lib/modules/$kernver"
+ local modulesdir="$pkgdir/usr/lib/modules/$(<version)"
msg2 "Installing boot image..."
# systemd expects to find the kernel here to allow hibernation
@@ -254,33 +284,32 @@ _package() {
echo "$pkgbase" | install -Dm644 /dev/stdin "$modulesdir/pkgbase"
msg2 "Installing modules..."
- make INSTALL_MOD_PATH="$pkgdir/usr" modules_install
+ ZSTD_CLEVEL=19 make INSTALL_MOD_PATH="$pkgdir/usr" INSTALL_MOD_STRIP=1 \
+ DEPMOD=/doesnt/exist modules_install # Suppress depmod
- # remove build and source links
- rm "$modulesdir"/{source,build}
+ # remove build link
+ rm "$modulesdir"/build
}
_package-headers() {
- pkgdesc="Header files and scripts for building modules for Xanmod Linux kernel with ashmem and binder enabled"
- provides=('linux-headers' 'linux-xanmod-anbox-git-headers')
- replaces=('linux-xanmod-anbox-git-headers')
- conflicts=('linux-xanmod-anbox-git-headers')
+ pkgdesc="Headers and scripts for building modules for the $pkgdesc kernel"
+ depends=(pahole)
cd linux-${_major}
local builddir="$pkgdir/usr/lib/modules/$(<version)/build"
msg2 "Installing build files..."
install -Dt "$builddir" -m644 .config Makefile Module.symvers System.map \
- localversion.* version vmlinux
+ localversion.* version vmlinux tools/bpf/bpftool/vmlinux.h
install -Dt "$builddir/kernel" -m644 kernel/Makefile
install -Dt "$builddir/arch/x86" -m644 arch/x86/Makefile
cp -t "$builddir" -a scripts
- # add objtool for external module building and enabled VALIDATION_STACK option
+ # required when STACK_VALIDATION is enabled
install -Dt "$builddir/tools/objtool" tools/objtool/objtool
- # add xfs and shmem for aufs building
- mkdir -p "$builddir"/{fs/xfs,mm}
+ # required when DEBUG_INFO_BTF_MODULES is enabled
+ install -Dt "$builddir/tools/bpf/resolve_btfids" tools/bpf/resolve_btfids/resolve_btfids
msg2 "Installing headers..."
cp -t "$builddir" -a include
@@ -290,15 +319,18 @@ _package-headers() {
install -Dt "$builddir/drivers/md" -m644 drivers/md/*.h
install -Dt "$builddir/net/mac80211" -m644 net/mac80211/*.h
- # http://bugs.archlinux.org/task/13146
+ # https://bugs.archlinux.org/task/13146
install -Dt "$builddir/drivers/media/i2c" -m644 drivers/media/i2c/msp3400-driver.h
- # http://bugs.archlinux.org/task/20402
+ # https://bugs.archlinux.org/task/20402
install -Dt "$builddir/drivers/media/usb/dvb-usb" -m644 drivers/media/usb/dvb-usb/*.h
install -Dt "$builddir/drivers/media/dvb-frontends" -m644 drivers/media/dvb-frontends/*.h
install -Dt "$builddir/drivers/media/tuners" -m644 drivers/media/tuners/*.h
- msg2 "Installing KConfig files..."
+ # https://bugs.archlinux.org/task/71392
+ install -Dt "$builddir/drivers/iio/common/hid-sensors" -m644 drivers/iio/common/hid-sensors/*.h
+
+ echo "Installing KConfig files..."
find . -name 'Kconfig*' -exec install -Dm644 {} "$builddir/{}" \;
msg2 "Removing unneeded architectures..."
@@ -321,7 +353,7 @@ _package-headers() {
msg2 "Stripping build tools..."
local file
while read -rd '' file; do
- case "$(file -bi "$file")" in
+ case "$(file -Sib "$file")" in
application/x-sharedlib\;*) # Libraries (.so)
strip -v $STRIP_SHARED "$file" ;;
application/x-archive\;*) # Libraries (.a)
@@ -333,6 +365,9 @@ _package-headers() {
esac
done < <(find "$builddir" -type f -perm -u+x ! -name vmlinux -print0)
+ msg2 "Stripping vmlinux..."
+ strip -v $STRIP_STATIC "$builddir/vmlinux"
+
msg2 "Adding symlink..."
mkdir -p "$pkgdir/usr/src"
ln -sr "$builddir" "$pkgdir/usr/src/$pkgbase"