From 0df0f6bbf13a52006b1cabf7d7afd973019b4e3c Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Tue, 30 Jul 2019 12:56:59 -0700 Subject: [PATCH] Remove [jni_]link_type files Now that mm/ONE_SHOT_MAKEFILE have been removed, we can expect to know about all of our dependencies at the end of the build. This removes 19k nodes from our build graph (aosp-master aosp_arm64-eng), though in a default build, only 3k of those are used. Test: ALLOW_MISSING_DEPENDENCIES=true, then trigger a missing dependency Test: treehugger Test: create link_type files, then apply CleanSpec.mk, ensure they're removed Change-Id: I9506331e4a9911d2f26e59a2f72a97aef1644073 --- CleanSpec.mk | 3 ++ core/config.mk | 1 - core/main.mk | 39 -------------------- tools/check_link_type.py | 80 ---------------------------------------- 4 files changed, 3 insertions(+), 120 deletions(-) delete mode 100755 tools/check_link_type.py diff --git a/CleanSpec.mk b/CleanSpec.mk index 4cfd21b9c8..426e25d12e 100644 --- a/CleanSpec.mk +++ b/CleanSpec.mk @@ -643,6 +643,9 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/odm/build.prop) $(call add-clean-step, rm -rf $(OUT_DIR)/target/product/generic*/*/product) $(call add-clean-step, rm -rf $(OUT_DIR)/target/product/generic*/*/system_ext) +# link_type and jni_link_type files are no longer needed +$(call add-clean-step, find $(OUT_DIR) -type f -name "*link_type" -print0 | xargs -0 rm -f) + # ************************************************ # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST # ************************************************ diff --git a/core/config.mk b/core/config.mk index c14a2d26ab..ee87632e7f 100644 --- a/core/config.mk +++ b/core/config.mk @@ -604,7 +604,6 @@ TUNE2FS := $(HOST_OUT_EXECUTABLES)/tune2fs$(HOST_EXECUTABLE_SUFFIX) JARJAR := $(HOST_OUT_JAVA_LIBRARIES)/jarjar.jar DATA_BINDING_COMPILER := $(HOST_OUT_JAVA_LIBRARIES)/databinding-compiler.jar FAT16COPY := build/make/tools/fat16copy.py -CHECK_LINK_TYPE := build/make/tools/check_link_type.py CHECK_ELF_FILE := build/make/tools/check_elf_file.py LPMAKE := $(HOST_OUT_EXECUTABLES)/lpmake$(HOST_EXECUTABLE_SUFFIX) BUILD_IMAGE := $(HOST_OUT_EXECUTABLES)/build_image$(HOST_EXECUTABLE_SUFFIX) diff --git a/core/main.mk b/core/main.mk index 214e16d618..a38861b5a7 100644 --- a/core/main.mk +++ b/core/main.mk @@ -970,45 +970,6 @@ ifdef link_type_error $(error exiting from previous errors) endif -# The intermediate filename for link type rules -# -# APPS are special -- they have up to three different rules: -# 1. The COMMON rule for Java libraries -# 2. The jni_link_type rule for embedded native code -# 3. The 2ND_jni_link_type for the second architecture native code -define link-type-file -$(eval _ltf_aux_variant:=$(link-type-aux-variant))\ -$(if $(_ltf_aux_variant),$(call aux-variant-load-env,$(_ltf_aux_variant)))\ -$(call intermediates-dir-for,$(link-type-class),$(link-type-name),$(filter AUX HOST HOST_CROSS,$(link-type-prefix)),$(link-type-common),$(link-type-2ndarchprefix),$(filter HOST_CROSS,$(link-type-prefix)))/$(if $(filter APPS,$(link-type-class)),$(if $(link-type-common),,$(link-type-2ndarchprefix)jni_))link_type\ -$(if $(_ltf_aux_variant),$(call aux-variant-load-env,none))\ -$(eval _ltf_aux_variant:=) -endef - -# Write out the file-based link_type rules for the ALLOW_MISSING_DEPENDENCIES -# case. We always need to write the file for mm to work, but only need to -# check it if we weren't able to check it when reading the Android.mk files. -define link-type-file-rule -my_link_type_deps := $(foreach l,$($(1).DEPS),$(call link-type-file,$(l))) -my_link_type_file := $(call link-type-file,$(1)) -$($(1).BUILT): | $$(my_link_type_file) -$$(my_link_type_file): PRIVATE_DEPS := $$(my_link_type_deps) -ifeq ($($(1).MISSING),true) -$$(my_link_type_file): $(CHECK_LINK_TYPE) -endif -$$(my_link_type_file): $$(my_link_type_deps) - @echo Check module type: $$@ - $$(hide) mkdir -p $$(dir $$@) && rm -f $$@ -ifeq ($($(1).MISSING),true) - $$(hide) $(CHECK_LINK_TYPE) --makefile $($(1).MAKEFILE) --module $(link-type-name) \ - --type "$($(1).TYPE)" $(addprefix --allowed ,$($(1).ALLOWED)) \ - $(addprefix --warn ,$($(1).WARN)) $$(PRIVATE_DEPS) -endif - $$(hide) echo "$($(1).TYPE)" >$$@ -endef - -$(foreach lt,$(ALL_LINK_TYPES),\ - $(eval $(call link-type-file-rule,$(lt)))) - # ------------------------------------------------------------------- # Figure out our module sets. # diff --git a/tools/check_link_type.py b/tools/check_link_type.py deleted file mode 100755 index 40754adc67..0000000000 --- a/tools/check_link_type.py +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env python -# -# Copyright (C) 2016 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. - -"""Utility to verify modules link against acceptable module types""" - -from __future__ import print_function -import argparse -import os -import sys - -WARNING_MSG = ('\033[1m%(makefile)s: \033[35mwarning:\033[0m\033[1m ' - '%(module)s (%(type)s) should not link to %(dep_name)s (%(dep_type)s)' - '\033[0m') -ERROR_MSG = ('\033[1m%(makefile)s: \033[31merror:\033[0m\033[1m ' - '%(module)s (%(type)s) should not link to %(dep_name)s (%(dep_type)s)' - '\033[0m') - -def parse_args(): - """Parse commandline arguments.""" - parser = argparse.ArgumentParser(description='Check link types') - parser.add_argument('--makefile', help='Makefile defining module') - parser.add_argument('--module', help='The module being checked') - parser.add_argument('--type', help='The link type of module') - parser.add_argument('--allowed', help='Allow deps to use these types', - action='append', default=[], metavar='TYPE') - parser.add_argument('--warn', help='Warn if deps use these types', - action='append', default=[], metavar='TYPE') - parser.add_argument('deps', help='The dependencies to check', - metavar='DEP', nargs='*') - return parser.parse_args() - -def print_msg(msg, args, dep_name, dep_type): - """Print a warning or error message""" - print(msg % { - "makefile": args.makefile, - "module": args.module, - "type": args.type, - "dep_name": dep_name, - "dep_type": dep_type}, file=sys.stderr) - -def main(): - """Program entry point.""" - args = parse_args() - - failed = False - for dep in args.deps: - dep_name = os.path.basename(os.path.dirname(dep)) - if dep_name.endswith('_intermediates'): - dep_name = dep_name[:len(dep_name)-len('_intermediates')] - - with open(dep, 'r') as dep_file: - dep_types = dep_file.read().strip().split(' ') - - for dep_type in dep_types: - if dep_type in args.allowed: - continue - if dep_type in args.warn: - print_msg(WARNING_MSG, args, dep_name, dep_type) - else: - print_msg(ERROR_MSG, args, dep_name, dep_type) - failed = True - - if failed: - sys.exit(1) - -if __name__ == '__main__': - main()