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
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 4cfd21b..426e25d 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -643,6 +643,9 @@
 $(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 c14a2d2..ee87632 100644
--- a/core/config.mk
+++ b/core/config.mk
@@ -604,7 +604,6 @@
 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 214e16d..a38861b 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -970,45 +970,6 @@
   $(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 40754ad..0000000
--- 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()