Implement ffi for settings type. Bug: 528225104 Change-Id: I90ab329ec34c39b50d9f7fa4283b2e946a6a6964 Reviewed-on: https://gn-review.googlesource.com/c/gn/+/23621 Reviewed-by: Takuto Ikuta <tikuta@google.com> Commit-Queue: Matt Stark <msta@google.com>
diff --git a/build/gen.py b/build/gen.py index c539995..032e74c 100755 --- a/build/gen.py +++ b/build/gen.py
@@ -644,210 +644,217 @@ f'/MANIFESTINPUT:{win_manifest}']) static_libraries = { - 'base': {'sources': [ - 'src/base/command_line.cc', - 'src/base/environment.cc', - 'src/base/files/file.cc', - 'src/base/files/file_enumerator.cc', - 'src/base/files/file_path.cc', - 'src/base/files/file_path_constants.cc', - 'src/base/files/file_util.cc', - 'src/base/files/scoped_file.cc', - 'src/base/files/scoped_temp_dir.cc', - 'src/base/json/json_parser.cc', - 'src/base/json/json_reader.cc', - 'src/base/json/json_writer.cc', - 'src/base/json/string_escape.cc', - 'src/base/logging.cc', - 'src/base/md5.cc', - 'src/base/memory/ref_counted.cc', - 'src/base/memory/weak_ptr.cc', - 'src/base/sha1.cc', - 'src/base/sha2.cc', - 'src/base/strings/string_number_conversions.cc', - 'src/base/strings/string_split.cc', - 'src/base/strings/string_util.cc', - 'src/base/strings/string_util_constants.cc', - 'src/base/strings/stringprintf.cc', - 'src/base/strings/utf_string_conversion_utils.cc', - 'src/base/strings/utf_string_conversions.cc', - 'src/base/timer/elapsed_timer.cc', - 'src/base/value_iterators.cc', - 'src/base/values.cc', - ]}, - 'string_atom': {'sources': [ - 'src/gn/string_atom.cc', - 'src/gn/ffi/intern_string.cc', - ]}, - 'gn_lib': {'sources': [ - 'src/gn/action_target_generator.cc', - 'src/gn/action_values.cc', - 'src/gn/analyzer.cc', - 'src/gn/args.cc', - 'src/gn/binary_target_generator.cc', - 'src/gn/build_settings.cc', - 'src/gn/builder.cc', - 'src/gn/builder_record.cc', - 'src/gn/bundle_data.cc', - 'src/gn/bundle_data_target_generator.cc', - 'src/gn/bundle_file_rule.cc', - 'src/gn/builtin_tool.cc', - 'src/gn/c_include_iterator.cc', - 'src/gn/c_substitution_type.cc', - 'src/gn/c_tool.cc', - 'src/gn/command_analyze.cc', - 'src/gn/command_args.cc', - 'src/gn/command_check.cc', - 'src/gn/command_clean.cc', - 'src/gn/command_clean_stale.cc', - 'src/gn/command_desc.cc', - 'src/gn/command_format.cc', - 'src/gn/command_gen.cc', - 'src/gn/command_help.cc', - 'src/gn/command_ls.cc', - 'src/gn/command_meta.cc', - 'src/gn/command_outputs.cc', - 'src/gn/command_path.cc', - 'src/gn/command_refs.cc', - 'src/gn/command_suggest.cc', - 'src/gn/commands.cc', - 'src/gn/compile_commands_writer.cc', - 'src/gn/rust_project_writer.cc', - 'src/gn/config.cc', - 'src/gn/config_values.cc', - 'src/gn/config_values_extractors.cc', - 'src/gn/config_values_generator.cc', - 'src/gn/copy_target_generator.cc', - 'src/gn/create_bundle_target_generator.cc', - 'src/gn/deps_iterator.cc', - 'src/gn/desc_builder.cc', - 'src/gn/eclipse_writer.cc', - 'src/gn/err.cc', - 'src/gn/escape.cc', - 'src/gn/exec_process.cc', - 'src/gn/ffi/label.cc', - 'src/gn/filesystem_utils.cc', - 'src/gn/file_writer.cc', - 'src/gn/frameworks_utils.cc', - 'src/gn/function_exec_script.cc', - 'src/gn/function_expand_directory.cc', - 'src/gn/function_filter.cc', - 'src/gn/function_filter_labels.cc', - 'src/gn/function_foreach.cc', - 'src/gn/function_forward_variables_from.cc', - 'src/gn/function_get_label_info.cc', - 'src/gn/function_get_path_info.cc', - 'src/gn/function_get_target_outputs.cc', - 'src/gn/function_label_matches.cc', - 'src/gn/function_len.cc', - 'src/gn/function_path_exists.cc', - 'src/gn/function_process_file_template.cc', - 'src/gn/function_read_file.cc', - 'src/gn/function_rebase_path.cc', - 'src/gn/function_set_default_toolchain.cc', - 'src/gn/function_set_defaults.cc', - 'src/gn/function_template.cc', - 'src/gn/function_toolchain.cc', - 'src/gn/function_write_file.cc', - 'src/gn/functions.cc', - 'src/gn/functions_target.cc', - 'src/gn/general_tool.cc', - 'src/gn/generated_file_target_generator.cc', - 'src/gn/group_target_generator.cc', - 'src/gn/header_checker.cc', - 'src/gn/import_manager.cc', - 'src/gn/input_conversion.cc', - 'src/gn/input_file.cc', - 'src/gn/input_file_manager.cc', - 'src/gn/invoke_python.cc', - 'src/gn/item.cc', - 'src/gn/json_project_writer.cc', - 'src/gn/label.cc', - 'src/gn/label_pattern.cc', - 'src/gn/lib_file.cc', - 'src/gn/loader.cc', - 'src/gn/location.cc', - 'src/gn/metadata.cc', - 'src/gn/metadata_walk.cc', - 'src/gn/ninja_action_target_writer.cc', - 'src/gn/ninja_binary_target_writer.cc', - 'src/gn/ninja_build_writer.cc', - 'src/gn/ninja_bundle_data_target_writer.cc', - 'src/gn/ninja_c_binary_target_writer.cc', - 'src/gn/ninja_copy_target_writer.cc', - 'src/gn/ninja_create_bundle_target_writer.cc', - 'src/gn/ninja_generated_file_target_writer.cc', - 'src/gn/ninja_group_target_writer.cc', - 'src/gn/ninja_module_writer_util.cc', - 'src/gn/ninja_outputs_writer.cc', - 'src/gn/ninja_rust_binary_target_writer.cc', - 'src/gn/ninja_target_command_util.cc', - 'src/gn/ninja_target_writer.cc', - 'src/gn/ninja_toolchain_writer.cc', - 'src/gn/ninja_tools.cc', - 'src/gn/ninja_utils.cc', - 'src/gn/ninja_writer.cc', - 'src/gn/operators.cc', - 'src/gn/output_conversion.cc', - 'src/gn/output_file.cc', - 'src/gn/parse_node_value_adapter.cc', - 'src/gn/parse_tree.cc', - 'src/gn/parser.cc', - 'src/gn/path_output.cc', - 'src/gn/pattern.cc', - 'src/gn/pool.cc', - 'src/gn/qt_creator_writer.cc', - 'src/gn/resolved_target_data.cc', - 'src/gn/runtime_deps.cc', - 'src/gn/rust_substitution_type.cc', - 'src/gn/rust_tool.cc', - 'src/gn/rust_values.cc', - 'src/gn/rust_values_generator.cc', - 'src/gn/rust_variables.cc', - 'src/gn/scheduler.cc', - 'src/gn/scope.cc', - 'src/gn/scope_per_file_provider.cc', - 'src/gn/settings.cc', - 'src/gn/setup.cc', - 'src/gn/source_dir.cc', - 'src/gn/source_file.cc', - 'src/gn/standard_out.cc', - 'src/gn/string_output_buffer.cc', - 'src/gn/string_utils.cc', - 'src/gn/substitution_list.cc', - 'src/gn/substitution_pattern.cc', - 'src/gn/substitution_type.cc', - 'src/gn/substitution_writer.cc', - 'src/gn/swift_values.cc', - 'src/gn/swift_values_generator.cc', - 'src/gn/swift_variables.cc', - 'src/gn/switches.cc', - 'src/gn/target.cc', - 'src/gn/target_generator.cc', - 'src/gn/template.cc', - 'src/gn/token.cc', - 'src/gn/tokenizer.cc', - 'src/gn/tool.cc', - 'src/gn/toolchain.cc', - 'src/gn/trace.cc', - 'src/gn/value.cc', - 'src/gn/value_extractors.cc', - 'src/gn/variables.cc', - 'src/gn/version.cc', - 'src/gn/visibility.cc', - 'src/gn/visual_studio_utils.cc', - 'src/gn/visual_studio_writer.cc', - 'src/gn/xcode_object.cc', - 'src/gn/xcode_writer.cc', - 'src/gn/xml_element_writer.cc', - 'src/util/atomic_write.cc', - 'src/util/exe_path.cc', - 'src/util/msg_loop.cc', - 'src/util/semaphore.cc', - 'src/util/sys_info.cc', - 'src/util/ticks.cc', - 'src/util/worker_pool.cc', - ]}, + 'base': { + 'sources': [ + 'src/base/command_line.cc', + 'src/base/environment.cc', + 'src/base/files/file.cc', + 'src/base/files/file_enumerator.cc', + 'src/base/files/file_path.cc', + 'src/base/files/file_path_constants.cc', + 'src/base/files/file_util.cc', + 'src/base/files/scoped_file.cc', + 'src/base/files/scoped_temp_dir.cc', + 'src/base/json/json_parser.cc', + 'src/base/json/json_reader.cc', + 'src/base/json/json_writer.cc', + 'src/base/json/string_escape.cc', + 'src/base/logging.cc', + 'src/base/md5.cc', + 'src/base/memory/ref_counted.cc', + 'src/base/memory/weak_ptr.cc', + 'src/base/sha1.cc', + 'src/base/sha2.cc', + 'src/base/strings/string_number_conversions.cc', + 'src/base/strings/string_split.cc', + 'src/base/strings/string_util.cc', + 'src/base/strings/string_util_constants.cc', + 'src/base/strings/stringprintf.cc', + 'src/base/strings/utf_string_conversion_utils.cc', + 'src/base/strings/utf_string_conversions.cc', + 'src/base/timer/elapsed_timer.cc', + 'src/base/value_iterators.cc', + 'src/base/values.cc', + ] + }, + 'string_atom': { + 'sources': [ + 'src/gn/string_atom.cc', + 'src/gn/ffi/intern_string.cc', + ] + }, + 'gn_lib': { + 'sources': [ + 'src/gn/action_target_generator.cc', + 'src/gn/action_values.cc', + 'src/gn/analyzer.cc', + 'src/gn/args.cc', + 'src/gn/binary_target_generator.cc', + 'src/gn/build_settings.cc', + 'src/gn/builder.cc', + 'src/gn/builder_record.cc', + 'src/gn/bundle_data.cc', + 'src/gn/bundle_data_target_generator.cc', + 'src/gn/bundle_file_rule.cc', + 'src/gn/builtin_tool.cc', + 'src/gn/c_include_iterator.cc', + 'src/gn/c_substitution_type.cc', + 'src/gn/c_tool.cc', + 'src/gn/command_analyze.cc', + 'src/gn/command_args.cc', + 'src/gn/command_check.cc', + 'src/gn/command_clean.cc', + 'src/gn/command_clean_stale.cc', + 'src/gn/command_desc.cc', + 'src/gn/command_format.cc', + 'src/gn/command_gen.cc', + 'src/gn/command_help.cc', + 'src/gn/command_ls.cc', + 'src/gn/command_meta.cc', + 'src/gn/command_outputs.cc', + 'src/gn/command_path.cc', + 'src/gn/command_refs.cc', + 'src/gn/command_suggest.cc', + 'src/gn/commands.cc', + 'src/gn/compile_commands_writer.cc', + 'src/gn/rust_project_writer.cc', + 'src/gn/config.cc', + 'src/gn/config_values.cc', + 'src/gn/config_values_extractors.cc', + 'src/gn/config_values_generator.cc', + 'src/gn/copy_target_generator.cc', + 'src/gn/create_bundle_target_generator.cc', + 'src/gn/deps_iterator.cc', + 'src/gn/desc_builder.cc', + 'src/gn/eclipse_writer.cc', + 'src/gn/err.cc', + 'src/gn/escape.cc', + 'src/gn/exec_process.cc', + 'src/gn/ffi/label.cc', + 'src/gn/ffi/settings.cc', + 'src/gn/filesystem_utils.cc', + 'src/gn/file_writer.cc', + 'src/gn/frameworks_utils.cc', + 'src/gn/function_exec_script.cc', + 'src/gn/function_expand_directory.cc', + 'src/gn/function_filter.cc', + 'src/gn/function_filter_labels.cc', + 'src/gn/function_foreach.cc', + 'src/gn/function_forward_variables_from.cc', + 'src/gn/function_get_label_info.cc', + 'src/gn/function_get_path_info.cc', + 'src/gn/function_get_target_outputs.cc', + 'src/gn/function_label_matches.cc', + 'src/gn/function_len.cc', + 'src/gn/function_path_exists.cc', + 'src/gn/function_process_file_template.cc', + 'src/gn/function_read_file.cc', + 'src/gn/function_rebase_path.cc', + 'src/gn/function_set_default_toolchain.cc', + 'src/gn/function_set_defaults.cc', + 'src/gn/function_template.cc', + 'src/gn/function_toolchain.cc', + 'src/gn/function_write_file.cc', + 'src/gn/functions.cc', + 'src/gn/functions_target.cc', + 'src/gn/general_tool.cc', + 'src/gn/generated_file_target_generator.cc', + 'src/gn/group_target_generator.cc', + 'src/gn/header_checker.cc', + 'src/gn/import_manager.cc', + 'src/gn/input_conversion.cc', + 'src/gn/input_file.cc', + 'src/gn/input_file_manager.cc', + 'src/gn/invoke_python.cc', + 'src/gn/item.cc', + 'src/gn/json_project_writer.cc', + 'src/gn/label.cc', + 'src/gn/label_pattern.cc', + 'src/gn/lib_file.cc', + 'src/gn/loader.cc', + 'src/gn/location.cc', + 'src/gn/metadata.cc', + 'src/gn/metadata_walk.cc', + 'src/gn/ninja_action_target_writer.cc', + 'src/gn/ninja_binary_target_writer.cc', + 'src/gn/ninja_build_writer.cc', + 'src/gn/ninja_bundle_data_target_writer.cc', + 'src/gn/ninja_c_binary_target_writer.cc', + 'src/gn/ninja_copy_target_writer.cc', + 'src/gn/ninja_create_bundle_target_writer.cc', + 'src/gn/ninja_generated_file_target_writer.cc', + 'src/gn/ninja_group_target_writer.cc', + 'src/gn/ninja_module_writer_util.cc', + 'src/gn/ninja_outputs_writer.cc', + 'src/gn/ninja_rust_binary_target_writer.cc', + 'src/gn/ninja_target_command_util.cc', + 'src/gn/ninja_target_writer.cc', + 'src/gn/ninja_toolchain_writer.cc', + 'src/gn/ninja_tools.cc', + 'src/gn/ninja_utils.cc', + 'src/gn/ninja_writer.cc', + 'src/gn/operators.cc', + 'src/gn/output_conversion.cc', + 'src/gn/output_file.cc', + 'src/gn/parse_node_value_adapter.cc', + 'src/gn/parse_tree.cc', + 'src/gn/parser.cc', + 'src/gn/path_output.cc', + 'src/gn/pattern.cc', + 'src/gn/pool.cc', + 'src/gn/qt_creator_writer.cc', + 'src/gn/resolved_target_data.cc', + 'src/gn/runtime_deps.cc', + 'src/gn/rust_substitution_type.cc', + 'src/gn/rust_tool.cc', + 'src/gn/rust_values.cc', + 'src/gn/rust_values_generator.cc', + 'src/gn/rust_variables.cc', + 'src/gn/scheduler.cc', + 'src/gn/scope.cc', + 'src/gn/scope_per_file_provider.cc', + 'src/gn/settings.cc', + 'src/gn/setup.cc', + 'src/gn/source_dir.cc', + 'src/gn/source_file.cc', + 'src/gn/standard_out.cc', + 'src/gn/string_output_buffer.cc', + 'src/gn/string_utils.cc', + 'src/gn/substitution_list.cc', + 'src/gn/substitution_pattern.cc', + 'src/gn/substitution_type.cc', + 'src/gn/substitution_writer.cc', + 'src/gn/swift_values.cc', + 'src/gn/swift_values_generator.cc', + 'src/gn/swift_variables.cc', + 'src/gn/switches.cc', + 'src/gn/target.cc', + 'src/gn/target_generator.cc', + 'src/gn/template.cc', + 'src/gn/token.cc', + 'src/gn/tokenizer.cc', + 'src/gn/tool.cc', + 'src/gn/toolchain.cc', + 'src/gn/trace.cc', + 'src/gn/value.cc', + 'src/gn/value_extractors.cc', + 'src/gn/variables.cc', + 'src/gn/version.cc', + 'src/gn/visibility.cc', + 'src/gn/visual_studio_utils.cc', + 'src/gn/visual_studio_writer.cc', + 'src/gn/xcode_object.cc', + 'src/gn/xcode_writer.cc', + 'src/gn/xml_element_writer.cc', + 'src/util/atomic_write.cc', + 'src/util/exe_path.cc', + 'src/util/msg_loop.cc', + 'src/util/semaphore.cc', + 'src/util/sys_info.cc', + 'src/util/ticks.cc', + 'src/util/worker_pool.cc', + ] + }, } executables = {
diff --git a/src/gn/ffi/settings.cc b/src/gn/ffi/settings.cc new file mode 100644 index 0000000..f0e688b --- /dev/null +++ b/src/gn/ffi/settings.cc
@@ -0,0 +1,15 @@ +// Copyright 2026 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "gn/settings.h" + +#include "gn/label.h" + +extern "C" { + +const Label& GetToolchainLabelFromSettings(const Settings& settings) { + return settings.toolchain_label(); +} + +} // extern "C"
diff --git a/src/gn/starlark/crates/ffi/src/lib.rs b/src/gn/starlark/crates/ffi/src/lib.rs index f4abc9c..7a6ec4a 100644 --- a/src/gn/starlark/crates/ffi/src/lib.rs +++ b/src/gn/starlark/crates/ffi/src/lib.rs
@@ -65,5 +65,7 @@ pub mod label; pub mod opaque; +pub mod settings; pub use label::{Label, SourceDir}; +pub use settings::Settings;
diff --git a/src/gn/starlark/crates/ffi/src/settings.rs b/src/gn/starlark/crates/ffi/src/settings.rs new file mode 100644 index 0000000..2eae88e --- /dev/null +++ b/src/gn/starlark/crates/ffi/src/settings.rs
@@ -0,0 +1,17 @@ +// Copyright 2026 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +use crate::declare_opaque_type; + +declare_opaque_type!(pub Settings); + +impl Settings { + /// Returns the toolchain label for the given settings. + pub fn toolchain(&self) -> types::LabelRef<'_> { + extern "C" { + fn GetToolchainLabelFromSettings(settings: &Settings) -> &crate::Label; + } + unsafe { GetToolchainLabelFromSettings(self).as_ref() } + } +}