49 lines
1.8 KiB
Markdown
49 lines
1.8 KiB
Markdown
|
# 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)
|