Package Base Details: linux-xanmod

Git Clone URL: https://aur.archlinux.org/linux-xanmod.git (read-only, click to copy)
Submitter: Yoshi2889
Maintainer: figue (figuepluto, jfigueras)
Last Packager: figue
Votes: 127
Popularity: 1.64
First Submitted: 2017-02-14 09:40 (UTC)
Last Updated: 2024-03-15 23:21 (UTC)

Pinned Comments

figue commented on 2018-12-14 00:50 (UTC) (edited on 2023-02-27 20:00 (UTC) by figue)

This package have several variables to enable/disable features.

##
## The following variables can be customized at build time. Use env or export to change at your wish
##
##   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 99
## Default is: 0 => generic
## Good option if your package is for one machine: 98 (Intel native) or 99 (AMD native)
if [ -z ${_microarchitecture+x} ]; then
  _microarchitecture=0
fi

## Disable NUMA since most users do not have multiple processors. Breaks CUDA/NvEnc.
## Archlinux and Xanmod enable it by default.
## Set variable "use_numa" to: n to disable (possibly increase performance)
##                             y to enable  (stock default)
if [ -z ${use_numa+x} ]; then
  use_numa=y
fi

## 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=n
fi

# 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

# Choose between the 4 main configs for stable branch. Default x86-64-v1 which use CONFIG_GENERIC_CPU2:
# Possible values: config_x86-64-v1 (default) / config_x86-64-v2 / 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-v1
fi

# 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,
# give module_db script a try: https://aur.archlinux.org/packages/modprobed-db
# This PKGBUILD read the database kept if it exists
#
# More at this wiki page ---> https://wiki.archlinux.org/index.php/Modprobed-db
if [ -z ${_localmodcfg} ]; then
  _localmodcfg=n
fi

# Tweak kernel options prior to a build via nconfig
if [ -z ${_makenconfig} ]; then
  _makenconfig=n
fi

Personally I'm running now xanmod kernel compiled with this:

env _microarchitecture=98 use_tracers=n use_numa=n _localmodcfg=y _compress_modules=y makepkg -sic

Also, you can now create the file myconfig in your local repo to build this package with a custom config or use ${XDG_CONFIG_HOME}/linux-xanmod/myconfig. This file can be a full kernel config or be a script with several entries to add/remove options (you have several examples in PKGBUILD by using scripts/config):

Code involved:

  for _myconfig in "${SRCDEST}/myconfig" "${HOME}/.config/linux-xanmod/myconfig" "${XDG_CONFIG_HOME}/linux-xanmod/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
  done

Latest Comments

« First ‹ Previous 1 .. 24 25 26 27 28 29 30 31 32 33 34 .. 50 Next › Last »

marlock commented on 2020-11-06 05:04 (UTC)

How to get Cachy scheduler on 5.9 kernels? I do not have Cachy despite I enabled it in PKGBUILD, looks like developers deleted it from xanmod patch?

figue commented on 2020-10-15 21:54 (UTC)

Then _microarchitecture=13

parovoz commented on 2020-10-15 17:18 (UTC) (edited on 2020-10-15 17:22 (UTC) by parovoz)

@figue

[android7890@komputator ~]$ gcc -march=native -Q --help=target | grep march | head -1
  -march=                               znver1

and it's 1300x, not 3100x

figue commented on 2020-10-13 17:55 (UTC)

@rayzorben seems ok to me... Can you apply and try in your system?

diff --git a/PKGBUILD b/PKGBUILD
index 91de11e..7351291 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -169,8 +169,8 @@ prepare() {
   # 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 [ $(wc -l < "${startdir}/myconfig") -gt 1000 ]; then
-      # myconfig is a full config file. Replace it
+    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

rayzorben commented on 2020-10-13 04:04 (UTC)

@ThatOneCalculato import them manually:

gpg --receive-keys [KEY]

That1Calculator commented on 2020-10-13 03:42 (UTC)

I'm having trouble installing, it can't import the keys. I tried changing my keyserver to hkp://keyserver.ubuntu.com, but it didn't help.

rayzorben commented on 2020-10-12 21:15 (UTC) (edited on 2020-10-12 21:16 (UTC) by rayzorben)

@figue - I get that is the logic, I am asking for it to change if possible

 if (grep 'scripts/config' myconfig) then
     this is a partial file
 else
     this is a full file
 fi

A full file would never contain the text 'scripts/config' but a partial file would. This would allow more than 1000 partial lines.

I prefer to keep a partial so that way if the kernel adds a new option I don't have to go back and update mine, it will just automatically get the default value.

Also I am very comfortable removing hardware that I don't need that is compiled in as a module, but I want to retain defaults for everything else. There are 3500 modules I can remove via scripts/config --disable CONFIG_MODULE_I_DONT_NEED

Also thanks for maintaining this package, linux-xanmod is the only kernel that makes me happy to use my system.

figue commented on 2020-10-12 20:30 (UTC)

@nTia89 see official linux package: https://git.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/linux

@ANDRoid7890 "gcc -march=native -Q --help=target | grep march | head -1"

According to wikipedia your CPU is a zen2 microarchitecture. Use _microarchitecture=14 or native _microarchitecture=42

@rayzorben the logic of myconfig is exactly as you describe. If file has more that 1000 lines it's considered a full kernel config file and it's replaced as the ".config". If not, the file is considered a "partial file" wchich contains only what should be enabled/disabled/module with builtin scripts/config command.

rayzorben commented on 2020-10-12 18:27 (UTC)

Can the logic for myconfig be changed to be a 'full config' if there are more than 1000 lines AND it does not contain scripts/config

I want to be able to have more than 1000 lines, and it seems that the determining factor is if myconfig contains text string('scripts/config') then partial else full

  # 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 [ $(wc -l < "${startdir}/myconfig") -gt 1000 ]; then
      # myconfig is a full config file. Replace it
      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
    fi
    echo
  fi