diff options
Diffstat (limited to 'PKGBUILD')
-rw-r--r-- | PKGBUILD | 275 |
1 files changed, 155 insertions, 120 deletions
@@ -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" |