| # |
| # Copyright (C) 2018 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. |
| # |
| |
| # Generates rules to install sanitizer runtime libraries to the out directory if |
| # the sanitizer is requested in the app's ldflags. |
| # |
| # Args: |
| # NDK_SANTIZER_NAME: |
| # Sanitizer name used as the variable name component to find the library. |
| # i.e. $(TARGET_$(2)_BASENAME) is the name of the library to install. This |
| # is also used as the name printed to the terminal for the build step. |
| # NDK_SANITIZER_FSANITIZE_ARGS: |
| # -fsanitize= arguments that require this runtime library. |
| # NDK_SANITIZER_EXCLUDE_FSANITIZE_ARGS: |
| # -fsanitize= arguments that exclude this runtime library. For example, |
| # the UBSan runtime is included in the ASan runtime, so if we have both |
| # the address and undefined sanitizers enabled, we only need to install |
| # the ASan runtime. |
| # |
| # Example usage: |
| # NDK_SANITIZER_NAME := UBSAN |
| # NDK_SANITIZER_FSANITIZE_ARGS := undefined |
| # include $(BUILD_SYSTEM)/install_sanitizer.mk |
| |
| ifneq (,$(filter $(NDK_SANITIZER_FSANITIZE_ARGS),$(NDK_SANITIZERS))) |
| ifeq (,$(filter $(NDK_SANITIZER_EXCLUDE_FSANITIZE_ARGS),$(NDK_SANITIZERS))) |
| installed_modules: $(NDK_APP_$(NDK_SANITIZER_NAME)) |
| |
| NDK_SANITIZER_TARGET := $(NDK_APP_$(NDK_SANITIZER_NAME)) |
| NDK_SANITIZER_LIB_PATH := $(NDK_TOOLCHAIN_LIB_DIR)/$(TARGET_$(NDK_SANITIZER_NAME)_BASENAME) |
| |
| $(NDK_SANITIZER_TARGET): PRIVATE_ABI := $(TARGET_ARCH_ABI) |
| $(NDK_SANITIZER_TARGET): PRIVATE_NAME := $(NDK_SANITIZER_NAME) |
| $(NDK_SANITIZER_TARGET): PRIVATE_SRC := $(NDK_SANITIZER_LIB_PATH) |
| $(NDK_SANITIZER_TARGET): PRIVATE_DST := $(NDK_APP_$(NDK_SANITIZER_NAME)) |
| |
| $(call generate-file-dir,$(NDK_APP_$(NDK_SANITIZER_NAME))) |
| |
| $(NDK_SANITIZER_TARGET): clean-installed-binaries |
| $(call host-echo-build-step,$(PRIVATE_ABI),$(PRIVATE_NAME) "$(call pretty-dir,$(PRIVATE_DST))") |
| $(hide) $(call host-install,$(PRIVATE_SRC),$(PRIVATE_DST)) |
| endif |
| endif |