* [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; 12+ 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] 12+ 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; 12+ 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] 12+ 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; 12+ 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] 12+ 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; 12+ 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] 12+ 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; 12+ 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] 12+ 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
` (4 more replies)
5 siblings, 5 replies; 12+ 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] 12+ 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
` (3 subsequent siblings)
4 siblings, 0 replies; 12+ 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] 12+ 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
` (2 subsequent siblings)
4 siblings, 0 replies; 12+ 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] 12+ 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
2024-09-13 11:42 ` [bug#73118] [PATCH v2 5/5] gnu: arm-none-eabi toolchain 12.3.rel1 Rutherther via Guix-patches via
4 siblings, 0 replies; 12+ 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] 12+ 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
4 siblings, 0 replies; 12+ 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] 12+ 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
4 siblings, 0 replies; 12+ 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] 12+ messages in thread