From patchwork Fri Mar 20 15:13:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Mathieu Othacehe X-Patchwork-Id: 20792 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id F07C527BBEA; Fri, 20 Mar 2020 15:14:14 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,T_DKIM_INVALID, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTP id 5861127BBE4 for ; Fri, 20 Mar 2020 15:14:14 +0000 (GMT) Received: from localhost ([::1]:54020 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jFJLh-0007y9-NN for patchwork@mira.cbaines.net; Fri, 20 Mar 2020 11:14:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55727) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jFJLY-0007v6-Ml for guix-patches@gnu.org; Fri, 20 Mar 2020 11:14:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jFJLW-00035p-Oc for guix-patches@gnu.org; Fri, 20 Mar 2020 11:14:04 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:39396) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jFJLW-00035f-KH for guix-patches@gnu.org; Fri, 20 Mar 2020 11:14:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jFJLW-0000fI-Fh for guix-patches@gnu.org; Fri, 20 Mar 2020 11:14:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#37868] [PATCH v8] system: Add kernel-module-packages to operating-system. Resent-From: Mathieu Othacehe Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 20 Mar 2020 15:14:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 37868 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Danny Milosavljevic Cc: mhw@netris.org, ludo@gnu.org, 37868@debbugs.gnu.org Received: via spool by 37868-submit@debbugs.gnu.org id=B37868.15847172102497 (code B ref 37868); Fri, 20 Mar 2020 15:14:02 +0000 Received: (at 37868) by debbugs.gnu.org; 20 Mar 2020 15:13:30 +0000 Received: from localhost ([127.0.0.1]:45369 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jFJL0-0000eB-7W for submit@debbugs.gnu.org; Fri, 20 Mar 2020 11:13:30 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:39958) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jFJKy-0000dr-Lq for 37868@debbugs.gnu.org; Fri, 20 Mar 2020 11:13:29 -0400 Received: by mail-wr1-f65.google.com with SMTP id f3so7911839wrw.7 for <37868@debbugs.gnu.org>; Fri, 20 Mar 2020 08:13:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=references:user-agent:from:to:cc:subject:in-reply-to:date :message-id:mime-version; bh=IOMbRg1h5pGIzJo2CQImhuHMwf+c1wM8khVu1aYLqxg=; b=lT6Yg6aoDSC1prbt6MggFL3Tsup15FJYMTsQlrH3O+BVpVbfamVd67fSSPuHZyXm0J BmSEJXp5+MxNFildWepJs4gBJ0vvL+pN/BaIfbkHMpmNaIfuoe6iw07jMiA0kZUpuicV L0eZf9RrJD/eaOAL8mBNxFHKbhlo8saMEvQj2oHfTRELElZ67ktt7BYLJ+WmKOK4632n lXgxxmOzdJNLVMG8yEcXuMR/aRrE2OvH+y85NBgcqDXytIRHMHMH2C94qNRsmZH6Mntp zMIsE8rGuhhQRJDMJ6QtoSNrntOWiS10+u4DvD9IX83vhHZFS0k+t0/V14yHxuh5A/aN N8Nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:references:user-agent:from:to:cc:subject :in-reply-to:date:message-id:mime-version; bh=IOMbRg1h5pGIzJo2CQImhuHMwf+c1wM8khVu1aYLqxg=; b=H6/IYWUtVEKvWAWa4jTvINBrN+1zhG8uVZenIO+eSCkyLoHUQGEy2fBdTsc2POKhKC nzml/a/AunXPznpWBC+pVLmUuv+jgCyQFrmPW9izZZ7lgjGlVTLzIKMckS4UFTxAnJdz RKtyOLHJ4tf7nvQ7IjQ5tguFDUWrK4OSOyKCy/zLUO72mdtLYfkUTpiBqKTuhoW9pjP6 cAuLrAUvefY6Pwj5/UAGnYDBxC46RRcdYPavwCNYAqDFHkcmN/LWyGz+Uqu4P72VkGMa jvjKZW2IVRdyd0IqTB0jA3wSBrEgEeTL26BNyXeLqP+bO/5dATFtz6vVcOvI87THIzzd Shaw== X-Gm-Message-State: ANhLgQ2ZU3CLZ14DByCp8y1cfduEwGoIWWQ5VHkAfLqVOVJtTJUobIwk 2v3n6J5L2Y3rdqR0fMm8GeQ= X-Google-Smtp-Source: ADFU+vt7NnmLuhH2B12sjAJPiiExIeShLOt/5PLGCm4yji2KHUnM8WD0KKo7DcGISTavUdwmthU4YQ== X-Received: by 2002:adf:aac5:: with SMTP id i5mr2938266wrc.285.1584717202805; Fri, 20 Mar 2020 08:13:22 -0700 (PDT) Received: from meru ([2a01:cb18:832e:5f00:b0f7:cdca:88af:9474]) by smtp.gmail.com with ESMTPSA id g128sm8381052wmf.27.2020.03.20.08.13.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Mar 2020 08:13:21 -0700 (PDT) References: <20200227135146.5701-1-dannym@scratchpost.org> <20200227155029.2542-1-dannym@scratchpost.org> <20200314194055.6d857037@scratchpost.org> <877dzlgbe2.fsf@gmail.com> <20200315191736.33ed8abf@scratchpost.org> <87y2s0ei8i.fsf@gmail.com> <20200316211052.5d4e29a2@scratchpost.org> <87v9n1d8ez.fsf@gmail.com> <20200320111938.4472f145@scratchpost.org> User-agent: mu4e 1.2.0; emacs 26.3 From: Mathieu Othacehe In-reply-to: <20200320111938.4472f145@scratchpost.org> Date: Fri, 20 Mar 2020 16:13:20 +0100 Message-ID: <87fte3jbzj.fsf@gmail.com> MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches Hey, Here's a patch that fixes linux-module-build-system cross-compilation. I tested it on acpi-call-linux-module, ddcci-driver-linux, vhba-module and rtl8812au-aircrack-ng-linux-module, seems to work fine! Now, I'll try to rebase it on top of your patch and see if it works for a cross-compiled system. Thanks, Mathieu From 0331acf8494cc8404a23c0bdd516ef7c5bf854ad Mon Sep 17 00:00:00 2001 From: Mathieu Othacehe Date: Fri, 20 Mar 2020 16:01:02 +0100 Subject: [PATCH] build-system: linux-module: Fix cross-compilation. * guix/build-system/linux-module.scm (default-kmod, default-gcc): Remove as unused, (system->arch): new procedure, (make-linux-module-builder)[native-inputs]: move linux ... [inputs]: ... to here, (lower): allow cross-compilation, move "linux" and "linux-module-builder" to host-inputs, add target-inputs, call linux-module-build-cross if target is set, linux-module-build otherwise, (linux-module-build): add a target argument, pass target and arch to build side linux-module-build call, (linux-module-build-cross): new procedure. * guix/build/linux-module-build-system.scm (configure): Add arch argument and use it to set ARCH environment variable, (linux-module-build): fill comment. --- guix/build-system/linux-module.scm | 162 +++++++++++++++++------ guix/build/linux-module-build-system.scm | 17 +-- 2 files changed, 132 insertions(+), 47 deletions(-) diff --git a/guix/build-system/linux-module.scm b/guix/build-system/linux-module.scm index 1e1a07d0a2..ca104f7c75 100644 --- a/guix/build-system/linux-module.scm +++ b/guix/build-system/linux-module.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2019 Danny Milosavljevic +;;; Copyright © 2020 Mathieu Othacehe ;;; ;;; This file is part of GNU Guix. ;;; @@ -45,27 +46,16 @@ (let ((module (resolve-interface '(gnu packages linux)))) (module-ref module 'linux-libre))) -(define (default-kmod) - "Return the default kmod package." - - ;; Do not use `@' to avoid introducing circular dependencies. +(define (system->arch system) (let ((module (resolve-interface '(gnu packages linux)))) - (module-ref module 'kmod))) - -(define (default-gcc) - "Return the default gcc package." - - ;; Do not use `@' to avoid introducing circular dependencies. - (let ((module (resolve-interface '(gnu packages gcc)))) - (module-ref module 'gcc-7))) + ((module-ref module 'system->linux-architecture) system))) (define (make-linux-module-builder linux) (package (inherit linux) (name (string-append (package-name linux) "-module-builder")) - (native-inputs - `(("linux" ,linux) - ,@(package-native-inputs linux))) + (inputs + `(("linux" ,linux))) (arguments (substitute-keyword-arguments (package-arguments linux) ((#:phases phases) @@ -97,33 +87,43 @@ #:rest arguments) "Return a bag for NAME." (define private-keywords - '(#:source #:target #:gcc #:kmod #:linux #:inputs #:native-inputs)) - - (and (not target) ;XXX: no cross-compilation - (bag - (name name) - (system system) - (host-inputs `(,@(if source - `(("source" ,source)) - '()) - ,@inputs - ,@(standard-packages))) - (build-inputs `(("linux" ,linux) ; for "Module.symvers". - ("linux-module-builder" - ,(make-linux-module-builder linux)) - ,@native-inputs - ;; TODO: Remove "gmp", "mpfr", "mpc" since they are - ;; only needed to compile the gcc plugins. Maybe - ;; remove "flex", "bison", "elfutils", "perl", - ;; "openssl". That leaves very little ("bc", "gcc", - ;; "kmod"). - ,@(package-native-inputs linux))) - (outputs outputs) - (build linux-module-build) - (arguments (strip-keyword-arguments private-keywords arguments))))) + `(#:source #:target #:gcc #:kmod #:linux #:inputs #:native-inputs + ,@(if target '() '(#:target)))) + + (bag + (name name) + (system system) (target target) + (build-inputs `(,@(if source + `(("source" ,source)) + '()) + ,@native-inputs + ;; TODO: Remove "gmp", "mpfr", "mpc" since they are + ;; only needed to compile the gcc plugins. Maybe + ;; remove "flex", "bison", "elfutils", "perl", + ;; "openssl". That leaves very little ("bc", "gcc", + ;; "kmod"). + ,@(package-native-inputs linux) + ,@(if target + ;; Use the standard cross inputs of + ;; 'gnu-build-system'. + (standard-cross-packages target 'host) + '()) + ;; Keep the standard inputs of 'gnu-build-system'. + ,@(standard-packages))) + (host-inputs `(,@inputs + ("linux" ,linux) + ("linux-module-builder" + ,(make-linux-module-builder linux)))) + (target-inputs (if target + (standard-cross-packages target 'target) + '())) + (outputs outputs) + (build (if target linux-module-build-cross linux-module-build)) + (arguments (strip-keyword-arguments private-keywords arguments)))) (define* (linux-module-build store name inputs #:key + target (search-paths '()) (tests? #t) (phases '(@ (guix build linux-module-build-system) @@ -152,6 +152,8 @@ search-paths) #:phases ,phases #:system ,system + #:target ,target + #:arch ,(system->arch (or target system)) #:tests? ,tests? #:outputs %outputs #:inputs %build-inputs))) @@ -173,6 +175,88 @@ #:guile-for-build guile-for-build #:substitutable? substitutable?)) +(define* (linux-module-build-cross + store name + #:key + target native-drvs target-drvs + (guile #f) + (outputs '("out")) + (search-paths '()) + (native-search-paths '()) + (tests? #f) + (phases '(@ (guix build linux-module-build-system) + %standard-phases)) + (system (%current-system)) + (substitutable? #t) + (imported-modules + %linux-module-build-system-modules) + (modules '((guix build linux-module-build-system) + (guix build utils)))) + (define builder + `(begin + (use-modules ,@modules) + (let () + (define %build-host-inputs + ',(map (match-lambda + ((name (? derivation? drv) sub ...) + `(,name . ,(apply derivation->output-path drv sub))) + ((name path) + `(,name . ,path))) + native-drvs)) + + (define %build-target-inputs + ',(map (match-lambda + ((name (? derivation? drv) sub ...) + `(,name . ,(apply derivation->output-path drv sub))) + ((name (? package? pkg) sub ...) + (let ((drv (package-cross-derivation store pkg + target system))) + `(,name . ,(apply derivation->output-path drv sub)))) + ((name path) + `(,name . ,path))) + target-drvs)) + + (linux-module-build #:name ,name + #:source ,(match (assoc-ref native-drvs "source") + (((? derivation? source)) + (derivation->output-path source)) + ((source) + source) + (source + source)) + #:system ,system + #:target ,target + #:arch ,(system->arch (or target system)) + #:outputs %outputs + #:inputs %build-target-inputs + #:native-inputs %build-host-inputs + #:search-paths + ',(map search-path-specification->sexp + search-paths) + #:native-search-paths + ',(map + search-path-specification->sexp + native-search-paths) + #:phases ,phases + #:tests? ,tests?)))) + + (define guile-for-build + (match guile + ((? package?) + (package-derivation store guile system #:graft? #f)) + (#f ; the default + (let* ((distro (resolve-interface '(gnu packages commencement))) + (guile (module-ref distro 'guile-final))) + (package-derivation store guile system #:graft? #f))))) + + (build-expression->derivation store name builder + #:system system + #:inputs (append native-drvs target-drvs) + #:outputs outputs + #:modules imported-modules + #:guile-for-build guile-for-build + #:substitutable? substitutable?)) + (define linux-module-build-system (build-system (name 'linux-module) diff --git a/guix/build/linux-module-build-system.scm b/guix/build/linux-module-build-system.scm index 8145d5a724..73d6b101f6 100644 --- a/guix/build/linux-module-build-system.scm +++ b/guix/build/linux-module-build-system.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2019 Danny Milosavljevic +;;; Copyright © 2020 Mathieu Othacehe ;;; ;;; This file is part of GNU Guix. ;;; @@ -33,14 +34,13 @@ ;; Code: ;; Copied from make-linux-libre's "configure" phase. -(define* (configure #:key inputs target #:allow-other-keys) +(define* (configure #:key inputs target arch #:allow-other-keys) (setenv "KCONFIG_NOTIMESTAMP" "1") (setenv "KBUILD_BUILD_TIMESTAMP" (getenv "SOURCE_DATE_EPOCH")) - ;(let ((arch ,(system->linux-architecture - ; (or (%current-target-system) - ; (%current-system))))) - ; (setenv "ARCH" arch) - ; (format #t "`ARCH' set to `~a'~%" (getenv "ARCH"))) + + (setenv "ARCH" arch) + (format #t "`ARCH' set to `~a'~%" (getenv "ARCH")) + (when target (setenv "CROSS_COMPILE" (string-append target "-")) (format #t "`CROSS_COMPILE' set to `~a'~%" @@ -85,8 +85,9 @@ (replace 'install install))) (define* (linux-module-build #:key inputs (phases %standard-phases) - #:allow-other-keys #:rest args) - "Build the given package, applying all of PHASES in order, with a Linux kernel in attendance." + #:allow-other-keys #:rest args) + "Build the given package, applying all of PHASES in order, with a Linux +kernel in attendance." (apply gnu:gnu-build #:inputs inputs #:phases phases args)) -- 2.25.1