diff --git a/Rakefile b/Rakefile index 8fab45c4..61a5a29b 100644 --- a/Rakefile +++ b/Rakefile @@ -18,6 +18,14 @@ compile_rust :hamcrest_crate, { do_not_collect_rust_deps: true, } +# cross-compiled librlibc +compile_rust :rlibc_crate, { + source: 'thirdparty/librlibc/lib.rs'.in_root, + produce: 'thirdparty/librlibc/lib.rs'.in_root.as_rlib.in_build, + out_dir: true, + recompile_on: :triple, +} + # cross-compiled libcore compile_rust :core_crate, { source: 'thirdparty/libcore/lib.rs'.in_root, @@ -29,7 +37,7 @@ compile_rust :core_crate, { # zinc crate compile_rust :zinc_crate, { source: 'main.rs'.in_source, - deps: :core_crate, + deps: [:core_crate, :rlibc_crate], produce: 'main.rs'.in_source.as_rlib.in_build, out_dir: true, recompile_on: [:triple, :platform], @@ -38,6 +46,7 @@ compile_rust :zinc_crate, { # zinc runtime support lib compile_rust :zinc_support, { source: 'lib/support.rs'.in_source, + deps: [:rlibc_crate], produce: 'support.o'.in_intermediate, llvm_pass: :inline, lto: false, diff --git a/src/lib/support.rs b/src/lib/support.rs index 224910dc..593c6a63 100644 --- a/src/lib/support.rs +++ b/src/lib/support.rs @@ -17,51 +17,6 @@ #![crate_type="rlib"] #![feature(asm, intrinsics)] -extern "rust-intrinsic" { - pub fn offset(dst: *const T, offset: int) -> *const T; -} - -#[allow(non_camel_case_types)] -pub type c_int = i32; - -#[no_mangle] -#[no_split_stack] -#[inline(never)] -pub fn memcpy(dest: *mut u8, src: *const u8, n: int) { - unsafe { - let mut i = 0; - while i < n { - *(offset(dest as *const u8, i) as *mut u8) = *(offset(src, i)); - i += 1; - } - } -} - -#[no_mangle] -#[no_split_stack] -pub extern "C" fn __aeabi_memcpy(dest: *mut u8, src: *const u8, n: int) { - memcpy(dest, src, n); -} - -#[no_mangle] -#[no_split_stack] -#[inline(never)] -pub fn memset(s: *mut u8, c: c_int, n: int) { - unsafe { - let mut i = 0; - while i < n { - *(offset(s as *const u8, i) as *mut u8) = c as u8; - i += 1; - } - } -} - -#[no_mangle] -#[no_split_stack] -pub extern "C" fn __aeabi_memset(s: *mut u8, n: int, c: c_int) { - memset(s, c, n); -} - #[cfg(test)] #[no_split_stack] #[no_mangle] diff --git a/src/main.rs b/src/main.rs index 28f650e1..b45455cb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -45,6 +45,7 @@ STM32F403/407). */ extern crate core; +extern crate rlibc; #[cfg(test)] #[phase(plugin,link)] extern crate std; #[cfg(test)] extern crate native; diff --git a/support/rake.rb b/support/rake.rb index 5505b4c4..47be5c84 100644 --- a/support/rake.rb +++ b/support/rake.rb @@ -151,6 +151,10 @@ def provide_stdlibs sh "git clone --single-branch --depth 1 https://github.com/mozilla/rust #{t.name}" end.invoke + Rake::FileTask.define_task 'thirdparty/librlibc/lib.rs'.in_root do |t| + sh "ln -s rust/src/librlibc thirdparty/librlibc" + end.invoke + Rake::FileTask.define_task 'thirdparty/libcore/lib.rs'.in_root do |t| sh "ln -s rust/src/libcore thirdparty/libcore" end.invoke