Files
swift-mirror/test/CAS/Inputs/BuildCommandExtractor.py
Steven Wu b7329f4ea7 [Caching] Allow prefix mapping for generated bridging header
To allow prefix mapping of the bridging header to achieve cache hit when
source files are located in different location, the generated chained
bridging header should not include absolute paths of the headers. Fix
the problem by concat the chained bridging header together.

Fixes: https://github.com/swiftlang/swift/issues/84088
2025-09-24 10:14:10 -07:00

44 lines
1.1 KiB
Python
Executable File

#!/usr/bin/env python3
#
# Usage: BuildCommandExtractor.py file.json ModuleName
import json
import sys
input_json = sys.argv[1]
module_name = sys.argv[2]
mode = "swift"
if module_name.startswith("clang:"):
mode = "clang"
module_name = module_name[6:]
elif module_name.startswith("swiftPrebuiltExternal:"):
mode = "swiftPrebuiltExternal"
module_name = module_name[22:]
def printCmd(cmd):
for c in cmd:
print('"{}"'.format(c))
with open(input_json, "r") as file:
deps = json.load(file)
if module_name == "bridgingHeader":
info = deps["modules"][1]["details"]["swift"]
# the first argument is `-frontend`
cmd = info["bridgingHeader"]["commandLine"][1:]
printCmd(cmd)
# print input file name.
if "chainedBridgingHeaderPath" in info:
print(info["chainedBridgingHeaderPath"])
else:
module_names = deps["modules"][::2]
module_details = deps["modules"][1::2]
for name, detail in zip(module_names, module_details):
if name.get(mode, "") != module_name:
continue
printCmd(detail["details"][mode]["commandLine"])