Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e23ae981 authored by Cole Faust's avatar Cole Faust
Browse files

Remove product debug files

These files are difficult to support in the Starlark product
configuration. They also aren't really a good representation
of products even with Makefiles, because they only display
information from products that have been imported with
import-nodes, but generate empty files for the other products
that are included from the imported ones.

For example, lunching aosp_arm64 then running
`m out/products/build/make/target/product/core_64_bit.mk.txt`
would generate a file full of empty variable assignments.

Bug: 221312856
Test: Presubmits
Change-Id: I18613a628968acc25b57b44e229de7df1b2476ef
parent dce67554
Loading
Loading
Loading
Loading
+4 −66
Original line number Diff line number Diff line
@@ -14,13 +14,10 @@
# limitations under the License.
#

# the foreach and the if remove the single space entries that creep in because of the evals
# the sort also acts as a strip to remove the single space entries that creep in because of the evals
define gather-all-products
$(sort $(foreach p, \
	$(eval _all_products_visited := )
  $(call all-products-inner, $(PARENT_PRODUCT_FILES)) \
	, $(if $(strip $(p)),$(strip $(p)),)) \
)
$(eval _all_products_visited := )\
$(sort $(call all-products-inner, $(PARENT_PRODUCT_FILES)))
endef

define all-products-inner
@@ -72,7 +69,7 @@ define emit-product-node-props
$(hide) echo \"$(1)\" [ \
label=\"$(dir $(1))\\n$(notdir $(1))\\n\\n$(subst $(close_parenthesis),,$(subst $(open_parethesis),,$(call get-product-var,$(1),PRODUCT_MODEL)))\\n$(call get-product-var,$(1),PRODUCT_DEVICE)\" \
style=\"filled\" fillcolor=\"$(strip $(call node-color,$(1)))\" \
colorscheme=\"svg\" fontcolor=\"darkblue\" href=\"products/$(1).html\" \
colorscheme=\"svg\" fontcolor=\"darkblue\" \
] >> $(2)

endef
@@ -95,66 +92,7 @@ else
	false
endif

# Evaluates to the name of the product file
# $(1) product file
define product-debug-filename
$(OUT_DIR)/products/$(strip $(1)).html
endef

