Implementation of leveldb-backed PrefStore.
[chromium-blink-merge.git] / extensions / generated_extensions_api.gni
blobc8817a6d443569ecdc4bb913f04a655165ff5840
1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
5 # Defines a static library corresponding to the output of schema compiler tools
6 # over a set of extensions API schemas (IDL or JSON format.) The library target
7 # has implicit hard dependencies on all schema files listed by the invoker and
8 # is itself a hard dependency.
10 # Invocations of this template may use the following variables:
12 # sources [required] A list of schema files to be compiled.
14 # root_namespace [required] The namespace in which generated API code is to be
15 #   wrapped. C++ namespace syntax is accepted for nested namespace
16 #   (e.g. "foo::bar::api").
18 # impl_dir [required] The path containing C++ implementations of API functions.
19 #   This path is used as the root path when looking for
20 #   {schema}/{schema}_api.h headers during the API bundle generation phase.
21 #   Such headers, if found, are automatically included by the generated code.
23 # uncompiled_sources [optional] A list of schema files which should not be
24 #   compiled, but which should still be processed for API bundle generation.
26 # deps [optional] If any deps are specified they will be inherited by the
27 #   static library target.
29 # The static libarary target also inherits the visibility and output_name
30 # of its invoker.
32 template("generated_extensions_api") {
33   assert(defined(invoker.sources),
34          "\"sources\" must be defined for the $target_name template.")
35   assert(defined(invoker.root_namespace),
36          "\"root_namespace\" must be defined for the $target_name template.")
37   assert(defined(invoker.impl_dir),
38          "\"impl_dir\" must be defined for the $target_name template.")
40   # Keep a copy of the target_name here since it will be trampled
41   # in nested targets.
42   target_visibility = ":$target_name"
44   generated_config_name = target_name + "_generated_config"
45   config(generated_config_name) {
46     include_dirs = [ target_gen_dir ]
47     visibility = target_visibility
48   }
50   schemas = invoker.sources
51   root_namespace = invoker.root_namespace
52   impl_dir = invoker.impl_dir
53   uncompiled_schemas = []
54   if (defined(invoker.uncompiled_sources)) {
55     uncompiled_schemas = invoker.uncompiled_sources
56   }
58   compiler_root = "//tools/json_schema_compiler"
59   compiler_script = "$compiler_root/compiler.py"
60   compiler_sources = [
61     "$compiler_root/cc_generator.py",
62     "$compiler_root/code.py",
63     "$compiler_root/compiler.py",
64     "$compiler_root/cpp_generator.py",
65     "$compiler_root/cpp_type_generator.py",
66     "$compiler_root/cpp_util.py",
67     "$compiler_root/h_generator.py",
68     "$compiler_root/idl_schema.py",
69     "$compiler_root/model.py",
70     "$compiler_root/util_cc_helper.py",
71   ]
73   schema_generator_name = target_name + "_schema_generator"
74   action_foreach(schema_generator_name) {
75     script = compiler_script
76     source_prereqs = compiler_sources
77     sources = schemas
78     outputs = [
79       "$target_gen_dir/{{source_name_part}}.cc",
80       "$target_gen_dir/{{source_name_part}}.h",
81     ]
82     args = [
83       "{{source}}",
84       "--root=" + rebase_path("//", root_build_dir),
85       "--destdir=" + rebase_path(root_gen_dir, root_build_dir),
86       "--namespace=$root_namespace",
87       "--generator=cpp" ]
88     visibility = target_visibility
89   }
91   bundle_generator_name = target_name + "_bundle_generator"
92   action(bundle_generator_name) {
93     script = compiler_script
94     source_prereqs = compiler_sources + schemas + uncompiled_schemas
95     outputs = [
96       "$target_gen_dir/generated_api.cc",
97       "$target_gen_dir/generated_api.h",
98       "$target_gen_dir/generated_schemas.cc",
99       "$target_gen_dir/generated_schemas.h",
100     ]
101     args = [
102       "--root=" + rebase_path("//", root_build_dir),
103       "--destdir=" + rebase_path(root_gen_dir, root_build_dir),
104       "--namespace=$root_namespace",
105       "--generator=cpp-bundle",
106       "--impl-dir=" + rebase_path(impl_dir, "//"),
107     ] +
108       rebase_path(schemas, root_build_dir) +
109       rebase_path(uncompiled_schemas, root_build_dir)
110   }
112   source_set(target_name) {
113     sources =
114       get_target_outputs(":$schema_generator_name") +
115       get_target_outputs(":$bundle_generator_name")
117     deps = [
118       ":$schema_generator_name",
119       ":$bundle_generator_name",
120       "//tools/json_schema_compiler:generated_api_util",
121     ]
123     if (defined(invoker.deps)) {
124       deps += invoker.deps
125     }
126     direct_dependent_configs = [ ":$generated_config_name" ]
128     if (defined(invoker.visibility)) {
129       visibility = invoker.visibility
130     }
131     if (defined(invoker.output_name)) {
132       output_name = invoker.output_name
133     }
134   }