From 5c4faadf4ce04743d4ddb502f84c89b27264426e Mon Sep 17 00:00:00 2001 From: Kristina Chodorow Date: Fri, 4 Mar 2016 13:40:15 -0500 Subject: [PATCH] Move rust rules to their own repository --- AUTHORS | 18 ++ CONTRIBUTING.md | 27 +++ CONTRIBUTORS | 20 ++ LICENSE.txt | 202 ++++++++++++++++++ README.md | 23 +- WORKSPACE | 4 + examples/fibonacci/BUILD | 36 ++++ examples/fibonacci/benches/fibonacci_bench.rs | 25 +++ examples/fibonacci/src/lib.rs | 48 +++++ examples/hello_lib/BUILD | 38 ++++ examples/hello_lib/src/greeter.rs | 73 +++++++ examples/hello_lib/src/lib.rs | 15 ++ examples/hello_lib/tests/greeting.rs | 23 ++ examples/hello_world/BUILD | 19 ++ examples/hello_world/src/main.rs | 22 ++ BUILD => rust/BUILD | 0 rust.bzl => rust/rust.bzl | 0 test/BUILD | 2 +- test/rust_rule_test.bzl | 11 +- 19 files changed, 589 insertions(+), 17 deletions(-) create mode 100644 AUTHORS create mode 100644 CONTRIBUTING.md create mode 100644 CONTRIBUTORS create mode 100644 LICENSE.txt create mode 100644 WORKSPACE create mode 100644 examples/fibonacci/BUILD create mode 100644 examples/fibonacci/benches/fibonacci_bench.rs create mode 100644 examples/fibonacci/src/lib.rs create mode 100644 examples/hello_lib/BUILD create mode 100644 examples/hello_lib/src/greeter.rs create mode 100644 examples/hello_lib/src/lib.rs create mode 100644 examples/hello_lib/tests/greeting.rs create mode 100644 examples/hello_world/BUILD create mode 100644 examples/hello_world/src/main.rs rename BUILD => rust/BUILD (100%) rename rust.bzl => rust/rust.bzl (100%) diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 000000000..84e6e9c71 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,18 @@ +# This the official list of Bazel authors for copyright purposes. +# This file is distinct from the CONTRIBUTORS files. +# See the latter for an explanation. + +# Names should be added to this file as: +# Name or Organization +# The email address is not required for organizations. + +Google Inc. +Damien Martin-Guillerez +David Chen +Florian Weikert +Francois-Rene Rideau +Julio Merino +Kamal Marhubi +Kristina Chodorow +Philipp Wollermann +Ulf Adams diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..9d3d1aaf8 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,27 @@ +Want to contribute? Great! First, read this page (including the small print at the end). + +### Before you contribute +**Before we can use your code, you must sign the +[Google Individual Contributor License Agreement](https://developers.google.com/open-source/cla/individual?csw=1) +(CLA)**, which you can do online. + +The CLA is necessary mainly because you own the copyright to your changes, +even after your contribution becomes part of our codebase, so we need your +permission to use and distribute your code. We also need to be sure of +various other things — for instance that you'll tell us if you know that +your code infringes on other people's patents. You don't have to sign +the CLA until after you've submitted your code for review and a member has +approved it, but you must do it before we can put your code into our codebase. + +Before you start working on a larger contribution, you should get in touch +with us first. Use the issue tracker to explain your idea so we can help and +possibly guide you. + +### Code reviews and other contributions. +**All submissions, including submissions by project members, require review.** +Please follow the instructions in [the contributors documentation](http://bazel.io/contributing.html). + +### The small print +Contributions made by corporations are covered by a different agreement than +the one above, the +[Software Grant and Corporate Contributor License Agreement](https://cla.developers.google.com/about/google-corporate). diff --git a/CONTRIBUTORS b/CONTRIBUTORS new file mode 100644 index 000000000..7f8ed2bcd --- /dev/null +++ b/CONTRIBUTORS @@ -0,0 +1,20 @@ +# People who have agreed to one of the CLAs and can contribute patches. +# The AUTHORS file lists the copyright holders; this file +# lists people. For example, Google employees are listed here +# but not in AUTHORS, because Google holds the copyright. +# +# https://developers.google.com/open-source/cla/individual +# https://developers.google.com/open-source/cla/corporate +# +# Names should be added to this file as: +# Name + +Damien Martin-Guillerez +David Chen +Florian Weikert +Francois-Rene Rideau +Julio Merino +Kamal Marhubi +Kristina Chodorow +Philipp Wollermann +Ulf Adams diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index 85b9978ee..970a1e59b 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,12 @@ To use the Rust rules, add the following to your `WORKSPACE` file to add the external repositories for the Rust toolchain: ```python -load("@bazel_tools//tools/build_rules/rust:rust.bzl", "rust_repositories") +git_repository( + name = "io_bazel_rules_rust", + remote = "https://github.com/bazelbuild/rules_rust.git", + tag = "0.0.1", +) +load("@io_bazel_rules_rust//rust:rust.bzl", "rust_repositories") rust_repositories() ``` @@ -192,7 +197,7 @@ pub mod greeter; ```python package(default_visibility = ["//visibility:public"]) -load("@bazel_tools//tools/build_rules/rust:rust.bzl", "rust_library") +load("@io_bazel_rules_rust//rust:rust.bzl", "rust_library") rust_library( name = "hello_lib", @@ -360,7 +365,7 @@ impl Greeter { ```python package(default_visibility = ["//visibility:public"]) -load("@bazel_tools//tools/build_rules/rust:rust.bzl", "rust_library") +load("@io_bazel_rules_rust//rust:rust.bzl", "rust_library") rust_library( name = "hello_lib", @@ -382,7 +387,7 @@ fn main() { `hello_world/BUILD`: ```python -load("@bazel_tools//tools/build_rules/rust:rust.bzl", "rust_binary") +load("@io_bazel_rules_rust//rust:rust.bzl", "rust_binary") rust_binary( name = "hello_world", @@ -560,7 +565,7 @@ only depends on the `hello_lib` `rust_library` target: ```python package(default_visibility = ["//visibility:public"]) -load("@bazel_tools//tools/build_rules/rust:rust.bzl", "rust_library", "rust_test") +load("@io_bazel_rules_rust//rust:rust.bzl", "rust_library", "rust_test") rust_library( name = "hello_lib", @@ -617,7 +622,7 @@ with `greeting.rs` in `srcs` and a dependency on the `hello_lib` target: ```python package(default_visibility = ["//visibility:public"]) -load("@bazel_tools//tools/build_rules/rust:rust.bzl", "rust_library", "rust_test") +load("@io_bazel_rules_rust//rust:rust.bzl", "rust_library", "rust_test") rust_library( name = "hello_lib", @@ -804,7 +809,7 @@ To build the benchmark test, simply add a `rust_bench_test` target: ```python package(default_visibility = ["//visibility:public"]) -load("@bazel_tools//tools/build_rules/rust:rust.bzl", "rust_library", "rust_bench_test") +load("@io_bazel_rules_rust//rust:rust.bzl", "rust_library", "rust_bench_test") rust_library( name = "fibonacci", @@ -913,7 +918,7 @@ a `rust_doc` rule that depends on the the `hello_lib` `rust_library` target: ```python package(default_visibility = ["//visibility:public"]) -load("@bazel_tools//tools/build_rules/rust:rust.bzl", "rust_library", "rust_doc") +load("@io_bazel_rules_rust//rust:rust.bzl", "rust_library", "rust_doc") rust_library( name = "hello_lib", @@ -991,7 +996,7 @@ To run [documentation tests][doc-test] for the `hello_lib` crate, define a ```python package(default_visibility = ["//visibility:public"]) -load("@bazel_tools//tools/build_rules/rust:rust.bzl", "rust_library", "rust_doc_test") +load("@io_bazel_rules_rust//rust:rust.bzl", "rust_library", "rust_doc_test") rust_library( name = "hello_lib", diff --git a/WORKSPACE b/WORKSPACE new file mode 100644 index 000000000..3f1957f10 --- /dev/null +++ b/WORKSPACE @@ -0,0 +1,4 @@ +workspace(name = "io_bazel_rules_rust") + +load("//rust:rust.bzl", "rust_repositories") +rust_repositories() diff --git a/examples/fibonacci/BUILD b/examples/fibonacci/BUILD new file mode 100644 index 000000000..373700b94 --- /dev/null +++ b/examples/fibonacci/BUILD @@ -0,0 +1,36 @@ +package(default_visibility = ["//visibility:public"]) + +load( + "//rust:rust.bzl", + "rust_library", + "rust_test", + "rust_bench_test", + "rust_doc", + "rust_doc_test", +) + +rust_library( + name = "fibonacci", + srcs = ["src/lib.rs"], +) + +rust_test( + name = "fibonacci_test", + deps = [":fibonacci"], +) + +rust_bench_test( + name = "fibonacci_bench", + srcs = ["benches/fibonacci_bench.rs"], + deps = [":fibonacci"], +) + +rust_doc( + name = "fibonacci_doc", + dep = ":fibonacci", +) + +rust_doc_test( + name = "fibonacci_doc_test", + dep = ":fibonacci", +) diff --git a/examples/fibonacci/benches/fibonacci_bench.rs b/examples/fibonacci/benches/fibonacci_bench.rs new file mode 100644 index 000000000..80aa1a84c --- /dev/null +++ b/examples/fibonacci/benches/fibonacci_bench.rs @@ -0,0 +1,25 @@ +// Copyright 2015 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#![feature(test)] + +extern crate test; +extern crate fibonacci; + +use test::Bencher; + +#[bench] +fn bench_fibonacci(b: &mut Bencher) { + b.iter(|| fibonacci::fibonacci(40)); +} diff --git a/examples/fibonacci/src/lib.rs b/examples/fibonacci/src/lib.rs new file mode 100644 index 000000000..d8ae6e3fc --- /dev/null +++ b/examples/fibonacci/src/lib.rs @@ -0,0 +1,48 @@ +// Copyright 2015 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/// Returns the nth Fibonacci number. +/// +/// # Examples +/// +/// ``` +/// fibonacci::fibonacci(5) +/// ``` +pub fn fibonacci(n: u64) -> u64 { + if n < 2 { + return n; + } + let mut n1: u64 = 0; + let mut n2: u64 = 1; + for _ in 1..n { + let sum = n1 + n2; + n1 = n2; + n2 = sum; + } + n2 +} + +#[cfg(test)] +mod test { + use super::fibonacci; + + #[test] + fn test_fibonacci() { + let numbers : Vec = + vec![0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]; + for (i, number) in numbers.iter().enumerate() { + assert_eq!(*number, fibonacci(i as u64)); + } + } +} diff --git a/examples/hello_lib/BUILD b/examples/hello_lib/BUILD new file mode 100644 index 000000000..39687693c --- /dev/null +++ b/examples/hello_lib/BUILD @@ -0,0 +1,38 @@ +package(default_visibility = ["//visibility:public"]) + +load( + "//rust:rust.bzl", + "rust_library", + "rust_test", + "rust_doc", + "rust_doc_test", +) + +rust_library( + name = "hello_lib", + srcs = [ + "src/greeter.rs", + "src/lib.rs", + ], +) + +rust_test( + name = "hello_lib_test", + deps = [":hello_lib"], +) + +rust_test( + name = "greeting_test", + srcs = ["tests/greeting.rs"], + deps = [":hello_lib"], +) + +rust_doc( + name = "hello_lib_doc", + dep = ":hello_lib", +) + +rust_doc_test( + name = "hello_lib_doc_test", + dep = ":hello_lib", +) diff --git a/examples/hello_lib/src/greeter.rs b/examples/hello_lib/src/greeter.rs new file mode 100644 index 000000000..bf332e4bd --- /dev/null +++ b/examples/hello_lib/src/greeter.rs @@ -0,0 +1,73 @@ +// Copyright 2015 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/// Object that displays a greeting. +pub struct Greeter { + greeting: String, +} + +/// Implementation of Greeter. +impl Greeter { + /// Constructs a new `Greeter`. + /// + /// # Examples + /// + /// ``` + /// use hello_lib::greeter; + /// + /// let greeter = Greeter::new("Hello"); + /// ``` + pub fn new(greeting: &str) -> Greeter { + Greeter { greeting: greeting.to_string(), } + } + + /// Returns the greeting as a string. + /// + /// # Examples + /// + /// ``` + /// use hello_lib::greeter; + /// + /// let greeter = Greeter::new("Hello"); + /// let greeting = greeter.greeting("World"); + /// ``` + pub fn greeting(&self, thing: &str) -> String { + format!("{} {}", &self.greeting, thing) + } + + /// Prints the greeting. + /// + /// # Examples + /// + /// ``` + /// use hello_lib::greeter; + /// + /// let greeter = Greeter::new("Hello"); + /// greeter.greet("World"); + /// ``` + pub fn greet(&self, thing: &str) { + println!("{} {}", &self.greeting, thing); + } +} + +#[cfg(test)] +mod test { + use super::Greeter; + + #[test] + fn test_greeting() { + let hello = Greeter::new("Hi"); + assert_eq!("Hi Rust", hello.greeting("Rust")); + } +} diff --git a/examples/hello_lib/src/lib.rs b/examples/hello_lib/src/lib.rs new file mode 100644 index 000000000..9dc608911 --- /dev/null +++ b/examples/hello_lib/src/lib.rs @@ -0,0 +1,15 @@ +// Copyright 2015 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +pub mod greeter; diff --git a/examples/hello_lib/tests/greeting.rs b/examples/hello_lib/tests/greeting.rs new file mode 100644 index 000000000..be3435681 --- /dev/null +++ b/examples/hello_lib/tests/greeting.rs @@ -0,0 +1,23 @@ +// Copyright 2015 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +extern crate hello_lib; + +use hello_lib::greeter; + +#[test] +fn test_greeting() { + let hello = greeter::Greeter::new("Hello"); + assert_eq!("Hello world", hello.greeting("world")); +} diff --git a/examples/hello_world/BUILD b/examples/hello_world/BUILD new file mode 100644 index 000000000..1b3db3a49 --- /dev/null +++ b/examples/hello_world/BUILD @@ -0,0 +1,19 @@ +package(default_visibility = ["//visibility:public"]) + +load("//rust:rust.bzl", "rust_binary", "rust_doc", "rust_doc_test") + +rust_binary( + name = "hello_world", + srcs = ["src/main.rs"], + deps = ["//examples/hello_lib"], +) + +rust_doc( + name = "hello_world_doc", + dep = ":hello_world", +) + +rust_doc_test( + name = "hello_world_doc_test", + dep = ":hello_world", +) diff --git a/examples/hello_world/src/main.rs b/examples/hello_world/src/main.rs new file mode 100644 index 000000000..03cf43fcf --- /dev/null +++ b/examples/hello_world/src/main.rs @@ -0,0 +1,22 @@ +// Copyright 2015 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +extern crate hello_lib; + +use hello_lib::greeter; + +fn main() { + let hello = greeter::Greeter::new("Hello"); + hello.greet("world"); +} diff --git a/BUILD b/rust/BUILD similarity index 100% rename from BUILD rename to rust/BUILD diff --git a/rust.bzl b/rust/rust.bzl similarity index 100% rename from rust.bzl rename to rust/rust.bzl diff --git a/test/BUILD b/test/BUILD index dca03f2bd..80fb6633a 100644 --- a/test/BUILD +++ b/test/BUILD @@ -1,3 +1,3 @@ load(":rust_rule_test.bzl", "rust_rule_test") -rust_rule_test("//examples/rust") +rust_rule_test("//examples") diff --git a/test/rust_rule_test.bzl b/test/rust_rule_test.bzl index c4094bd46..d137bdded 100644 --- a/test/rust_rule_test.bzl +++ b/test/rust_rule_test.bzl @@ -15,15 +15,12 @@ """Tests for rust rules.""" load( - "//tools/build_rules/rust:rust.bzl", + "//rust:rust.bzl", "rust_library", "rust_binary", "rust_test", ) -load( - "//tools/build_rules:test_rules.bzl", - "rule_test", -) +load("@bazel_tools//tools/build_rules:test_rules.bzl", "rule_test") def _rust_library_test(package): rule_test( @@ -47,8 +44,8 @@ def _rust_test_test(package): """Issue rule tests for rust_test.""" rule_test( name = "greeting_rule_test", - generates = ["greeting"], - rule = package + "/hello_lib:greeting", + generates = ["libhello_lib.rlib"], + rule = package + "/hello_lib:hello_lib", ) def rust_rule_test(package):