# Makes a rule for the product debug info
# $(1) product file
define transform-product-debug
$(OUT_DIR)/products/$(strip $(1)).txt: $(this_makefile)
	@echo Product debug info file: $$@
	$(hide) rm -f $$@
	$(hide) mkdir -p $$(dir $$@)
	$(hide) echo 'FILE=$(strip $(1))' >> $$@
	$(hide) echo 'PRODUCT_NAME=$(call get-product-var,$(1),PRODUCT_NAME)' >> $$@
	$(hide) echo 'PRODUCT_MODEL=$(call get-product-var,$(1),PRODUCT_MODEL)' >> $$@
	$(hide) echo 'PRODUCT_LOCALES=$(call get-product-var,$(1),PRODUCT_LOCALES)' >> $$@
	$(hide) echo 'PRODUCT_AAPT_CONFIG=$(call get-product-var,$(1),PRODUCT_AAPT_CONFIG)' >> $$@
	$(hide) echo 'PRODUCT_AAPT_PREF_CONFIG=$(call get-product-var,$(1),PRODUCT_AAPT_PREF_CONFIG)' >> $$@
	$(hide) echo 'PRODUCT_PACKAGES=$(call get-product-var,$(1),PRODUCT_PACKAGES)' >> $$@
	$(hide) echo 'PRODUCT_DEVICE=$(call get-product-var,$(1),PRODUCT_DEVICE)' >> $$@
	$(hide) echo 'PRODUCT_MANUFACTURER=$(call get-product-var,$(1),PRODUCT_MANUFACTURER)' >> $$@
	$(hide) echo 'PRODUCT_PROPERTY_OVERRIDES=$(call get-product-var,$(1),PRODUCT_PROPERTY_OVERRIDES)' >> $$@
	$(hide) echo 'PRODUCT_DEFAULT_PROPERTY_OVERRIDES=$(call get-product-var,$(1),PRODUCT_DEFAULT_PROPERTY_OVERRIDES)' >> $$@
	$(hide) echo 'PRODUCT_SYSTEM_DEFAULT_PROPERTIES=$(call get-product-var,$(1),PRODUCT_SYSTEM_DEFAULT_PROPERTIES)' >> $$@
	$(hide) echo 'PRODUCT_PRODUCT_PROPERTIES=$(call get-product-var,$(1),PRODUCT_PRODUCT_PROPERTIES)' >> $$@
	$(hide) echo 'PRODUCT_SYSTEM_EXT_PROPERTIES=$(call get-product-var,$(1),PRODUCT_SYSTEM_EXT_PROPERTIES)' >> $$@
	$(hide) echo 'PRODUCT_ODM_PROPERTIES=$(call get-product-var,$(1),PRODUCT_ODM_PROPERTIES)' >> $$@
	$(hide) echo 'PRODUCT_CHARACTERISTICS=$(call get-product-var,$(1),PRODUCT_CHARACTERISTICS)' >> $$@
	$(hide) echo 'PRODUCT_COPY_FILES=$(call get-product-var,$(1),PRODUCT_COPY_FILES)' >> $$@
	$(hide) echo 'PRODUCT_OTA_PUBLIC_KEYS=$(call get-product-var,$(1),PRODUCT_OTA_PUBLIC_KEYS)' >> $$@
	$(hide) echo 'PRODUCT_EXTRA_OTA_KEYS=$(call get-product-var,$(1),PRODUCT_EXTRA_OTA_KEYS)' >> $$@
	$(hide) echo 'PRODUCT_EXTRA_RECOVERY_KEYS=$(call get-product-var,$(1),PRODUCT_EXTRA_RECOVERY_KEYS)' >> $$@
	$(hide) echo 'PRODUCT_PACKAGE_OVERLAYS=$(call get-product-var,$(1),PRODUCT_PACKAGE_OVERLAYS)' >> $$@
	$(hide) echo 'DEVICE_PACKAGE_OVERLAYS=$(call get-product-var,$(1),DEVICE_PACKAGE_OVERLAYS)' >> $$@
	$(hide) echo 'PRODUCT_SDK_ADDON_NAME=$(call get-product-var,$(1),PRODUCT_SDK_ADDON_NAME)' >> $$@
	$(hide) echo 'PRODUCT_SDK_ADDON_COPY_FILES=$(call get-product-var,$(1),PRODUCT_SDK_ADDON_COPY_FILES)' >> $$@
	$(hide) echo 'PRODUCT_SDK_ADDON_COPY_MODULES=$(call get-product-var,$(1),PRODUCT_SDK_ADDON_COPY_MODULES)' >> $$@
	$(hide) echo 'PRODUCT_SDK_ADDON_DOC_MODULES=$(call get-product-var,$(1),PRODUCT_SDK_ADDON_DOC_MODULES)' >> $$@
	$(hide) echo 'PRODUCT_DEFAULT_WIFI_CHANNELS=$(call get-product-var,$(1),PRODUCT_DEFAULT_WIFI_CHANNELS)' >> $$@
	$(hide) echo 'PRODUCT_DEFAULT_DEV_CERTIFICATE=$(call get-product-var,$(1),PRODUCT_DEFAULT_DEV_CERTIFICATE)' >> $$@
	$(hide) echo 'PRODUCT_MAINLINE_SEPOLICY_DEV_CERTIFICATES=$(call get-product-var,$(1),PRODUCT_MAINLINE_SEPOLICY_DEV_CERTIFICATES)' >> $$@
	$(hide) echo 'PRODUCT_RESTRICT_VENDOR_FILES=$(call get-product-var,$(1),PRODUCT_RESTRICT_VENDOR_FILES)' >> $$@
	$(hide) echo 'PRODUCT_VENDOR_KERNEL_HEADERS=$(call get-product-var,$(1),PRODUCT_VENDOR_KERNEL_HEADERS)' >> $$@

$(call product-debug-filename, $(p)): \
			$(OUT_DIR)/products/$(strip $(1)).txt \
			build/make/tools/product_debug.py \
			$(this_makefile)
	@echo Product debug html file: $$@
	$(hide) mkdir -p $$(dir $$@)
	$(hide) cat $$< | build/make/tools/product_debug.py > $$@
endef

