Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

94 lines
3.1 KiB
Python

#!/usr/bin/env python3
import argparse
import libcxx.header_information
import os
import pathlib
import re
import sys
import typing
def IWYU_mapping(header: str) -> typing.Optional[typing.List[str]]:
ignore = [
"__cxx03/.+",
"__debug_utils/.+",
"__fwd/get[.]h",
"__pstl/.+",
"__support/.+",
"__utility/private_constructor_tag.h",
]
if any(re.match(pattern, header) for pattern in ignore):
return None
elif header == "__bits":
return ["bits"]
elif header in ("__bit_reference", "__fwd/bit_reference.h"):
return ["bitset", "vector"]
elif re.match("__configuration/.+", header) or header == "__config":
return ["version"]
elif header == "__hash_table":
return ["unordered_map", "unordered_set"]
elif header == "__locale":
return ["locale"]
elif re.match("__locale_dir/.+", header):
return ["locale"]
elif re.match("__math/.+", header):
return ["cmath"]
elif header == "__node_handle":
return ["map", "set", "unordered_map", "unordered_set"]
elif header == "__split_buffer":
return ["deque", "vector"]
elif re.match("(__thread/support[.]h)|(__thread/support/.+)", header):
return ["atomic", "mutex", "semaphore", "thread"]
elif header == "__tree":
return ["map", "set"]
elif header == "__fwd/byte.h":
return ["cstddef"]
elif header == "__fwd/pair.h":
return ["utility"]
elif header == "__fwd/subrange.h":
return ["ranges"]
elif re.match("__fwd/(fstream|ios|istream|ostream|sstream|streambuf)[.]h", header):
return ["iosfwd"]
# Handle remaining forward declaration headers
elif re.match("__fwd/(.+)[.]h", header):
return [re.match("__fwd/(.+)[.]h", header).group(1)]
# Handle detail headers for things like <__algorithm/foo.h>
elif re.match("__(.+?)/.+", header):
return [re.match("__(.+?)/.+", header).group(1)]
else:
return None
def main(argv: typing.List[str]):
parser = argparse.ArgumentParser()
parser.add_argument(
"-o",
help="File to output the IWYU mappings into",
type=argparse.FileType("w"),
required=True,
dest="output",
)
args = parser.parse_args(argv)
mappings = [] # Pairs of (header, public_header)
for header in libcxx.header_information.all_headers:
public_headers = IWYU_mapping(str(header))
if public_headers is not None:
mappings.extend((header, public) for public in public_headers)
# Validate that we only have valid public header names -- otherwise the mapping above
# needs to be updated.
for header, public in mappings:
if public not in libcxx.header_information.public_headers:
raise RuntimeError(f"{header}: Header {public} is not a valid header")
args.output.write("[\n")
for header, public in sorted(mappings):
args.output.write(
f' {{ include: [ "<{header}>", "private", "<{public}>", "public" ] }},\n'
)
args.output.write("]\n")
if __name__ == "__main__":
main(sys.argv[1:])