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

LOCAL_PATH := $(call my-dir)

libprofile_rt_srcs := \
    GCDAProfiling.c \
    InstrProfiling.c \
    InstrProfilingBuffer.c \
    InstrProfilingFile.c \
    InstrProfilingPlatformDarwin.c \
    InstrProfilingPlatformOther.c \
    InstrProfilingRuntime.cc \
    InstrProfilingUtil.c \

libprofile_rt_cflags := -Werror -Wall

#=====================================================================
# Host Static Library: libprofile_rt
#=====================================================================

include $(CLEAR_VARS)

LOCAL_MODULE = libprofile_rt
LOCAL_CFLAGS := $(libcompiler_rt_cflags)
LOCAL_SRC_FILES := $(libprofile_rt_srcs)
LOCAL_CPP_EXTENSION := .cc
LOCAL_SANITIZE := never
LOCAL_MULTILIB := both
LOCAL_CXX_STL := none

include $(BUILD_HOST_STATIC_LIBRARY)

#=====================================================================
# Device Static Library: libprofile_rt
#=====================================================================

include $(CLEAR_VARS)

LOCAL_MODULE = libprofile_rt
LOCAL_CFLAGS := $(libcompiler_rt_cflags)
LOCAL_CLANG := true
LOCAL_SRC_FILES := $(libprofile_rt_srcs)
LOCAL_CPP_EXTENSION := .cc
LOCAL_SANITIZE := never
LOCAL_MULTILIB := both
LOCAL_NDK_STL_VARIANT := none
LOCAL_SDK_VERSION := 21

include $(BUILD_STATIC_LIBRARY)
