Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

[fuchsia] Bump the target API level to 12, and pass it to fidlc #42667

Merged
merged 1 commit into from
Jun 9, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions tools/fuchsia/fidl/fidl_library.gni
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ template("fidl_library") {

assert(defined(invoker.sources), "A FIDL library requires some sources.")

assert(fuchsia_target_api_level != -1,
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

are there existing usages of this template? is fuchsia_target_api_level set for all on them?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes it's used to make FIDL bindings for Fuchsia SDK libraries (see tools/fuchsia/sdk/sdk_targets.gni). I copied the != -1 assertion from tools/fuchsia/fuchsia_archive.gni. fuchsia_target_api_level is a global GN arg set here https://github.com/flutter/engine/blob/main/tools/gn#L570. The build should fail if there's a case where it's not set.

"Must set a target api level when using FIDL libraries")

library_name = target_name
if (defined(invoker.name)) {
library_name = invoker.name
Expand Down Expand Up @@ -85,6 +88,8 @@ template("fidl_library") {
rebase_path(coding_tables, root_build_dir),
"--name",
library_name,
"--available",
"fuchsia:${fuchsia_target_api_level}",
"--sources",
] + rebase_path(sources, root_build_dir)

Expand Down
127 changes: 26 additions & 101 deletions tools/fuchsia/fidl/gen_response_file.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,128 +4,53 @@
# found in the LICENSE file.

import argparse
import os
import string
import sys


def read_libraries(libraries_path):
with open(libraries_path) as f:
lines = f.readlines()
return [l.rstrip("\n") for l in lines]


def write_libraries(libraries_path, libraries):
directory = os.path.dirname(libraries_path)
if not os.path.exists(directory):
os.makedirs(directory)
with open(libraries_path, "w+") as f:
for library in libraries:
f.write(library)
f.write("\n")
from pathlib import Path


def main():
parser = argparse.ArgumentParser(
description="Generate response file for FIDL frontend"
description="Generate response file for FIDL frontend. "
"Arguments not mentioned here are forwarded as is to fidlc."
)
parser.add_argument(
"--out-response-file",
help="The path for the response file to generate",
help="The path for for the response file to generate",
type=Path,
required=True
)
parser.add_argument(
"--out-libraries",
help="The path for the libraries file to generate",
help="The path for for the libraries file to generate",
type=Path,
required=True
)
parser.add_argument(
"--json", help="The path for the JSON file to generate, if any"
)
parser.add_argument(
"--tables", help="The path for the tables file to generate, if any"
)
parser.add_argument(
"--deprecated-fuchsia-only-c-client",
help="The path for the C simple client file to generate, if any"
"--sources", help="List of FIDL source files", nargs="+", required=True
)
parser.add_argument(
"--deprecated-fuchsia-only-c-header",
help="The path for the C header file to generate, if any"
)
parser.add_argument(
"--deprecated-fuchsia-only-c-server",
help="The path for the C simple server file to generate, if any"
)
parser.add_argument(
"--name", help="The name for the generated FIDL library, if any"
)
parser.add_argument(
"--depfile", help="The name for the generated depfile, if any"
)
parser.add_argument("--sources", help="List of FIDL source files", nargs="*")
parser.add_argument(
"--dep-libraries", help="List of dependent libraries", nargs="*"
)
parser.add_argument(
"--experimental-flag", help="List of experimental flags", action="append"
)
args = parser.parse_args()

target_libraries = []

for dep_libraries_path in args.dep_libraries or []:
dep_libraries = read_libraries(dep_libraries_path)
for library in dep_libraries:
if library in target_libraries:
continue
target_libraries.append(library)

target_libraries.append(" ".join(sorted(args.sources)))
write_libraries(args.out_libraries, target_libraries)

response_file = []

if args.json:
response_file.append("--json %s" % args.json)

if args.tables:
response_file.append("--tables %s" % args.tables)

if args.deprecated_fuchsia_only_c_client:
response_file.append(
"--deprecated-fuchsia-only-c-client %s" %
args.deprecated_fuchsia_only_c_client
)

if args.deprecated_fuchsia_only_c_header:
response_file.append(
"--deprecated-fuchsia-only-c-header %s" %
args.deprecated_fuchsia_only_c_header
)

if args.deprecated_fuchsia_only_c_server:
response_file.append(
"--deprecated-fuchsia-only-c-server %s" %
args.deprecated_fuchsia_only_c_server
)

if args.name:
response_file.append("--name %s" % args.name)

if args.depfile:
response_file.append("--depfile %s" % args.depfile)
args, args_to_forward = parser.parse_known_args()

if args.experimental_flag:
for experimental_flag in args.experimental_flag:
response_file.append("--experimental %s" % experimental_flag)
# Each line contains a library's source files separated by spaces.
# We use a dict instead of a set to maintain insertion order.
dep_lines = {}
for path in args.dep_libraries or []:
with open(path) as f:
for line in f:
dep_lines[line.rstrip()] = True
libraries = list(dep_lines)
libraries.append(" ".join(sorted(args.sources)))

response_file.extend(["--files %s" % library for library in target_libraries])
args.out_libraries.parent.mkdir(parents=True, exist_ok=True)
with open(args.out_libraries, "w") as f:
print("\n".join(libraries), file=f)

with open(args.out_response_file, "w+") as f:
f.write(" ".join(response_file))
f.write("\n")
args.out_response_file.parent.mkdir(parents=True, exist_ok=True)
with open(args.out_response_file, "w") as f:
fidlc_args = args_to_forward + ["--files " + line for line in libraries]
print(" ".join(fidlc_args), file=f)


if __name__ == "__main__":
sys.exit(main())
main()
2 changes: 1 addition & 1 deletion tools/fuchsia/target_api_level
Original file line number Diff line number Diff line change
@@ -1 +1 @@
11
12