* [bug#73118] [PATCH 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 @ 2024-09-08 7:42 Rutherther via Guix-patches via 2024-09-08 7:48 ` [bug#73118] [PATCH 1/5] Fix native-search-paths of arm-none-eabi toolchains Rutherther via Guix-patches via ` (5 more replies) 0 siblings, 6 replies; 13+ messages in thread From: Rutherther via Guix-patches via @ 2024-09-08 7:42 UTC (permalink / raw) To: 73118; +Cc: Rutherther Hello everyone, the aim of this patch series is to fix the arm ebedded toolchains that had a few issues, some of those have been reported already, but didn't get much attention. The issues: - CROSS_CPLUS_INCLUDE_PATH had C include first, C++ second. Since <cstdlib> uses include_next for stdlib.h, stdlib.h was not found - libstdc++ outputted files to /lib, but cross lib path has arm-none-eabi/lib inside of it. I think that the env var is correct, to allow using both cross toolchain and normal one in a profile. But then the path of libstdc++ is wrong - libstdc++ didn't provide nano variant. This meant that even with the nano toolchain it was impossible to use nano.specs with C++ - the 7-2018-q2-update toolchain didn't provide nano variant of newlib, its newlib-nano was just a copy of newlib with name modified Apart from that, I've also made 12.3.rel1 toolchain available. At first I wanted to try the latest, but I was having some issues with it, so decided to try one major version back, and that worked fine. The problem with the older toolchains is that I cannot get them to compile stuff like qmk or pico-sdk that rely on newer gcc features. There was one issue with this toolchain, namely that libstdc++ thought getentropy function was present, but getentropy is not present in the resulting library, only in headers. I've found it's an issue in gcc and foun a patch published on GitHub repo of Zephyr project. Unanswered questions: - Since the libraries go onto small embedded targets, should they be compiled with more optimization flags? This doesn't have to be solved as part of this issue. - How does the debug output work internally in Guix ecosystem? I had to remove the debug output after changing "--libdir" of the libstdc++, since the debug output was not produced. I am not sure if this is a blocker for merge. I think it would be good to refactor the embedded arm toolchains a bit in the future, to provide variants that would accept arbitrary gcc, newlib and libstdc++ and when compiling these, decide on the flags based on the major versions. (Something like the avr toolchain has, though they don't modify the flags, it's probably simpler for the avr toolchain in some ways) Then provide a few preselected toolchains with gcc, newlib, libstdc++ with the versions supported by developer.arm.com. I would be willing to do this work, but I didn't want to have it part of this issue, because I can imagine there will be some discussion about it, whereas I hope this issue could be merged without much discussion. PS: Sorry if you see this cover letter, and not the rest of the patches. I have an issue with sending e-mails from protonmail where they appear only after a few hours. So after I get id of this issue after few hours from sending this cover letter, there will be another few-hour wait for the patches to apper... :/ Rutherther (5): Fix native-search-paths of arm-none-eabi toolchains Fix lib directory of arm-none-eabi libstdc++ Add libstdc++-nano for arm-none-eabi Fix arm-none-eabi 7 newlib nano variant Introduce arm-none-eabi 12.3.rel1 toolchain gnu/local.mk | 1 + gnu/packages/embedded.scm | 223 +++++++++-- gnu/packages/patches/newlib-getentropy.patch | 380 +++++++++++++++++++ 3 files changed, 572 insertions(+), 32 deletions(-) create mode 100644 gnu/packages/patches/newlib-getentropy.patch base-commit: 8485eb6e96dc2f539bac0298e12b07392da1e49e -- 2.45.2 ^ permalink raw reply [flat|nested] 13+ messages in thread
* [bug#73118] [PATCH 1/5] Fix native-search-paths of arm-none-eabi toolchains 2024-09-08 7:42 [bug#73118] [PATCH 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Rutherther via Guix-patches via @ 2024-09-08 7:48 ` Rutherther via Guix-patches via 2024-09-08 7:49 ` [bug#73118] [PATCH 2/5] Fix lib directory of arm-none-eabi libstdc++ Rutherther via Guix-patches via ` (4 subsequent siblings) 5 siblings, 0 replies; 13+ messages in thread From: Rutherther via Guix-patches via @ 2024-09-08 7:48 UTC (permalink / raw) To: 73118; +Cc: Rutherther The toolchains CROSS_CPLUS_INCLUDE_PATH had C include directory first, and the C++ as second. Since <cstdlib> does #include_next <stdlib.h>, the toolchains could not build anything using <cstdlib>. The C include has to come later than C++ one. This is already fixed in xgcc search-path. --- gnu/packages/embedded.scm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm index bee65663b6..a7ba9ebe98 100644 --- a/gnu/packages/embedded.scm +++ b/gnu/packages/embedded.scm @@ -201,9 +201,9 @@ (define make-gcc-arm-none-eabi-4.9 (files '("arm-none-eabi/include"))) (search-path-specification (variable "CROSS_CPLUS_INCLUDE_PATH") - (files '("arm-none-eabi/include" - "arm-none-eabi/include/c++" - "arm-none-eabi/include/c++/arm-none-eabi"))) + (files '("arm-none-eabi/include/c++" + "arm-none-eabi/include/c++/arm-none-eabi" + "arm-none-eabi/include"))) (search-path-specification (variable "CROSS_LIBRARY_PATH") (files '("arm-none-eabi/lib"))))))))) @@ -423,9 +423,9 @@ (define make-gcc-arm-none-eabi-7-2018-q2-update (files '("arm-none-eabi/include"))) (search-path-specification (variable "CROSS_CPLUS_INCLUDE_PATH") - (files '("arm-none-eabi/include" - "arm-none-eabi/include/c++" - "arm-none-eabi/include/c++/arm-none-eabi"))) + (files '("arm-none-eabi/include/c++" + "arm-none-eabi/include/c++/arm-none-eabi" + "arm-none-eabi/include"))) (search-path-specification (variable "CROSS_LIBRARY_PATH") (files '("arm-none-eabi/lib"))))))))) -- 2.45.2 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [bug#73118] [PATCH 2/5] Fix lib directory of arm-none-eabi libstdc++ 2024-09-08 7:42 [bug#73118] [PATCH 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Rutherther via Guix-patches via 2024-09-08 7:48 ` [bug#73118] [PATCH 1/5] Fix native-search-paths of arm-none-eabi toolchains Rutherther via Guix-patches via @ 2024-09-08 7:49 ` Rutherther via Guix-patches via 2024-09-08 7:49 ` [bug#73118] [PATCH 3/5] Add libstdc++-nano for arm-none-eabi Rutherther via Guix-patches via ` (3 subsequent siblings) 5 siblings, 0 replies; 13+ messages in thread From: Rutherther via Guix-patches via @ 2024-09-08 7:49 UTC (permalink / raw) To: 73118; +Cc: Rutherther The libstdc++ made for arm-none-eabi puts the contents into "lib" folder, but that's unexpected when the resulting toolchain is a cross toolchain. The folder should be "arm-none-eabi/lib" --- gnu/packages/embedded.scm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm index a7ba9ebe98..59ffd9a661 100644 --- a/gnu/packages/embedded.scm +++ b/gnu/packages/embedded.scm @@ -481,6 +481,8 @@ (define make-libstdc++-arm-none-eabi (package (inherit libstdc++) (name "libstdc++-arm-none-eabi") + ; TODO When --libdir is specified, debug output is not produced. + (outputs '("out")) (arguments (substitute-keyword-arguments (package-arguments libstdc++) ((#:configure-flags _) @@ -493,6 +495,9 @@ (define make-libstdc++-arm-none-eabi "--disable-tls" "--disable-plugin" "--with-newlib" + ,(string-append "--libdir=" + (assoc-ref %outputs "out") + "/arm-none-eabi/lib") ,(string-append "--with-gxx-include-dir=" (assoc-ref %outputs "out") "/arm-none-eabi/include/c++"))))) -- 2.45.2 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [bug#73118] [PATCH 3/5] Add libstdc++-nano for arm-none-eabi 2024-09-08 7:42 [bug#73118] [PATCH 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Rutherther via Guix-patches via 2024-09-08 7:48 ` [bug#73118] [PATCH 1/5] Fix native-search-paths of arm-none-eabi toolchains Rutherther via Guix-patches via 2024-09-08 7:49 ` [bug#73118] [PATCH 2/5] Fix lib directory of arm-none-eabi libstdc++ Rutherther via Guix-patches via @ 2024-09-08 7:49 ` Rutherther via Guix-patches via 2024-09-08 7:49 ` [bug#73118] [PATCH 4/5] Fix arm-none-eabi 7 newlib nano variant Rutherther via Guix-patches via ` (2 subsequent siblings) 5 siblings, 0 replies; 13+ messages in thread From: Rutherther via Guix-patches via @ 2024-09-08 7:49 UTC (permalink / raw) To: 73118; +Cc: Rutherther The arm-none-eabi nano toolchain had same libstdc++ as the non-nano variant. The libstdc++ should be compiled with -fno-exceptions to make a nano toolchain. Additionally, since the "_nano.a" variants were not present, it was impossible to compile C++ programs with libstdc++ using --specs=nano.specs, since libstdc++_nano.a was not found. --- gnu/packages/embedded.scm | 76 ++++++++++++++++++++++++++++++++------- 1 file changed, 64 insertions(+), 12 deletions(-) diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm index 59ffd9a661..1ea794724c 100644 --- a/gnu/packages/embedded.scm +++ b/gnu/packages/embedded.scm @@ -486,7 +486,14 @@ (define make-libstdc++-arm-none-eabi (arguments (substitute-keyword-arguments (package-arguments libstdc++) ((#:configure-flags _) - ``("--target=arm-none-eabi" + ``("CFLAGS=-ffunction-sections -fdata-sections" + "CXXFLAGS=-ffunction-sections -fdata-sections" + ; This is more of a hack. This option doesn't really seem + ; to change what subdir is used eventually, but without it there is + ; error: Link tests are not allowed after GCC_NO_EXECUTABLES with + ; The 12.3 toolchain + "--with-target-subdir=\".\"" + "--target=arm-none-eabi" "--host=arm-none-eabi" "--disable-libstdcxx-pch" "--enable-multilib" @@ -506,21 +513,65 @@ (define make-libstdc++-arm-none-eabi ("xgcc" ,xgcc) ,@(package-native-inputs libstdc++))))))) +(define make-libstdc++-nano-arm-none-eabi + (mlambda (xgcc newlib-nano) + (let ((base (make-libstdc++-arm-none-eabi xgcc newlib-nano))) + (package + (inherit base) + (name "libstdc++-nano-arm-none-eabi") + (arguments (substitute-keyword-arguments (package-arguments base) + ((#:configure-flags flags) + #~(cons* "CFLAGS=-ffunction-sections -fdata-sections -fno-exceptions" + "CXXFLAGS=-ffunction-sections -fdata-sections -fno-exceptions" + (filter + (lambda (flag) + (not (or (string-prefix? "CFLAGS=" flag) + (string-prefix? "CXXFLAGS=" flag)))) + #$flags))) + ((#:phases phases) + #~(modify-phases #$phases + (add-after 'install 'hardlink-libstdc++ + ;; XXX: Most arm toolchains offer both *.a and *_nano.a as + ;; newlib and newlib-nano respectively. The headers are + ;; usually arm-none-eabi/include/newlib.h for newlib and + ;; arm-none-eabi/include/newlib-nano/newlib.h for newlib-nano. + ;; We have two different toolchain packages for each which + ;; works but is a little strange. + (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 "^(libstdc\\+\\+.a|libsupc\\+\\+.a)$"))))))))))))) + (define make-arm-none-eabi-toolchain (mlambda (xgcc newlib) "Produce a cross-compiler toolchain package with the compiler XGCC and the C library variant NEWLIB." - (let ((newlib-with-xgcc - (package - (inherit newlib) - (native-inputs - (alist-replace "xgcc" (list xgcc) - (package-native-inputs newlib)))))) + (let* ((nano? (string=? (package-name newlib) + "newlib-nano")) + (newlib-with-xgcc + (package + (inherit newlib) + (native-inputs + (alist-replace "xgcc" (list xgcc) + (package-native-inputs newlib))))) + (libstdc++ + (if nano? + (make-libstdc++-nano-arm-none-eabi xgcc newlib-with-xgcc) + (make-libstdc++-arm-none-eabi xgcc newlib-with-xgcc)))) (package (name (string-append "arm-none-eabi" - (if (string=? (package-name newlib-with-xgcc) - "newlib-nano") - "-nano" "") + (if nano? "-nano" "") "-toolchain")) (version (package-version xgcc)) (source #f) @@ -537,9 +588,10 @@ (define make-arm-none-eabi-toolchain directories)))))) (propagated-inputs `(("binutils" ,(cross-binutils "arm-none-eabi")) - ("libstdc++" ,(make-libstdc++-arm-none-eabi xgcc newlib-with-xgcc)) + ("libstdc++" ,libstdc++) ("gcc" ,xgcc) - ("newlib" ,newlib-with-xgcc))) + ("newlib" ,newlib-with-xgcc) + )) (synopsis "Complete GCC tool chain for ARM bare metal development") (description "This package provides a complete GCC tool chain for ARM bare metal development. This includes the GCC arm-none-eabi cross compiler -- 2.45.2 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [bug#73118] [PATCH 4/5] Fix arm-none-eabi 7 newlib nano variant 2024-09-08 7:42 [bug#73118] [PATCH 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Rutherther via Guix-patches via ` (2 preceding siblings ...) 2024-09-08 7:49 ` [bug#73118] [PATCH 3/5] Add libstdc++-nano for arm-none-eabi Rutherther via Guix-patches via @ 2024-09-08 7:49 ` Rutherther via Guix-patches via 2024-09-08 7:49 ` [bug#73118] [PATCH 5/5] Introduce arm-none-eabi 12.3.rel1 toolchain Rutherther via Guix-patches via 2024-09-13 11:41 ` [bug#73118] [PATCH v2 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Rutherther via Guix-patches via 5 siblings, 0 replies; 13+ messages in thread From: Rutherther via Guix-patches via @ 2024-09-08 7:49 UTC (permalink / raw) To: 73118; +Cc: Rutherther The nano variant was not nano. It was just a copy of the original one with different name. This meant there were no _nano.a files present at all. --- gnu/packages/embedded.scm | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm index 1ea794724c..4093c10916 100644 --- a/gnu/packages/embedded.scm +++ b/gnu/packages/embedded.scm @@ -247,10 +247,7 @@ (define make-newlib-arm-none-eabi (modify-phases %standard-phases (add-after 'unpack 'fix-references-to-/bin/sh (lambda _ - (substitute* '("libgloss/arm/cpu-init/Makefile.in" - "libgloss/arm/Makefile.in" - "libgloss/libnosys/Makefile.in" - "libgloss/Makefile.in") + (substitute* (find-files "libgloss" "^Makefile\\.in$") (("/bin/sh") (which "sh"))) #t))))) (native-inputs @@ -430,12 +427,11 @@ (define make-gcc-arm-none-eabi-7-2018-q2-update (variable "CROSS_LIBRARY_PATH") (files '("arm-none-eabi/lib"))))))))) -(define make-newlib-arm-none-eabi-7-2018-q2-update +(define make-base-newlib-arm-none-eabi-7-2018-q2-update ;; This is the same commit as used for the 7-2018-q2-update release ;; according to the release.txt. - (mlambda () - (let ((base (make-newlib-arm-none-eabi)) - (commit "3ccfb407af410ba7e54ea0da11ae1e40b554a6f4") + (mlambda (base) + (let ((commit "3ccfb407af410ba7e54ea0da11ae1e40b554a6f4") (revision "0")) (package (inherit base) @@ -464,15 +460,13 @@ (define make-newlib-arm-none-eabi-7-2018-q2-update ("xgcc" ,(make-gcc-arm-none-eabi-7-2018-q2-update)) ("texinfo" ,texinfo))))))) -(define-public make-newlib-nano-arm-none-eabi-7-2018-q2-update +(define make-newlib-arm-none-eabi-7-2018-q2-update (mlambda () - (let ((base (make-newlib-arm-none-eabi-7-2018-q2-update))) - (package - (inherit base) - (name "newlib-nano") - (arguments - (package-arguments base)) - (synopsis "Newlib variant for small systems with limited memory"))))) + (make-base-newlib-arm-none-eabi-7-2018-q2-update (make-newlib-arm-none-eabi)))) + +(define make-newlib-nano-arm-none-eabi-7-2018-q2-update + (mlambda () + (make-base-newlib-arm-none-eabi-7-2018-q2-update (make-newlib-nano-arm-none-eabi)))) \f (define make-libstdc++-arm-none-eabi -- 2.45.2 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [bug#73118] [PATCH 5/5] Introduce arm-none-eabi 12.3.rel1 toolchain 2024-09-08 7:42 [bug#73118] [PATCH 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Rutherther via Guix-patches via ` (3 preceding siblings ...) 2024-09-08 7:49 ` [bug#73118] [PATCH 4/5] Fix arm-none-eabi 7 newlib nano variant Rutherther via Guix-patches via @ 2024-09-08 7:49 ` Rutherther via Guix-patches via 2024-09-13 11:41 ` [bug#73118] [PATCH v2 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Rutherther via Guix-patches via 5 siblings, 0 replies; 13+ messages in thread From: Rutherther via Guix-patches via @ 2024-09-08 7:49 UTC (permalink / raw) To: 73118; +Cc: Rutherther The arguments for this toolchain are taken mostly out of here https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads/12-3-rel1 Change-Id: I9921ab06bc4f2ce59afedb48775017b17e0fd144 --- gnu/local.mk | 1 + gnu/packages/embedded.scm | 110 +++++- gnu/packages/patches/newlib-getentropy.patch | 380 +++++++++++++++++++ 3 files changed, 490 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/newlib-getentropy.patch diff --git a/gnu/local.mk b/gnu/local.mk index cf42e2b6da..71db5ab2ca 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1800,6 +1800,7 @@ dist_patch_DATA = \ %D%/packages/patches/ngircd-handle-zombies.patch \ %D%/packages/patches/network-manager-plugin-path.patch \ %D%/packages/patches/network-manager-meson.patch \ + %D%/packages/patches/newlib-getentropy.patch \ %D%/packages/patches/nginx-socket-cloexec.patch \ %D%/packages/patches/nickle-man-release-date.patch \ %D%/packages/patches/nnpack-system-libraries.patch \ diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm index 4093c10916..677bf3f797 100644 --- a/gnu/packages/embedded.scm +++ b/gnu/packages/embedded.scm @@ -78,22 +78,27 @@ (define-module (gnu packages embedded) #:export (make-gcc-arm-none-eabi-4.9 make-gcc-arm-none-eabi-6 make-gcc-arm-none-eabi-7-2018-q2-update + make-gcc-arm-none-eabi-12.3.rel1 make-gcc-vc4 make-newlib-arm-none-eabi make-newlib-arm-none-eabi-7-2018-q2-update + make-newlib-arm-none-eabi-12.3.rel1 make-newlib-nano-arm-none-eabi make-newlib-nano-arm-none-eabi-7-2018-q2-update + make-newlib-nano-arm-none-eabi-12.3.rel1 make-arm-none-eabi-toolchain-4.9 make-arm-none-eabi-toolchain-6 make-arm-none-eabi-toolchain-7-2018-q2-update + make-arm-none-eabi-toolchain-12.3.rel1 make-arm-none-eabi-nano-toolchain-4.9 make-arm-none-eabi-nano-toolchain-6 make-arm-none-eabi-nano-toolchain-7-2018-q2-update + make-arm-none-eabi-nano-toolchain-12.3.rel1 make-gdb-arm-none-eabi @@ -468,12 +473,103 @@ (define make-newlib-nano-arm-none-eabi-7-2018-q2-update (mlambda () (make-base-newlib-arm-none-eabi-7-2018-q2-update (make-newlib-nano-arm-none-eabi)))) +\f +;;; The following definitions are for the "12.3.rel1" variant of the +;;; ARM cross toolchain as offered on https://developer.arm.com +(define-public make-gcc-arm-none-eabi-12.3.rel1 + (mlambda () + (let ((base (make-gcc-arm-none-eabi-7-2018-q2-update)) + (xgcc-base (cross-gcc "arm-none-eabi" + #:xgcc gcc-12 + #:xbinutils (cross-binutils "arm-none-eabi")))) + (package + (inherit base) + (version "12.3.rel1") + (source + (origin + (inherit (package-source xgcc-base)) + (method git-fetch) + (uri (git-reference + (url "git://gcc.gnu.org/git/gcc.git") + (commit "0f54a73b998b72f7c8452a63730ec3b16fc47854"))) + (sha256 + (base32 "0r6q0m3d8g3k3rkmnqjw8aw5fcnsrmywf4ispdkxmk1al3whk1vk")))) + (arguments + (substitute-keyword-arguments (package-arguments base) + ((#:phases phases) + #~(modify-phases #$phases + (replace 'expand-version-string + (lambda _ + (make-file-writable "gcc/DEV-PHASE") + (with-output-to-file "gcc/DEV-PHASE" + (lambda () + (display "12.3.rel1"))))))) + ((#:configure-flags flags) + #~(cons* "--with-multilib-list=aprofile,rmprofile" + "--with-headers=yes" + "--enable-checking=release" + "--with-gnu-as" + "--with-gnu-ld" + (filter + (lambda (flag) + (not (member flag + '("--with-multilib-list=rmprofile" + "--enable-plugins" + "--disable-libffi")))) + #$flags))))))))) + +(define make-base-newlib-arm-none-eabi-12.3.rel1 + (mlambda (original-base) + (let ((base (make-base-newlib-arm-none-eabi-7-2018-q2-update original-base)) + (commit "4c7d0dfec5793cbf5cf3930b91f930479126d8ce") + (revision "0")) + (package + (inherit base) + (version (git-version "4.3.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "http://sourceware.org/git/newlib-cygwin.git") + (commit commit))) + (sha256 + (base32 + "0drs9v8avh4y2h5bs0ixjn9x662jzkkikx8z034wgl41dxmn6786")))) + (arguments (substitute-keyword-arguments (package-arguments base) + ((#:configure-flags flags) + #~(cons* "--enable-newlib-mb" + "--enable-newlib-reent-check-verify" + "--enable-newlib-register-fini" + #$flags)))))))) + +(define make-newlib-arm-none-eabi-12.3.rel1 + (mlambda () + (make-base-newlib-arm-none-eabi-12.3.rel1 (make-newlib-arm-none-eabi)))) + +(define make-newlib-nano-arm-none-eabi-12.3.rel1 + (mlambda () + (make-base-newlib-arm-none-eabi-12.3.rel1 (make-newlib-nano-arm-none-eabi)))) + \f (define make-libstdc++-arm-none-eabi (mlambda (xgcc newlib) - (let ((libstdc++ (make-libstdc++ xgcc))) + (let* ((libstdc++ (make-libstdc++ xgcc)) + (src (package-source libstdc++))) (package (inherit libstdc++) + (source + (origin + (inherit src) + (patches (append + ; libstdc++ cannot be linked with since the configure phase + ; cannot detect properly the presence of getentropy function. + ; The function is inside of a header, but it's not present in the resulting + ; newlib. configure will conclude getentropy is present, + ; random will use getentropy, and any linking with random will fail. + (if (version>=? (package-version xgcc) "12.0") + (search-patches "newlib-getentropy.patch") + '()) + (origin-patches src))))) (name "libstdc++-arm-none-eabi") ; TODO When --libdir is specified, debug output is not produced. (outputs '("out")) @@ -626,6 +722,18 @@ (define make-arm-none-eabi-nano-toolchain-7-2018-q2-update (make-gcc-arm-none-eabi-7-2018-q2-update) (make-newlib-nano-arm-none-eabi-7-2018-q2-update)))) +(define make-arm-none-eabi-toolchain-12.3.rel1 + (mlambda () + (make-arm-none-eabi-toolchain + (make-gcc-arm-none-eabi-12.3.rel1) + (make-newlib-arm-none-eabi-12.3.rel1)))) + +(define make-arm-none-eabi-nano-toolchain-12.3.rel1 + (mlambda () + (make-arm-none-eabi-toolchain + (make-gcc-arm-none-eabi-12.3.rel1) + (make-newlib-nano-arm-none-eabi-12.3.rel1)))) + (define make-gdb-arm-none-eabi (mlambda () (package diff --git a/gnu/packages/patches/newlib-getentropy.patch b/gnu/packages/patches/newlib-getentropy.patch new file mode 100644 index 0000000000..a4137d81f0 --- /dev/null +++ b/gnu/packages/patches/newlib-getentropy.patch @@ -0,0 +1,380 @@ +Patch-Source: https://github.com/zephyrproject-rtos/gcc/pull/8 + +From 55addb0c0c5ff5e0aab85574aa26abf175af85c8 Mon Sep 17 00:00:00 2001 +From: Stephanos Ioannidis <root@stephanos.io> +Date: Mon, 25 Jul 2022 23:10:41 +0900 +Subject: [PATCH] libstdc++: Do not check getentropy and arc4random for cross builds + +The "getentropy" and "arc4random" check may not yield a correct result +for the cross compile builds because linking is often not available for +them and the C library headers (notoriously, newlib) may still declare +these function prototypes even if they are not actually part of the +final library -- for this reason, this commit disables the "getentropy" +and "arc4random" checks for non-native builds. + +This effectively prevents the std::random_device from making use of +these functions when `--with-newlib` is specified, which is indeed a +correct behaviour because the newlib does not provide a default stub +for the "getentropy" function (also note that the newlib "arc4random" +implementation internally calls the missing "getentropy" function). + +For other C libraries, the `GLIBCXX_CROSSCONFIG` function may hard-code +the availability of these functions by manually defining +`HAVE_GETENTROPY` and `HAVE_ARC4RANDOM`, or by calling the +`GLIBCXX_CHECK_GETENTROPY` and `GLIBCXX_CHECK_ARC4RANDOM` functions. + +libstdc++-v3: + * configure.ac: Relocate GLIBCXX_CHECK_GETENTROPY and + GLIBCXX_CHECK_ARC4RANDOM + * configure: Regenerate. + +Signed-off-by: Stephanos Ioannidis <root@stephanos.io> +--- + libstdc++-v3/configure | 300 +++++++++++++++++++------------------- + libstdc++-v3/configure.ac | 8 +- + 2 files changed, 154 insertions(+), 154 deletions(-) + +diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure +index 0ce74e8202443..5d43b56b03ffa 100755 +--- a/libstdc++-v3/configure ++++ b/libstdc++-v3/configure +@@ -28088,6 +28088,156 @@ $as_echo "#define _GLIBCXX_USE_RANDOM_TR1 1" >>confdefs.h + + + ++ # Check for other random number APIs ++ ++ ++ ++ ac_ext=cpp ++ac_cpp='$CXXCPP $CPPFLAGS' ++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getentropy" >&5 ++$as_echo_n "checking for getentropy... " >&6; } ++if ${glibcxx_cv_getentropy+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ++ if test x$gcc_no_link = xyes; then ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include <unistd.h> ++int ++main () ++{ ++unsigned i; ++ ::getentropy(&i, sizeof(i)); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_cxx_try_compile "$LINENO"; then : ++ glibcxx_cv_getentropy=yes ++else ++ glibcxx_cv_getentropy=no ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++else ++ if test x$gcc_no_link = xyes; then ++ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 ++fi ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include <unistd.h> ++int ++main () ++{ ++unsigned i; ++ ::getentropy(&i, sizeof(i)); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_cxx_try_link "$LINENO"; then : ++ glibcxx_cv_getentropy=yes ++else ++ glibcxx_cv_getentropy=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++fi ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_getentropy" >&5 ++$as_echo "$glibcxx_cv_getentropy" >&6; } ++ ++ if test $glibcxx_cv_getentropy = yes; then ++ ++$as_echo "#define HAVE_GETENTROPY 1" >>confdefs.h ++ ++ fi ++ ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ ++ ++ ++ ++ ac_ext=cpp ++ac_cpp='$CXXCPP $CPPFLAGS' ++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for arc4random" >&5 ++$as_echo_n "checking for arc4random... " >&6; } ++if ${glibcxx_cv_arc4random+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ++ if test x$gcc_no_link = xyes; then ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include <stdlib.h> ++int ++main () ++{ ++unsigned i = ::arc4random(); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_cxx_try_compile "$LINENO"; then : ++ glibcxx_cv_arc4random=yes ++else ++ glibcxx_cv_arc4random=no ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++else ++ if test x$gcc_no_link = xyes; then ++ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 ++fi ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include <stdlib.h> ++int ++main () ++{ ++unsigned i = ::arc4random(); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_cxx_try_link "$LINENO"; then : ++ glibcxx_cv_arc4random=yes ++else ++ glibcxx_cv_arc4random=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++fi ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_arc4random" >&5 ++$as_echo "$glibcxx_cv_arc4random" >&6; } ++ ++ if test $glibcxx_cv_arc4random = yes; then ++ ++$as_echo "#define HAVE_ARC4RANDOM 1" >>confdefs.h ++ ++ fi ++ ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ ++ + # For TLS support. + + +@@ -75519,156 +75669,6 @@ $as_echo "#define _GLIBCXX_X86_RDSEED 1" >>confdefs.h + fi + + +-# Check for other random number APIs +- +- +- +- ac_ext=cpp +-ac_cpp='$CXXCPP $CPPFLAGS' +-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +- +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getentropy" >&5 +-$as_echo_n "checking for getentropy... " >&6; } +-if ${glibcxx_cv_getentropy+:} false; then : +- $as_echo_n "(cached) " >&6 +-else +- +- if test x$gcc_no_link = xyes; then +- cat confdefs.h - <<_ACEOF >conftest.$ac_ext +-/* end confdefs.h. */ +-#include <unistd.h> +-int +-main () +-{ +-unsigned i; +- ::getentropy(&i, sizeof(i)); +- ; +- return 0; +-} +-_ACEOF +-if ac_fn_cxx_try_compile "$LINENO"; then : +- glibcxx_cv_getentropy=yes +-else +- glibcxx_cv_getentropy=no +-fi +-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +-else +- if test x$gcc_no_link = xyes; then +- as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 +-fi +-cat confdefs.h - <<_ACEOF >conftest.$ac_ext +-/* end confdefs.h. */ +-#include <unistd.h> +-int +-main () +-{ +-unsigned i; +- ::getentropy(&i, sizeof(i)); +- ; +- return 0; +-} +-_ACEOF +-if ac_fn_cxx_try_link "$LINENO"; then : +- glibcxx_cv_getentropy=yes +-else +- glibcxx_cv_getentropy=no +-fi +-rm -f core conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-fi +- +-fi +-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_getentropy" >&5 +-$as_echo "$glibcxx_cv_getentropy" >&6; } +- +- if test $glibcxx_cv_getentropy = yes; then +- +-$as_echo "#define HAVE_GETENTROPY 1" >>confdefs.h +- +- fi +- ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +- +- +- +- +- +- ac_ext=cpp +-ac_cpp='$CXXCPP $CPPFLAGS' +-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +- +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for arc4random" >&5 +-$as_echo_n "checking for arc4random... " >&6; } +-if ${glibcxx_cv_arc4random+:} false; then : +- $as_echo_n "(cached) " >&6 +-else +- +- if test x$gcc_no_link = xyes; then +- cat confdefs.h - <<_ACEOF >conftest.$ac_ext +-/* end confdefs.h. */ +-#include <stdlib.h> +-int +-main () +-{ +-unsigned i = ::arc4random(); +- ; +- return 0; +-} +-_ACEOF +-if ac_fn_cxx_try_compile "$LINENO"; then : +- glibcxx_cv_arc4random=yes +-else +- glibcxx_cv_arc4random=no +-fi +-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +-else +- if test x$gcc_no_link = xyes; then +- as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 +-fi +-cat confdefs.h - <<_ACEOF >conftest.$ac_ext +-/* end confdefs.h. */ +-#include <stdlib.h> +-int +-main () +-{ +-unsigned i = ::arc4random(); +- ; +- return 0; +-} +-_ACEOF +-if ac_fn_cxx_try_link "$LINENO"; then : +- glibcxx_cv_arc4random=yes +-else +- glibcxx_cv_arc4random=no +-fi +-rm -f core conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-fi +- +-fi +-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_arc4random" >&5 +-$as_echo "$glibcxx_cv_arc4random" >&6; } +- +- if test $glibcxx_cv_arc4random = yes; then +- +-$as_echo "#define HAVE_ARC4RANDOM 1" >>confdefs.h +- +- fi +- ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +- +- +- + # This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE. + + # Do checks for resource limit functions. +diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac +index e59bcdb29441f..05cdfcddbc43b 100644 +--- a/libstdc++-v3/configure.ac ++++ b/libstdc++-v3/configure.ac +@@ -269,6 +269,10 @@ if $GLIBCXX_IS_NATIVE; then + # For /dev/random and /dev/urandom for std::random_device. + GLIBCXX_CHECK_DEV_RANDOM + ++ # Check for other random number APIs ++ GLIBCXX_CHECK_GETENTROPY ++ GLIBCXX_CHECK_ARC4RANDOM ++ + # For TLS support. + GCC_CHECK_TLS + +@@ -474,10 +478,6 @@ GLIBCXX_CHECK_X86_RDRAND + # Check if assembler supports rdseed opcode. + GLIBCXX_CHECK_X86_RDSEED + +-# Check for other random number APIs +-GLIBCXX_CHECK_GETENTROPY +-GLIBCXX_CHECK_ARC4RANDOM +- + # This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE. + GLIBCXX_CONFIGURE_TESTSUITE + -- 2.45.2 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [bug#73118] [PATCH v2 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 2024-09-08 7:42 [bug#73118] [PATCH 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Rutherther via Guix-patches via ` (4 preceding siblings ...) 2024-09-08 7:49 ` [bug#73118] [PATCH 5/5] Introduce arm-none-eabi 12.3.rel1 toolchain Rutherther via Guix-patches via @ 2024-09-13 11:41 ` Rutherther via Guix-patches via 2024-09-13 11:41 ` [bug#73118] [PATCH v2 1/5] gnu: make-gcc-arm-none-eabi: reorder C++ native search paths Rutherther via Guix-patches via ` (5 more replies) 5 siblings, 6 replies; 13+ messages in thread From: Rutherther via Guix-patches via @ 2024-09-13 11:41 UTC (permalink / raw) To: 73118; +Cc: Rutherther Hello all, I've poked around the questions I raised last time. The debugging symbols are quite easy. The only thing missing was that I did not point strip-directories to the correct directory with the libraries. I figured out the make flags I introduced did not really take any effect as they were in the #:configure-flags and not in #:make-flags. So I fixed that as well. I also did another contribution where I learned a bit about chane log format, and that it should be used with Guix. So I changed the commits to better reflect this format. Sorry if it's still wrong, I have hard time wrapping my head around the exact rules of it. Regards, Rutherther Rutherther (5): gnu: make-gcc-arm-none-eabi: reorder C++ native search paths gnu: make-libstdc++-arm-none-eabi: output libstdc++ to arm-none-eabi. gnu: make-libstdc++-arm-none-eabi: add nano variant gnu: newlib arm-none-eabi-7-2018-q2-update: Add proper newlib-nano variant. gnu: arm-none-eabi toolchain 12.3.rel1 gnu/local.mk | 1 + gnu/packages/embedded.scm | 223 +++++++++-- gnu/packages/patches/newlib-getentropy.patch | 380 +++++++++++++++++++ 3 files changed, 572 insertions(+), 32 deletions(-) create mode 100644 gnu/packages/patches/newlib-getentropy.patch base-commit: f977cb2b609f7122db2cf026cac5ab9d6d44a206 -- 2.46.0 ^ permalink raw reply [flat|nested] 13+ messages in thread
* [bug#73118] [PATCH v2 1/5] gnu: make-gcc-arm-none-eabi: reorder C++ native search paths 2024-09-13 11:41 ` [bug#73118] [PATCH v2 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Rutherther via Guix-patches via @ 2024-09-13 11:41 ` Rutherther via Guix-patches via 2024-09-13 11:42 ` [bug#73118] [PATCH v2 2/5] gnu: make-libstdc++-arm-none-eabi: output libstdc++ to arm-none-eabi Rutherther via Guix-patches via ` (4 subsequent siblings) 5 siblings, 0 replies; 13+ messages in thread From: Rutherther via Guix-patches via @ 2024-09-13 11:41 UTC (permalink / raw) To: 73118; +Cc: Rutherther This fixes native-search-paths of arm-none-eabi toolchains The toolchains CROSS_CPLUS_INCLUDE_PATH had C include directory first, and the C++ as second. Since <cstdlib> does #include_next <stdlib.h>, the toolchains could not build anything using <cstdlib>. The C include has to come later than C++ one. This is already fixed in xgcc search-path. * gnu/packages/embedded.scm (make-gcc-arm-none-eabi-4.9, make-gcc-arm-none-eabi-7-2018-q2-update): [native-search-paths]: Put C include path as last. Change-Id: Ib7e36e57e510ac87960375cad40ff0b9e749101c --- gnu/packages/embedded.scm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm index bee65663b6..a7ba9ebe98 100644 --- a/gnu/packages/embedded.scm +++ b/gnu/packages/embedded.scm @@ -201,9 +201,9 @@ (define make-gcc-arm-none-eabi-4.9 (files '("arm-none-eabi/include"))) (search-path-specification (variable "CROSS_CPLUS_INCLUDE_PATH") - (files '("arm-none-eabi/include" - "arm-none-eabi/include/c++" - "arm-none-eabi/include/c++/arm-none-eabi"))) + (files '("arm-none-eabi/include/c++" + "arm-none-eabi/include/c++/arm-none-eabi" + "arm-none-eabi/include"))) (search-path-specification (variable "CROSS_LIBRARY_PATH") (files '("arm-none-eabi/lib"))))))))) @@ -423,9 +423,9 @@ (define make-gcc-arm-none-eabi-7-2018-q2-update (files '("arm-none-eabi/include"))) (search-path-specification (variable "CROSS_CPLUS_INCLUDE_PATH") - (files '("arm-none-eabi/include" - "arm-none-eabi/include/c++" - "arm-none-eabi/include/c++/arm-none-eabi"))) + (files '("arm-none-eabi/include/c++" + "arm-none-eabi/include/c++/arm-none-eabi" + "arm-none-eabi/include"))) (search-path-specification (variable "CROSS_LIBRARY_PATH") (files '("arm-none-eabi/lib"))))))))) -- 2.46.0 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [bug#73118] [PATCH v2 2/5] gnu: make-libstdc++-arm-none-eabi: output libstdc++ to arm-none-eabi. 2024-09-13 11:41 ` [bug#73118] [PATCH v2 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Rutherther via Guix-patches via 2024-09-13 11:41 ` [bug#73118] [PATCH v2 1/5] gnu: make-gcc-arm-none-eabi: reorder C++ native search paths Rutherther via Guix-patches via @ 2024-09-13 11:42 ` Rutherther via Guix-patches via 2024-09-13 11:42 ` [bug#73118] [PATCH v2 3/5] gnu: make-libstdc++-arm-none-eabi: add nano variant Rutherther via Guix-patches via ` (3 subsequent siblings) 5 siblings, 0 replies; 13+ messages in thread From: Rutherther via Guix-patches via @ 2024-09-13 11:42 UTC (permalink / raw) To: 73118; +Cc: Rutherther The libstdc++ made for arm-none-eabi puts the contents into "lib" folder, but that's unexpected when the resulting toolchain is a cross toolchain. The folder should be "arm-none-eabi/lib", that's the path added to CROSS_C_LIBRARY_PATH * gnu/packages/embedded.scm (make-libstdc++-arm-none-eabi): [arguments]<#:configure-flags>: Point --libdir to arm-none-eabi/lib. [arguments]<#:strip-directories>: Set to arm-none-eabi/lib. Change-Id: Ia8b867a1c6ebeedeae9564e0a6a1e0401b35bd5b --- gnu/packages/embedded.scm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm index a7ba9ebe98..2a482f7e52 100644 --- a/gnu/packages/embedded.scm +++ b/gnu/packages/embedded.scm @@ -493,9 +493,14 @@ (define make-libstdc++-arm-none-eabi "--disable-tls" "--disable-plugin" "--with-newlib" + ,(string-append "--libdir=" + (assoc-ref %outputs "out") + "/arm-none-eabi/lib") ,(string-append "--with-gxx-include-dir=" (assoc-ref %outputs "out") - "/arm-none-eabi/include/c++"))))) + "/arm-none-eabi/include/c++"))) + ((#:strip-directories _ #f) + ''("arm-none-eabi/lib")))) (native-inputs `(("newlib" ,newlib) ("xgcc" ,xgcc) -- 2.46.0 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [bug#73118] [PATCH v2 3/5] gnu: make-libstdc++-arm-none-eabi: add nano variant 2024-09-13 11:41 ` [bug#73118] [PATCH v2 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Rutherther via Guix-patches via 2024-09-13 11:41 ` [bug#73118] [PATCH v2 1/5] gnu: make-gcc-arm-none-eabi: reorder C++ native search paths Rutherther via Guix-patches via 2024-09-13 11:42 ` [bug#73118] [PATCH v2 2/5] gnu: make-libstdc++-arm-none-eabi: output libstdc++ to arm-none-eabi Rutherther via Guix-patches via @ 2024-09-13 11:42 ` Rutherther via Guix-patches via 2024-09-13 11:42 ` [bug#73118] [PATCH v2 4/5] gnu: newlib arm-none-eabi-7-2018-q2-update: Add proper newlib-nano variant Rutherther via Guix-patches via ` (2 subsequent siblings) 5 siblings, 0 replies; 13+ messages in thread From: Rutherther via Guix-patches via @ 2024-09-13 11:42 UTC (permalink / raw) To: 73118; +Cc: Rutherther The arm-none-eabi nano toolchain had same libstdc++ as the non-nano variant. The libstdc++ should be compiled with -fno-exceptions to make a nano toolchain. Additionally, since the "_nano.a" variants were not present, it was impossible to compile C++ programs with libstdc++ using --specs=nano.specs, since libstdc++_nano.a was not found. The `--with-target-subdir="."` flag is a preparation for gcc-12 introduction since the libstdc++ doesn't build without that, failing on GCC_NO_EXECUTABLES error in configure stage. I have not been able to find out another workaround. * gnu/packages/embedded.scm (make-libstdc++-arm-none-eabi): [arguments]<#:make-flags>: Add CFLAGS and CXXFLAGS. [arguments]<#:configure-flags>: Add --with-target-subdir. * gnu/packages/embedded.scm (make-libstdc++-nano-arm-none-eabi): Add variable. Change-Id: I06a507fef07352a4ec80d84e4d97065343fc2295 --- gnu/packages/embedded.scm | 74 +++++++++++++++++++++++++++++++++------ 1 file changed, 63 insertions(+), 11 deletions(-) diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm index 2a482f7e52..847eb8059c 100644 --- a/gnu/packages/embedded.scm +++ b/gnu/packages/embedded.scm @@ -483,8 +483,17 @@ (define make-libstdc++-arm-none-eabi (name "libstdc++-arm-none-eabi") (arguments (substitute-keyword-arguments (package-arguments libstdc++) + ((#:make-flags flags #f) + #~(cons* "CFLAGS=-g -O2 -fdata-sections -ffunction-sections" + "CXXFLAGS=-g -O2 -fdata-sections -ffunction-sections" + (or #$flags '()))) ((#:configure-flags _) - ``("--target=arm-none-eabi" + ``(; This is more of a hack. This option doesn't really seem + ; to change what subdir is used eventually, but without it there is + ; error: Link tests are not allowed after GCC_NO_EXECUTABLES with + ; The 12.3 toolchain + "--with-target-subdir=\".\"" + "--target=arm-none-eabi" "--host=arm-none-eabi" "--disable-libstdcxx-pch" "--enable-multilib" @@ -506,21 +515,64 @@ (define make-libstdc++-arm-none-eabi ("xgcc" ,xgcc) ,@(package-native-inputs libstdc++))))))) +(define make-libstdc++-nano-arm-none-eabi + (mlambda (xgcc newlib-nano) + (let ((base (make-libstdc++-arm-none-eabi xgcc newlib-nano))) + (package + (inherit base) + (name "libstdc++-nano-arm-none-eabi") + (arguments (substitute-keyword-arguments (package-arguments base) + ((#:make-flags flags) + #~(map (lambda (flag) + (if (or (string-prefix? "CFLAGS=" flag) + (string-prefix? "CXXFLAGS=" flag)) + (string-append flag " -fno-exceptions") + flag)) + #$flags)) + ((#:phases phases) + #~(modify-phases #$phases + (add-after 'install 'hardlink-libstdc++ + ;; XXX: Most arm toolchains offer both *.a and *_nano.a as + ;; newlib and newlib-nano respectively. The headers are + ;; usually arm-none-eabi/include/newlib.h for newlib and + ;; arm-none-eabi/include/newlib-nano/newlib.h for newlib-nano. + ;; We have two different toolchain packages for each which + ;; works but is a little strange. + (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 "^(libstdc\\+\\+.a|libsupc\\+\\+.a)$"))))))))))))) + (define make-arm-none-eabi-toolchain (mlambda (xgcc newlib) "Produce a cross-compiler toolchain package with the compiler XGCC and the C library variant NEWLIB." - (let ((newlib-with-xgcc - (package - (inherit newlib) - (native-inputs - (alist-replace "xgcc" (list xgcc) - (package-native-inputs newlib)))))) + (let* ((nano? (string=? (package-name newlib) + "newlib-nano")) + (newlib-with-xgcc + (package + (inherit newlib) + (native-inputs + (alist-replace "xgcc" (list xgcc) + (package-native-inputs newlib))))) + (libstdc++ + (if nano? + (make-libstdc++-nano-arm-none-eabi xgcc newlib-with-xgcc) + (make-libstdc++-arm-none-eabi xgcc newlib-with-xgcc)))) (package (name (string-append "arm-none-eabi" - (if (string=? (package-name newlib-with-xgcc) - "newlib-nano") - "-nano" "") + (if nano? "-nano" "") "-toolchain")) (version (package-version xgcc)) (source #f) @@ -537,7 +589,7 @@ (define make-arm-none-eabi-toolchain directories)))))) (propagated-inputs `(("binutils" ,(cross-binutils "arm-none-eabi")) - ("libstdc++" ,(make-libstdc++-arm-none-eabi xgcc newlib-with-xgcc)) + ("libstdc++" ,libstdc++) ("gcc" ,xgcc) ("newlib" ,newlib-with-xgcc))) (synopsis "Complete GCC tool chain for ARM bare metal development") -- 2.46.0 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [bug#73118] [PATCH v2 4/5] gnu: newlib arm-none-eabi-7-2018-q2-update: Add proper newlib-nano variant. 2024-09-13 11:41 ` [bug#73118] [PATCH v2 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Rutherther via Guix-patches via ` (2 preceding siblings ...) 2024-09-13 11:42 ` [bug#73118] [PATCH v2 3/5] gnu: make-libstdc++-arm-none-eabi: add nano variant Rutherther via Guix-patches via @ 2024-09-13 11:42 ` Rutherther via Guix-patches via 2024-09-13 11:42 ` [bug#73118] [PATCH v2 5/5] gnu: arm-none-eabi toolchain 12.3.rel1 Rutherther via Guix-patches via 2024-10-12 17:43 ` bug#73118: [PATCH v2 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Ludovic Courtès 5 siblings, 0 replies; 13+ messages in thread From: Rutherther via Guix-patches via @ 2024-09-13 11:42 UTC (permalink / raw) To: 73118; +Cc: Rutherther The nano variant for was not nano. It was just a copy of the original one with different name. This meant there were no _nano.a files present at all, and the flags were the same, not producing a smaller library. * gnu/packages/embedded.scm (make-base-newlib-arm-none-eabi-7-2018-q2-update): Rename variable from make-newlib-arm-none-eabi-7-2018-q2-update. * gnu/packages/embedded.scm (make-newlib-nano-arm-none-eabi-7-2018-q2-update): Add variable. * gnu/packages/embedded.scm (make-newlib-arm-none-eabi-7-2018-q2-update): Inherit from make-base-newlib-arm-none-eabi-7-2018-q2-update. Change-Id: I01517ed860dfb2b6a9c7e912fd724832f5a0500a --- gnu/packages/embedded.scm | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm index 847eb8059c..4b9da1f529 100644 --- a/gnu/packages/embedded.scm +++ b/gnu/packages/embedded.scm @@ -247,10 +247,7 @@ (define make-newlib-arm-none-eabi (modify-phases %standard-phases (add-after 'unpack 'fix-references-to-/bin/sh (lambda _ - (substitute* '("libgloss/arm/cpu-init/Makefile.in" - "libgloss/arm/Makefile.in" - "libgloss/libnosys/Makefile.in" - "libgloss/Makefile.in") + (substitute* (find-files "libgloss" "^Makefile\\.in$") (("/bin/sh") (which "sh"))) #t))))) (native-inputs @@ -430,12 +427,11 @@ (define make-gcc-arm-none-eabi-7-2018-q2-update (variable "CROSS_LIBRARY_PATH") (files '("arm-none-eabi/lib"))))))))) -(define make-newlib-arm-none-eabi-7-2018-q2-update +(define make-base-newlib-arm-none-eabi-7-2018-q2-update ;; This is the same commit as used for the 7-2018-q2-update release ;; according to the release.txt. - (mlambda () - (let ((base (make-newlib-arm-none-eabi)) - (commit "3ccfb407af410ba7e54ea0da11ae1e40b554a6f4") + (mlambda (base) + (let ((commit "3ccfb407af410ba7e54ea0da11ae1e40b554a6f4") (revision "0")) (package (inherit base) @@ -464,15 +460,13 @@ (define make-newlib-arm-none-eabi-7-2018-q2-update ("xgcc" ,(make-gcc-arm-none-eabi-7-2018-q2-update)) ("texinfo" ,texinfo))))))) -(define-public make-newlib-nano-arm-none-eabi-7-2018-q2-update +(define make-newlib-arm-none-eabi-7-2018-q2-update (mlambda () - (let ((base (make-newlib-arm-none-eabi-7-2018-q2-update))) - (package - (inherit base) - (name "newlib-nano") - (arguments - (package-arguments base)) - (synopsis "Newlib variant for small systems with limited memory"))))) + (make-base-newlib-arm-none-eabi-7-2018-q2-update (make-newlib-arm-none-eabi)))) + +(define make-newlib-nano-arm-none-eabi-7-2018-q2-update + (mlambda () + (make-base-newlib-arm-none-eabi-7-2018-q2-update (make-newlib-nano-arm-none-eabi)))) \f (define make-libstdc++-arm-none-eabi -- 2.46.0 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [bug#73118] [PATCH v2 5/5] gnu: arm-none-eabi toolchain 12.3.rel1 2024-09-13 11:41 ` [bug#73118] [PATCH v2 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Rutherther via Guix-patches via ` (3 preceding siblings ...) 2024-09-13 11:42 ` [bug#73118] [PATCH v2 4/5] gnu: newlib arm-none-eabi-7-2018-q2-update: Add proper newlib-nano variant Rutherther via Guix-patches via @ 2024-09-13 11:42 ` Rutherther via Guix-patches via 2024-10-12 17:43 ` bug#73118: [PATCH v2 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Ludovic Courtès 5 siblings, 0 replies; 13+ messages in thread From: Rutherther via Guix-patches via @ 2024-09-13 11:42 UTC (permalink / raw) To: 73118; +Cc: Rutherther Introduces arm-none-eabi 12.3.rel1 toolchain The arguments for this toolchain are taken mostly out of here https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads/12-3-rel1 * gnu/packages/patches/newlib-getentropy.patch: Add a patch. * gnu/local.mk: Register it. * gnu/packages/embedded.scm (make-gcc-arm-none-eabi-12.3.rel1): Add variable. * gnu/packages/embedded.scm (make-newlib-arm-none-eabi-12.3.rel1): Add variable. * gnu/packages/embedded.scm (make-newlib-nano-arm-none-eabi-12.3.rel1): Add variable. * gnu/packages/embedded.scm (make-arm-none-eabi-toolchain-12.3.rel1): Add variable. * gnu/packages/embedded.scm (make-arm-none-eabi-toolchain-nano-12.3.rel1): Add variable. Change-Id: If4220c6bc7b1def240cbb9d5d245758f7c51a8a0 --- gnu/local.mk | 1 + gnu/packages/embedded.scm | 110 +++++- gnu/packages/patches/newlib-getentropy.patch | 380 +++++++++++++++++++ 3 files changed, 490 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/newlib-getentropy.patch diff --git a/gnu/local.mk b/gnu/local.mk index ed630041ff..ce40b7e28b 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1800,6 +1800,7 @@ dist_patch_DATA = \ %D%/packages/patches/ngircd-handle-zombies.patch \ %D%/packages/patches/network-manager-plugin-path.patch \ %D%/packages/patches/network-manager-meson.patch \ + %D%/packages/patches/newlib-getentropy.patch \ %D%/packages/patches/nginx-socket-cloexec.patch \ %D%/packages/patches/nickle-man-release-date.patch \ %D%/packages/patches/nnpack-system-libraries.patch \ diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm index 4b9da1f529..cc999d35f8 100644 --- a/gnu/packages/embedded.scm +++ b/gnu/packages/embedded.scm @@ -78,22 +78,27 @@ (define-module (gnu packages embedded) #:export (make-gcc-arm-none-eabi-4.9 make-gcc-arm-none-eabi-6 make-gcc-arm-none-eabi-7-2018-q2-update + make-gcc-arm-none-eabi-12.3.rel1 make-gcc-vc4 make-newlib-arm-none-eabi make-newlib-arm-none-eabi-7-2018-q2-update + make-newlib-arm-none-eabi-12.3.rel1 make-newlib-nano-arm-none-eabi make-newlib-nano-arm-none-eabi-7-2018-q2-update + make-newlib-nano-arm-none-eabi-12.3.rel1 make-arm-none-eabi-toolchain-4.9 make-arm-none-eabi-toolchain-6 make-arm-none-eabi-toolchain-7-2018-q2-update + make-arm-none-eabi-toolchain-12.3.rel1 make-arm-none-eabi-nano-toolchain-4.9 make-arm-none-eabi-nano-toolchain-6 make-arm-none-eabi-nano-toolchain-7-2018-q2-update + make-arm-none-eabi-nano-toolchain-12.3.rel1 make-gdb-arm-none-eabi @@ -468,12 +473,103 @@ (define make-newlib-nano-arm-none-eabi-7-2018-q2-update (mlambda () (make-base-newlib-arm-none-eabi-7-2018-q2-update (make-newlib-nano-arm-none-eabi)))) +\f +;;; The following definitions are for the "12.3.rel1" variant of the +;;; ARM cross toolchain as offered on https://developer.arm.com +(define-public make-gcc-arm-none-eabi-12.3.rel1 + (mlambda () + (let ((base (make-gcc-arm-none-eabi-7-2018-q2-update)) + (xgcc-base (cross-gcc "arm-none-eabi" + #:xgcc gcc-12 + #:xbinutils (cross-binutils "arm-none-eabi")))) + (package + (inherit base) + (version "12.3.rel1") + (source + (origin + (inherit (package-source xgcc-base)) + (method git-fetch) + (uri (git-reference + (url "git://gcc.gnu.org/git/gcc.git") + (commit "0f54a73b998b72f7c8452a63730ec3b16fc47854"))) + (sha256 + (base32 "0r6q0m3d8g3k3rkmnqjw8aw5fcnsrmywf4ispdkxmk1al3whk1vk")))) + (arguments + (substitute-keyword-arguments (package-arguments base) + ((#:phases phases) + #~(modify-phases #$phases + (replace 'expand-version-string + (lambda _ + (make-file-writable "gcc/DEV-PHASE") + (with-output-to-file "gcc/DEV-PHASE" + (lambda () + (display "12.3.rel1"))))))) + ((#:configure-flags flags) + #~(cons* "--with-multilib-list=aprofile,rmprofile" + "--with-headers=yes" + "--enable-checking=release" + "--with-gnu-as" + "--with-gnu-ld" + (filter + (lambda (flag) + (not (member flag + '("--with-multilib-list=rmprofile" + "--enable-plugins" + "--disable-libffi")))) + #$flags))))))))) + +(define make-base-newlib-arm-none-eabi-12.3.rel1 + (mlambda (original-base) + (let ((base (make-base-newlib-arm-none-eabi-7-2018-q2-update original-base)) + (commit "4c7d0dfec5793cbf5cf3930b91f930479126d8ce") + (revision "0")) + (package + (inherit base) + (version (git-version "4.3.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "http://sourceware.org/git/newlib-cygwin.git") + (commit commit))) + (sha256 + (base32 + "0drs9v8avh4y2h5bs0ixjn9x662jzkkikx8z034wgl41dxmn6786")))) + (arguments (substitute-keyword-arguments (package-arguments base) + ((#:configure-flags flags) + #~(cons* "--enable-newlib-mb" + "--enable-newlib-reent-check-verify" + "--enable-newlib-register-fini" + #$flags)))))))) + +(define make-newlib-arm-none-eabi-12.3.rel1 + (mlambda () + (make-base-newlib-arm-none-eabi-12.3.rel1 (make-newlib-arm-none-eabi)))) + +(define make-newlib-nano-arm-none-eabi-12.3.rel1 + (mlambda () + (make-base-newlib-arm-none-eabi-12.3.rel1 (make-newlib-nano-arm-none-eabi)))) + \f (define make-libstdc++-arm-none-eabi (mlambda (xgcc newlib) - (let ((libstdc++ (make-libstdc++ xgcc))) + (let* ((libstdc++ (make-libstdc++ xgcc)) + (src (package-source libstdc++))) (package (inherit libstdc++) + (source + (origin + (inherit src) + (patches (append + ; libstdc++ cannot be linked with since the configure phase + ; cannot detect properly the presence of getentropy function. + ; The function is inside of a header, but it's not present in the resulting + ; newlib. configure will conclude getentropy is present, + ; random will use getentropy, and any linking with random will fail. + (if (version>=? (package-version xgcc) "12.0") + (search-patches "newlib-getentropy.patch") + '()) + (origin-patches src))))) (name "libstdc++-arm-none-eabi") (arguments (substitute-keyword-arguments (package-arguments libstdc++) @@ -626,6 +722,18 @@ (define make-arm-none-eabi-nano-toolchain-7-2018-q2-update (make-gcc-arm-none-eabi-7-2018-q2-update) (make-newlib-nano-arm-none-eabi-7-2018-q2-update)))) +(define make-arm-none-eabi-toolchain-12.3.rel1 + (mlambda () + (make-arm-none-eabi-toolchain + (make-gcc-arm-none-eabi-12.3.rel1) + (make-newlib-arm-none-eabi-12.3.rel1)))) + +(define make-arm-none-eabi-nano-toolchain-12.3.rel1 + (mlambda () + (make-arm-none-eabi-toolchain + (make-gcc-arm-none-eabi-12.3.rel1) + (make-newlib-nano-arm-none-eabi-12.3.rel1)))) + (define make-gdb-arm-none-eabi (mlambda () (package diff --git a/gnu/packages/patches/newlib-getentropy.patch b/gnu/packages/patches/newlib-getentropy.patch new file mode 100644 index 0000000000..a4137d81f0 --- /dev/null +++ b/gnu/packages/patches/newlib-getentropy.patch @@ -0,0 +1,380 @@ +Patch-Source: https://github.com/zephyrproject-rtos/gcc/pull/8 + +From 55addb0c0c5ff5e0aab85574aa26abf175af85c8 Mon Sep 17 00:00:00 2001 +From: Stephanos Ioannidis <root@stephanos.io> +Date: Mon, 25 Jul 2022 23:10:41 +0900 +Subject: [PATCH] libstdc++: Do not check getentropy and arc4random for cross builds + +The "getentropy" and "arc4random" check may not yield a correct result +for the cross compile builds because linking is often not available for +them and the C library headers (notoriously, newlib) may still declare +these function prototypes even if they are not actually part of the +final library -- for this reason, this commit disables the "getentropy" +and "arc4random" checks for non-native builds. + +This effectively prevents the std::random_device from making use of +these functions when `--with-newlib` is specified, which is indeed a +correct behaviour because the newlib does not provide a default stub +for the "getentropy" function (also note that the newlib "arc4random" +implementation internally calls the missing "getentropy" function). + +For other C libraries, the `GLIBCXX_CROSSCONFIG` function may hard-code +the availability of these functions by manually defining +`HAVE_GETENTROPY` and `HAVE_ARC4RANDOM`, or by calling the +`GLIBCXX_CHECK_GETENTROPY` and `GLIBCXX_CHECK_ARC4RANDOM` functions. + +libstdc++-v3: + * configure.ac: Relocate GLIBCXX_CHECK_GETENTROPY and + GLIBCXX_CHECK_ARC4RANDOM + * configure: Regenerate. + +Signed-off-by: Stephanos Ioannidis <root@stephanos.io> +--- + libstdc++-v3/configure | 300 +++++++++++++++++++------------------- + libstdc++-v3/configure.ac | 8 +- + 2 files changed, 154 insertions(+), 154 deletions(-) + +diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure +index 0ce74e8202443..5d43b56b03ffa 100755 +--- a/libstdc++-v3/configure ++++ b/libstdc++-v3/configure +@@ -28088,6 +28088,156 @@ $as_echo "#define _GLIBCXX_USE_RANDOM_TR1 1" >>confdefs.h + + + ++ # Check for other random number APIs ++ ++ ++ ++ ac_ext=cpp ++ac_cpp='$CXXCPP $CPPFLAGS' ++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getentropy" >&5 ++$as_echo_n "checking for getentropy... " >&6; } ++if ${glibcxx_cv_getentropy+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ++ if test x$gcc_no_link = xyes; then ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include <unistd.h> ++int ++main () ++{ ++unsigned i; ++ ::getentropy(&i, sizeof(i)); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_cxx_try_compile "$LINENO"; then : ++ glibcxx_cv_getentropy=yes ++else ++ glibcxx_cv_getentropy=no ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++else ++ if test x$gcc_no_link = xyes; then ++ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 ++fi ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include <unistd.h> ++int ++main () ++{ ++unsigned i; ++ ::getentropy(&i, sizeof(i)); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_cxx_try_link "$LINENO"; then : ++ glibcxx_cv_getentropy=yes ++else ++ glibcxx_cv_getentropy=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++fi ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_getentropy" >&5 ++$as_echo "$glibcxx_cv_getentropy" >&6; } ++ ++ if test $glibcxx_cv_getentropy = yes; then ++ ++$as_echo "#define HAVE_GETENTROPY 1" >>confdefs.h ++ ++ fi ++ ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ ++ ++ ++ ++ ac_ext=cpp ++ac_cpp='$CXXCPP $CPPFLAGS' ++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for arc4random" >&5 ++$as_echo_n "checking for arc4random... " >&6; } ++if ${glibcxx_cv_arc4random+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ++ if test x$gcc_no_link = xyes; then ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include <stdlib.h> ++int ++main () ++{ ++unsigned i = ::arc4random(); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_cxx_try_compile "$LINENO"; then : ++ glibcxx_cv_arc4random=yes ++else ++ glibcxx_cv_arc4random=no ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++else ++ if test x$gcc_no_link = xyes; then ++ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 ++fi ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include <stdlib.h> ++int ++main () ++{ ++unsigned i = ::arc4random(); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_cxx_try_link "$LINENO"; then : ++ glibcxx_cv_arc4random=yes ++else ++ glibcxx_cv_arc4random=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++fi ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_arc4random" >&5 ++$as_echo "$glibcxx_cv_arc4random" >&6; } ++ ++ if test $glibcxx_cv_arc4random = yes; then ++ ++$as_echo "#define HAVE_ARC4RANDOM 1" >>confdefs.h ++ ++ fi ++ ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ ++ + # For TLS support. + + +@@ -75519,156 +75669,6 @@ $as_echo "#define _GLIBCXX_X86_RDSEED 1" >>confdefs.h + fi + + +-# Check for other random number APIs +- +- +- +- ac_ext=cpp +-ac_cpp='$CXXCPP $CPPFLAGS' +-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +- +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getentropy" >&5 +-$as_echo_n "checking for getentropy... " >&6; } +-if ${glibcxx_cv_getentropy+:} false; then : +- $as_echo_n "(cached) " >&6 +-else +- +- if test x$gcc_no_link = xyes; then +- cat confdefs.h - <<_ACEOF >conftest.$ac_ext +-/* end confdefs.h. */ +-#include <unistd.h> +-int +-main () +-{ +-unsigned i; +- ::getentropy(&i, sizeof(i)); +- ; +- return 0; +-} +-_ACEOF +-if ac_fn_cxx_try_compile "$LINENO"; then : +- glibcxx_cv_getentropy=yes +-else +- glibcxx_cv_getentropy=no +-fi +-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +-else +- if test x$gcc_no_link = xyes; then +- as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 +-fi +-cat confdefs.h - <<_ACEOF >conftest.$ac_ext +-/* end confdefs.h. */ +-#include <unistd.h> +-int +-main () +-{ +-unsigned i; +- ::getentropy(&i, sizeof(i)); +- ; +- return 0; +-} +-_ACEOF +-if ac_fn_cxx_try_link "$LINENO"; then : +- glibcxx_cv_getentropy=yes +-else +- glibcxx_cv_getentropy=no +-fi +-rm -f core conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-fi +- +-fi +-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_getentropy" >&5 +-$as_echo "$glibcxx_cv_getentropy" >&6; } +- +- if test $glibcxx_cv_getentropy = yes; then +- +-$as_echo "#define HAVE_GETENTROPY 1" >>confdefs.h +- +- fi +- ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +- +- +- +- +- +- ac_ext=cpp +-ac_cpp='$CXXCPP $CPPFLAGS' +-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +- +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for arc4random" >&5 +-$as_echo_n "checking for arc4random... " >&6; } +-if ${glibcxx_cv_arc4random+:} false; then : +- $as_echo_n "(cached) " >&6 +-else +- +- if test x$gcc_no_link = xyes; then +- cat confdefs.h - <<_ACEOF >conftest.$ac_ext +-/* end confdefs.h. */ +-#include <stdlib.h> +-int +-main () +-{ +-unsigned i = ::arc4random(); +- ; +- return 0; +-} +-_ACEOF +-if ac_fn_cxx_try_compile "$LINENO"; then : +- glibcxx_cv_arc4random=yes +-else +- glibcxx_cv_arc4random=no +-fi +-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +-else +- if test x$gcc_no_link = xyes; then +- as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 +-fi +-cat confdefs.h - <<_ACEOF >conftest.$ac_ext +-/* end confdefs.h. */ +-#include <stdlib.h> +-int +-main () +-{ +-unsigned i = ::arc4random(); +- ; +- return 0; +-} +-_ACEOF +-if ac_fn_cxx_try_link "$LINENO"; then : +- glibcxx_cv_arc4random=yes +-else +- glibcxx_cv_arc4random=no +-fi +-rm -f core conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-fi +- +-fi +-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_arc4random" >&5 +-$as_echo "$glibcxx_cv_arc4random" >&6; } +- +- if test $glibcxx_cv_arc4random = yes; then +- +-$as_echo "#define HAVE_ARC4RANDOM 1" >>confdefs.h +- +- fi +- ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +- +- +- + # This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE. + + # Do checks for resource limit functions. +diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac +index e59bcdb29441f..05cdfcddbc43b 100644 +--- a/libstdc++-v3/configure.ac ++++ b/libstdc++-v3/configure.ac +@@ -269,6 +269,10 @@ if $GLIBCXX_IS_NATIVE; then + # For /dev/random and /dev/urandom for std::random_device. + GLIBCXX_CHECK_DEV_RANDOM + ++ # Check for other random number APIs ++ GLIBCXX_CHECK_GETENTROPY ++ GLIBCXX_CHECK_ARC4RANDOM ++ + # For TLS support. + GCC_CHECK_TLS + +@@ -474,10 +478,6 @@ GLIBCXX_CHECK_X86_RDRAND + # Check if assembler supports rdseed opcode. + GLIBCXX_CHECK_X86_RDSEED + +-# Check for other random number APIs +-GLIBCXX_CHECK_GETENTROPY +-GLIBCXX_CHECK_ARC4RANDOM +- + # This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE. + GLIBCXX_CONFIGURE_TESTSUITE + -- 2.46.0 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* bug#73118: [PATCH v2 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 2024-09-13 11:41 ` [bug#73118] [PATCH v2 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Rutherther via Guix-patches via ` (4 preceding siblings ...) 2024-09-13 11:42 ` [bug#73118] [PATCH v2 5/5] gnu: arm-none-eabi toolchain 12.3.rel1 Rutherther via Guix-patches via @ 2024-10-12 17:43 ` Ludovic Courtès 5 siblings, 0 replies; 13+ messages in thread From: Ludovic Courtès @ 2024-10-12 17:43 UTC (permalink / raw) To: Rutherther; +Cc: Vagrant Cascadian, 73118-done, Efraim Flashner Hi, Rutherther <rutherther@protonmail.com> skribis: > I also did another contribution where I learned a bit about chane log format, > and that it should be used with Guix. So I changed the commits to better reflect > this format. Sorry if it's still wrong, I have hard time wrapping my head around > the exact rules of it. It’s good. :-) > gnu: make-gcc-arm-none-eabi: reorder C++ native search paths > gnu: make-libstdc++-arm-none-eabi: output libstdc++ to arm-none-eabi. > gnu: make-libstdc++-arm-none-eabi: add nano variant > gnu: newlib arm-none-eabi-7-2018-q2-update: Add proper newlib-nano > variant. > gnu: arm-none-eabi toolchain 12.3.rel1 I went ahead and applied it, thanks! Cc’ing the Embedded team. Efraim, Vagrant: should we added gnu/packages/embedded.scm to the team’s scope? Thanks, Ludo’. ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2024-10-12 17:44 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-09-08 7:42 [bug#73118] [PATCH 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Rutherther via Guix-patches via 2024-09-08 7:48 ` [bug#73118] [PATCH 1/5] Fix native-search-paths of arm-none-eabi toolchains Rutherther via Guix-patches via 2024-09-08 7:49 ` [bug#73118] [PATCH 2/5] Fix lib directory of arm-none-eabi libstdc++ Rutherther via Guix-patches via 2024-09-08 7:49 ` [bug#73118] [PATCH 3/5] Add libstdc++-nano for arm-none-eabi Rutherther via Guix-patches via 2024-09-08 7:49 ` [bug#73118] [PATCH 4/5] Fix arm-none-eabi 7 newlib nano variant Rutherther via Guix-patches via 2024-09-08 7:49 ` [bug#73118] [PATCH 5/5] Introduce arm-none-eabi 12.3.rel1 toolchain Rutherther via Guix-patches via 2024-09-13 11:41 ` [bug#73118] [PATCH v2 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Rutherther via Guix-patches via 2024-09-13 11:41 ` [bug#73118] [PATCH v2 1/5] gnu: make-gcc-arm-none-eabi: reorder C++ native search paths Rutherther via Guix-patches via 2024-09-13 11:42 ` [bug#73118] [PATCH v2 2/5] gnu: make-libstdc++-arm-none-eabi: output libstdc++ to arm-none-eabi Rutherther via Guix-patches via 2024-09-13 11:42 ` [bug#73118] [PATCH v2 3/5] gnu: make-libstdc++-arm-none-eabi: add nano variant Rutherther via Guix-patches via 2024-09-13 11:42 ` [bug#73118] [PATCH v2 4/5] gnu: newlib arm-none-eabi-7-2018-q2-update: Add proper newlib-nano variant Rutherther via Guix-patches via 2024-09-13 11:42 ` [bug#73118] [PATCH v2 5/5] gnu: arm-none-eabi toolchain 12.3.rel1 Rutherther via Guix-patches via 2024-10-12 17:43 ` bug#73118: [PATCH v2 0/5] Fix arm-none-eabi toolchains and introduce a newer version 12.3.rel1 Ludovic Courtès
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/guix.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.