This commit is contained in:
bjorn3 2019-07-25 15:49:38 +02:00
parent b46c8bfb7e
commit 0a833ba8a1
8 changed files with 9 additions and 101 deletions

View File

@ -5,16 +5,12 @@ version = "0.0.0"
[dependencies]
core = { path = "./sysroot_src/src/libcore" }
compiler_builtins = "0.1"
alloc = { path = "./sysroot_src/src/liballoc" }
std = { path = "./sysroot_src/src/libstd" }
alloc_system = { path = "./alloc_system" }
compiler_builtins = { version = "0.1", features = ["rustc-dep-of-std"] }
[patch.crates-io]
rustc-std-workspace-core = { path = "./sysroot_src/src/tools/rustc-std-workspace-core" }
rustc-std-workspace-alloc = { path = "./rustc-std-workspace-alloc" }
#compiler_builtins = { path = "./compiler_builtins" }
compiler_builtins = { path = "./compiler-builtins" }
[profile.release]
debug = true

View File

@ -4,8 +4,6 @@ cd $(dirname "$0")
# Cleanup for previous run
# v Clean target dir except for build scripts and incremental cache
rm -r target/*/{debug,release}/{build,deps,examples,libsysroot*,native} || true
rm Cargo.lock 2>/dev/null || true
rm -r sysroot 2>/dev/null || true
# FIXME find a better way to get the target triple

@ -0,0 +1 @@
Subproject commit 36da64f20e96206ac279f700586817c8abe3bdf8

View File

@ -1,20 +0,0 @@
[package]
name = "compiler_builtins"
# Make sure the `compiler_builtins` from crates.io doesn't take precedence over this
# replacement by specifying a higher version than the one on crates.io.
version = "0.1.100"
authors = ["bjorn3 <bjorn3@users.noreply.github.com>"]
edition = "2018"
[lib]
name = "compiler_builtins"
path = "lib.rs"
test = false
doc = false
[dependencies]
core = { path = "../sysroot_src/src/libcore" }
[features]
rustc-dep-of-std = []
c = []

View File

@ -1,9 +0,0 @@
#![feature(compiler_builtins, staged_api)]
#![compiler_builtins]
#![no_std]
#![unstable(
feature = "compiler_builtins_lib",
reason = "Compiler builtins. Will never become stable.",
issue = "0"
)]

View File

@ -1,16 +1,6 @@
#![feature(start, box_syntax, alloc_system, core_intrinsics, alloc_prelude, alloc_error_handler)]
#![feature(start, box_syntax, core_intrinsics, alloc_error_handler)]
#![no_std]
extern crate alloc;
extern crate alloc_system;
use alloc::prelude::v1::*;
use alloc_system::System;
#[global_allocator]
static ALLOC: System = System;
#[link(name = "c")]
extern "C" {
fn puts(s: *const u8);
@ -23,19 +13,12 @@ fn panic_handler(_: &core::panic::PanicInfo) -> ! {
}
}
#[alloc_error_handler]
fn alloc_error_handler(_: alloc::alloc::Layout) -> ! {
unsafe {
core::intrinsics::abort();
}
}
#[start]
fn main(_argc: isize, _argv: *const *const u8) -> isize {
let world: Box<&str> = box "Hello World!\0";
unsafe {
puts(*world as *const str as *const u8);
extern "C" {
fn __rust_u128_mulo(a: u128, b: u128) -> (u128, bool);
}
assert_eq!(unsafe { __rust_u128_mulo(353985398u128, 932490u128).0 }, 330087843781020u128);
0
}

View File

@ -243,6 +243,8 @@ fn build_isa(sess: &Session) -> Box<dyn isa::TargetIsa + 'static> {
"false"
}).unwrap();
flags_builder.set("opt_level", "best").unwrap();
// FIXME enable again when https://github.com/CraneStation/cranelift/issues/664 is fixed
/*
use rustc::session::config::OptLevel;

43
test.sh
View File

@ -4,52 +4,9 @@ source config.sh
rm -r target/out || true
mkdir -p target/out/clif
echo "[BUILD] mini_core"
$RUSTC example/mini_core.rs --crate-name mini_core --crate-type dylib
echo "[BUILD] example"
$RUSTC example/example.rs --crate-type lib
echo "[JIT] mini_core_hello_world"
SHOULD_RUN=1 JIT_ARGS="abc bcd" $RUSTC --crate-type bin example/mini_core_hello_world.rs --cfg jit
echo "[AOT] mini_core_hello_world"
$RUSTC example/mini_core_hello_world.rs --crate-name mini_core_hello_world --crate-type bin
./target/out/mini_core_hello_world abc bcd
echo "[AOT] arbitrary_self_types_pointers_and_wrappers"
$RUSTC example/arbitrary_self_types_pointers_and_wrappers.rs --crate-name arbitrary_self_types_pointers_and_wrappers --crate-type bin
./target/out/arbitrary_self_types_pointers_and_wrappers
echo "[BUILD] sysroot"
time ./build_sysroot/build_sysroot.sh
echo "[BUILD+RUN] alloc_example"
$RUSTC example/alloc_example.rs --crate-type bin
./target/out/alloc_example
echo "[BUILD+RUN] std_example"
$RUSTC example/std_example.rs --crate-type bin
./target/out/std_example
echo "[BUILD] mod_bench"
$RUSTC example/mod_bench.rs --crate-type bin
# FIXME linker gives multiple definitions error on Linux
#echo "[BUILD] sysroot in release mode"
#./build_sysroot/build_sysroot.sh --release
COMPILE_MOD_BENCH_INLINE="$RUSTC example/mod_bench.rs --crate-type bin -Zmir-opt-level=3 -O --crate-name mod_bench_inline"
COMPILE_MOD_BENCH_LLVM_0="rustc example/mod_bench.rs --crate-type bin -Copt-level=0 -o target/out/mod_bench_llvm_0 -Cpanic=abort"
COMPILE_MOD_BENCH_LLVM_1="rustc example/mod_bench.rs --crate-type bin -Copt-level=1 -o target/out/mod_bench_llvm_1 -Cpanic=abort"
COMPILE_MOD_BENCH_LLVM_2="rustc example/mod_bench.rs --crate-type bin -Copt-level=2 -o target/out/mod_bench_llvm_2 -Cpanic=abort"
COMPILE_MOD_BENCH_LLVM_3="rustc example/mod_bench.rs --crate-type bin -Copt-level=3 -o target/out/mod_bench_llvm_3 -Cpanic=abort"
# Use 100 runs, because a single compilations doesn't take more than ~150ms, so it isn't very slow
hyperfine --runs 100 "$COMPILE_MOD_BENCH_INLINE" "$COMPILE_MOD_BENCH_LLVM_0" "$COMPILE_MOD_BENCH_LLVM_1" "$COMPILE_MOD_BENCH_LLVM_2" "$COMPILE_MOD_BENCH_LLVM_3"
echo
echo "[Bench] mod_bench"
hyperfine ./target/out/mod_bench{,_inline} ./target/out/mod_bench_llvm_*
cat target/out/log.txt | sort | uniq -c