android_build/common/json.mk
Colin Cross 6db5b0ea9a Move dexpreopting to Soong
Move the dexpreopting logic into Soong.  Make modules will be
dexpreopted by executing the Soong logic in the standalone
dexpreopt_gen binary, which will generate scripts that will
perform dexpreopting for each module.  Export global configuration
as JSON to $OUT/dexpreopt.config, which will be used by
dexpreopt_gen and Soong, and per-module JSON configuration that
will be used by dexpreopt_gen.

This relands I59b20c931ee3e5a8d35eb30da4148691c5095502,
I39d580999947ee54cfefe875b57a028be5333bd7,
Ie7daa94e107d53eff075ca58dbe721bd9d7fc8c2 and
Ica006a007d112c232311435aaac0c0e476232b67, with a minor
update to match the changes made to dexpreopt_gen arguments
and a fix to correctly keep dexpreopt disabled on mac builds.

Bug: 119412419
Bug: 120273280
Test: no differences to dexpreopt outputs on aosp_sailfish system/,
      only expected changes to dexpreopt outputs on system_other
      (.vdex files for privileged Soong modules no longer incorrectly
      contain .dex contents).
Change-Id: I25163e91886cea6941afa25cdb529ed053278dcb
2018-12-17 13:46:17 -08:00

36 lines
1.8 KiB
Makefile

4space :=$= $(space)$(space)$(space)$(space)
invert_bool =$= $(if $(strip $(1)),,true)
# Converts a list to a JSON list.
# $1: List separator.
# $2: List.
_json_list =$= [$(if $(2),"$(subst $(1),"$(comma)",$(2))")]
# Converts a space-separated list to a JSON list.
json_list =$= $(call _json_list,$(space),$(1))
# Converts a comma-separated list to a JSON list.
csv_to_json_list =$= $(call _json_list,$(comma),$(1))
# Adds or removes 4 spaces from _json_indent
json_increase_indent =$= $(eval _json_indent := $$(_json_indent)$$(4space))
json_decrease_indent =$= $(eval _json_indent := $$(subst _,$$(space),$$(patsubst %____,%,$$(subst $$(space),_,$$(_json_indent)))))
# 1: Key name
# 2: Value
add_json_val =$= $(eval _json_contents := $$(_json_contents)$$(_json_indent)"$$(strip $$(1))": $$(strip $$(2))$$(comma)$$(newline))
add_json_str =$= $(call add_json_val,$(1),"$(strip $(2))")
add_json_list =$= $(call add_json_val,$(1),$(call json_list,$(patsubst %,%,$(2))))
add_json_csv =$= $(call add_json_val,$(1),$(call csv_to_json_list,$(strip $(2))))
add_json_bool =$= $(call add_json_val,$(1),$(if $(strip $(2)),true,false))
add_json_map =$= $(eval _json_contents := $$(_json_contents)$$(_json_indent)"$$(strip $$(1))": {$$(newline))$(json_increase_indent)
end_json_map =$= $(json_decrease_indent)$(eval _json_contents := $$(_json_contents)$$(if $$(filter %$$(comma),$$(lastword $$(_json_contents))),__SV_END)$$(_json_indent)},$$(newline))
# Clears _json_contents to start a new json file
json_start =$= $(eval _json_contents := {$$(newline))$(eval _json_indent := $$(4space))
# Adds the trailing close brace to _json_contents, and removes any trailing commas if necessary
json_end =$= $(eval _json_contents := $$(subst $$(comma)$$(newline)__SV_END,$$(newline),$$(_json_contents)__SV_END}$$(newline)))
json_contents =$= $(_json_contents)