Merge "Revert "Rename libevent-host to libevent""
diff --git a/core/Makefile b/core/Makefile
index 79faae1..cdf24dd 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -550,7 +550,7 @@
endif
endif
-BOARD_KERNEL_CMDLINE := $(strip $(BOARD_KERNEL_CMDLINE) $(VERITY_KEYID))
+BOARD_KERNEL_CMDLINE := $(strip $(BOARD_KERNEL_CMDLINE) buildvariant=$(TARGET_BUILD_VARIANT) $(VERITY_KEYID))
ifdef BOARD_KERNEL_CMDLINE
INTERNAL_BOOTIMAGE_ARGS += --cmdline "$(BOARD_KERNEL_CMDLINE)"
endif
diff --git a/core/base_rules.mk b/core/base_rules.mk
index a84ea27..8a1c5ee 100644
--- a/core/base_rules.mk
+++ b/core/base_rules.mk
@@ -323,6 +323,9 @@
## Module installation rule
###########################################################
+my_init_rc_installed :=
+my_init_rc_pairs :=
+my_installed_symlinks :=
ifndef LOCAL_UNINSTALLABLE_MODULE
$(LOCAL_INSTALLED_MODULE): PRIVATE_POST_INSTALL_CMD := $(LOCAL_POST_INSTALL_CMD)
$(LOCAL_INSTALLED_MODULE): $(LOCAL_BUILT_MODULE)
@@ -331,8 +334,6 @@
$(PRIVATE_POST_INSTALL_CMD)
# Rule to install the module's companion init.rc.
-my_init_rc_installed :=
-my_init_rc_pairs :=
my_init_rc := $(LOCAL_INIT_RC_$(my_32_64_bit_suffix))
ifneq ($(my_init_rc),)
my_init_rc_pairs += $(LOCAL_PATH)/$(my_init_rc):$(TARGET_OUT$(partition_tag)_ETC)/init/$(notdir $(my_init_rc))
@@ -347,6 +348,12 @@
$(my_register_name) : $(my_init_rc_installed)
endif # my_init_rc_pairs
+
+# Rule to install the module's companion symlinks
+my_installed_symlinks := $(addprefix $(my_module_path)/,$(LOCAL_MODULE_SYMLINKS) $(LOCAL_MODULE_SYMLINKS_$(my_32_64_bit_suffix)))
+$(foreach symlink,$(my_installed_symlinks),\
+ $(call symlink-file,$(LOCAL_INSTALLED_MODULE),$(my_installed_module_stem),$(symlink)))
+
endif # !LOCAL_UNINSTALLABLE_MODULE
###########################################################
@@ -395,7 +402,7 @@
ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE))
ALL_MODULES.$(my_register_name).INSTALLED := \
$(strip $(ALL_MODULES.$(my_register_name).INSTALLED) \
- $(LOCAL_INSTALLED_MODULE) $(my_init_rc_installed))
+ $(LOCAL_INSTALLED_MODULE) $(my_init_rc_installed) $(my_installed_symlinks))
ALL_MODULES.$(my_register_name).BUILT_INSTALLED := \
$(strip $(ALL_MODULES.$(my_register_name).BUILT_INSTALLED) \
$(LOCAL_BUILT_MODULE):$(LOCAL_INSTALLED_MODULE) \
diff --git a/core/binary.mk b/core/binary.mk
index 73b3bd9..41520c2 100644
--- a/core/binary.mk
+++ b/core/binary.mk
@@ -337,12 +337,16 @@
###########################################################
ifndef LOCAL_IS_HOST_MODULE
ifdef LOCAL_SDK_VERSION
-my_target_project_includes :=
-my_target_c_includes := $(my_ndk_stl_include_path) $(my_ndk_sysroot_include)
+my_target_global_c_includes :=
+my_target_global_c_system_includes := $(my_ndk_stl_include_path) $(my_ndk_sysroot_include)
my_target_global_cppflags := $(my_ndk_stl_cppflags)
else
-my_target_project_includes := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_PROJECT_INCLUDES)
-my_target_c_includes := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_C_INCLUDES)
+my_target_global_c_includes := $(SRC_HEADERS) \
+ $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_PROJECT_INCLUDES) \
+ $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_C_INCLUDES)
+my_target_global_c_system_includes := $(SRC_SYSTEM_HEADERS) \
+ $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_PROJECT_SYSTEM_INCLUDES) \
+ $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_C_SYSTEM_INCLUDES)
my_target_global_cppflags :=
endif # LOCAL_SDK_VERSION
@@ -358,8 +362,8 @@
my_target_global_ldflags := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_LDFLAGS)
endif # my_clang
-$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_PROJECT_INCLUDES := $(my_target_project_includes)
-$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_C_INCLUDES := $(my_target_c_includes)
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_GLOBAL_C_INCLUDES := $(my_target_global_c_includes)
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_GLOBAL_C_SYSTEM_INCLUDES := $(my_target_global_c_system_includes)
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_GLOBAL_CFLAGS := $(my_target_global_cflags)
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_GLOBAL_CONLYFLAGS := $(my_target_global_conlyflags)
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_GLOBAL_CPPFLAGS := $(my_target_global_cppflags)
@@ -367,21 +371,27 @@
else # LOCAL_IS_HOST_MODULE
+my_host_global_c_includes := $(SRC_HEADERS) \
+ $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)PROJECT_INCLUDES) \
+ $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)C_INCLUDES)
+my_host_global_c_system_includes := $(SRC_SYSTEM_HEADERS) \
+ $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)PROJECT_SYSTEM_INCLUDES) \
+ $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)C_SYSTEM_INCLUDES)
+
ifeq ($(my_clang),true)
my_host_global_cflags := $($(LOCAL_2ND_ARCH_VAR_PREFIX)CLANG_$(my_prefix)GLOBAL_CFLAGS)
my_host_global_conlyflags := $($(LOCAL_2ND_ARCH_VAR_PREFIX)CLANG_$(my_prefix)GLOBAL_CONLYFLAGS)
my_host_global_cppflags := $($(LOCAL_2ND_ARCH_VAR_PREFIX)CLANG_$(my_prefix)GLOBAL_CPPFLAGS)
my_host_global_ldflags := $($(LOCAL_2ND_ARCH_VAR_PREFIX)CLANG_$(my_prefix)GLOBAL_LDFLAGS)
-my_host_c_includes := $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)C_INCLUDES)
else
my_host_global_cflags := $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)GLOBAL_CFLAGS)
my_host_global_conlyflags := $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)GLOBAL_CONLYFLAGS)
my_host_global_cppflags := $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)GLOBAL_CPPFLAGS)
my_host_global_ldflags := $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)GLOBAL_LDFLAGS)
-my_host_c_includes := $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)C_INCLUDES)
endif # my_clang
-$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_HOST_C_INCLUDES := $(my_host_c_includes)
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_GLOBAL_C_INCLUDES := $(my_host_global_c_includes)
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_GLOBAL_C_SYSTEM_INCLUDES := $(my_host_global_c_system_includes)
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_HOST_GLOBAL_CFLAGS := $(my_host_global_cflags)
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_HOST_GLOBAL_CONLYFLAGS := $(my_host_global_conlyflags)
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_HOST_GLOBAL_CPPFLAGS := $(my_host_global_cppflags)
diff --git a/core/clang/tidy.mk b/core/clang/tidy.mk
index 019e6f0..35871f0 100644
--- a/core/clang/tidy.mk
+++ b/core/clang/tidy.mk
@@ -16,9 +16,9 @@
# Most Android source files are not clang-tidy clean yet.
# Global tidy checks include only google* and misc-macro-parentheses,
-# but not google-readability*.
+# but not google-readability* or google-runtime-references.
DEFAULT_GLOBAL_TIDY_CHECKS := \
- -*,google*,-google-readability*,misc-macro-parentheses
+ -*,google*,-google-readability*,-google-runtime-references,misc-macro-parentheses
# Disable style rules usually not followed by external projects.
# Every word in DEFAULT_LOCAL_TIDY_CHECKS list has the following format:
@@ -37,9 +37,9 @@
external/webrtc/:,google-runtime-int \
hardware/qcom:,-google-build-using-namespace \
hardware/qcom:,-google-explicit-constructor,-google-runtime-int \
- vendor/lge:,-google-build-using-namespace \
+ vendor/lge:,-google-build-using-namespace,-misc-macro-parentheses \
vendor/lge:,-google-explicit-constructor,-google-runtime-int \
- vendor/widevine:,-google-build-using-namespace \
+ vendor/widevine:,-google-build-using-namespace,-misc-macro-parentheses \
vendor/widevine:,-google-explicit-constructor,-google-runtime-int \
# Returns 2nd word of $(1) if $(2) has prefix of the 1st word of $(1).
diff --git a/core/clang/versions.mk b/core/clang/versions.mk
index ef28880..5988eff 100644
--- a/core/clang/versions.mk
+++ b/core/clang/versions.mk
@@ -1,5 +1,5 @@
## Clang/LLVM release versions.
LLVM_RELEASE_VERSION := 3.8
-LLVM_PREBUILTS_VERSION ?= clang-2812033
+LLVM_PREBUILTS_VERSION ?= clang-3016494
LLVM_PREBUILTS_BASE ?= prebuilts/clang/host
diff --git a/core/clear_vars.mk b/core/clear_vars.mk
index 7733a3e..31b337a 100644
--- a/core/clear_vars.mk
+++ b/core/clear_vars.mk
@@ -192,6 +192,7 @@
LOCAL_NOSANITIZE:=
LOCAL_DBUS_PROXY_PREFIX:=
LOCAL_INIT_RC:=
+LOCAL_MODULE_SYMLINKS:=
LOCAL_MODULE_HOST_OS:=
LOCAL_NOTICE_FILE:=
# Used to replace the installed file of a presigned prebuilt apk in PDK fusion build,
@@ -355,6 +356,8 @@
LOCAL_CLANG_64:=
LOCAL_INIT_RC_32:=
LOCAL_INIT_RC_64:=
+LOCAL_MODULE_SYMLINKS_32:=
+LOCAL_MODULE_SYMLINKS_64:=
LOCAL_JAVA_LANGUAGE_VERSION:=
LOCAL_CTS_GTEST_LIST_EXECUTABLE:=
diff --git a/core/config.mk b/core/config.mk
index b179881..594c273 100644
--- a/core/config.mk
+++ b/core/config.mk
@@ -39,17 +39,17 @@
# TODO: Enforce some kind of layering; only add include paths
# when a module links against a particular library.
# TODO: See if we can remove most of these from the global list.
-SRC_HEADERS := \
- $(TOPDIR)system/core/include \
- $(TOPDIR)system/media/audio/include \
- $(TOPDIR)hardware/libhardware/include \
- $(TOPDIR)hardware/libhardware_legacy/include \
- $(TOPDIR)hardware/ril/include \
- $(TOPDIR)libnativehelper/include \
- $(TOPDIR)frameworks/native/include \
- $(TOPDIR)frameworks/native/opengl/include \
- $(TOPDIR)frameworks/av/include \
- $(TOPDIR)frameworks/base/include
+SRC_SYSTEM_HEADERS := \
+ $(wildcard system/core/include) \
+ $(wildcard system/media/audio/include) \
+ $(wildcard hardware/libhardware/include) \
+ $(wildcard hardware/libhardware_legacy/include) \
+ $(wildcard hardware/ril/include) \
+ $(wildcard libnativehelper/include) \
+ $(wildcard frameworks/native/include) \
+ $(wildcard frameworks/native/opengl/include) \
+ $(wildcard frameworks/av/include) \
+ $(wildcard frameworks/base/include)
SRC_TARGET_DIR := $(TOPDIR)build/target
SRC_API_DIR := $(TOPDIR)prebuilts/sdk/api
SRC_SYSTEM_API_DIR := $(TOPDIR)prebuilts/sdk/system-api
@@ -645,8 +645,10 @@
GLOBAL_CLANG_CFLAGS_NO_OVERRIDE := \
-Werror=address-of-temporary \
- -Werror=null-dereference \
-Werror=return-type \
+ # Bug: http://b/29823425 Disable -Wnull-dereference until the new cases
+ # detected by this warning in Clang r271374 are fixed.
+ #-Werror=null-dereference \
GLOBAL_CPPFLAGS_NO_OVERRIDE :=
@@ -663,28 +665,34 @@
HOST_GLOBAL_LD_DIRS := -L$(HOST_OUT_INTERMEDIATE_LIBRARIES)
TARGET_GLOBAL_LD_DIRS := -L$(TARGET_OUT_INTERMEDIATE_LIBRARIES)
-HOST_PROJECT_INCLUDES:= $(SRC_HEADERS) $(HOST_OUT_HEADERS)
-TARGET_PROJECT_INCLUDES:= $(SRC_HEADERS) $(TARGET_OUT_HEADERS) \
+HOST_PROJECT_INCLUDES :=
+HOST_PROJECT_SYSTEM_INCLUDES := $(HOST_OUT_HEADERS)
+TARGET_PROJECT_INCLUDES :=
+TARGET_PROJECT_SYSTEM_INCLUDES := $(TARGET_OUT_HEADERS) \
$(TARGET_DEVICE_KERNEL_HEADERS) $(TARGET_BOARD_KERNEL_HEADERS) \
$(TARGET_PRODUCT_KERNEL_HEADERS)
ifdef TARGET_2ND_ARCH
$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_LD_DIRS := -L$($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)
$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_PROJECT_INCLUDES := $(TARGET_PROJECT_INCLUDES)
+$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_PROJECT_SYSTEM_INCLUDES := $(TARGET_PROJECT_SYSTEM_INCLUDES)
endif
ifdef HOST_2ND_ARCH
$(HOST_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_LD_DIRS := -L$($(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATE_LIBRARIES)
$(HOST_2ND_ARCH_VAR_PREFIX)HOST_PROJECT_INCLUDES := $(HOST_PROJECT_INCLUDES)
+$(HOST_2ND_ARCH_VAR_PREFIX)HOST_PROJECT_SYSTEM_INCLUDES := $(HOST_PROJECT_SYSTEM_INCLUDES)
endif
ifdef HOST_CROSS_OS
HOST_CROSS_GLOBAL_LD_DIRS := -L$(HOST_CROSS_OUT_INTERMEDIATE_LIBRARIES)
-HOST_CROSS_PROJECT_INCLUDES:= $(SRC_HEADERS) $(HOST_CROSS_OUT_HEADERS)
+HOST_CROSS_PROJECT_INCLUDES :=
+HOST_CROSS_PROJECT_SYSTEM_INCLUDES := $(HOST_CROSS_OUT_HEADERS)
ifdef HOST_CROSS_2ND_ARCH
$(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_GLOBAL_LD_DIRS := -L$($(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_INTERMEDIATE_LIBRARIES)
-$(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_PROJECT_INCLUDES:= $(SRC_HEADERS) $($(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_HEADERS)
+$(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_PROJECT_INCLUDES:= $(HOST_CROSS_PROJECT_INCLUDES)
+$(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_PROJECT_SYSTEM_INCLUDES:= $(HOST_CROSS_PROJECT_SYSTEM_INCLUDES)
endif
endif
diff --git a/core/config_sanitizers.mk b/core/config_sanitizers.mk
index 7882fdf..ac3e4fc 100644
--- a/core/config_sanitizers.mk
+++ b/core/config_sanitizers.mk
@@ -157,9 +157,13 @@
my_ldflags += -Wl,--as-needed
endif
- my_linker := $($(LOCAL_2ND_ARCH_VAR_PREFIX)ADDRESS_SANITIZER_LINKER)
- # Make sure linker_asan get installed.
- $(LOCAL_INSTALLED_MODULE) : | $(PRODUCT_OUT)$($(LOCAL_2ND_ARCH_VAR_PREFIX)ADDRESS_SANITIZER_LINKER)
+ ifeq ($(LOCAL_MODULE_CLASS),EXECUTABLES)
+ ifneq ($(LOCAL_FORCE_STATIC_EXECUTABLE),true)
+ my_linker := $($(LOCAL_2ND_ARCH_VAR_PREFIX)ADDRESS_SANITIZER_LINKER)
+ # Make sure linker_asan get installed.
+ $(LOCAL_INSTALLED_MODULE) : | $(PRODUCT_OUT)$($(LOCAL_2ND_ARCH_VAR_PREFIX)ADDRESS_SANITIZER_LINKER)
+ endif
+ endif
endif
endif
diff --git a/core/definitions.mk b/core/definitions.mk
index 11caedf..afb4558 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -1149,19 +1149,27 @@
$(filter %.dbus-xml,$^)
endef
+###########################################################
+## Helper to set include paths form transform-*-to-o
+###########################################################
+define c-includes
+$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
+$$(cat $(PRIVATE_IMPORT_INCLUDES))\
+$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),,\
+ $(addprefix -I ,\
+ $(filter-out $(PRIVATE_C_INCLUDES), \
+ $(PRIVATE_GLOBAL_C_INCLUDES))) \
+ $(addprefix -isystem ,\
+ $(filter-out $(PRIVATE_C_INCLUDES), \
+ $(PRIVATE_GLOBAL_C_SYSTEM_INCLUDES))))
+endef
###########################################################
## Commands for running gcc to compile a C++ file
###########################################################
define transform-cpp-to-o-compiler-args
- $(addprefix -I , $(PRIVATE_C_INCLUDES)) \
- $$(cat $(PRIVATE_IMPORT_INCLUDES)) \
- $(addprefix -isystem ,\
- $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
- $(filter-out $(PRIVATE_C_INCLUDES), \
- $(PRIVATE_TARGET_PROJECT_INCLUDES) \
- $(PRIVATE_TARGET_C_INCLUDES)))) \
+ $(c-includes) \
-c \
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
$(PRIVATE_TARGET_GLOBAL_CFLAGS) \
@@ -1207,13 +1215,7 @@
# $(1): extra flags
define transform-c-or-s-to-o-compiler-args
- $(addprefix -I , $(PRIVATE_C_INCLUDES)) \
- $$(cat $(PRIVATE_IMPORT_INCLUDES)) \
- $(addprefix -isystem ,\
- $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
- $(filter-out $(PRIVATE_C_INCLUDES), \
- $(PRIVATE_TARGET_PROJECT_INCLUDES) \
- $(PRIVATE_TARGET_C_INCLUDES)))) \
+ $(c-includes) \
-c \
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
$(PRIVATE_TARGET_GLOBAL_CFLAGS) \
@@ -1299,13 +1301,7 @@
###########################################################
define transform-host-cpp-to-o-compiler-args
- $(addprefix -I , $(PRIVATE_C_INCLUDES)) \
- $$(cat $(PRIVATE_IMPORT_INCLUDES)) \
- $(addprefix -isystem ,\
- $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
- $(filter-out $(PRIVATE_C_INCLUDES), \
- $($(PRIVATE_PREFIX)PROJECT_INCLUDES) \
- $(PRIVATE_HOST_C_INCLUDES)))) \
+ $(c-includes) \
-c \
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
$(PRIVATE_HOST_GLOBAL_CFLAGS) \
@@ -1348,13 +1344,7 @@
###########################################################
define transform-host-c-or-s-to-o-common-args
- $(addprefix -I , $(PRIVATE_C_INCLUDES)) \
- $$(cat $(PRIVATE_IMPORT_INCLUDES)) \
- $(addprefix -isystem ,\
- $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
- $(filter-out $(PRIVATE_C_INCLUDES), \
- $($(PRIVATE_PREFIX)PROJECT_INCLUDES) \
- $(PRIVATE_HOST_C_INCLUDES)))) \
+ $(c-includes) \
-c \
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
$(PRIVATE_HOST_GLOBAL_CFLAGS) \
@@ -2605,6 +2595,24 @@
$(hide) mkdir -p $(dir $(3)/$(s)); cp -Rf $(t) $(3)/$(s)$(newline))
endef
+# Define a rule to create a symlink to a file.
+# $(1): full path to source
+# $(2): source (may be relative)
+# $(3): full path to destination
+define symlink-file
+$(eval $(_symlink-file))
+endef
+
+# Order-only dependency because make/ninja will follow the link when checking
+# the timestamp, so the file must exist
+define _symlink-file
+$(3): | $(1)
+ @echo "Symlink: $$@ -> $(2)"
+ @mkdir -p $(dir $$@)
+ @rm -rf $$@
+ $(hide) ln -sf $(2) $$@
+endef
+
###########################################################
## Commands to call Proguard
###########################################################
diff --git a/core/executable_prefer_symlink.mk b/core/executable_prefer_symlink.mk
index 1640b32..e59e8c2 100644
--- a/core/executable_prefer_symlink.mk
+++ b/core/executable_prefer_symlink.mk
@@ -10,43 +10,37 @@
# et al. since those variables make no sense in that context.
ifneq ($(LOCAL_IS_HOST_MODULE),true)
my_symlink := $(addprefix $(TARGET_OUT)/bin/, $(LOCAL_MODULE))
+ my_src_binary_name :=
ifeq ($(TARGET_IS_64_BIT),true)
ifeq ($(TARGET_SUPPORTS_64_BIT_APPS)|$(TARGET_SUPPORTS_32_BIT_APPS),true|true)
# We support both 32 and 64 bit apps, so we will have to
# base our decision on whether the target prefers one or the
# other.
ifeq ($(TARGET_PREFER_32_BIT_APPS),true)
- $(my_symlink): PRIVATE_SRC_BINARY_NAME := $(LOCAL_MODULE_STEM_32)
+ my_src_binary_name := $(LOCAL_MODULE_STEM_32)
else
- $(my_symlink): PRIVATE_SRC_BINARY_NAME := $(LOCAL_MODULE_STEM_64)
+ my_src_binary_name := $(LOCAL_MODULE_STEM_64)
endif
else ifeq ($(TARGET_SUPPORTS_64_BIT_APPS),true)
# We support only 64 bit apps.
- $(my_symlink): PRIVATE_SRC_BINARY_NAME := $(LOCAL_MODULE_STEM_64)
+ my_src_binary_name := $(LOCAL_MODULE_STEM_64)
else
# We support only 32 bit apps.
- $(my_symlink): PRIVATE_SRC_BINARY_NAME := $(LOCAL_MODULE_STEM_32)
+ my_src_binary_name := $(LOCAL_MODULE_STEM_32)
endif
else
- $(my_symlink): PRIVATE_SRC_BINARY_NAME := $(LOCAL_MODULE_STEM_32)
+ my_src_binary_name := $(LOCAL_MODULE_STEM_32)
endif
else
my_symlink := $(addprefix $(HOST_OUT)/bin/, $(LOCAL_MODULE))
ifneq ($(HOST_PREFER_32_BIT),true)
-$(my_symlink): PRIVATE_SRC_BINARY_NAME := $(LOCAL_MODULE_STEM_64)
+ my_src_binary_name := $(LOCAL_MODULE_STEM_64)
else
-$(my_symlink): PRIVATE_SRC_BINARY_NAME := $(LOCAL_MODULE_STEM_32)
+ my_src_binary_name := $(LOCAL_MODULE_STEM_32)
endif
endif
-# $(my_symlink) doesn't need to depend on $(PRIVATE_SRC_BINARY_NAME): we can generate symlink to nonexistent file.
-# If you add the dependency, make would compare the timestamp of a file against that of its symlink:
-# they are always equal, because make follows symlink.
-$(my_symlink):
- @echo "Symlink: $@ -> $(PRIVATE_SRC_BINARY_NAME)"
- @mkdir -p $(dir $@)
- @rm -rf $@
- $(hide) ln -sf $(PRIVATE_SRC_BINARY_NAME) $@
+$(call symlink-file,$(my_module_path)/$(my_src_binary_name),$(my_src_binary_name),$(my_symlink))
# We need this so that the installed files could be picked up based on the
# local module name
diff --git a/core/goma.mk b/core/goma.mk
index 0d5f428..c0c27c5 100644
--- a/core/goma.mk
+++ b/core/goma.mk
@@ -46,7 +46,7 @@
# gomacc can start goma client's daemon process automatically, but
# it is safer and faster to start up it beforehand. We run this as a
# background process so this won't slow down the build.
- $(shell ( GOMA_HERMETIC=error $(goma_ctl) ensure_start ) &> /dev/null &)
+ $(shell ( $(goma_ctl) ensure_start ) &> /dev/null &)
goma_ctl :=
goma_dir :=
diff --git a/core/tasks/check_boot_jars/package_whitelist.txt b/core/tasks/check_boot_jars/package_whitelist.txt
index 1478aae..daf13fe 100644
--- a/core/tasks/check_boot_jars/package_whitelist.txt
+++ b/core/tasks/check_boot_jars/package_whitelist.txt
@@ -8,6 +8,7 @@
java\.io
java\.lang
java\.lang\.annotation
+java\.lang\.invoke
java\.lang\.ref
java\.lang\.reflect
java\.math
diff --git a/tools/warn.py b/tools/warn.py
index 6324429..51349af 100755
--- a/tools/warn.py
+++ b/tools/warn.py
@@ -6,6 +6,10 @@
import re
parser = argparse.ArgumentParser(description='Convert a build log into HTML')
+parser.add_argument('--gencsv',
+ help='Generate a CSV file with number of various warnings',
+ action="store_true",
+ default=False)
parser.add_argument('--url',
help='Root URL of an Android source code tree prefixed '
'before files in warnings')
@@ -119,7 +123,7 @@
'patterns':[r".*: warning: incompatible implicit declaration of built-in function .+"] },
{ 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'',
'description':'Null passed as non-null argument',
- 'patterns':[r".*: warning: Null passed to a callee that requires a non-null argument"] },
+ 'patterns':[r".*: warning: Null passed to a callee that requires a non-null"] },
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wunused-parameter',
'description':'Unused parameter',
'patterns':[r".*: warning: unused parameter '.*'"] },
@@ -1366,6 +1370,9 @@
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
'description':'Possible broken line continuation',
'patterns':[r".*: warning: backslash and newline separated by space"] },
+ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wundefined-var-template',
+ 'description':'Undefined variable template',
+ 'patterns':[r".*: warning: instantiation of variable .* no definition is available"] },
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wundefined-inline',
'description':'Inline function is not defined',
'patterns':[r".*: warning: inline function '.*' is not defined"] },
@@ -1504,9 +1511,9 @@
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wnon-literal-null-conversion',
'description':'Zero used as null pointer',
'patterns':[r".*: warning: expression .* zero treated as a null pointer constant"] },
- { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wliteral-conversion',
+ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
'description':'Implicit conversion changes value',
- 'patterns':[r".*: warning: implicit conversion .* changes value from .* to .*literal-conversion"] },
+ 'patterns':[r".*: warning: implicit conversion .* changes value from .* to .*-conversion"] },
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
'description':'Passing NULL as non-pointer argument',
'patterns':[r".*: warning: passing NULL to non-pointer argument [0-9]+ of '.+'"] },
@@ -1734,8 +1741,17 @@
'description':'clang-tidy c++ core guidelines',
'patterns':[r".*: .+\[cppcoreguidelines-.+\]$"] },
{ 'category':'C/C++', 'severity':severity.TIDY, 'members':[], 'option':'',
- 'description':'clang-tidy google-runtime',
- 'patterns':[r".*: .+\[google-runtime-.+\]$"] },
+ 'description':'clang-tidy google-default-arguments',
+ 'patterns':[r".*: .+\[google-default-arguments\]$"] },
+ { 'category':'C/C++', 'severity':severity.TIDY, 'members':[], 'option':'',
+ 'description':'clang-tidy google-runtime-int',
+ 'patterns':[r".*: .+\[google-runtime-int\]$"] },
+ { 'category':'C/C++', 'severity':severity.TIDY, 'members':[], 'option':'',
+ 'description':'clang-tidy google-runtime-operator',
+ 'patterns':[r".*: .+\[google-runtime-operator\]$"] },
+ { 'category':'C/C++', 'severity':severity.TIDY, 'members':[], 'option':'',
+ 'description':'clang-tidy google-runtime-references',
+ 'patterns':[r".*: .+\[google-runtime-references\]$"] },
{ 'category':'C/C++', 'severity':severity.TIDY, 'members':[], 'option':'',
'description':'clang-tidy google-build',
'patterns':[r".*: .+\[google-build-.+\]$"] },
@@ -1749,6 +1765,9 @@
'description':'clang-tidy google-global',
'patterns':[r".*: .+\[google-global-.+\]$"] },
{ 'category':'C/C++', 'severity':severity.TIDY, 'members':[], 'option':'',
+ 'description':'clang-tidy google- other',
+ 'patterns':[r".*: .+\[google-.+\]$"] },
+ { 'category':'C/C++', 'severity':severity.TIDY, 'members':[], 'option':'',
'description':'clang-tidy modernize',
'patterns':[r".*: .+\[modernize-.+\]$"] },
{ 'category':'C/C++', 'severity':severity.TIDY, 'members':[], 'option':'',
@@ -1774,6 +1793,54 @@
'patterns':[r".*: warning: .+"] },
]
+# A list of [project_name, file_path_pattern].
+# project_name should not contain comma, to be used in CSV output.
+projectlist = [
+ ['art', r"(^|.*/)art/.*: warning:"],
+ ['bionic', r"(^|.*/)bionic/.*: warning:"],
+ ['bootable', r"(^|.*/)bootable/.*: warning:"],
+ ['build', r"(^|.*/)build/.*: warning:"],
+ ['cts', r"(^|.*/)cts/.*: warning:"],
+ ['dalvik', r"(^|.*/)dalvik/.*: warning:"],
+ ['developers', r"(^|.*/)developers/.*: warning:"],
+ ['development', r"(^|.*/)development/.*: warning:"],
+ ['device', r"(^|.*/)device/.*: warning:"],
+ ['doc', r"(^|.*/)doc/.*: warning:"],
+ ['external', r"(^|.*/)external/.*: warning:"],
+ ['frameworks', r"(^|.*/)frameworks/.*: warning:"],
+ ['hardware', r"(^|.*/)hardware/.*: warning:"],
+ ['kernel', r"(^|.*/)kernel/.*: warning:"],
+ ['libcore', r"(^|.*/)libcore/.*: warning:"],
+ ['libnativehelper', r"(^|.*/)libnativehelper/.*: warning:"],
+ ['ndk', r"(^|.*/)ndk/.*: warning:"],
+ ['packages', r"(^|.*/)packages/.*: warning:"],
+ ['pdk', r"(^|.*/)pdk/.*: warning:"],
+ ['prebuilts', r"(^|.*/)prebuilts/.*: warning:"],
+ ['system', r"(^|.*/)system/.*: warning:"],
+ ['toolchain', r"(^|.*/)toolchain/.*: warning:"],
+ ['test', r"(^|.*/)test/.*: warning:"],
+ ['tools', r"(^|.*/)tools/.*: warning:"],
+ ['vendor', r"(^|.*/)vendor/.*: warning:"],
+ ['out/obj', r".*/(gen|obj[^/]*)/(include|EXECUTABLES|SHARED_LIBRARIES|STATIC_LIBRARIES)/.*: warning:"],
+ ['other', r".*: warning:"],
+]
+
+projectpatterns = []
+for p in projectlist:
+ projectpatterns.append({'description':p[0], 'members':[], 'pattern':re.compile(p[1])})
+
+# Each warning pattern has a dictionary that maps
+# a project name to number of warnings in that project.
+for w in warnpatterns:
+ w['projects'] = {}
+
+platformversion = 'unknown'
+targetproduct = 'unknown'
+targetvariant = 'unknown'
+
+
+##### Data and functions to dump html file. ##################################
+
anchor = 0
cur_row_class = 0
@@ -1822,7 +1889,6 @@
output('<title>' + title + '</title>\n')
output(html_script_style)
output('</head>\n<body>\n')
- output('<a name="PageTop">')
output(htmlbig(title))
output('<p>\n')
@@ -1836,12 +1902,16 @@
output(text)
output('</td></tr>')
+def sortwarnings():
+ for i in warnpatterns:
+ i['members'] = sorted(set(i['members']))
+
# dump some stats about total number of warnings and such
def dumpstats():
known = 0
unknown = 0
+ sortwarnings()
for i in warnpatterns:
- i['members'] = sorted(set(i['members']))
if i['severity'] == severity.UNKNOWN:
unknown += len(i['members'])
elif i['severity'] != severity.SKIP:
@@ -1946,17 +2016,28 @@
output('</table></div>\n')
+def findproject(line):
+ for p in projectpatterns:
+ if p['pattern'].match(line):
+ return p['description']
+ return '???'
+
def classifywarning(line):
for i in warnpatterns:
for cpat in i['compiledpatterns']:
if cpat.match(line):
i['members'].append(line)
+ pname = findproject(line)
+ if pname in i['projects']:
+ i['projects'][pname] += 1
+ else:
+ i['projects'][pname] = 1
return
- else:
- # If we end up here, there was a problem parsing the log
- # probably caused by 'make -j' mixing the output from
- # 2 or more concurrent compiles
- pass
+ else:
+ # If we end up here, there was a problem parsing the log
+ # probably caused by 'make -j' mixing the output from
+ # 2 or more concurrent compiles
+ pass
# precompiling every pattern speeds up parsing by about 30x
def compilepatterns():
@@ -1965,54 +2046,103 @@
for pat in i['patterns']:
i['compiledpatterns'].append(re.compile(pat))
-infile = open(args.buildlog, 'r')
-warnings = []
+def parseinputfile():
+ global platformversion
+ global targetproduct
+ global targetvariant
+ infile = open(args.buildlog, 'r')
+ linecounter = 0
-platformversion = 'unknown'
-targetproduct = 'unknown'
-targetvariant = 'unknown'
-linecounter = 0
+ warningpattern = re.compile('.* warning:.*')
+ compilepatterns()
-warningpattern = re.compile('.* warning:.*')
-compilepatterns()
-
-# read the log file and classify all the warnings
-lastmatchedline = ''
-for line in infile:
- # replace fancy quotes with plain ol' quotes
- line = line.replace("‘", "'");
- line = line.replace("’", "'");
- if warningpattern.match(line):
- if line != lastmatchedline:
- classifywarning(line)
- lastmatchedline = line
- else:
- # save a little bit of time by only doing this for the first few lines
- if linecounter < 50:
- linecounter +=1
- m = re.search('(?<=^PLATFORM_VERSION=).*', line)
- if m != None:
- platformversion = m.group(0)
- m = re.search('(?<=^TARGET_PRODUCT=).*', line)
- if m != None:
- targetproduct = m.group(0)
- m = re.search('(?<=^TARGET_BUILD_VARIANT=).*', line)
- if m != None:
- targetvariant = m.group(0)
+ # read the log file and classify all the warnings
+ warninglines = set()
+ for line in infile:
+ # replace fancy quotes with plain ol' quotes
+ line = line.replace("‘", "'");
+ line = line.replace("’", "'");
+ if warningpattern.match(line):
+ if line not in warninglines:
+ classifywarning(line)
+ warninglines.add(line)
+ else:
+ # save a little bit of time by only doing this for the first few lines
+ if linecounter < 50:
+ linecounter +=1
+ m = re.search('(?<=^PLATFORM_VERSION=).*', line)
+ if m != None:
+ platformversion = m.group(0)
+ m = re.search('(?<=^TARGET_PRODUCT=).*', line)
+ if m != None:
+ targetproduct = m.group(0)
+ m = re.search('(?<=^TARGET_BUILD_VARIANT=).*', line)
+ if m != None:
+ targetvariant = m.group(0)
# dump the html output to stdout
-dumphtmlprologue('Warnings for ' + platformversion + ' - ' + targetproduct + ' - ' + targetvariant)
-dumpstats()
-# sort table based on number of members once dumpstats has deduplicated the
-# members.
-warnpatterns.sort(reverse=True, key=lambda i: len(i['members']))
-dumpseverity(severity.FIXMENOW)
-dumpseverity(severity.HIGH)
-dumpseverity(severity.MEDIUM)
-dumpseverity(severity.LOW)
-dumpseverity(severity.TIDY)
-dumpseverity(severity.HARMLESS)
-dumpseverity(severity.UNKNOWN)
-dumpfixed()
-dumphtmlepilogue()
+def dumphtml():
+ dumphtmlprologue('Warnings for ' + platformversion + ' - ' + targetproduct + ' - ' + targetvariant)
+ dumpstats()
+ # sort table based on number of members once dumpstats has deduplicated the
+ # members.
+ warnpatterns.sort(reverse=True, key=lambda i: len(i['members']))
+ dumpseverity(severity.FIXMENOW)
+ dumpseverity(severity.HIGH)
+ dumpseverity(severity.MEDIUM)
+ dumpseverity(severity.LOW)
+ dumpseverity(severity.TIDY)
+ dumpseverity(severity.HARMLESS)
+ dumpseverity(severity.UNKNOWN)
+ dumpfixed()
+ dumphtmlepilogue()
+
+
+##### Functions to count warnings and dump csv file. #########################
+
+def descriptionforcsv(cat):
+ if cat['description'] == '':
+ return '?'
+ return cat['description']
+
+def stringforcsv(s):
+ if ',' in s:
+ return '"{}"'.format(s)
+ return s
+
+def countseverity(sev, kind):
+ sum = 0
+ for i in warnpatterns:
+ if i['severity'] == sev and len(i['members']) > 0:
+ n = len(i['members'])
+ sum += n
+ warning = stringforcsv(kind + ': ' + descriptionforcsv(i))
+ print '{},,{}'.format(n, warning)
+ # print number of warnings for each project, ordered by project name.
+ projects = i['projects'].keys()
+ projects.sort()
+ for p in projects:
+ print '{},{},{}'.format(i['projects'][p], p, warning)
+ print '{},,{}'.format(sum, kind + ' warnings')
+ return sum
+
+# dump number of warnings in csv format to stdout
+def dumpcsv():
+ sortwarnings()
+ total = 0
+ total += countseverity(severity.FIXMENOW, 'FixNow')
+ total += countseverity(severity.HIGH, 'High')
+ total += countseverity(severity.MEDIUM, 'Medium')
+ total += countseverity(severity.LOW, 'Low')
+ total += countseverity(severity.TIDY, 'Tidy')
+ total += countseverity(severity.HARMLESS, 'Harmless')
+ total += countseverity(severity.UNKNOWN, 'Unknown')
+ print '{},,{}'.format(total, 'All warnings')
+
+
+parseinputfile()
+if args.gencsv:
+ dumpcsv()
+else:
+ dumphtml()