xref: /aosp_15_r20/external/perfetto/infra/perfetto.dev/BUILD.gn (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker# Copyright (C) 2022 The Android Open Source Project
2*6dbdd20aSAndroid Build Coastguard Worker#
3*6dbdd20aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*6dbdd20aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*6dbdd20aSAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*6dbdd20aSAndroid Build Coastguard Worker#
7*6dbdd20aSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
8*6dbdd20aSAndroid Build Coastguard Worker#
9*6dbdd20aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*6dbdd20aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*6dbdd20aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*6dbdd20aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*6dbdd20aSAndroid Build Coastguard Worker# limitations under the License.
14*6dbdd20aSAndroid Build Coastguard Worker
15*6dbdd20aSAndroid Build Coastguard Workerimport("../../gn/perfetto.gni")
16*6dbdd20aSAndroid Build Coastguard Worker
17*6dbdd20aSAndroid Build Coastguard Worker# Prevent that this file is accidentally included in embedder builds.
18*6dbdd20aSAndroid Build Coastguard Workerassert(enable_perfetto_site)
19*6dbdd20aSAndroid Build Coastguard Worker
20*6dbdd20aSAndroid Build Coastguard Workernodejs_bin = rebase_path("../../tools/node", root_build_dir)
21*6dbdd20aSAndroid Build Coastguard Worker
22*6dbdd20aSAndroid Build Coastguard Worker# The destination directory where the website will be built. GN pollutes
23*6dbdd20aSAndroid Build Coastguard Worker# root_out_dir with all sorts of files, so we use a subdirectory.
24*6dbdd20aSAndroid Build Coastguard Workerperfetto_website_out_dir = "$root_out_dir/site"
25*6dbdd20aSAndroid Build Coastguard Worker
26*6dbdd20aSAndroid Build Coastguard Worker# The directory containing all the markdown sources for the docs.
27*6dbdd20aSAndroid Build Coastguard Workersrc_doc_dir = "../../docs"
28*6dbdd20aSAndroid Build Coastguard Worker
29*6dbdd20aSAndroid Build Coastguard Workergroup("site") {
30*6dbdd20aSAndroid Build Coastguard Worker  deps = [
31*6dbdd20aSAndroid Build Coastguard Worker    ":all_mdfiles",
32*6dbdd20aSAndroid Build Coastguard Worker    ":assets",
33*6dbdd20aSAndroid Build Coastguard Worker    ":gen_index",
34*6dbdd20aSAndroid Build Coastguard Worker    ":gen_sql_stats_html",
35*6dbdd20aSAndroid Build Coastguard Worker    ":gen_sql_tables_html",
36*6dbdd20aSAndroid Build Coastguard Worker    ":gen_stdlib_docs_html",
37*6dbdd20aSAndroid Build Coastguard Worker    ":gen_toc",
38*6dbdd20aSAndroid Build Coastguard Worker    ":gen_trace_config_proto",
39*6dbdd20aSAndroid Build Coastguard Worker    ":gen_trace_packet_proto",
40*6dbdd20aSAndroid Build Coastguard Worker    ":node_assets",
41*6dbdd20aSAndroid Build Coastguard Worker    ":readme",
42*6dbdd20aSAndroid Build Coastguard Worker    ":style_scss",
43*6dbdd20aSAndroid Build Coastguard Worker  ]
44*6dbdd20aSAndroid Build Coastguard Worker}
45*6dbdd20aSAndroid Build Coastguard Worker
46*6dbdd20aSAndroid Build Coastguard Worker# Runs a nodejs script using the hermetic node toolchain.
47*6dbdd20aSAndroid Build Coastguard Worker# Args:
48*6dbdd20aSAndroid Build Coastguard Worker# * script: The .js script to execute
49*6dbdd20aSAndroid Build Coastguard Worker# * inputs
50*6dbdd20aSAndroid Build Coastguard Worker# * outputs
51*6dbdd20aSAndroid Build Coastguard Worker# * deps
52*6dbdd20aSAndroid Build Coastguard Worker# * depfile
53*6dbdd20aSAndroid Build Coastguard Workertemplate("nodejs_script") {
54*6dbdd20aSAndroid Build Coastguard Worker  assert(defined(invoker.script), "Need script in $target_name")
55*6dbdd20aSAndroid Build Coastguard Worker
56*6dbdd20aSAndroid Build Coastguard Worker  action(target_name) {
57*6dbdd20aSAndroid Build Coastguard Worker    forward_variables_from(invoker,
58*6dbdd20aSAndroid Build Coastguard Worker                           [
59*6dbdd20aSAndroid Build Coastguard Worker                             "outputs",
60*6dbdd20aSAndroid Build Coastguard Worker                             "depfile",
61*6dbdd20aSAndroid Build Coastguard Worker                           ])
62*6dbdd20aSAndroid Build Coastguard Worker    deps = [ ":node_modules" ]
63*6dbdd20aSAndroid Build Coastguard Worker    if (defined(invoker.deps)) {
64*6dbdd20aSAndroid Build Coastguard Worker      deps += invoker.deps
65*6dbdd20aSAndroid Build Coastguard Worker    }
66*6dbdd20aSAndroid Build Coastguard Worker    script = "../../gn/standalone/build_tool_wrapper.py"
67*6dbdd20aSAndroid Build Coastguard Worker    inputs = [ invoker.script ]
68*6dbdd20aSAndroid Build Coastguard Worker    inputs += invoker.inputs
69*6dbdd20aSAndroid Build Coastguard Worker    args = [
70*6dbdd20aSAndroid Build Coastguard Worker      nodejs_bin,
71*6dbdd20aSAndroid Build Coastguard Worker      rebase_path(invoker.script, root_build_dir),
72*6dbdd20aSAndroid Build Coastguard Worker    ]
73*6dbdd20aSAndroid Build Coastguard Worker    args += invoker.args
74*6dbdd20aSAndroid Build Coastguard Worker  }
75*6dbdd20aSAndroid Build Coastguard Worker}
76*6dbdd20aSAndroid Build Coastguard Worker
77*6dbdd20aSAndroid Build Coastguard Worker# Installs the node modules specified in package.json
78*6dbdd20aSAndroid Build Coastguard Workeraction("node_modules") {
79*6dbdd20aSAndroid Build Coastguard Worker  script = "../../gn/standalone/build_tool_wrapper.py"
80*6dbdd20aSAndroid Build Coastguard Worker  stamp_file = "$target_out_dir/.$target_name.stamp"
81*6dbdd20aSAndroid Build Coastguard Worker  cur_dir = rebase_path(".", root_build_dir)
82*6dbdd20aSAndroid Build Coastguard Worker  args = [
83*6dbdd20aSAndroid Build Coastguard Worker    "--stamp",
84*6dbdd20aSAndroid Build Coastguard Worker    rebase_path(stamp_file, root_build_dir),
85*6dbdd20aSAndroid Build Coastguard Worker    "--chdir=$cur_dir",
86*6dbdd20aSAndroid Build Coastguard Worker    rebase_path("../../tools/pnpm", root_build_dir),
87*6dbdd20aSAndroid Build Coastguard Worker    "install",
88*6dbdd20aSAndroid Build Coastguard Worker    "--shamefully-hoist",
89*6dbdd20aSAndroid Build Coastguard Worker    "--frozen-lockfile",
90*6dbdd20aSAndroid Build Coastguard Worker  ]
91*6dbdd20aSAndroid Build Coastguard Worker  inputs = [
92*6dbdd20aSAndroid Build Coastguard Worker    "../../tools/npm",
93*6dbdd20aSAndroid Build Coastguard Worker    "package.json",
94*6dbdd20aSAndroid Build Coastguard Worker    "pnpm-lock.yaml",
95*6dbdd20aSAndroid Build Coastguard Worker  ]
96*6dbdd20aSAndroid Build Coastguard Worker  outputs = [ stamp_file ]
97*6dbdd20aSAndroid Build Coastguard Worker}
98*6dbdd20aSAndroid Build Coastguard Worker
99*6dbdd20aSAndroid Build Coastguard Worker# Renders a markdown file into html.
100*6dbdd20aSAndroid Build Coastguard Worker# Args:
101*6dbdd20aSAndroid Build Coastguard Worker# * markdown: Optional. The source markdown file
102*6dbdd20aSAndroid Build Coastguard Worker# * html_template: Optional. The html template to use
103*6dbdd20aSAndroid Build Coastguard Worker# * out_html: The generated html, relative to `perfetto_website_out_dir`
104*6dbdd20aSAndroid Build Coastguard Worker# * deps
105*6dbdd20aSAndroid Build Coastguard Workertemplate("md_to_html") {
106*6dbdd20aSAndroid Build Coastguard Worker  assert(defined(invoker.out_html), "Need out_html in $target_name")
107*6dbdd20aSAndroid Build Coastguard Worker  assert(defined(invoker.html_template) || defined(invoker.markdown),
108*6dbdd20aSAndroid Build Coastguard Worker         "Need html_template or markdown in $target_name")
109*6dbdd20aSAndroid Build Coastguard Worker  nodejs_script(target_name) {
110*6dbdd20aSAndroid Build Coastguard Worker    forward_variables_from(invoker, [ "deps" ])
111*6dbdd20aSAndroid Build Coastguard Worker    script = "src/markdown_render.js"
112*6dbdd20aSAndroid Build Coastguard Worker    inputs = []
113*6dbdd20aSAndroid Build Coastguard Worker    if (defined(invoker.markdown)) {
114*6dbdd20aSAndroid Build Coastguard Worker      inputs += [ invoker.markdown ]
115*6dbdd20aSAndroid Build Coastguard Worker    }
116*6dbdd20aSAndroid Build Coastguard Worker    depfile = "${target_gen_dir}/$target_name.d"
117*6dbdd20aSAndroid Build Coastguard Worker    if (defined(invoker.html_template)) {
118*6dbdd20aSAndroid Build Coastguard Worker      inputs += [ invoker.html_template ]
119*6dbdd20aSAndroid Build Coastguard Worker    }
120*6dbdd20aSAndroid Build Coastguard Worker    outputs = [ "${perfetto_website_out_dir}/${invoker.out_html}" ]
121*6dbdd20aSAndroid Build Coastguard Worker    args = [
122*6dbdd20aSAndroid Build Coastguard Worker      "--odir",
123*6dbdd20aSAndroid Build Coastguard Worker      rebase_path(perfetto_website_out_dir, root_build_dir),
124*6dbdd20aSAndroid Build Coastguard Worker      "-o",
125*6dbdd20aSAndroid Build Coastguard Worker      rebase_path("${perfetto_website_out_dir}/${invoker.out_html}",
126*6dbdd20aSAndroid Build Coastguard Worker                  root_build_dir),
127*6dbdd20aSAndroid Build Coastguard Worker      "--depfile",
128*6dbdd20aSAndroid Build Coastguard Worker      rebase_path(depfile, root_build_dir),
129*6dbdd20aSAndroid Build Coastguard Worker    ]
130*6dbdd20aSAndroid Build Coastguard Worker    if (defined(invoker.markdown)) {
131*6dbdd20aSAndroid Build Coastguard Worker      args += [
132*6dbdd20aSAndroid Build Coastguard Worker        "-i",
133*6dbdd20aSAndroid Build Coastguard Worker        rebase_path(invoker.markdown, root_build_dir),
134*6dbdd20aSAndroid Build Coastguard Worker      ]
135*6dbdd20aSAndroid Build Coastguard Worker    }
136*6dbdd20aSAndroid Build Coastguard Worker    if (defined(invoker.html_template)) {
137*6dbdd20aSAndroid Build Coastguard Worker      args += [
138*6dbdd20aSAndroid Build Coastguard Worker        "-t",
139*6dbdd20aSAndroid Build Coastguard Worker        rebase_path(invoker.html_template, root_build_dir),
140*6dbdd20aSAndroid Build Coastguard Worker      ]
141*6dbdd20aSAndroid Build Coastguard Worker    }
142*6dbdd20aSAndroid Build Coastguard Worker  }
143*6dbdd20aSAndroid Build Coastguard Worker}
144*6dbdd20aSAndroid Build Coastguard Worker
145*6dbdd20aSAndroid Build Coastguard Workermd_to_html("gen_toc") {
146*6dbdd20aSAndroid Build Coastguard Worker  markdown = "${src_doc_dir}/toc.md"
147*6dbdd20aSAndroid Build Coastguard Worker  out_html = "docs/_nav.html"
148*6dbdd20aSAndroid Build Coastguard Worker}
149*6dbdd20aSAndroid Build Coastguard Worker
150*6dbdd20aSAndroid Build Coastguard Workermd_to_html("gen_index") {
151*6dbdd20aSAndroid Build Coastguard Worker  html_template = "src/template_index.html"
152*6dbdd20aSAndroid Build Coastguard Worker  deps = [ ":gen_toc" ]
153*6dbdd20aSAndroid Build Coastguard Worker  out_html = "index.html"
154*6dbdd20aSAndroid Build Coastguard Worker}
155*6dbdd20aSAndroid Build Coastguard Worker
156*6dbdd20aSAndroid Build Coastguard Workernodejs_script("style_scss") {
157*6dbdd20aSAndroid Build Coastguard Worker  script = "node_modules/sass/sass.js"
158*6dbdd20aSAndroid Build Coastguard Worker  input = "src/assets/style.scss"
159*6dbdd20aSAndroid Build Coastguard Worker  inputs = [ input ]
160*6dbdd20aSAndroid Build Coastguard Worker  output = "${perfetto_website_out_dir}/assets/style.css"
161*6dbdd20aSAndroid Build Coastguard Worker  outputs = [ output ]
162*6dbdd20aSAndroid Build Coastguard Worker  args = [
163*6dbdd20aSAndroid Build Coastguard Worker    "--quiet",
164*6dbdd20aSAndroid Build Coastguard Worker    rebase_path(input, root_build_dir),
165*6dbdd20aSAndroid Build Coastguard Worker    rebase_path(output, root_build_dir),
166*6dbdd20aSAndroid Build Coastguard Worker  ]
167*6dbdd20aSAndroid Build Coastguard Worker  deps = [ ":node_modules" ]
168*6dbdd20aSAndroid Build Coastguard Worker}
169*6dbdd20aSAndroid Build Coastguard Worker
170*6dbdd20aSAndroid Build Coastguard Workersql_stats_md = "${target_gen_dir}/sql-stats.md"
171*6dbdd20aSAndroid Build Coastguard Worker
172*6dbdd20aSAndroid Build Coastguard Workernodejs_script("gen_sql_stats_md") {
173*6dbdd20aSAndroid Build Coastguard Worker  script = "src/gen_stats_reference.js"
174*6dbdd20aSAndroid Build Coastguard Worker  input = "../../src/trace_processor/storage/stats.h"
175*6dbdd20aSAndroid Build Coastguard Worker  inputs = [ input ]
176*6dbdd20aSAndroid Build Coastguard Worker  outputs = [ sql_stats_md ]
177*6dbdd20aSAndroid Build Coastguard Worker  args = [
178*6dbdd20aSAndroid Build Coastguard Worker    "-i",
179*6dbdd20aSAndroid Build Coastguard Worker    rebase_path(input, root_build_dir),
180*6dbdd20aSAndroid Build Coastguard Worker    "-o",
181*6dbdd20aSAndroid Build Coastguard Worker    rebase_path(sql_stats_md, root_build_dir),
182*6dbdd20aSAndroid Build Coastguard Worker  ]
183*6dbdd20aSAndroid Build Coastguard Worker}
184*6dbdd20aSAndroid Build Coastguard Worker
185*6dbdd20aSAndroid Build Coastguard Workermd_to_html("gen_sql_stats_html") {
186*6dbdd20aSAndroid Build Coastguard Worker  markdown = sql_stats_md
187*6dbdd20aSAndroid Build Coastguard Worker  html_template = "src/template_markdown.html"
188*6dbdd20aSAndroid Build Coastguard Worker  deps = [
189*6dbdd20aSAndroid Build Coastguard Worker    ":gen_sql_stats_md",
190*6dbdd20aSAndroid Build Coastguard Worker    ":gen_toc",
191*6dbdd20aSAndroid Build Coastguard Worker  ]
192*6dbdd20aSAndroid Build Coastguard Worker  out_html = "docs/analysis/sql-stats"
193*6dbdd20aSAndroid Build Coastguard Worker}
194*6dbdd20aSAndroid Build Coastguard Worker
195*6dbdd20aSAndroid Build Coastguard Worker# Generates a html reference for a proto
196*6dbdd20aSAndroid Build Coastguard Worker# Args:
197*6dbdd20aSAndroid Build Coastguard Worker# * proto: The path to a .proto file
198*6dbdd20aSAndroid Build Coastguard Worker# * message_name: The proto message name
199*6dbdd20aSAndroid Build Coastguard Worker# * out_html
200*6dbdd20aSAndroid Build Coastguard Workertemplate("proto_reference") {
201*6dbdd20aSAndroid Build Coastguard Worker  sql_stats_md = "${target_gen_dir}/${target_name}.md"
202*6dbdd20aSAndroid Build Coastguard Worker  nodejs_script("${target_name}_md") {
203*6dbdd20aSAndroid Build Coastguard Worker    script = "src/gen_proto_reference.js"
204*6dbdd20aSAndroid Build Coastguard Worker    inputs = [ invoker.proto ]
205*6dbdd20aSAndroid Build Coastguard Worker    outputs = [ sql_stats_md ]
206*6dbdd20aSAndroid Build Coastguard Worker    args = [
207*6dbdd20aSAndroid Build Coastguard Worker      "-i",
208*6dbdd20aSAndroid Build Coastguard Worker      rebase_path(invoker.proto, root_build_dir),
209*6dbdd20aSAndroid Build Coastguard Worker      "-p",
210*6dbdd20aSAndroid Build Coastguard Worker      invoker.message_name,
211*6dbdd20aSAndroid Build Coastguard Worker      "-o",
212*6dbdd20aSAndroid Build Coastguard Worker      rebase_path(sql_stats_md, root_build_dir),
213*6dbdd20aSAndroid Build Coastguard Worker    ]
214*6dbdd20aSAndroid Build Coastguard Worker  }
215*6dbdd20aSAndroid Build Coastguard Worker
216*6dbdd20aSAndroid Build Coastguard Worker  md_to_html(target_name) {
217*6dbdd20aSAndroid Build Coastguard Worker    markdown = sql_stats_md
218*6dbdd20aSAndroid Build Coastguard Worker    html_template = "src/template_markdown.html"
219*6dbdd20aSAndroid Build Coastguard Worker    deps = [
220*6dbdd20aSAndroid Build Coastguard Worker      ":${target_name}_md",
221*6dbdd20aSAndroid Build Coastguard Worker      ":gen_toc",
222*6dbdd20aSAndroid Build Coastguard Worker    ]
223*6dbdd20aSAndroid Build Coastguard Worker    out_html = invoker.out_html
224*6dbdd20aSAndroid Build Coastguard Worker  }
225*6dbdd20aSAndroid Build Coastguard Worker}
226*6dbdd20aSAndroid Build Coastguard Worker
227*6dbdd20aSAndroid Build Coastguard Workerproto_reference("gen_trace_config_proto") {
228*6dbdd20aSAndroid Build Coastguard Worker  proto = "../../protos/perfetto/config/trace_config.proto"
229*6dbdd20aSAndroid Build Coastguard Worker  message_name = "perfetto.protos.TraceConfig"
230*6dbdd20aSAndroid Build Coastguard Worker  out_html = "docs/reference/trace-config-proto"
231*6dbdd20aSAndroid Build Coastguard Worker}
232*6dbdd20aSAndroid Build Coastguard Worker
233*6dbdd20aSAndroid Build Coastguard Workerproto_reference("gen_trace_packet_proto") {
234*6dbdd20aSAndroid Build Coastguard Worker  proto = "../../protos/perfetto/trace/trace_packet.proto"
235*6dbdd20aSAndroid Build Coastguard Worker  message_name = "perfetto.protos.TracePacket"
236*6dbdd20aSAndroid Build Coastguard Worker  out_html = "docs/reference/trace-packet-proto"
237*6dbdd20aSAndroid Build Coastguard Worker}
238*6dbdd20aSAndroid Build Coastguard Worker
239*6dbdd20aSAndroid Build Coastguard Worker# WARNING: this does globbing at generation time. Incremental builds are not
240*6dbdd20aSAndroid Build Coastguard Worker# going to work properly if files are added/removed. `gn gen` needs to be
241*6dbdd20aSAndroid Build Coastguard Worker# rerun.
242*6dbdd20aSAndroid Build Coastguard Workersql_tables =
243*6dbdd20aSAndroid Build Coastguard Worker    exec_script("../../gn/standalone/glob.py",
244*6dbdd20aSAndroid Build Coastguard Worker                [
245*6dbdd20aSAndroid Build Coastguard Worker                  "--root=" + rebase_path("../../src/trace_processor/tables",
246*6dbdd20aSAndroid Build Coastguard Worker                                          root_build_dir),
247*6dbdd20aSAndroid Build Coastguard Worker                  "--filter=*.h",
248*6dbdd20aSAndroid Build Coastguard Worker                ],
249*6dbdd20aSAndroid Build Coastguard Worker                "list lines")
250*6dbdd20aSAndroid Build Coastguard Worker
251*6dbdd20aSAndroid Build Coastguard Workersrc_sql_tables = []
252*6dbdd20aSAndroid Build Coastguard Worker
253*6dbdd20aSAndroid Build Coastguard Workerforeach(i, sql_tables) {
254*6dbdd20aSAndroid Build Coastguard Worker  src_sql_tables += [ rebase_path(i, ".", root_build_dir) ]
255*6dbdd20aSAndroid Build Coastguard Worker}
256*6dbdd20aSAndroid Build Coastguard Worker
257*6dbdd20aSAndroid Build Coastguard Workersql_tables_md = "${target_gen_dir}/sql-tables.md"
258*6dbdd20aSAndroid Build Coastguard Workerstdlib_docs_md = "${target_gen_dir}/stdlib_docs.md"
259*6dbdd20aSAndroid Build Coastguard Worker
260*6dbdd20aSAndroid Build Coastguard Workeraction("gen_stdlib_docs_md") {
261*6dbdd20aSAndroid Build Coastguard Worker  script = "src/gen_stdlib_docs_md.py"
262*6dbdd20aSAndroid Build Coastguard Worker  label_info = get_label_info(
263*6dbdd20aSAndroid Build Coastguard Worker          "../../src/trace_processor/perfetto_sql/stdlib:stdlib_json_docs",
264*6dbdd20aSAndroid Build Coastguard Worker          "target_gen_dir")
265*6dbdd20aSAndroid Build Coastguard Worker  absolute_input_path = label_info + "/stdlib_docs.json"
266*6dbdd20aSAndroid Build Coastguard Worker  deps = [
267*6dbdd20aSAndroid Build Coastguard Worker    "../../python:trace_processor_stdlib_docs",
268*6dbdd20aSAndroid Build Coastguard Worker    "../../src/trace_processor/perfetto_sql/stdlib:stdlib_json_docs",
269*6dbdd20aSAndroid Build Coastguard Worker  ]
270*6dbdd20aSAndroid Build Coastguard Worker  outputs = [ stdlib_docs_md ]
271*6dbdd20aSAndroid Build Coastguard Worker  args = [
272*6dbdd20aSAndroid Build Coastguard Worker    "--input",
273*6dbdd20aSAndroid Build Coastguard Worker    rebase_path(absolute_input_path, root_build_dir),
274*6dbdd20aSAndroid Build Coastguard Worker    "--output",
275*6dbdd20aSAndroid Build Coastguard Worker    rebase_path(stdlib_docs_md, root_build_dir),
276*6dbdd20aSAndroid Build Coastguard Worker  ]
277*6dbdd20aSAndroid Build Coastguard Worker}
278*6dbdd20aSAndroid Build Coastguard Worker
279*6dbdd20aSAndroid Build Coastguard Workermd_to_html("gen_stdlib_docs_html") {
280*6dbdd20aSAndroid Build Coastguard Worker  markdown = stdlib_docs_md
281*6dbdd20aSAndroid Build Coastguard Worker  html_template = "src/template_markdown.html"
282*6dbdd20aSAndroid Build Coastguard Worker  deps = [
283*6dbdd20aSAndroid Build Coastguard Worker    ":gen_stdlib_docs_md",
284*6dbdd20aSAndroid Build Coastguard Worker    ":gen_toc",
285*6dbdd20aSAndroid Build Coastguard Worker  ]
286*6dbdd20aSAndroid Build Coastguard Worker  out_html = "docs/analysis/stdlib-docs"
287*6dbdd20aSAndroid Build Coastguard Worker}
288*6dbdd20aSAndroid Build Coastguard Worker
289*6dbdd20aSAndroid Build Coastguard Workernodejs_script("gen_sql_tables_md") {
290*6dbdd20aSAndroid Build Coastguard Worker  python_label = "../../src/trace_processor/tables:tables_python_docs"
291*6dbdd20aSAndroid Build Coastguard Worker  python_docs_json = get_label_info(python_label, "target_gen_dir") + "/" +
292*6dbdd20aSAndroid Build Coastguard Worker                     get_label_info(python_label, "name") + ".json"
293*6dbdd20aSAndroid Build Coastguard Worker
294*6dbdd20aSAndroid Build Coastguard Worker  script = "src/gen_sql_tables_reference.js"
295*6dbdd20aSAndroid Build Coastguard Worker  inputs = src_sql_tables
296*6dbdd20aSAndroid Build Coastguard Worker  deps = [ python_label ]
297*6dbdd20aSAndroid Build Coastguard Worker  outputs = [ sql_tables_md ]
298*6dbdd20aSAndroid Build Coastguard Worker  args = [
299*6dbdd20aSAndroid Build Coastguard Worker    "-o",
300*6dbdd20aSAndroid Build Coastguard Worker    rebase_path(sql_tables_md, root_build_dir),
301*6dbdd20aSAndroid Build Coastguard Worker  ]
302*6dbdd20aSAndroid Build Coastguard Worker  foreach(file, src_sql_tables) {
303*6dbdd20aSAndroid Build Coastguard Worker    args += [
304*6dbdd20aSAndroid Build Coastguard Worker      "-i",
305*6dbdd20aSAndroid Build Coastguard Worker      rebase_path(file, root_build_dir),
306*6dbdd20aSAndroid Build Coastguard Worker    ]
307*6dbdd20aSAndroid Build Coastguard Worker  }
308*6dbdd20aSAndroid Build Coastguard Worker  args += [
309*6dbdd20aSAndroid Build Coastguard Worker    "-j",
310*6dbdd20aSAndroid Build Coastguard Worker    rebase_path(python_docs_json, root_build_dir),
311*6dbdd20aSAndroid Build Coastguard Worker  ]
312*6dbdd20aSAndroid Build Coastguard Worker}
313*6dbdd20aSAndroid Build Coastguard Worker
314*6dbdd20aSAndroid Build Coastguard Workermd_to_html("gen_sql_tables_html") {
315*6dbdd20aSAndroid Build Coastguard Worker  markdown = sql_tables_md
316*6dbdd20aSAndroid Build Coastguard Worker  html_template = "src/template_markdown.html"
317*6dbdd20aSAndroid Build Coastguard Worker  deps = [
318*6dbdd20aSAndroid Build Coastguard Worker    ":gen_sql_tables_md",
319*6dbdd20aSAndroid Build Coastguard Worker    ":gen_toc",
320*6dbdd20aSAndroid Build Coastguard Worker  ]
321*6dbdd20aSAndroid Build Coastguard Worker  out_html = "docs/analysis/sql-tables"
322*6dbdd20aSAndroid Build Coastguard Worker}
323*6dbdd20aSAndroid Build Coastguard Worker
324*6dbdd20aSAndroid Build Coastguard Workermd_to_html("readme") {
325*6dbdd20aSAndroid Build Coastguard Worker  markdown = "${src_doc_dir}/README.md"
326*6dbdd20aSAndroid Build Coastguard Worker  html_template = "src/template_markdown.html"
327*6dbdd20aSAndroid Build Coastguard Worker  out_html = "docs/index.html"
328*6dbdd20aSAndroid Build Coastguard Worker  deps = [ ":gen_toc" ]
329*6dbdd20aSAndroid Build Coastguard Worker}
330*6dbdd20aSAndroid Build Coastguard Worker
331*6dbdd20aSAndroid Build Coastguard Worker# WARNING: this does globbing at generation time. Incremental builds are not
332*6dbdd20aSAndroid Build Coastguard Worker# going to work properly if files are added/removed. `gn gen` needs to be
333*6dbdd20aSAndroid Build Coastguard Worker# rerun.
334*6dbdd20aSAndroid Build Coastguard Workermdfiles = exec_script("../../gn/standalone/glob.py",
335*6dbdd20aSAndroid Build Coastguard Worker                      [
336*6dbdd20aSAndroid Build Coastguard Worker                        "--root=" + rebase_path(src_doc_dir, root_build_dir),
337*6dbdd20aSAndroid Build Coastguard Worker                        "--filter=*.md",
338*6dbdd20aSAndroid Build Coastguard Worker                      ],
339*6dbdd20aSAndroid Build Coastguard Worker                      "list lines")
340*6dbdd20aSAndroid Build Coastguard Worker
341*6dbdd20aSAndroid Build Coastguard Workermdfiles -= [
342*6dbdd20aSAndroid Build Coastguard Worker  rebase_path("../../docs/README.md", root_build_dir),
343*6dbdd20aSAndroid Build Coastguard Worker  rebase_path("../../docs/toc.md", root_build_dir),
344*6dbdd20aSAndroid Build Coastguard Worker]
345*6dbdd20aSAndroid Build Coastguard Worker
346*6dbdd20aSAndroid Build Coastguard Workermdtargets = []
347*6dbdd20aSAndroid Build Coastguard Worker
348*6dbdd20aSAndroid Build Coastguard Workerforeach(source, mdfiles) {
349*6dbdd20aSAndroid Build Coastguard Worker  filename = rebase_path(string_replace(source, ".md", ""),
350*6dbdd20aSAndroid Build Coastguard Worker                         rebase_path("../../docs", root_build_dir))
351*6dbdd20aSAndroid Build Coastguard Worker
352*6dbdd20aSAndroid Build Coastguard Worker  md_to_html("mdfile_${source}") {
353*6dbdd20aSAndroid Build Coastguard Worker    markdown = rebase_path(source, ".", root_build_dir)
354*6dbdd20aSAndroid Build Coastguard Worker    html_template = "src/template_markdown.html"
355*6dbdd20aSAndroid Build Coastguard Worker    out_html = "docs/${filename}"
356*6dbdd20aSAndroid Build Coastguard Worker    deps = [ ":gen_toc" ]
357*6dbdd20aSAndroid Build Coastguard Worker  }
358*6dbdd20aSAndroid Build Coastguard Worker  mdtargets += [ ":mdfile_${source}" ]
359*6dbdd20aSAndroid Build Coastguard Worker}
360*6dbdd20aSAndroid Build Coastguard Worker
361*6dbdd20aSAndroid Build Coastguard Worker# Files which have been removed/renamed/moved and now have HTTP redirections in
362*6dbdd20aSAndroid Build Coastguard Worker# src/assets/script.js
363*6dbdd20aSAndroid Build Coastguard Workerremoved_renamed_moved_files = [ "analysis/common-queries.md" ]
364*6dbdd20aSAndroid Build Coastguard Worker
365*6dbdd20aSAndroid Build Coastguard Workerforeach(source, removed_renamed_moved_files) {
366*6dbdd20aSAndroid Build Coastguard Worker  filename = rebase_path(string_replace(source, ".md", ""),
367*6dbdd20aSAndroid Build Coastguard Worker                         rebase_path("../../docs", root_build_dir))
368*6dbdd20aSAndroid Build Coastguard Worker  md_to_html("mdfile_${source}") {
369*6dbdd20aSAndroid Build Coastguard Worker    markdown = "src/empty.md"
370*6dbdd20aSAndroid Build Coastguard Worker    html_template = "src/template_markdown.html"
371*6dbdd20aSAndroid Build Coastguard Worker    out_html = "docs/${filename}"
372*6dbdd20aSAndroid Build Coastguard Worker    deps = [ ":gen_toc" ]
373*6dbdd20aSAndroid Build Coastguard Worker  }
374*6dbdd20aSAndroid Build Coastguard Worker  mdtargets += [ ":mdfile_${source}" ]
375*6dbdd20aSAndroid Build Coastguard Worker}
376*6dbdd20aSAndroid Build Coastguard Worker
377*6dbdd20aSAndroid Build Coastguard Workergroup("all_mdfiles") {
378*6dbdd20aSAndroid Build Coastguard Worker  deps = mdtargets
379*6dbdd20aSAndroid Build Coastguard Worker}
380*6dbdd20aSAndroid Build Coastguard Worker
381*6dbdd20aSAndroid Build Coastguard Workercopy("node_assets") {
382*6dbdd20aSAndroid Build Coastguard Worker  sources = [
383*6dbdd20aSAndroid Build Coastguard Worker    "node_modules/highlight.js/styles/tomorrow-night.css",
384*6dbdd20aSAndroid Build Coastguard Worker    "node_modules/mermaid/dist/mermaid.min.js",
385*6dbdd20aSAndroid Build Coastguard Worker  ]
386*6dbdd20aSAndroid Build Coastguard Worker  deps = [ ":node_modules" ]
387*6dbdd20aSAndroid Build Coastguard Worker
388*6dbdd20aSAndroid Build Coastguard Worker  outputs = [ "${perfetto_website_out_dir}/assets/{{source_file_part}}" ]
389*6dbdd20aSAndroid Build Coastguard Worker}
390*6dbdd20aSAndroid Build Coastguard Worker
391*6dbdd20aSAndroid Build Coastguard Worker# WARNING: this does globbing at generation time. Incremental builds are not
392*6dbdd20aSAndroid Build Coastguard Worker# going to work properly if files are added/removed. `gn gen` needs to be
393*6dbdd20aSAndroid Build Coastguard Worker# rerun.
394*6dbdd20aSAndroid Build Coastguard Workerassets = exec_script("../../gn/standalone/glob.py",
395*6dbdd20aSAndroid Build Coastguard Worker                     [
396*6dbdd20aSAndroid Build Coastguard Worker                       "--root=" + rebase_path("src/assets", root_build_dir),
397*6dbdd20aSAndroid Build Coastguard Worker                       "--filter=*.png",
398*6dbdd20aSAndroid Build Coastguard Worker                       "--filter=*.js",
399*6dbdd20aSAndroid Build Coastguard Worker                     ],
400*6dbdd20aSAndroid Build Coastguard Worker                     "list lines")
401*6dbdd20aSAndroid Build Coastguard Worker
402*6dbdd20aSAndroid Build Coastguard Workersrc_assets = []
403*6dbdd20aSAndroid Build Coastguard Worker
404*6dbdd20aSAndroid Build Coastguard Workerforeach(i, assets) {
405*6dbdd20aSAndroid Build Coastguard Worker  src_assets += [ rebase_path(i, ".", root_build_dir) ]
406*6dbdd20aSAndroid Build Coastguard Worker}
407*6dbdd20aSAndroid Build Coastguard Worker
408*6dbdd20aSAndroid Build Coastguard Workercopy("assets") {
409*6dbdd20aSAndroid Build Coastguard Worker  sources = src_assets
410*6dbdd20aSAndroid Build Coastguard Worker  outputs = [ "${perfetto_website_out_dir}/assets/{{source_file_part}}" ]
411*6dbdd20aSAndroid Build Coastguard Worker}
412