From patchwork Fri Jun 9 16:10:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?6Lev6L6J?= X-Patchwork-Id: 50799 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 E26C527BBE2; Fri, 9 Jun 2023 17:11:18 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI, SPF_HELO_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id D4DEA27BBE9 for ; Fri, 9 Jun 2023 17:11:16 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7ehc-00021w-2m; Fri, 09 Jun 2023 12:11:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7ehb-00021o-1M for guix-patches@gnu.org; Fri, 09 Jun 2023 12:11:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7eha-00009X-P4 for guix-patches@gnu.org; Fri, 09 Jun 2023 12:11:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1q7eha-0000gT-KK for guix-patches@gnu.org; Fri, 09 Jun 2023 12:11:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#63981] [PATCH] gnu: riscv64-unknown-elf-toolchain: New Variable Resent-From: =?utf-8?b?6Lev6L6J?= Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 09 Jun 2023 16:11:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 63981 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 63981@debbugs.gnu.org X-Debbugs-Original-To: guix-patches Received: via spool by submit@debbugs.gnu.org id=B.16863270542613 (code B ref -1); Fri, 09 Jun 2023 16:11:02 +0000 Received: (at submit) by debbugs.gnu.org; 9 Jun 2023 16:10:54 +0000 Received: from localhost ([127.0.0.1]:60208 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q7ehS-0000g5-80 for submit@debbugs.gnu.org; Fri, 09 Jun 2023 12:10:54 -0400 Received: from lists.gnu.org ([209.51.188.17]:44152) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q7ehR-0000fy-4Y for submit@debbugs.gnu.org; Fri, 09 Jun 2023 12:10:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7ehQ-00021A-VH for guix-patches@gnu.org; Fri, 09 Jun 2023 12:10:52 -0400 Received: from mail-ej1-x642.google.com ([2a00:1450:4864:20::642]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7ehO-000098-Vo for guix-patches@gnu.org; Fri, 09 Jun 2023 12:10:52 -0400 Received: by mail-ej1-x642.google.com with SMTP id a640c23a62f3a-977d0ee1736so293355766b.0 for ; Fri, 09 Jun 2023 09:10:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686327049; x=1688919049; h=content-transfer-encoding:to:subject:message-id:date:from :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=/ymPHrXnmSxmXcX0g+LMgDPkwKYvsxp3xFvCbzZSc6c=; b=AbzP2dM+zFP5KtMRbJ1Kr0sqErrULYo+krI73jUFH/Who85bN58JWl7x4inP2z4KyR J02XaoE4OVuVGjIf6SAfNsUFz6cnY/gP3oUTkM6TSB8k/qIPfCWcBy5YcJtS2S9S/g8d zz6ptg9z33aRBAhyc6lEBf38Q+ubB/qsbIZcejBex7g8ABp7wGpFNh7JFeyU07airkHS KwNwKTdpFaNM5EKa4flc94CrITj+ffFikVFJYfl+5wMbx7tf8sN2CW+ye6sg1hOKm7d0 u8N5hpk5sKc3o6gHKWMm87HINFDXnP4FPDxfMUheuf3a1OS/K5g/ERSdssgJwZpnNcyt yLhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686327049; x=1688919049; h=content-transfer-encoding:to:subject:message-id:date:from :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=/ymPHrXnmSxmXcX0g+LMgDPkwKYvsxp3xFvCbzZSc6c=; b=CbzJLrXK7+GhUIuD8A++MWJO6gR+YCt2t2zx18HRnD87cy6KEwjKhqZsJ/F5X7izjC EMP5/mZqaWW4n3T7BPkJniD/IMtxY4UCgFZkSPpR05XnP31LLKrvsdDJ/uG90oXedd9N H584QXG3HdJ7a8NwzzniEmHagjFxN/FTEaXBTit/sNXjv2d0trTieDKoLEtM2IMZl7IZ +AZdKE91Xtz7kUPpsTIwECEiOg8S0ESz9Tqn606cQ8ig1PfbZ5hBKTRFrLNkPFjCPXjy 2nFvzXse/LjJrSCwLy7hYM+DTRpssJycXuFi7K6lJOC9MezT6Hap/HogknsMIiecbBew 3F0g== X-Gm-Message-State: AC+VfDzAKV9WuK7T8nFyNaSvNzzBn1oxg5KGHPpJqPraXygpwvQErCM+ oXIGdzBBbYViFClsbwlVMm7GguwFrHqQYbIv9ZRfp8TNq1c7Z3CsnhM= X-Google-Smtp-Source: ACHHUZ7mjtkAQY2wn70LmAefpH1hUaTRR8g18EpZygq432rEo25hSOdGOq2aM/eCFwbXnu2Lc++5g9x0QA9BmdU52qQ= X-Received: by 2002:a17:907:3f82:b0:96a:48ed:5333 with SMTP id hr2-20020a1709073f8200b0096a48ed5333mr2254950ejc.50.1686327049144; Fri, 09 Jun 2023 09:10:49 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a05:6f02:113:b0:50:7bd2:921b with HTTP; Fri, 9 Jun 2023 09:10:48 -0700 (PDT) From: =?utf-8?b?6Lev6L6J?= Date: Fri, 9 Jun 2023 16:10:48 +0000 Message-ID: Received-SPF: pass client-ip=2a00:1450:4864:20::642; envelope-from=luhux76@gmail.com; helo=mail-ej1-x642.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list 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-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches From 2a502d86616c4c0d15263eaa363b3efdc71d3963 Mon Sep 17 00:00:00 2001 From: Lu Hui Date: Sat, 10 Jun 2023 00:07:02 +0800 Subject: [PATCH] gnu: riscv64-unknown-elf-toolchain: New Variable * gnu/packages/embedded.scm (riscv64-unknown-elf-toolchain): New Variable. --- gnu/packages/embedded.scm | 186 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) + (union-build (assoc-ref %outputs "out") + directories) + #t))))) + (home-page (package-home-page gcc-toolchain)) + (synopsis (package-synopsis gcc-toolchain)) + (description (package-description gcc-toolchain)) + (license (package-license gcc-toolchain)))) diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm index 215007dd31..701bf6bff8 100644 --- a/gnu/packages/embedded.scm +++ b/gnu/packages/embedded.scm @@ -12,6 +12,7 @@ ;;; Copyright © 2021 Morgan Smith ;;; Copyright © 2022 Mathieu Othacehe ;;; Copyright © 2022 Maxim Cournoyer +;;; Copyright © 2023 Lu Hui ;;; ;;; This file is part of GNU Guix. ;;; @@ -49,6 +50,7 @@ (define-module (gnu packages embedded) #:use-module (gnu packages boost) #:use-module (gnu packages check) #:use-module (gnu packages compression) + #:use-module (gnu packages commencement) #:use-module (gnu packages cross-base) #:use-module (gnu packages dejagnu) #:use-module (gnu packages flex) @@ -1745,3 +1747,187 @@ (define-public ts4900-utils @item tssilomon @end itemize") (license license:bsd-2)))) + +(define-public riscv64-unknown-elf-binutils + (let ((xbinutils (cross-binutils "riscv64-unknown-elf"))) + (package + (inherit xbinutils) + (name "riscv64-unknown-elf-binutils") + (arguments + `(,@(substitute-keyword-arguments (package-arguments xbinutils) + ((#:configure-flags flags) + `(cons "--enable-multilib" ,flags)))))))) + +(define-public riscv64-unknown-elf-gcc + (let ((xgcc (cross-gcc "riscv64-unknown-elf" + #:xbinutils riscv64-unknown-elf-binutils))) + (package + (inherit xgcc) + (name "riscv64-unknown-elf-gcc") + (arguments + (substitute-keyword-arguments (package-arguments xgcc) + ((#:phases phases) + #~(modify-phases #$phases + (add-after 'set-paths 'augment-CPLUS_INCLUDE_PATH + (lambda* (#:key inputs #:allow-other-keys) + (let ((gcc (assoc-ref inputs "gcc"))) + ;; Remove the default compiler from CPLUS_INCLUDE_PATH to + ;; prevent header conflict with the GCC from native-inputs. + (setenv "CPLUS_INCLUDE_PATH" + (string-join + (delete (string-append gcc "/include/c++") + (string-split (getenv "CPLUS_INCLUDE_PATH") + #\:)) + ":")) + (format #t + "environment variable `CPLUS_INCLUDE_PATH' changed to ~a~%" + (getenv "CPLUS_INCLUDE_PATH"))))) + (add-after 'unpack 'fix-genmultilib + (lambda _ + (substitute* "gcc/genmultilib" + (("#!/bin/sh") (string-append "#!" (which "sh")))))))) + ((#:configure-flags flags) + #~(append (list "--enable-multilib" + "--with-newlib" + "--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm" + "--enable-plugins" + "--disable-decimal-float" + "--disable-libffi" + "--disable-libgomp" + "--disable-libmudflap" + "--disable-libquadmath" + "--disable-libssp" + "--disable-libstdcxx-pch" + "--disable-nls" + "--disable-shared" + "--disable-threads" + "--disable-tls") + (delete "--disable-multilib" #$flags))))) + (native-search-paths + (list (search-path-specification + (variable "CROSS_C_INCLUDE_PATH") + (files '("riscv64-unknown-elf/include"))) + (search-path-specification + (variable "CROSS_CPLUS_INCLUDE_PATH") + (files '("riscv64-unknown-elf/include" + "riscv64-unknown-elf/include/c++" + "riscv64-unknown-elf/include/c++/riscv64-unknown-elf"))) + (search-path-specification + (variable "CROSS_LIBRARY_PATH") + (files '("riscv64-unknown-elf/lib")))))))) + +(define-public riscv64-unknown-elf-newlib + (let ((commit "e301a74a6f111df4553b50b813a589589d1708b1") + (revision "0")) + (package + (inherit newlib-arm-none-eabi) + (name "riscv64-unknown-elf-newlib") + (version (git-version "0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "http://sourceware.org/git/newlib-cygwin.git") + (commit commit))) + (file-name (git-file-name "newlib" commit)) + (sha256 + (base32 + "0ylibsavxqbwnl6yqxql3j2dzax843wahy93fncqlnmm3cfnz9i0")))) + (arguments + `(#:out-of-source? #t + #:configure-flags '("--target=riscv64-unknown-elf" + "--enable-multilib" + "--enable-newlib-io-long-long" + "--enable-newlib-io-c99-formats" + "--enable-newlib-register-fini" + "--enable-newlib-retargetable-locking" + "--disable-newlib-supplied-syscalls" + "--disable-nls"))) + (native-inputs + `(("xbinutils" ,(cross-binutils "riscv64-unknown-elf")) + ("xgcc" ,riscv64-unknown-elf-gcc) + ("texinfo" ,texinfo)))))) + +(define-public riscv64-unknown-elf-newlib-nano + (package (inherit riscv64-unknown-elf-newlib) + (name "riscv64-unknown-elf-newlib-nano") + (arguments + `(#:out-of-source? #t + #:configure-flags + '("--target=riscv64-unknown-elf" + "--enable-multilib" + "--disable-newlib-supplied-syscalls" + "--enable-newlib-reent-small" + "--disable-newlib-fvwrite-in-streamio" + "--disable-newlib-fseek-optimization" + "--disable-newlib-wide-orient" + "--enable-newlib-nano-malloc" + "--disable-newlib-unbuf-stream-opt" + "--enable-lite-exit" + "--enable-newlib-global-atexit" + "--enable-newlib-nano-formatted-io" + "--disable-nls") + #:phases + (modify-phases %standard-phases + (delete 'strip) + (add-after 'install 'hardlink-newlib + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + ;; The nano.specs file says that newlib-nano files should end + ;; in "_nano.a" instead of just ".a". Note that this applies + ;; to all the multilib folders too. + (for-each + (lambda (file) + (link + file + (string-append + ;; Strip ".a" off the end + (substring file 0 (- (string-length file) 2)) + ;; Add "_nano.a" onto the end + "_nano.a"))) + (find-files + out + "^(libc.a|libm.a|libg.a|libgloss.a|libsemihost.a|libnosys.a|librdimon.a|libstdc\\+\\+.a|libsupc\\+\\+.a)$")) + (mkdir-p (string-append out "/riscv64-unknown-elf/include/newlib-nano")) + (symlink + "../newlib.h" + (string-append out "/riscv64-unknown-elf/include/newlib-nano/newlib.h")) + #t)))))) + (synopsis "Newlib variant for small systems with limited memory"))) + +(define-public riscv64-unknown-elf-gdb + (package + (inherit gdb) + (name "riscv64-unknown-elf-gdb") + (arguments + `(#:configure-flags '("--target=riscv64-unknown-elf" + "--enable-multilib" + "--enable-interwork" + "--enable-languages=c,c++" + "--disable-nls") + ,@(package-arguments gdb))))) + +(define-public riscv64-unknown-elf-toolchain + (package + (name "riscv64-unknown-elf-toolchain") + (version (package-version riscv64-unknown-elf-gcc)) + (source #f) + (build-system trivial-build-system) + (propagated-inputs + (list riscv64-unknown-elf-binutils riscv64-unknown-elf-gcc + riscv64-unknown-elf-newlib riscv64-unknown-elf-newlib-nano)) + (arguments + '(#:modules ((guix build union)) + #:builder + (begin + (use-modules (ice-9 match) + (guix build union)) + (match %build-inputs + (((names . directories) ...)