# Copyright (C) 2014 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.

include $(CLEAR_VARS)

LOCAL_ARM_MODE := arm
ifeq ($(vg_build_second_arch),true)
LOCAL_MULTILIB := 32
vg_local_arch := $(TARGET_2ND_ARCH)
else
LOCAL_MULTILIB := first
vg_local_arch  := $(vg_arch)
endif

# For arm and arm64 targets, clang compiled module has other
# undefined errors, see bug 28454823.
ifeq ($(filter $TARGET_ARCH,x86 x86_64),)
  LOCAL_CLANG := false
endif

# Do not call (builtin) memset from VG(memset).
LOCAL_CLANG_CFLAGS += -fno-builtin-memset

LOCAL_MODULE := $(vg_local_module)-$(vg_local_arch)-linux

LOCAL_MODULE_TARGET_ARCH := $(vg_local_arch)

LOCAL_SRC_FILES := $(vg_local_src_files)

LOCAL_C_INCLUDES := $(common_includes) $(vg_local_c_includes)

LOCAL_PACK_MODULE_RELOCATIONS := false

LOCAL_CFLAGS := $(vg_local_cflags)
LOCAL_CFLAGS_$(TARGET_ARCH) := $(vg_local_target_arch_cflags)
LOCAL_CFLAGS_$(TARGET_2ND_ARCH) := $(vg_local_target_2nd_arch_cflags)

LOCAL_ASFLAGS := $(common_cflags)
LOCAL_ASFLAGS_$(TARGET_ARCH) := $(vg_local_target_arch_cflags)
LOCAL_ASFLAGS_$(TARGET_2ND_ARCH) := $(vg_local_target_2nd_arch_cflags)


LOCAL_LDFLAGS := $(vg_local_ldflags)

LOCAL_MODULE_CLASS := $(vg_local_module_class)

LOCAL_STATIC_LIBRARIES := \
    $(foreach l,$(vg_local_static_libraries),$l-$(vg_local_arch)-linux)
LOCAL_WHOLE_STATIC_LIBRARIES := \
    $(foreach l,$(vg_local_whole_static_libraries),$l-$(vg_local_arch)-linux)

ifeq ($(vg_local_target),EXECUTABLE)
  LOCAL_FORCE_STATIC_EXECUTABLE := true
  LOCAL_NO_FPIE := true
endif

ifneq ($(vg_local_target),STATIC_LIBRARY)
  LOCAL_MODULE_PATH=$(PRODUCT_OUT)$(vg_target_module_path)
endif

ifeq ($(vg_local_without_system_shared_libraries),true)
  LOCAL_SYSTEM_SHARED_LIBRARIES :=
endif

ifeq ($(vg_local_no_crt),true)
  LOCAL_NO_CRT := true
endif

include $(BUILD_$(vg_local_target))
