#gimli = { path = "../" }
[features]
-default = ["jit", "inline_asm", "jemalloc"]
+default = ["jit", "inline_asm"]
jit = ["cranelift-jit", "libloading"]
inline_asm = []
-jemalloc = []
[profile.dev]
# By compiling dependencies with optimizations, performing tests gets much faster.
#![feature(rustc_private)]
-#[cfg(feature = "jemalloc")]
-extern crate jemalloc_sys;
extern crate rustc_data_structures;
extern crate rustc_driver;
extern crate rustc_interface;
}
fn main() {
- // Pull in jemalloc when enabled.
- //
- // Note that we're pulling in a static copy of jemalloc which means that to
- // pull it in we need to actually reference its symbols for it to get
- // linked. The two crates we link to here, std and rustc_driver, are both
- // dynamic libraries. That means to pull in jemalloc we need to actually
- // reference allocation symbols one way or another (as this file is the only
- // object code in the rustc executable).
- #[cfg(feature = "jemalloc")]
- {
- use std::os::raw::{c_int, c_void};
- #[used]
- static _F1: unsafe extern "C" fn(usize, usize) -> *mut c_void = jemalloc_sys::calloc;
- #[used]
- static _F2: unsafe extern "C" fn(*mut *mut c_void, usize, usize) -> c_int =
- jemalloc_sys::posix_memalign;
- #[used]
- static _F3: unsafe extern "C" fn(usize, usize) -> *mut c_void = jemalloc_sys::aligned_alloc;
- #[used]
- static _F4: unsafe extern "C" fn(usize) -> *mut c_void = jemalloc_sys::malloc;
- #[used]
- static _F5: unsafe extern "C" fn(*mut c_void, usize) -> *mut c_void = jemalloc_sys::realloc;
- #[used]
- static _F6: unsafe extern "C" fn(*mut c_void) = jemalloc_sys::free;
-
- // On OSX, jemalloc doesn't directly override malloc/free, but instead
- // registers itself with the allocator's zone APIs in a ctor. However,
- // the linker doesn't seem to consider ctors as "used" when statically
- // linking, so we need to explicitly depend on the function.
- #[cfg(target_os = "macos")]
- {
- extern "C" {
- fn _rjem_je_zone_register();
- }
-
- #[used]
- static _F7: unsafe extern "C" fn() = _rjem_je_zone_register;
- }
- }
-
let start_time = std::time::Instant::now();
let start_rss = get_resident_set_size();
rustc_driver::init_rustc_env_logger();