diff --git a/DEPS b/DEPS index dfc52d74123..829ce54f4e0 100644 --- a/DEPS +++ b/DEPS @@ -84,7 +84,7 @@ vars = { "reclient_version": "git_revision:f3883c2237b0eb9cc9524cb571b5ab8378f257e4", # Update from https://chrome-infra-packages.appspot.com/p/fuchsia/sdk/core - "fuchsia_sdk_version": "version:17.20240105.3.1", + "fuchsia_sdk_version": "version:18.20240208.2.1", "download_fuchsia_deps": False, # Ninja, runs the build based on files generated by GN. diff --git a/build/fuchsia/fidl_gen_cpp.py b/build/fuchsia/fidl_gen_cpp.py index db78863a4cf..add4d9fc814 100755 --- a/build/fuchsia/fidl_gen_cpp.py +++ b/build/fuchsia/fidl_gen_cpp.py @@ -3,10 +3,12 @@ # Copyright 2013 The Flutter Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. + """ Generate C/C++ headers and source files from the set of FIDL files specified in the meta.json manifest. """ + import argparse import collections import json @@ -14,103 +16,84 @@ import os import subprocess import sys - def GetFIDLFilesRecursive(libraries, sdk_base, path): - with open(path) as json_file: - parsed = json.load(json_file) - result = [] - deps = parsed['deps'] - for dep in deps: - dep_meta_json = os.path.abspath('%s/fidl/%s/meta.json' % - (sdk_base, dep)) - GetFIDLFilesRecursive(libraries, sdk_base, dep_meta_json) - libraries[parsed['name']] = result + parsed['sources'] - + with open(path) as json_file: + parsed = json.load(json_file) + result = [] + deps = parsed['deps'] + for dep in deps: + dep_meta_json = os.path.abspath('%s/fidl/%s/meta.json' % (sdk_base, dep)) + GetFIDLFilesRecursive(libraries, sdk_base, dep_meta_json) + libraries[parsed['name']] = result + parsed['sources'] def GetFIDLFilesByLibraryName(sdk_base, root): - libraries = collections.OrderedDict() - GetFIDLFilesRecursive(libraries, sdk_base, root) - return libraries - + libraries = collections.OrderedDict() + GetFIDLFilesRecursive(libraries, sdk_base, root) + return libraries def main(): - parser = argparse.ArgumentParser() + parser = argparse.ArgumentParser(); - parser.add_argument('--fidlc-bin', - dest='fidlc_bin', - action='store', - required=True) - parser.add_argument('--fidlgen-bin', - dest='fidlgen_bin', - action='append', - required=False) + parser.add_argument('--fidlc-bin', dest='fidlc_bin', action='store', required=True) + parser.add_argument('--fidlgen-bin', dest='fidlgen_bin', action='append', required=False) - parser.add_argument('--sdk-base', - dest='sdk_base', - action='store', - required=True) - parser.add_argument('--root', dest='root', action='store', required=True) - parser.add_argument('--json', dest='json', action='store', required=True) - parser.add_argument('--fidlgen-output-root', - dest='fidlgen_output_root', - action='store', - required=False) - parser.add_argument('--output-c-tables', - dest='output_c_tables', - action='store', - required=True) - parser.add_argument('--target-api-level', - dest='target_api_level', - action='store', - required=False) + parser.add_argument('--sdk-base', dest='sdk_base', action='store', required=True) + parser.add_argument('--root', dest='root', action='store', required=True) + parser.add_argument('--json', dest='json', action='store', required=True) + parser.add_argument('--fidlgen-output-root', dest='fidlgen_output_root', action='store', required=False) + parser.add_argument('--target-api-level', dest='target_api_level', action='store', required=False) - args = parser.parse_args() + args = parser.parse_args() - assert os.path.exists(args.fidlc_bin) + assert os.path.exists(args.fidlc_bin) - fidl_files_by_name = GetFIDLFilesByLibraryName(args.sdk_base, args.root) + fidl_files_by_name = GetFIDLFilesByLibraryName(args.sdk_base, args.root) - fidlc_command = [ - args.fidlc_bin, '--tables', args.output_c_tables, '--json', args.json + fidlc_command = [ + args.fidlc_bin, + '--json', + args.json + ] + + if args.target_api_level: + fidlc_command += [ + '--available', + 'fuchsia:{api_level}'.format(api_level=args.target_api_level), ] - if args.target_api_level: - fidlc_command += [ - '--available', - 'fuchsia:{api_level}'.format(api_level=args.target_api_level), - ] + # Create an iterator that works on both python3 and python2 + try: + fidl_files_by_name_iter = list(fidl_files_by_name.items()) + except AttributeError: + fidl_files_by_name_iter = iter(fidl_files_by_name.items()) - # Create an iterator that works on both python3 and python2 - try: - fidl_files_by_name_iter = list(fidl_files_by_name.items()) - except AttributeError: - fidl_files_by_name_iter = iter(fidl_files_by_name.items()) + for _, fidl_files in fidl_files_by_name_iter: + fidlc_command.append('--files') + for fidl_file in fidl_files: + fidl_abspath = os.path.abspath('%s/%s' % (args.sdk_base, fidl_file)) + fidlc_command.append(fidl_abspath) - for _, fidl_files in fidl_files_by_name_iter: - fidlc_command.append('--files') - for fidl_file in fidl_files: - fidl_abspath = os.path.abspath('%s/%s' % (args.sdk_base, fidl_file)) - fidlc_command.append(fidl_abspath) + subprocess.check_call(fidlc_command) - subprocess.check_call(fidlc_command) + if args.fidlgen_output_root: + assert os.path.exists(args.json) + for fidlgen_bin in args.fidlgen_bin: + assert os.path.exists(fidlgen_bin) - if args.fidlgen_output_root: - assert os.path.exists(args.json) - for fidlgen_bin in args.fidlgen_bin: - assert os.path.exists(fidlgen_bin) + fidlgen_command = [ + fidlgen_bin, + '-json', + args.json, + '-root', + args.fidlgen_output_root + ] - fidlgen_command = [ - fidlgen_bin, '-json', args.json, '-root', - args.fidlgen_output_root - ] - - subprocess.check_call(fidlgen_command) - else: - # --fidlgen-bin and --fidlgen-output-root should be passed in together. - assert not args.fidlgen_bin - - return 0 + subprocess.check_call(fidlgen_command) + else: + # --fidlgen-bin and --fidlgen-output-root should be passed in together. + assert not args.fidlgen_bin + return 0 if __name__ == '__main__': - sys.exit(main()) + sys.exit(main()) diff --git a/build/fuchsia/sdk.gni b/build/fuchsia/sdk.gni index 853df0dff1c..ce326274eb6 100644 --- a/build/fuchsia/sdk.gni +++ b/build/fuchsia/sdk.gni @@ -90,7 +90,10 @@ template("fuchsia_fidl_library") { library_name_json = "${meta_json.name}.json" foreach(dep, meta_json.deps) { - _deps += [ ":$dep" ] + # TODO(https://fxbug.dev/42172334): Make zx less special. + if (dep != "zx") { + _deps += [ ":$dep" ] + } } config_name = "config_$target_name" @@ -106,8 +109,6 @@ template("fuchsia_fidl_library") { inputs = [ invoker.meta ] - outputs = [ "$target_gen_dir/$library_name_slashes/cpp/tables.c" ] - args = [ "--fidlc-bin", rebase_path("${_fuchsia_tools_path}/fidlc"), @@ -117,8 +118,6 @@ template("fuchsia_fidl_library") { rebase_path(invoker.meta), "--json", rebase_path("$target_gen_dir/$library_name_json"), - "--output-c-tables", - rebase_path("$target_gen_dir/$library_name_slashes/cpp/tables.c"), ] if (fuchsia_target_api_level != -1) { @@ -128,43 +127,41 @@ template("fuchsia_fidl_library") { ] } - if (!defined(invoker.only_generate_tables) || - !invoker.only_generate_tables) { - outputs += [ - "$target_gen_dir/$library_name_slashes/cpp/fidl.cc", - "$target_gen_dir/$library_name_slashes/cpp/fidl.h", - "$target_gen_dir/$library_name_slashes/cpp/fidl_test_base.h", + outputs = [ + "$target_gen_dir/$library_name_slashes/cpp/fidl.cc", + "$target_gen_dir/$library_name_slashes/cpp/fidl.h", + "$target_gen_dir/$library_name_slashes/cpp/fidl_test_base.h", + "$target_gen_dir/$library_name_slashes/cpp/tables.c", - "$target_gen_dir/fidl/$library_name/cpp/common_types.cc", - "$target_gen_dir/fidl/$library_name/cpp/common_types.h", - "$target_gen_dir/fidl/$library_name/cpp/fidl.h", - "$target_gen_dir/fidl/$library_name/cpp/hlcpp_conversion.h", - "$target_gen_dir/fidl/$library_name/cpp/markers.h", - "$target_gen_dir/fidl/$library_name/cpp/natural_messaging.cc", - "$target_gen_dir/fidl/$library_name/cpp/natural_messaging.h", - "$target_gen_dir/fidl/$library_name/cpp/natural_ostream.cc", - "$target_gen_dir/fidl/$library_name/cpp/natural_ostream.h", - "$target_gen_dir/fidl/$library_name/cpp/natural_types.cc", - "$target_gen_dir/fidl/$library_name/cpp/natural_types.h", - "$target_gen_dir/fidl/$library_name/cpp/type_conversions.cc", - "$target_gen_dir/fidl/$library_name/cpp/type_conversions.h", - "$target_gen_dir/fidl/$library_name/cpp/wire.h", - "$target_gen_dir/fidl/$library_name/cpp/wire_messaging.cc", - "$target_gen_dir/fidl/$library_name/cpp/wire_messaging.h", - "$target_gen_dir/fidl/$library_name/cpp/wire_test_base.h", - "$target_gen_dir/fidl/$library_name/cpp/wire_types.cc", - "$target_gen_dir/fidl/$library_name/cpp/wire_types.h", - ] + "$target_gen_dir/fidl/$library_name/cpp/common_types.cc", + "$target_gen_dir/fidl/$library_name/cpp/common_types.h", + "$target_gen_dir/fidl/$library_name/cpp/fidl.h", + "$target_gen_dir/fidl/$library_name/cpp/hlcpp_conversion.h", + "$target_gen_dir/fidl/$library_name/cpp/markers.h", + "$target_gen_dir/fidl/$library_name/cpp/natural_messaging.cc", + "$target_gen_dir/fidl/$library_name/cpp/natural_messaging.h", + "$target_gen_dir/fidl/$library_name/cpp/natural_ostream.cc", + "$target_gen_dir/fidl/$library_name/cpp/natural_ostream.h", + "$target_gen_dir/fidl/$library_name/cpp/natural_types.cc", + "$target_gen_dir/fidl/$library_name/cpp/natural_types.h", + "$target_gen_dir/fidl/$library_name/cpp/type_conversions.cc", + "$target_gen_dir/fidl/$library_name/cpp/type_conversions.h", + "$target_gen_dir/fidl/$library_name/cpp/wire.h", + "$target_gen_dir/fidl/$library_name/cpp/wire_messaging.cc", + "$target_gen_dir/fidl/$library_name/cpp/wire_messaging.h", + "$target_gen_dir/fidl/$library_name/cpp/wire_test_base.h", + "$target_gen_dir/fidl/$library_name/cpp/wire_types.cc", + "$target_gen_dir/fidl/$library_name/cpp/wire_types.h", + ] - args += [ - "--fidlgen-bin", - rebase_path("${_fuchsia_tools_path}/fidlgen_cpp"), - "--fidlgen-bin", - rebase_path("${_fuchsia_tools_path}/fidlgen_hlcpp"), - "--fidlgen-output-root", - rebase_path("$target_gen_dir"), - ] - } + args += [ + "--fidlgen-bin", + rebase_path("${_fuchsia_tools_path}/fidlgen_cpp"), + "--fidlgen-bin", + rebase_path("${_fuchsia_tools_path}/fidlgen_hlcpp"), + "--fidlgen-output-root", + rebase_path("$target_gen_dir"), + ] } source_set(target_name) { @@ -218,6 +215,14 @@ template("_fuchsia_cc_source_library") { _deps += [ "../fidl:$dep" ] } + foreach(binding_dep, meta_json.fidl_binding_deps) { + # No need to check "binding_deps.binding_type" because we always + # generate both hlcpp and natural bindings. + foreach(dep, binding_dep.deps) { + _deps += [ "../fidl:$dep" ] + } + } + source_set(target_name) { output_name = _output_name public = _public_headers @@ -309,12 +314,11 @@ template("fuchsia_sdk") { meta = part_meta_rebased } } else if (part_type == "fidl_library") { - fuchsia_fidl_library(subtarget_name) { - meta = part_meta_rebased - - # TODO(fxbug.dev/90838): Remove the zx special-case when generic - # option is available. - only_generate_tables = subtarget_name == "zx" + # TODO(https://fxbug.dev/42172334): Make zx less special. + if (subtarget_name != "zx") { + fuchsia_fidl_library(subtarget_name) { + meta = part_meta_rebased + } } } else if (part_type == "cc_prebuilt_library") { _fuchsia_cc_prebuilt_library(subtarget_name) { @@ -334,7 +338,7 @@ template("fuchsia_repo") { assert(defined(invoker.repo), "The location of the repo should be specified.") action(target_name) { - script = "//tools/fuchsia/gen_repo.py" + script = "//flutter/tools/fuchsia/gen_repo.py" pm_binary = rebase_path("${_fuchsia_tools_path}/pm") repo_directory = invoker.repo diff --git a/tools/gn.py b/tools/gn.py index b5aab1a99f7..d5f10e4bacc 100755 --- a/tools/gn.py +++ b/tools/gn.py @@ -235,7 +235,7 @@ def ToGnArgs(args, mode, arch, target_os, sanitizer, verify_sdk_hash, gn_args['arm_float_abi'] = floatabi gn_args['arm_use_neon'] = True if gn_args['target_os'] == 'fuchsia': - gn_args['fuchsia_target_api_level'] = 15 + gn_args['fuchsia_target_api_level'] = 16 gn_args['is_debug'] = mode == 'debug' gn_args['is_release'] = mode == 'release'