#
# 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.
#
# 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)))
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
