From afbdb0cc4138be4f1d8970caf6c97a9a13eb8e7e Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Sun, 19 Apr 2015 10:07:11 -0700 Subject: [PATCH] Add Rust to C example --- .gitignore | 2 ++ rust-to-c/Cargo.toml | 11 +++++++++++ rust-to-c/build.rs | 5 +++++ rust-to-c/src/double.c | 3 +++ rust-to-c/src/main.rs | 11 +++++++++++ 5 files changed, 32 insertions(+) create mode 100644 .gitignore create mode 100644 rust-to-c/Cargo.toml create mode 100644 rust-to-c/build.rs create mode 100644 rust-to-c/src/double.c create mode 100644 rust-to-c/src/main.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fa8d85a --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +Cargo.lock +target diff --git a/rust-to-c/Cargo.toml b/rust-to-c/Cargo.toml new file mode 100644 index 0000000..aedebe0 --- /dev/null +++ b/rust-to-c/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "rust-to-c" +version = "0.1.0" +authors = ["Alex Crichton "] +build = "build.rs" + +[dependencies] +libc = "0.1" + +[build-dependencies] +gcc = "0.3" diff --git a/rust-to-c/build.rs b/rust-to-c/build.rs new file mode 100644 index 0000000..ec8cc94 --- /dev/null +++ b/rust-to-c/build.rs @@ -0,0 +1,5 @@ +extern crate gcc; + +fn main() { + gcc::Config::new().file("src/double.c").compile("libdouble.a"); +} diff --git a/rust-to-c/src/double.c b/rust-to-c/src/double.c new file mode 100644 index 0000000..9fd3c60 --- /dev/null +++ b/rust-to-c/src/double.c @@ -0,0 +1,3 @@ +int double_input(int input) { + return input * 2; +} diff --git a/rust-to-c/src/main.rs b/rust-to-c/src/main.rs new file mode 100644 index 0000000..2104230 --- /dev/null +++ b/rust-to-c/src/main.rs @@ -0,0 +1,11 @@ +extern crate libc; + +extern { + fn double_input(input: libc::c_int) -> libc::c_int; +} + +fn main() { + let input = 4; + let output = unsafe { double_input(input) }; + println!("{} * 2 = {}", input, output); +}