| # Copyright 2016 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. |
| |
| # Given a framework, generates a header file declaring the classes from that |
| # framework using class-dump tool. |
| # |
| # Arguments: |
| # |
| # framework_name |
| # string, short name of the framework. |
| # |
| # framework_path |
| # string, location of the framework, usually a sub-directory of |
| # Xcode application bundle. |
| # |
| # framework_version |
| # (optional) string, version of the framework to dump class for, |
| # defaults to "Current" if omitted. |
| # |
| # class_dump_filter |
| # regexp, only display classes matching this regular expression. |
| # |
| # topological_sort |
| # (optional) boolean, sort classes, categories, and protocols by |
| # inheritance, defaults to false if omitted. |
| # |
| # All common target arugments ("visibility", "deps", ...) are forwarded by |
| # the template. |
| template("class_dump") { |
| assert(defined(invoker.framework_name), |
| "framework_name must be defined for $target_name") |
| assert(defined(invoker.framework_path), |
| "framework_path must be defined for $target_name") |
| assert(defined(invoker.class_dump_filter), |
| "class_dump_filter must be defined for $target_name") |
| |
| framework_version = "Current" |
| if (defined(invoker.framework_version)) { |
| framework_version = invoker.framework_version |
| } |
| |
| sort_args = [] |
| if (defined(invoker.topological_sort) && invoker.topological_sort) { |
| sort_args = [ "-I" ] |
| } |
| |
| class_dump = "//third_party/class-dump(${host_toolchain})" |
| class_dump_bin = get_label_info(class_dump, "root_out_dir") + "/class-dump" |
| framework = "${invoker.framework_path}/${invoker.framework_name}.framework" |
| |
| _config_name = target_name + "_config" |
| |
| config(_config_name) { |
| visibility = [ ":$target_name" ] |
| include_dirs = [ "$target_gen_dir" ] |
| } |
| |
| action(target_name) { |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "args", |
| "class_dump_filter", |
| "framework_name", |
| "framework_path", |
| "framework_version", |
| "script", |
| "sources", |
| ]) |
| if (!defined(deps)) { |
| deps = [] |
| } |
| deps += [ class_dump ] |
| public_configs = [ ":$_config_name" ] |
| |
| script = "//third_party/class-dump/class-dump.py" |
| inputs = [ |
| class_dump_bin, |
| ] |
| sources = [ |
| "${framework}/Versions/${framework_version}/${invoker.framework_name}", |
| ] |
| outputs = [ |
| "$target_gen_dir/${invoker.framework_name}.h", |
| ] |
| args = [ |
| "-t=" + rebase_path(class_dump_bin, root_build_dir), |
| "-o=" + rebase_path(outputs[0], root_build_dir), |
| "--", |
| "-C${invoker.class_dump_filter}", |
| "${framework}", |
| ] |
| args += sort_args |
| } |
| } |