From 4798ecc622e9178a7390cfcf0f7b09b3127b9f54 Mon Sep 17 00:00:00 2001 From: Petr Kozelka Date: Tue, 11 Sep 2018 02:29:57 +0200 Subject: [PATCH] Added Rust to C++ example --- rust-to-cpp/Cargo.toml | 11 +++++++++++ rust-to-cpp/build.rs | 8 ++++++++ rust-to-cpp/src/main.rs | 11 +++++++++++ rust-to-cpp/src/triple.cpp | 4 ++++ 4 files changed, 34 insertions(+) create mode 100644 rust-to-cpp/Cargo.toml create mode 100644 rust-to-cpp/build.rs create mode 100644 rust-to-cpp/src/main.rs create mode 100644 rust-to-cpp/src/triple.cpp diff --git a/rust-to-cpp/Cargo.toml b/rust-to-cpp/Cargo.toml new file mode 100644 index 0000000..efcf0fd --- /dev/null +++ b/rust-to-cpp/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "rust-to-cpp" +version = "0.1.0" +authors = ["Petr Kozelka "] +build = "build.rs" + +[dependencies] +libc = "0.2" + +[build-dependencies] +gcc = "0.3" diff --git a/rust-to-cpp/build.rs b/rust-to-cpp/build.rs new file mode 100644 index 0000000..cc7df86 --- /dev/null +++ b/rust-to-cpp/build.rs @@ -0,0 +1,8 @@ +extern crate gcc; + +fn main() { + gcc::Build::new() + .file("src/triple.cpp") + .cpp(true) + .compile("libtriple.a"); +} diff --git a/rust-to-cpp/src/main.rs b/rust-to-cpp/src/main.rs new file mode 100644 index 0000000..c02b7e6 --- /dev/null +++ b/rust-to-cpp/src/main.rs @@ -0,0 +1,11 @@ +extern crate libc; + +extern { + fn triple_input(input: libc::c_int) -> libc::c_int; +} + +fn main() { + let input = 4; + let output = unsafe { triple_input(input) }; + println!("{} * 3 = {}", input, output); +} diff --git a/rust-to-cpp/src/triple.cpp b/rust-to-cpp/src/triple.cpp new file mode 100644 index 0000000..b6d0757 --- /dev/null +++ b/rust-to-cpp/src/triple.cpp @@ -0,0 +1,4 @@ +extern "C" +int triple_input(int input) { + return input * 3; +}