New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Build instruction profiler runtime as part of compiler-rt #42433
Changes from 9 commits
42754ce
ecba8d6
60524c5
a1ca5f6
0b0a5ac
8b7826f
26ad8d4
84d1626
13b3c34
95c6fc4
4c908a9
ce56daf
900ba55
8748bdd
d7039fb
dba9f84
5c084fd
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# `profile` | ||
|
||
The tracking issue for this feature is: None | ||
|
||
------------------------ | ||
|
||
This feature allows the generation of code coverage reports. | ||
|
||
Set the compiler flags `-Ccodegen-units=1 -Clink-dead-code -Cpasses=insert-gcov-profiling -Zno-landing-pads` to enable gcov profiling. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Shouldn't There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Right, I think they aren't strictly required. I've replaced them with |
||
|
||
For example: | ||
```Bash | ||
cargo new testgcov --bin | ||
cd testgcov | ||
export RUSTFLAGS="-Ccodegen-units=1 -Clink-dead-code -Cpasses=insert-gcov-profiling -Zno-landing-pads" | ||
cargo build | ||
cargo run | ||
``` | ||
|
||
Once you've built and run your program, files with the `gcno` (after build) and `gcda` (after execution) extensions will be created. | ||
You can parse them with [llvm-cov gcov](http://llvm.org/docs/CommandGuide/llvm-cov.html#llvm-cov-gcov) or [grcov](https://github.com/marco-c/grcov). |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# `profiler_runtime` | ||
|
||
The tracking issue for this feature is: None. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. (this'd also get linked to #42524) |
||
|
||
------------------------ |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# `profiler_runtime_lib` | ||
|
||
This feature is internal to the Rust compiler and is not intended for general use. | ||
|
||
------------------------ |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
[package] | ||
authors = ["The Rust Project Developers"] | ||
build = "build.rs" | ||
name = "profiler_builtins" | ||
version = "0.0.0" | ||
|
||
[lib] | ||
name = "profiler_builtins" | ||
path = "lib.rs" | ||
test = false | ||
bench = false | ||
doc = false | ||
|
||
[dependencies] | ||
core = { path = "../libcore" } | ||
|
||
[build-dependencies] | ||
gcc = "0.3.27" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT | ||
// file at the top-level directory of this distribution and at | ||
// http://rust-lang.org/COPYRIGHT. | ||
// | ||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | ||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your | ||
// option. This file may not be copied, modified, or distributed | ||
// except according to those terms. | ||
|
||
//! Compiles the profiler part of the `compiler-rt` library. | ||
//! | ||
//! See the build.rs for libcompiler_builtins crate for details. | ||
|
||
extern crate gcc; | ||
|
||
use std::env; | ||
use std::path::Path; | ||
|
||
fn main() { | ||
let target = env::var("TARGET").expect("TARGET was not set"); | ||
let cfg = &mut gcc::Config::new(); | ||
|
||
if target.contains("msvc") { | ||
// Don't pull in extra libraries on MSVC | ||
cfg.flag("/Zl"); | ||
} else { | ||
// Turn off various features of gcc and such, mostly copying | ||
// compiler-rt's build system already | ||
cfg.flag("-fno-builtin"); | ||
cfg.flag("-fvisibility=hidden"); | ||
cfg.flag("-fomit-frame-pointer"); | ||
cfg.flag("-ffreestanding"); | ||
cfg.define("VISIBILITY_HIDDEN", None); | ||
} | ||
|
||
let profile_sources = &["GCDAProfiling.c", | ||
"InstrProfiling.c", | ||
"InstrProfilingBuffer.c", | ||
"InstrProfilingFile.c", | ||
"InstrProfilingMerge.c", | ||
"InstrProfilingMergeFile.c", | ||
"InstrProfilingPlatformDarwin.c", | ||
"InstrProfilingPlatformLinux.c", | ||
"InstrProfilingPlatformOther.c", | ||
"InstrProfilingRuntime.cc", | ||
"InstrProfilingUtil.c", | ||
"InstrProfilingValue.c", | ||
"InstrProfilingWriter.c"]; | ||
|
||
for src in profile_sources { | ||
cfg.file(Path::new("../compiler-rt/lib/profile").join(src)); | ||
} | ||
|
||
cfg.compile("libprofiler-rt.a"); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT | ||
// file at the top-level directory of this distribution and at | ||
// http://rust-lang.org/COPYRIGHT. | ||
// | ||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | ||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your | ||
// option. This file may not be copied, modified, or distributed | ||
// except according to those terms. | ||
|
||
#![no_std] | ||
#![cfg_attr(not(stage0), feature(profiler_runtime))] | ||
#![cfg_attr(not(stage0), profiler_runtime)] | ||
#![unstable(feature = "profiler_runtime_lib", | ||
reason = "internal implementation detail of rustc right now", | ||
issue = "0")] | ||
#![crate_name = "profiler_builtins"] | ||
#![crate_type = "rlib"] | ||
#![allow(unused_features)] | ||
#![feature(staged_api)] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah actually can you fill this in with #42524?