aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/build_defs/d/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'tools/build_defs/d/README.md')
-rw-r--r--tools/build_defs/d/README.md678
1 files changed, 0 insertions, 678 deletions
diff --git a/tools/build_defs/d/README.md b/tools/build_defs/d/README.md
deleted file mode 100644
index a099cc1665..0000000000
--- a/tools/build_defs/d/README.md
+++ /dev/null
@@ -1,678 +0,0 @@
-# D rules
-
-## Rules
-
-<div class="toc">
- <h2>Rules</h2>
- <ul>
- <li><a href="#d_library">d_library</a></li>
- <li><a href="#d_source_library">d_source_library</a></li>
- <li><a href="#d_binary">d_binary</a></li>
- <li><a href="#d_test">d_test</a></li>
- <li><a href="#d_docs">d_docs</a></li>
- </ul>
-</div>
-
-## Setup
-
-To use the D rules, add the following to your `WORKSPACE` file to add the
-external repositories for the D toolchain:
-
-```python
-load("@bazel_tools//tools/build_defs/d:d.bzl", "d_repositories")
-
-d_repositories()
-```
-
-## Roadmap
-
-* Generate documentation using [`ddox`](https://github.com/rejectedsoftware/ddox)
- for `d_docs` rule.
-* Support for other options as defined in the [Dub package
- format](http://code.dlang.org/package-format?lang=json)
-* Support for specifying different configurations of a library, closer to
- [Dub's model for configurations](http://code.dlang.org/package-format?lang=json#configurations)
-* Workspace rule for retrieving dependencies from [Dub](http://code.dlang.org/)
-
-<a name="d_library"></a>
-## d_library
-
-```python
-d_library(name, srcs, deps, includes, linkopts, versions)
-```
-
-<table class="table table-condensed table-bordered table-params">
- <colgroup>
- <col class="col-param" />
- <col class="param-description" />
- </colgroup>
- <thead>
- <tr>
- <th colspan="2">Attributes</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>name</code></td>
- <td>
- <code>Name, required</code>
- <p>A unique name for this rule.</p>
- <p>
- This name will be used as the name of the library built by this rule.
- </p>
- </td>
- </tr>
- <tr>
- <td><code>srcs</code></td>
- <td>
- <code>List of labels, required</code>
- <p>List of D <code>.d</code> source files used to build the library.</p>
- </td>
- </tr>
- <tr>
- <td><code>deps</code></td>
- <td>
- <code>List of labels, optional</code>
- <p>List of libraries to be linked to this library target.</p>
- <p>
- These can either be other <code>d_library</code> targets,
- source-only <code>d_source_library</code> targets, or
- <code>cc_library</code> targets if linking a native library.
- </p>
- </td>
- </tr>
- <tr>
- <td><code>imports</code></td>
- <td>
- <code>List of strings, optional</code>
- <p>List of import dirs to add to the compile line.</p>
- <p>
- These will be passed to the D compiler via <code>-I</code> flags.
- </p>
- </td>
- </tr>
- <tr>
- <td><code>linkopts</code></td>
- <td>
- <code>List of strings, optional</code>
- <p>List of flags that are added to the D linker command.</p>
- <p>
- These will be passed to the D compiler via <code>-L</code> flags.
- </p>
- </td>
- </tr>
- <tr>
- <td><code>versions</code></td>
- <td>
- <code>List of strings, optional</code>
- <p>List of versions to be defined during compilation.</p>
- <p>
- Versions are used for conditional compilation and are enabled in the
- code using <code>version</code> condition blocks. These versions
- listed here will be passed to the D compiler using
- <code>-version</code> flags.
- </p>
- </td>
- </tr>
- </tbody>
-</table>
-
-### Example
-
-Suppose you have the following directory structure for a D project:
-
-```
-[workspace]/
- WORKSPACE
- foo/
- BUILD
- foo.d
- bar.d
- baz.d
-```
-
-The library `foo` is built using a `d_library` target:
-
-`foo/BUILD`:
-
-```python
-load("@bazel_tools//tools/build_defs/d/d", "d_library")
-
-d_binary(
- name = "foo",
- srcs = [
- "foo.d",
- "bar.d",
- "baz.d",
- ],
-)
-```
-
-<a name="d_source_library"></a>
-## d_source_library
-
-```python
-d_source_library(name, srcs, deps, includes, linkopts, versions)
-```
-
-
-<table class="table table-condensed table-bordered table-params">
- <colgroup>
- <col class="col-param" />
- <col class="param-description" />
- </colgroup>
- <thead>
- <tr>
- <th colspan="2">Attributes</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>name</code></td>
- <td>
- <code>Name, required</code>
- <p>A unique name for this rule.</p>
- </td>
- </tr>
- <tr>
- <td><code>srcs</code></td>
- <td>
- <code>List of labels, required</code>
- <p>
- List of D <code>.d</code> source files that comprises this source
- library target.
- </p>
- </td>
- </tr>
- <tr>
- <td><code>deps</code></td>
- <td>
- <code>List of labels, optional</code>
- <p>List of library targets depended on by this target.</p>
- <p>
- These can either be other <code>d_source_library</code> targets or
- <code>cc_library</code> targets, such as when this source library
- target implements the D interface for a native library. Any native
- libraries will be linked by <code>d_library</code> targets that
- depend on this target.
- </p>
- </td>
- </tr>
- <tr>
- <td><code>imports</code></td>
- <td>
- <code>List of strings, optional</code>
- <p>List of import dirs to add to the compile line.</p>
- <p>
- These will be passed to the D compiler via <code>-I</code> flags for
- any <code>d_library</code> targets that depend on this target.
- </p>
- </td>
- </tr>
- <tr>
- <td><code>linkopts</code></td>
- <td>
- <code>List of strings, optional</code>
- <p>List of flags that are added to the D linker command.</p>
- <p>
- These will be passed to the D compiler via <code>-L</code> flags for
- any <code>d_library</code> targets that depend on this target.
- </p>
- </td>
- </tr>
- <tr>
- <td><code>versions</code></td>
- <td>
- <code>List of strings, optional</code>
- <p>List of version flags to be defined during compilation.</p>
- <p>
- Versions are used for conditional compilation and are enabled in the
- code using <code>version</code> condition blocks. These versions
- listed here will be passed to the D compiler using
- <code>-version</code> flags for any <code>d_library</code> targets
- that depend on this target.
- </p>
- </td>
- </tr>
- </tbody>
-</table>
-
-### Example
-
-Suppose you have the following directory structure for a project building a
-C library and a [D interface](http://dlang.org/interfaceToC.html) for the C
-library:
-
-```
-[workspace]/
- WORKSPACE
- greeter/
- BUILD
- native_greeter.c
- native_greeter.h
- native_greeter.d
- hello_world
- BUILD
- hello_world.d
-```
-
-Build the C library using the `cc_library` rule and then use the
-`d_source_library` to define the target for the D interface for the C
-`native_greeter` library:
-
-`greeter/BUILD`:
-
-```python
-load("@bazel_tools//tools/build_defs/d/d", "d_source_library")
-
-cc_library(
- name = "native_greeter_lib",
- srcs = ["native_greeter.c"],
- hdrs = ["native_greeter.h"],
-)
-
-d_source_library(
- name = "native_greeter",
- srcs = ["native_greeter.d"],
- deps = [":native_greeter_lib"],
-)
-```
-
-Other targets can directly depend on the `d_source_library` target to link
-the C library:
-
-`hello_world/BUILD`:
-
-```python
-load("@bazel_tools//tools/build_defs/d/d", "d_source_library")
-
-d_binary(
- name = "hello_world",
- srcs = ["hello_world.d"],
- deps = ["//greeter:native_greeter"],
-)
-```
-
-<a name="d_binary"></a>
-## d_binary
-
-```python
-d_binary(name, srcs, deps, includes, linkopts, versions)
-```
-
-<table class="table table-condensed table-bordered table-params">
- <colgroup>
- <col class="col-param" />
- <col class="param-description" />
- </colgroup>
- <thead>
- <tr>
- <th colspan="2">Attributes</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>name</code></td>
- <td>
- <code>Name, required</code>
- <p>A unique name for this rule.</p>
- <p>
- This name will be used as the name of the binary built by this rule.
- </p>
- </td>
- </tr>
- <tr>
- <td><code>srcs</code></td>
- <td>
- <code>List of labels, required</code>
- <p>List of D <code>.d</code> source files used to build the binary.</p>
- </td>
- </tr>
- <tr>
- <td><code>deps</code></td>
- <td>
- <code>List of labels, optional</code>
- <p>List of libraries to be linked to this binary target.</p>
- <p>
- These can either be other <code>d_library</code> targets,
- source-only <code>d_source_library</code> targets, or
- <code>cc_library</code> targets if linking a native library.
- </p>
- </td>
- </tr>
- <tr>
- <td><code>imports</code></td>
- <td>
- <code>List of strings, optional</code>
- <p>List of import dirs to add to the compile line.</p>
- <p>
- These will be passed to the D compiler via <code>-I</code> flags.
- </p>
- </td>
- </tr>
- <tr>
- <td><code>linkopts</code></td>
- <td>
- <code>List of strings, optional</code>
- <p>List of flags that are added to the D linker command.</p>
- <p>
- These will be passed to the D compiler via <code>-L</code> flags.
- </p>
- </td>
- </tr>
- <tr>
- <td><code>versions</code></td>
- <td>
- <code>List of strings, optional</code>
- <p>List of versions to be defined during compilation.</p>
- <p>
- Versions are used for conditional compilation and are enabled in the
- code using <code>version</code> condition blocks. These versions
- listed here will be passed to the D compiler using
- <code>-version</code> flags.
- </p>
- </td>
- </tr>
- </tbody>
-</table>
-
-Suppose you have the following directory structure for a D project:
-
-```
-[workspace]/
- WORKSPACE
- hello_lib/
- BUILD
- greeter.d
- hello_world
- BUILD
- hello_world.d
-```
-
-The source file `hello_lib/greeter.d` defines a module `greeter`:
-
-```d
-module greeter;
-...
-```
-
-The `hello_lib` library is built using a `d_library` target:
-
-`hello_lib/BUILD`:
-
-```python
-load("@bazel_tools//tools/build_defs/d/d", "d_library")
-
-d_library(
- name = "hello_lib",
- srcs = ["greeter.d"],
-)
-```
-
-By default, import paths are from the root of the workspace. Thus, the source
-for the `hello_world` binary, `hello_world.d`, would import the `greeter`
-module as follows:
-
-```d
-import hello_lib.greeter;
-```
-
-However, this can be changed via the `imports` attribute on the `d_library`
-rule.
-
-The `hello_world` binary is built using a `d_binary` target:
-
-`hello_world/BUILD`:
-
-```python
-load("@bazel_tools//tools/build_defs/d/d", "d_library")
-
-d_binary(
- name = "hello_world",
- srcs = ["hello_world.d"],
- deps = ["//hello_lib"],
-)
-```
-
-<a name="d_test"></a>
-## d_test
-
-```python
-d_test(name, srcs, deps, includes, linkopts, versions)
-```
-
-<table class="table table-condensed table-bordered table-params">
- <colgroup>
- <col class="col-param" />
- <col class="param-description" />
- </colgroup>
- <thead>
- <tr>
- <th colspan="2">Attributes</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>name</code></td>
- <td>
- <code>Name, required</code>
- <p>A unique name for this rule.</p>
- <p>
- This name will be used as the name of the test built by this rule.
- </p>
- </td>
- </tr>
- <tr>
- <td><code>srcs</code></td>
- <td>
- <code>List of labels, required</code>
- <p>List of D <code>.d</code> source files used to build the test.</p>
- </td>
- </tr>
- <tr>
- <td><code>deps</code></td>
- <td>
- <code>List of labels, optional</code>
- <p>List of libraries to be linked to this test target.</p>
- <p>
- These can either be other <code>d_library</code> targets,
- source-only <code>d_source_library</code> targets, or
- <code>cc_library</code> targets if linking a native library.
- </p>
- </td>
- </tr>
- <tr>
- <td><code>imports</code></td>
- <td>
- <code>List of strings, optional</code>
- <p>List of import dirs to add to the compile line.</p>
- <p>
- These will be passed to the D compiler via <code>-I</code> flags.
- </p>
- </td>
- </tr>
- <tr>
- <td><code>linkopts</code></td>
- <td>
- <code>List of strings, optional</code>
- <p>List of flags that are added to the D linker command.</p>
- <p>
- These will be passed to the D compiler via <code>-L</code> flags.
- </p>
- </td>
- </tr>
- <tr>
- <td><code>versions</code></td>
- <td>
- <code>List of strings, optional</code>
- <p>List of versions to be defined during compilation.</p>
- <p>
- Versions are used for conditional compilation and are enabled in the
- code using <code>version</code> condition blocks. These versions
- listed here will be passed to the D compiler using
- <code>-version</code> flags.
- </p>
- </td>
- </tr>
- </tbody>
-</table>
-
-### Example
-
-Suppose you have the following directory structure for a D project:
-
-```
-[workspace]/
- WORKSPACE
- hello_lib/
- BUILD
- greeter.d
- greeter_test.d
-```
-
-`hello_lib/greeter.d`:
-
-```d
-module greeter;
-
-import std.stdio;
-import std.string;
-
-class Greeter {
- private string greeting;
-
- public:
- this(in string greeting) {
- this.greeting = greeting.dup;
- }
-
- string makeGreeting(in immutable string thing) {
- return format("%s %s!", this.greeting, thing);
- }
-
- void greet(in immutable string thing) {
- writeln(makeGreeting(thing));
- }
-}
-```
-
-`hello_lib/greeter_test.d`:
-
-```d
-import hello_lib.greeter;
-
-unittest {
- auto greeter = new Greeter("Hello");
- assert(greeter.makeGreeting("world") == "Hello world!");
-}
-
-void main() {}
-```
-
-To build the library and unit test:
-
-`hello_lib/BUILD`:
-
-```python
-load("@bazel_tools//tools/build_defs/d/d", "d_library", "d_test")
-
-d_library(
- name = "greeter",
- srcs = ["greeter.d"],
-)
-
-d_test(
- name = "greeter_test",
- srcs = ["greeter_test.d"],
- deps = [":greeter"],
-)
-```
-
-The unit test can then be run using:
-
-```sh
-bazel test //hello_lib:greeter_test
-```
-
-<a name="d_docs"></a>
-## d_docs
-
-```python
-d_docs(name, dep)
-```
-
-<table class="table table-condensed table-bordered table-params">
- <colgroup>
- <col class="col-param" />
- <col class="param-description" />
- </colgroup>
- <thead>
- <tr>
- <th colspan="2">Attributes</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>name</code></td>
- <td>
- <code>Name, required</code>
- <p>A unique name for this rule.</p>
- </td>
- </tr>
- <tr>
- <td><code>dep</code></td>
- <td>
- <code>Label, required</code>
- <p>The label of the target to generate code documentation for.</p>
- <p>
- <code>d_docs</code> can generate HTML code documentation for the
- source files of <code>d_library</code>, <code>d_source_library</code>,
- <code>d_binary</code>, or <code>d_test</code> targets.
- </p>
- </td>
- </tr>
- </tbody>
-</table>
-
-### Example
-
-Suppose you have the following directory structure for a D project:
-
-```
-[workspace]/
- WORKSPACE
- foo/
- BUILD
- foo.d
- bar.d
- baz.d
-```
-
-The `foo/` directory contains the sources for the `d_library` `foo`. To
-generate HTML documentation for the `foo` library, define a `d_docs` target
-that takes the `d_library` `foo` as its dependency:
-
-`foo/BUILD`:
-
-```python
-load("@bazel_tools//tools/build_defs/d/d", "d_library", "d_docs")
-
-d_library(
- name = "foo",
- srcs = [
- "foo.d",
- "bar.d",
- "baz.d",
- ],
-)
-
-d_docs(
- name = "foo_docs",
- dep = ":foo",
-)
-```
-
-Running `bazel build //foo:foo_docs` will generate a zip file containing the
-HTML documentation generated from the source files. See the official D language
-documentation on the [Documentation Generator](http://dlang.org/ddoc.html) for
-more information on the conventions for source documentation.