ifeq (,$(RBC_PRODUCT_CONFIG)$(RBC_NO_PRODUCT_GRAPH)$(RBC_BOARD_CONFIG))
product_debug_files:=
$(foreach p,$(all_products), \
			$(eval $(call transform-product-debug, $(p))) \
			$(eval product_debug_files += $(call product-debug-filename, $(p))) \
   )

.PHONY: product-graph
product-graph: $(products_graph)

tools/product_debug.py

deleted100755 → 0
+0 −159
Original line number Diff line number Diff line
#!/usr/bin/env python
#
# Copyright (C) 2012 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import os
import re
import sys

def break_lines(key, val):
  # these don't get split
  if key in ("PRODUCT_MODEL"):
    return (key,val)
  return (key, "\n".join(val.split()))

def split_line(line):
  words = line.split("=", 1)
  if len(words) == 1:
    return (words[0], "")
  else:
    return (words[0], words[1])

def sort_lines(text):
  lines = text.split()
  lines.sort()
  return "\n".join(lines)

def parse_variables(lines):
  return [split_line(line) for line in lines if line.strip()]

def render_variables(variables):
  variables = dict(variables)
  del variables["FILE"]
  variables = list(variables.iteritems())
  variables.sort(lambda a, b: cmp(a[0], b[0]))
  return ("<table id='variables'>"
      + "\n".join([ "<tr><th>%(key)s</th><td>%(val)s</td></tr>" % { "key": key, "val": val }
        for key,val in variables])
      +"</table>")

def linkify_inherit(variables, text, func_name):
  groups = re.split("(\\$\\(call " + func_name + ",.*\\))", text)
  result = ""
  for i in range(0,len(groups)/2):
    i = i * 2
    result = result + groups[i]
    s = groups[i+1]
    href = s.split(",", 1)[1].strip()[:-1]
    href = href.replace("$(SRC_TARGET_DIR)", "build/target")
    href = ("../" * variables["FILE"].count("/")) + href + ".html"
    result = result + "<a href=\"%s\">%s</a>" % (href,s)
  result = result + groups[-1]
  return result

def render_original(variables, text):
  text = linkify_inherit(variables, text, "inherit-product")
  text = linkify_inherit(variables, text, "inherit-product-if-exists")
  return text

def read_file(fn):
  f = file(fn)
  text = f.read()
  f.close()
  return text

def main(argv):
  # read the variables
  lines = sys.stdin.readlines()
  variables = parse_variables(lines)

  # format the variables
  variables = [break_lines(key,val) for key,val in variables]

  # now it's a dict
  variables = dict(variables)

  sorted_vars = (
      "PRODUCT_COPY_FILES",
      "PRODUCT_PACKAGES",
      "PRODUCT_LOCALES",
      "PRODUCT_PROPERTY_OVERRIDES",
    )

  for key in sorted_vars:
    variables[key] = sort_lines(variables[key])

  # the original file
  original = read_file(variables["FILE"])

  # formatting
  values = dict(variables)
  values.update({
    "variables": render_variables(variables),
    "original": render_original(variables, original),
  })
  print """<html>


<head>
  <title>%(FILE)s</title>
  <style type="text/css">
    body {
      font-family: Helvetica, Arial, sans-serif;
      padding-bottom: 20px;
    }
    #variables {
      border-collapse: collapse;
    }
    #variables th, #variables td {
      vertical-align: top;
      text-align: left;
      border-top: 1px solid #c5cdde;
      border-bottom: 1px solid #c5cdde;
      padding: 2px 10px 2px 10px;
    }
    #variables th {
      font-size: 10pt;
      background-color: #e2ecff
    }
    #variables td {
      background-color: #ebf2ff;
      white-space: pre;
      font-size: 10pt;
    }
    #original {
      background-color: #ebf2ff;
      border-top: 1px solid #c5cdde;
      border-bottom: 1px solid #c5cdde;
      padding: 2px 10px 2px 10px;
      white-space: pre;
      font-size: 10pt;
    }
  </style>
</head>
<body>
<h1>%(FILE)s</h1>
<a href="#Original">Original</a>
<a href="#Variables">Variables</a>
<h2><a name="Original"></a>Original</h2>
<div id="original">%(original)s</div>
<h2><a name="Variables"></a>Variables</h2>
%(variables)s
</body>
</html>
""" % values

if __name__ == "__main__":
  main(sys.argv)