commit | f2318d2cbf38d249d620dc99a11570843306a6fa | [log] [tgz] |
---|---|---|
author | PikachuHy <pikachuhy@linux.alibaba.com> | Wed Aug 28 09:33:35 2024 -0700 |
committer | Copybara-Service <copybara-worker@google.com> | Wed Aug 28 09:34:44 2024 -0700 |
tree | 40bbb795e2e164756a0c11e3ef9c7e2b70cd8091 | |
parent | a69e618e97fce4b30a1ea3fe3ce1feae269220fc [diff] |
[2/5] support C++20 Modules, add C++20 modules tools I split the XXL PR https://github.com/bazelbuild/bazel/pull/19940 into several small patches. This is the second patch of Support C++20 Modules, I add C++20 related tools ## Overview This patch contains two tools: `aggregate-ddi` and `gen-modmap`. These tools are designed to facilitate the processing of C++20 modules information and direct dependent information (DDI). They can aggregate module information, process dependencies, and generate module maps for use in C++20 modular projects. ## The format of DDI The format of DDI content is [p1689](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1689r5.html). for example, ``` { "revision": 0, "rules": [ { "primary-output": "path/to/a.pcm", "provides": [ { "is-interface": true, "logical-name": "a", "source-path": "path/to/a.cppm" } ], "requires": [ { "logical-name": "b" } ] } ], "version": 1 } ``` ## Tools ### `aggregate-ddi` #### Description `aggregate-ddi` is a tool that aggregates C++20 module information from multiple sources and processes DDI files to generate a consolidated output containing module paths and their dependencies. #### Usage ```sh aggregate-ddi -m <cpp20modules-info-file1> -m <cpp20modules-info-file2> ... -d <ddi-file1> <path/to/pcm1> -d <ddi-file2> <path/to/pcm2> ... -o <output-file> ``` #### Command Line Arguments - `-m <cpp20modules-info-file>`: Path to a JSON file containing C++20 module information. - `-d <ddi-file> <pcm-path>`: Path to a DDI file and its associated PCM path. - `-o <output-file>`: Path to the output file where the aggregated information will be stored. #### Example ```sh aggregate-ddi -m module-info1.json -m module-info2.json -d ddi1.json /path/to/pcm1 -d ddi2.json /path/to/pcm2 -o output.json ``` ### `generate-modmap` #### Description `generate-modmap` is a tool that generates a module map from a DDI file and C++20 modules information file. It creates two output files: one for the module map and one for the input module paths. #### Usage ```sh generate-modmap <ddi-file> <cpp20modules-info-file> <output-file> <compiler> ``` #### Command Line Arguments - `<ddi-file>`: Path to the DDI file containing module dependencies. - `<cpp20modules-info-file>`: Path to the JSON file containing C++20 modules information. - `<output-file>`: Path to the output file where the module map will be stored. - `<compiler>`: Compiler type the modmap to use. Only `clang`, `gcc`, `msvc-cl` supported. #### Example ```sh generate-modmap ddi.json cpp20modules-info.json modmap clang ``` This command will generate two files: - `modmap`: containing the module map. - `modmap.input`: containing the module paths. Closes #22427. PiperOrigin-RevId: 668488153 Change-Id: Icde51b498f1ecc5c1182427029d0a81ce7c2f686
{Fast, Correct} - Choose two
Build and test software of any size, quickly and reliably.
Speed up your builds and tests: Bazel rebuilds only what is necessary. With advanced local and distributed caching, optimized dependency analysis and parallel execution, you get fast and incremental builds.
One tool, multiple languages: Build and test Java, C++, Android, iOS, Go, and a wide variety of other language platforms. Bazel runs on Windows, macOS, and Linux.
Scalable: Bazel helps you scale your organization, codebase, and continuous integration solution. It handles codebases of any size, in multiple repositories or a huge monorepo.
Extensible to your needs: Easily add support for new languages and platforms with Bazel's familiar extension language. Share and re-use language rules written by the growing Bazel community.
Follow our tutorials:
To report a security issue, please email security@bazel.build with a description of the issue, the steps you took to create the issue, affected versions, and, if known, mitigations for the issue. Our vulnerability management team will respond within 3 working days of your email. If the issue is confirmed as a vulnerability, we will open a Security Advisory. This project follows a 90 day disclosure timeline.
See CONTRIBUTING.md