Added architecture documentation (#544)
This commit is contained in:
parent
b7c0461a66
commit
dc49c3716c
|
@ -0,0 +1,48 @@
|
||||||
|
# Rules Foreign CC - Architecture
|
||||||
|
|
||||||
|
In this file, we describe how we think about the architecture
|
||||||
|
of `rules_foreign_cc`. It's goal is to help contributors orient themselves
|
||||||
|
and to document code restrictions and assumptions.
|
||||||
|
|
||||||
|
In general, we try to follow the common standard defined by
|
||||||
|
https://docs.bazel.build/versions/master/skylark/deploying.html.
|
||||||
|
|
||||||
|
## //foreign_cc
|
||||||
|
|
||||||
|
This is the core package of the rules. It houses all rules which orchestrate
|
||||||
|
builds in foreign (non-Bazel) c++ build systems.
|
||||||
|
|
||||||
|
`//foreign_cc:defs.bzl` contains reexports of all core rules and should act
|
||||||
|
as the single entry point for consumers of this project.
|
||||||
|
|
||||||
|
`//foreign_cc/private` contains the implementation details of various rules
|
||||||
|
and tools provided by this project. The symbols and signatures within this
|
||||||
|
package should not be relied on and can change with no prior warning. Any
|
||||||
|
functionality here should be moved into `//foreign_cc` if users want to
|
||||||
|
interface with a stable API.
|
||||||
|
|
||||||
|
## //examples (@rules_foreign_cc_examples)
|
||||||
|
|
||||||
|
There are two primary types of examples, "Top Level" and "Third Party".
|
||||||
|
"Top level" can also be thought of as integration tests for the rules as they
|
||||||
|
should not contain any dependencies on code outside of the repo. "Third Party"
|
||||||
|
examples are examples of the rules in existing external projects. For more
|
||||||
|
detals on the examples, see
|
||||||
|
[examples/README.md](./examples/README.md#third-party).
|
||||||
|
|
||||||
|
## //test
|
||||||
|
|
||||||
|
This package contains various tests of rules, rules which do not compile C++
|
||||||
|
code. These tests can be thought of as unittests in mocked environments.
|
||||||
|
|
||||||
|
## //toolchains
|
||||||
|
|
||||||
|
Contains all toolchain information for supported build systems. There are a
|
||||||
|
set of types of toolchains which you'll find here.
|
||||||
|
|
||||||
|
1. `built_toolchains`
|
||||||
|
2. `prebuilt_toolchains`
|
||||||
|
3. `preinstalled_toolchains`
|
||||||
|
|
||||||
|
For details on these types and the implemented toolchains, please see
|
||||||
|
[`./toolchains/README.md`](./toolchains/README.md)
|
|
@ -1,8 +1,8 @@
|
||||||
# Rules Foreign CC Examples
|
# Rules Foreign CC Examples
|
||||||
|
|
||||||
## Top Level
|
## Top-Level
|
||||||
|
|
||||||
Top level examples should contain no dependencies outside of `rules_foreign_cc` directly and anything else in
|
Top-level examples should contain no dependencies outside of `rules_foreign_cc` directly and anything else in
|
||||||
it's directory. The directories should be prefixed with the type of rule they're associated with. Eg
|
it's directory. The directories should be prefixed with the type of rule they're associated with. Eg
|
||||||
`cmake_with_data` (being a [cmake_external][cmake_external] example) and `configure_with_bazel_transitive`
|
`cmake_with_data` (being a [cmake_external][cmake_external] example) and `configure_with_bazel_transitive`
|
||||||
(being a [configure_make][configure_make] example).
|
(being a [configure_make][configure_make] example).
|
||||||
|
@ -12,8 +12,8 @@ it's directory. The directories should be prefixed with the type of rule they're
|
||||||
Examples of building source from outside of `rules_foreign_cc` should be put in the `third_party` directory
|
Examples of building source from outside of `rules_foreign_cc` should be put in the `third_party` directory
|
||||||
which is an isolated workspace that gets added to `rules_foreign_cc_examples` as an additional
|
which is an isolated workspace that gets added to `rules_foreign_cc_examples` as an additional
|
||||||
`rules_foreign_cc_examples_third_party` repository. In general, these are expected to be expensive to build
|
`rules_foreign_cc_examples_third_party` repository. In general, these are expected to be expensive to build
|
||||||
so adding new things here should be done selectively. In the top level package of this workspace, there exsits
|
so adding new things here should be done selectively. In the top-level package of this workspace, there are
|
||||||
test suites separated by operating system that all tests need to be registered to. The expected structure of
|
test suites separated by the operating system that all tests need to be registered with. The expected structure of
|
||||||
any example in this workspace are as follows:
|
any example in this workspace are as follows:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
# Rules Foreign CC Third Party Examples
|
||||||
|
|
||||||
|
This package contains examples of `rules_foreign_cc` building common/popular third-party source code.
|
||||||
|
|
||||||
|
For more details on how the examples here should be structured. Please see the documentation in [@rules_foreign_cc_examples//:README.md](../README.md#third-party).
|
|
@ -0,0 +1,16 @@
|
||||||
|
# Rules Foreign CC Toolchains
|
||||||
|
|
||||||
|
This package contains implementations for toolchains required for the supported build systems.
|
||||||
|
|
||||||
|
## Built Toolchains
|
||||||
|
|
||||||
|
These toolchains are for build tools that are built from source.
|
||||||
|
|
||||||
|
## PreBuilt Toolchains
|
||||||
|
|
||||||
|
These toolchains are for build tools that are built and stored at some remote site and downloaded when required by
|
||||||
|
any target currently in the build graph.
|
||||||
|
|
||||||
|
## PreInstalled Toolchains
|
||||||
|
|
||||||
|
These toolchains are for build tools already installed on the host.
|
Loading…
Reference in New Issue