#----------------------------------------------------------------------------
#  Copyright (c) 2022 Arm Limited. All rights reserved.
#  SPDX-License-Identifier: Apache-2.0
#
#  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.
#----------------------------------------------------------------------------

#######################################################
# Profiling library                                   #
#######################################################

project(profiler
        DESCRIPTION "Profiling API for applications."
        LANGUAGES C CXX)

add_library(profiler STATIC)

target_sources(profiler
        PRIVATE
        Profiler.cc)

target_include_directories(profiler PUBLIC include)

# Set the CPU profiling defintiion
if (CPU_PROFILE_ENABLED)
    target_compile_definitions(profiler PRIVATE CPU_PROFILE_ENABLED)
endif()

# Profiling API depends on the logging interface and the HAL library.
target_link_libraries(profiler PRIVATE log hal)

# Set the CPU profiling defintiion
target_compile_definitions(profiler PUBLIC
        $<$<BOOL:${CPU_PROFILE_ENABLED}>:CPU_PROFILE_ENABLED>)

message(STATUS "*******************************************************")
message(STATUS "Library                                : " profiler)
message(STATUS "CMAKE_SYSTEM_PROCESSOR                 : " ${CMAKE_SYSTEM_PROCESSOR})
message(STATUS "*******************************************************")
