mirror of https://codeberg.org/hako/Rosenthal.git
* rosenthal/packages/linux.scm: New file. (computed-origin-method,%upstream-linux-source,%cflags,%ldflags) (%xanmod-version,%xanmod-revision,extract-xanmod-patch,linux-xanmod-patch) (linux-xanmod-source,linux-xanmod): New variables.wip/index/refs/heads/trunk
parent
7fbe28af8b
commit
146bc7f068
1 changed files with 142 additions and 0 deletions
@ -0,0 +1,142 @@ |
||||
;; SPDX-FileCopyrightText: 2022 Hilton Chain <hako@ultrarare.space> |
||||
;; |
||||
;; SPDX-License-Identifier: GPL-3.0-or-later |
||||
|
||||
(define-module (rosenthal packages linux) |
||||
#:use-module ((guix licenses) #:prefix license:) |
||||
#:use-module (ice-9 match) |
||||
#:use-module (guix build-system) |
||||
#:use-module (guix build-system copy) |
||||
#:use-module (guix build-system gnu) |
||||
#:use-module (guix build-system python) |
||||
#:use-module (guix download) |
||||
#:use-module (guix gexp) |
||||
#:use-module (guix git-download) |
||||
#:use-module (guix packages) |
||||
#:use-module (guix utils) |
||||
#:use-module (gnu packages) |
||||
#:use-module (gnu packages base) |
||||
#:use-module (gnu packages compression) |
||||
#:use-module (gnu packages gawk) |
||||
#:use-module (gnu packages gcc) |
||||
#:use-module (gnu packages glib) |
||||
#:use-module (gnu packages linux) |
||||
#:use-module (gnu packages llvm) |
||||
#:use-module (gnu packages perl) |
||||
#:use-module (gnu packages python) |
||||
#:use-module (gnu packages rsync) |
||||
#:use-module (gnu packages tls)) |
||||
|
||||
(define computed-origin-method |
||||
(@@ (guix packages) computed-origin-method)) |
||||
|
||||
(define %upstream-linux-source |
||||
(@@ (gnu packages linux) %upstream-linux-source)) |
||||
|
||||
(define %cflags |
||||
(string-append |
||||
" -flto" " -fpic" " -fpie" " -fvisibility=hidden" " -fwrapv" " -pipe" |
||||
" -fsanitize=cfi" " -fstack-clash-protection" " -fstack-protector-strong" |
||||
" -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang" |
||||
" -ftrivial-auto-var-init=zero -D_FORTIFY_SOURCE=2 -D_GLIBCXX_ASSERTIONS")) |
||||
|
||||
(define %ldflags "-Wl,-z,defs -Wl,-z,now -Wl,-z,relro -Wl,-pie") |
||||
|
||||
(define %xanmod-version "6.0.9") |
||||
(define %xanmod-revision "xanmod1") |
||||
|
||||
(define (extract-xanmod-patch version hash) |
||||
(let ((patch (string-append "linux-" version ".patch")) |
||||
(source (origin |
||||
(method url-fetch) |
||||
(uri (string-append "https://github.com/xanmod/linux" |
||||
"/releases/download/" version |
||||
"/patch-" version ".xz")) |
||||
(sha256 (base32 hash))))) |
||||
(origin |
||||
(method computed-origin-method) |
||||
(file-name patch) |
||||
(sha256 #f) |
||||
(uri |
||||
(delay |
||||
(with-imported-modules '((guix build utils)) |
||||
#~(begin (use-modules (guix build utils)) |
||||
(set-path-environment-variable |
||||
"PATH" '("bin") (list #+xz)) |
||||
(setenv "XZ_OPT" (string-join (%xz-parallel-args))) |
||||
(map (lambda (p) |
||||
(begin |
||||
(copy-file #+source p) |
||||
(make-file-writable p) |
||||
(invoke "xz" "--decompress" p))) |
||||
(list (string-append #$patch ".xz"))) |
||||
(copy-file #$patch #$output)))))))) |
||||
|
||||
(define linux-xanmod-patch |
||||
(extract-xanmod-patch |
||||
(string-append %xanmod-version "-" %xanmod-revision) |
||||
"0ar9k5bj75s4ac2a1xlm6l5x96jd6v2azpab19cx19hmgg3c3wh2")) |
||||
|
||||
(define linux-xanmod-source |
||||
(origin |
||||
(inherit (%upstream-linux-source |
||||
"6.0" |
||||
(base32 "13kqh7yhifwz5dmd3ky0b3mzbh9r0nmjfp5mxy42drcdafjl692w"))) |
||||
(patches (list linux-xanmod-patch)))) |
||||
|
||||
(define-public linux-xanmod |
||||
(let ((base linux-libre)) |
||||
(package |
||||
(inherit base) |
||||
(name "linux-xanmod") |
||||
(version %xanmod-version) |
||||
(source linux-xanmod-source) |
||||
(build-system |
||||
(build-system-with-c-toolchain |
||||
(package-build-system base) |
||||
(modify-inputs (standard-packages) |
||||
(delete "binutils" "gcc" "ld-wrapper")))) |
||||
(arguments |
||||
(substitute-keyword-arguments (package-arguments base) |
||||
((#:phases phases) |
||||
#~(modify-phases #$phases |
||||
(add-before 'configure 'setenv |
||||
(lambda _ |
||||
(setenv "LLVM" "1") |
||||
(setenv "CFLAGS" #$%cflags) |
||||
(setenv "CXXFLAGS" #$%cflags) |
||||
(setenv "LDFLAGS" #$%ldflags) |
||||
|
||||
;; FIXME: For some unknown reason, the build would fail when |
||||
;; calling `pthread_cancel()` at SORTTAB stage, together |
||||
;; with a "missing libgcc_s.so.1" error, no matter whether |
||||
;; it's present in LIBRARY_PATH. |
||||
|
||||
;; However, LD_PRELOAD addresses this.... |
||||
(setenv "LD_PRELOAD" |
||||
(string-append #$gcc:lib "/lib/libgcc_s.so.1")))) |
||||
|
||||
;; NOTE: As defined in `(make-linux-libre)`, `linux-libre` would |
||||
;; apply a few kernel configuration here, to workaround this |
||||
;; without defining `(make-linux-libre)` from scratch again, |
||||
;; simply replace `.config` with ours. |
||||
(add-after 'configure 'replace-kconfig |
||||
(lambda* (#:key inputs #:allow-other-keys) |
||||
(let ((config (assoc-ref inputs "kconfig"))) |
||||
(copy-file config ".config") |
||||
(chmod ".config" #o666)))))))) |
||||
(native-inputs |
||||
(modify-inputs (package-native-inputs base) |
||||
(append clang-15 |
||||
llvm-15 |
||||
lld-as-ld-wrapper-15 |
||||
python-minimal-wrapper |
||||
zstd) |
||||
(delete "gmp" "mpc" "mpfr"))) |
||||
(home-page "https://xanmod.org/") |
||||
(synopsis |
||||
"Linux kernel distribution with custom settings and new features") |
||||
(description |
||||
"General-purpose Linux kernel distribution with custom settings and new |
||||
features. Built to provide a stable, responsive and smooth desktop |
||||
experience.")))) |
Loading…
Reference in new issue