GNU bug report logs -
#48525
[PATCH core-updates] gnu: rust: Add profiling support.
Previous Next
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 48525 in the body.
You can then email your comments to 48525 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
guix-patches <at> gnu.org
:
bug#48525
; Package
guix-patches
.
(Wed, 19 May 2021 18:39:01 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Milkey Mouse <milkeymouse <at> meme.institute>
:
New bug report received and forwarded. Copy sent to
guix-patches <at> gnu.org
.
(Wed, 19 May 2021 18:39:01 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
* gnu/packages/rust.scm (rust-1.49)[source]: Add patch.
[phases]{unpack-profiler-rt, enable-profiling}: New phases.
[native-inputs]{compiler-rt-source}: New input.
(rust-1.50)[source]: Remove "rust-1.49-llvm-cov-no-debug.patch".
* gnu/packages/patches/rust-1.49-llvm-cov-no-debug.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add patch.
---
gnu/local.mk | 1 +
.../patches/rust-1.49-llvm-cov-no-debug.patch | 27 +++++++++++++++
gnu/packages/rust.scm | 33 +++++++++++++++++--
3 files changed, 58 insertions(+), 3 deletions(-)
create mode 100644 gnu/packages/patches/rust-1.49-llvm-cov-no-debug.patch
diff --git a/gnu/local.mk b/gnu/local.mk
index add01cf6d2..9dbf568d0c 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1631,6 +1631,7 @@ dist_patch_DATA = \
%D%/packages/patches/rnp-disable-ruby-rnp-tests.patch \
%D%/packages/patches/rnp-unbundle-googletest.patch \
%D%/packages/patches/ruby-sanitize-system-libxml.patch \
+ %D%/packages/patches/rust-1.49-llvm-cov-no-debug.patch \
%D%/packages/patches/rust-coresimd-doctest.patch \
%D%/packages/patches/rust-ndarray-remove-blas-src-dep.patch \
%D%/packages/patches/rust-nettle-disable-vendor.patch \
diff --git a/gnu/packages/patches/rust-1.49-llvm-cov-no-debug.patch b/gnu/packages/patches/rust-1.49-llvm-cov-no-debug.patch
new file mode 100644
index 0000000000..b72402a9a7
--- /dev/null
+++ b/gnu/packages/patches/rust-1.49-llvm-cov-no-debug.patch
@@ -0,0 +1,27 @@
+cherry-picked from commit fe56d267cae, in master as of 1.50
+diff --git a/src/test/run-make-fulldeps/coverage-reports-base/Makefile b/src/test/run-make-fulldeps/coverage-reports-base/Makefile
+index b175768e199..1e2aa056e40 100644
+--- a/src/test/run-make-fulldeps/coverage-reports-base/Makefile
++++ b/src/test/run-make-fulldeps/coverage-reports-base/Makefile
+@@ -13,15 +13,13 @@
+ BASEDIR=../coverage-reports-base
+ SOURCEDIR=../coverage
+
+-ifeq ($(UNAME),Darwin)
+-# FIXME(richkadel): It appears that --debug is not available on MacOS even when not running
+-# under CI.
+-NO_LLVM_ASSERTIONS=1
+-endif
+-
+ # The `llvm-cov show` flag `--debug`, used to generate the `counters` output files, is only enabled
+-# if LLVM assertions are enabled. Some CI builds disable debug assertions.
+-ifndef NO_LLVM_ASSERTIONS
++# if LLVM assertions are enabled. Requires Rust config `llvm/optimize` and not
++# `llvm/release_debuginfo`. Note that some CI builds disable debug assertions (by setting
++# `NO_LLVM_ASSERTIONS=1`), so it is not OK to fail the test, but `bless`ed test results cannot be
++# generated without debug assertions.
++LLVM_COV_DEBUG := $(shell "$(LLVM_BIN_DIR)"/llvm-cov show --debug 2>&1 | grep -q "Unknown command line argument '--debug'"; echo $$?)
++ifeq ($(LLVM_COV_DEBUG), 1)
+ DEBUG_FLAG=--debug
+ endif
+
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 636420e25d..72355fa789 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -730,6 +730,10 @@ safety and thread safety guarantees.")
"0yf7kll517398dgqsr7m3gldzj0iwsp3ggzxrayckpqzvylfy2mm")))
(package
(inherit base-rust)
+ (source
+ (origin
+ (inherit (package-source base-rust))
+ (patches (search-patches "rust-1.49-llvm-cov-no-debug.patch"))))
(outputs (cons "doc" (package-outputs base-rust)))
(arguments
(substitute-keyword-arguments (package-arguments base-rust)
@@ -817,11 +821,24 @@ safety and thread safety guarantees.")
((file) file))
(("fn ctrl_c_kills_everyone")
"#[ignore]\nfn ctrl_c_kills_everyone"))))
+ (add-after 'unpack 'unpack-profiler-rt
+ ;; Copy compiler-rt sources to where libprofiler_builtins
+ ;; looks for its vendored copy.
+ (lambda* (#:key inputs #:allow-other-keys)
+ (mkdir-p "src/llvm-project/compiler-rt")
+ (invoke "tar" "-xf" (assoc-ref inputs "compiler-rt-source")
+ "-C" "src/llvm-project/compiler-rt" "--strip-components=1")
+ #t))
(add-after 'configure 'enable-docs
(lambda _
(substitute* "config.toml"
(("docs = false")
"docs = true"))))
+ (add-after 'enable-codegen-tests 'enable-profiling
+ (lambda _
+ (substitute* "config.toml"
+ (("^profiler =.*$") "")
+ (("[[]build[]]") "\n[build]\nprofiler = true\n"))))
(add-after 'configure 'add-gdb-to-config
(lambda* (#:key inputs #:allow-other-keys)
(let ((gdb (assoc-ref inputs "gdb")))
@@ -829,17 +846,27 @@ safety and thread safety guarantees.")
(("^python =.*" all)
(string-append all
"gdb = \"" gdb "/bin/gdb\"\n"))))))))))
- ;; Add test inputs.
(native-inputs (cons*
+ ;; Add test inputs.
;; The tests fail when using GDB 10 (see:
;; https://github.com/rust-lang/rust/issues/79009).
`("gdb" ,gdb-9.2)
`("procps" ,procps)
+ ;; Add compiler-rt-source for libprofiler_builtins,
+ ;; which typically vendors compiler-rt. Needed for PGO.
+ `("compiler-rt-source" ,(package-source clang-runtime-11))
(package-native-inputs base-rust))))))
(define-public rust-1.50
- (rust-bootstrapped-package rust-1.49 "1.50.0"
- "0pjs7j62maiyvkmhp9zrxl528g2n0fphp4rq6ap7aqdv0a6qz5wm"))
+ (let ((base-rust (rust-bootstrapped-package
+ rust-1.49 "1.50.0"
+ "0pjs7j62maiyvkmhp9zrxl528g2n0fphp4rq6ap7aqdv0a6qz5wm")))
+ (package
+ (inherit base-rust)
+ (source
+ (origin
+ (inherit (package-source base-rust))
+ (patches '()))))))
(define-public rust-1.51
(rust-bootstrapped-package rust-1.50 "1.51.0"
--
2.31.1
Information forwarded
to
guix-patches <at> gnu.org
:
bug#48525
; Package
guix-patches
.
(Sun, 23 May 2021 14:21:02 GMT)
Full text and
rfc822 format available.
Message #8 received at 48525 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Milkey Mouse <milkeymouse <at> meme.institute> skriver:
> * gnu/packages/rust.scm (rust-1.49)[source]: Add patch.
> [phases]{unpack-profiler-rt, enable-profiling}: New phases.
> [native-inputs]{compiler-rt-source}: New input.
> (rust-1.50)[source]: Remove "rust-1.49-llvm-cov-no-debug.patch".
> * gnu/packages/patches/rust-1.49-llvm-cov-no-debug.patch: New file.
> * gnu/local.mk (dist_patch_DATA): Add patch.
[...]
> diff --git a/gnu/packages/patches/rust-1.49-llvm-cov-no-debug.patch b/gnu/packages/patches/rust-1.49-llvm-cov-no-debug.patch
> new file mode 100644
> index 0000000000..b72402a9a7
> --- /dev/null
> +++ b/gnu/packages/patches/rust-1.49-llvm-cov-no-debug.patch
> @@ -0,0 +1,27 @@
> +cherry-picked from commit fe56d267cae, in master as of 1.50
Instead of backporting this patch to 1.49, I think it would be better to
switch the default Rust to the latest version before enabling profiling
support.
Unfortunately 1.50 currently fails to build on core-updates, so we'll
need a volunteer to fix that. Would you like to give it a try? :-)
[signature.asc (application/pgp-signature, inline)]
Information forwarded
to
guix-patches <at> gnu.org
:
bug#48525
; Package
guix-patches
.
(Tue, 25 May 2021 01:15:02 GMT)
Full text and
rfc822 format available.
Message #11 received at 48525 <at> debbugs.gnu.org (full text, mbox):
On Sun May 23, 2021 at 7:20 AM PDT, Marius Bakke wrote:
> Instead of backporting this patch to 1.49, I think it would be better to
> switch the default Rust to the latest version before enabling profiling
> support.
OK, I will submit a v2 of the patch. Should I do so as a reply, or
close this thread by emailing the @debbugs.gnu.org address? I'm still a
little new to email- and patch-based workflows.
>
> Unfortunately 1.50 currently fails to build on core-updates, so we'll
> need a volunteer to fix that. Would you like to give it a try? :-)
rust-1.50? It builds fine for me. I am on commit 42162c84dc (with this
patch on top):
$ ./pre-inst-env guix build rust <at> 1.50
/gnu/store/klr7jrzxl3mzprd88f857kw5mam15h78-rust-1.50.0-cargo
/gnu/store/3x656k3s66kjb87aphly9p5v401af863-rust-1.50.0-doc
/gnu/store/nkkfvyl52mmvx12ccwvs54c44yns4yk5-rust-1.50.0
/gnu/store/kq4i7q55gxfl47124vfkiqzp5bi7737r-rust-1.50.0-rustfmt
I suppose I should note I don't use substitutes--but that shouldn't
make a difference, should it?
Information forwarded
to
guix-patches <at> gnu.org
:
bug#48525
; Package
guix-patches
.
(Tue, 25 May 2021 20:36:02 GMT)
Full text and
rfc822 format available.
Message #14 received at 48525 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
"Milkey Mouse" <milkeymouse <at> meme.institute> skriver:
> On Sun May 23, 2021 at 7:20 AM PDT, Marius Bakke wrote:
>> Instead of backporting this patch to 1.49, I think it would be better to
>> switch the default Rust to the latest version before enabling profiling
>> support.
>
> OK, I will submit a v2 of the patch. Should I do so as a reply, or
> close this thread by emailing the @debbugs.gnu.org address? I'm still a
> little new to email- and patch-based workflows.
Simply replying to this issue is great.
>> Unfortunately 1.50 currently fails to build on core-updates, so we'll
>> need a volunteer to fix that. Would you like to give it a try? :-)
>
> rust-1.50? It builds fine for me. I am on commit 42162c84dc (with this
> patch on top):
>
> $ ./pre-inst-env guix build rust <at> 1.50
> /gnu/store/klr7jrzxl3mzprd88f857kw5mam15h78-rust-1.50.0-cargo
> /gnu/store/3x656k3s66kjb87aphly9p5v401af863-rust-1.50.0-doc
> /gnu/store/nkkfvyl52mmvx12ccwvs54c44yns4yk5-rust-1.50.0
> /gnu/store/kq4i7q55gxfl47124vfkiqzp5bi7737r-rust-1.50.0-rustfmt
>
> I suppose I should note I don't use substitutes--but that shouldn't
> make a difference, should it?
Oh you're right, it does work! Sorry for the confusion. It must have
been a transient failure on my end last I tried it. Substitutes should
not make a difference -- the end result should (ideally) be
bit-identical in either case.
I suppose we can promote Rust 1.52 to the default unless there are
big(?) compatibility problems. IIRC the upcoming librsvg requires it.
Thanks!
Marius
[signature.asc (application/pgp-signature, inline)]
Information forwarded
to
guix-patches <at> gnu.org
:
bug#48525
; Package
guix-patches
.
(Tue, 25 May 2021 23:05:01 GMT)
Full text and
rfc822 format available.
Message #17 received at submit <at> debbugs.gnu.org (full text, mbox):
* gnu/packages/rust.scm (rust): Change to 1.52.
---
gnu/packages/rust.scm | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 2d29c2acd7..6b769bfab2 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -846,9 +846,9 @@ safety and thread safety guarantees.")
"0ixqkqglv3isxbvl4ldr4byrkx692wghsz3fasy1pn5kr2prnsvs"))
(define-public rust-1.52
- (let ((base-rust
- (rust-bootstrapped-package rust-1.51 "1.52.1"
- "165zs3xzp9dravybwslqs1qhn35agp6wacmzpymqg3qfdni26vrs")))
+ (let ((base-rust (rust-bootstrapped-package
+ rust-1.51 "1.52.1"
+ "165zs3xzp9dravybwslqs1qhn35agp6wacmzpymqg3qfdni26vrs")))
(package
(inherit base-rust)
(inputs
@@ -859,4 +859,4 @@ safety and thread safety guarantees.")
;;; intermediate rusts are built for bootstrapping purposes and should not
;;; be relied upon. This is to ease maintenance and reduce the time
;;; required to build the full Rust bootstrap chain.
-(define-public rust rust-1.49)
+(define-public rust rust-1.52)
--
2.31.1
Information forwarded
to
guix-patches <at> gnu.org
:
bug#48525
; Package
guix-patches
.
(Tue, 25 May 2021 23:05:02 GMT)
Full text and
rfc822 format available.
Message #20 received at submit <at> debbugs.gnu.org (full text, mbox):
* gnu/packages/rust.scm (rust-1.52)
[phases]{unpack-profiler-rt, enable-profiling}: New phases.
[native-inputs]{compiler-rt-source}: New input.
---
gnu/packages/rust.scm | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 6b769bfab2..7b77d791d1 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -853,7 +853,29 @@ safety and thread safety guarantees.")
(inherit base-rust)
(inputs
(alist-replace "llvm" (list llvm-12)
- (package-inputs base-rust))))))
+ (package-inputs base-rust)))
+ ;; Add compiler-rt-source for libprofiler_builtins (needed for profiling
+ ;; support), which normally vendors its own copy of compiler-rt.
+ (native-inputs (cons*
+ `("compiler-rt-source" ,(package-source clang-runtime-12))
+ (package-native-inputs base-rust)))
+ (arguments
+ (substitute-keyword-arguments (package-arguments base-rust)
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (add-after 'unpack 'unpack-profiler-rt
+ ;; Copy compiler-rt sources to where libprofiler_builtins
+ ;; looks for its vendored copy.
+ (lambda* (#:key inputs #:allow-other-keys)
+ (mkdir-p "src/llvm-project/compiler-rt")
+ (invoke "tar" "-xf" (assoc-ref inputs "compiler-rt-source")
+ "-C" "src/llvm-project/compiler-rt" "--strip-components=1")
+ #t))
+ (add-after 'enable-codegen-tests 'enable-profiling
+ (lambda _
+ (substitute* "config.toml"
+ (("^profiler =.*$") "")
+ (("[[]build[]]") "\n[build]\nprofiler = true\n")))))))))))
;;; Note: Only the latest versions of Rust are supported and tested. The
;;; intermediate rusts are built for bootstrapping purposes and should not
--
2.31.1
Reply sent
to
Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
:
You have taken responsibility.
(Sat, 20 Jan 2024 22:44:01 GMT)
Full text and
rfc822 format available.
Notification sent
to
Milkey Mouse <milkeymouse <at> meme.institute>
:
bug acknowledged by developer.
(Sat, 20 Jan 2024 22:44:02 GMT)
Full text and
rfc822 format available.
Message #25 received at 48525-done <at> debbugs.gnu.org (full text, mbox):
Hi,
Milkey Mouse <milkeymouse <at> meme.institute> writes:
> * gnu/packages/rust.scm (rust-1.52)
> [phases]{unpack-profiler-rt, enable-profiling}: New phases.
> [native-inputs]{compiler-rt-source}: New input.
> ---
> gnu/packages/rust.scm | 24 +++++++++++++++++++++++-
> 1 file changed, 23 insertions(+), 1 deletion(-)
>
> diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
> index 6b769bfab2..7b77d791d1 100644
> --- a/gnu/packages/rust.scm
> +++ b/gnu/packages/rust.scm
> @@ -853,7 +853,29 @@ safety and thread safety guarantees.")
> (inherit base-rust)
> (inputs
> (alist-replace "llvm" (list llvm-12)
> - (package-inputs base-rust))))))
> + (package-inputs base-rust)))
> + ;; Add compiler-rt-source for libprofiler_builtins (needed for profiling
> + ;; support), which normally vendors its own copy of compiler-rt.
> + (native-inputs (cons*
> + `("compiler-rt-source" ,(package-source clang-runtime-12))
> + (package-native-inputs base-rust)))
> + (arguments
> + (substitute-keyword-arguments (package-arguments base-rust)
> + ((#:phases phases)
> + `(modify-phases ,phases
> + (add-after 'unpack 'unpack-profiler-rt
> + ;; Copy compiler-rt sources to where libprofiler_builtins
> + ;; looks for its vendored copy.
> + (lambda* (#:key inputs #:allow-other-keys)
> + (mkdir-p "src/llvm-project/compiler-rt")
> + (invoke "tar" "-xf" (assoc-ref inputs "compiler-rt-source")
> + "-C" "src/llvm-project/compiler-rt" "--strip-components=1")
> + #t))
> + (add-after 'enable-codegen-tests 'enable-profiling
> + (lambda _
> + (substitute* "config.toml"
> + (("^profiler =.*$") "")
> + (("[[]build[]]") "\n[build]\nprofiler = true\n")))))))))))
>
> ;;; Note: Only the latest versions of Rust are supported and tested. The
> ;;; intermediate rusts are built for bootstrapping purposes and should not
I've ported this change to our current rust (using clang-runtime-15 to
match the llvm version used) and added it to the queued changes I'll
push shortly.
--
Thanks,
Maxim
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Sun, 18 Feb 2024 12:24:10 GMT)
Full text and
rfc822 format available.
This bug report was last modified 1 year and 81 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.