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

nativepowerman_CommonCFlags := -Wall -Werror -Wno-unused-parameter
nativepowerman_CommonCFlags += -Wno-sign-promo  # for libchrome
nativepowerman_CommonCIncludes := \
  $(LOCAL_PATH)/../include \
  external/gtest/include \

nativepowerman_CommonSharedLibraries := \
  libbinder \
  libbinderwrapper \
  libchrome \
  libcutils \
  libpowermanager \
  libutils \

# nativepowerman executable
# ========================================================

include $(CLEAR_VARS)
# "nativepowermanager" would probably be a better name, but Android service
# names are limited to 16 characters.
LOCAL_MODULE := nativepowerman
LOCAL_REQUIRED_MODULES := nativepowerman.rc
LOCAL_CPP_EXTENSION := .cc
LOCAL_CFLAGS := $(nativepowerman_CommonCFlags)
LOCAL_STATIC_LIBRARIES := libnativepowerman
LOCAL_SHARED_LIBRARIES := \
  $(nativepowerman_CommonSharedLibraries) \
  libchromeos \
  libchromeos-binder \

LOCAL_SRC_FILES := main.cc

include $(BUILD_EXECUTABLE)

# nativepowerman.rc script
# ========================================================

ifdef INITRC_TEMPLATE
include $(CLEAR_VARS)
LOCAL_MODULE := nativepowerman.rc
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_INITRCD)

include $(BUILD_SYSTEM)/base_rules.mk

$(LOCAL_BUILT_MODULE): $(INITRC_TEMPLATE)
	$(call generate-initrc-file,nativepowerman,,)
endif

# libnativepowerman client library (for daemon and tests)
# ========================================================

include $(CLEAR_VARS)
LOCAL_MODULE := libnativepowerman
LOCAL_CPP_EXTENSION := .cc
LOCAL_CFLAGS := $(nativepowerman_CommonCFlags)
LOCAL_C_INCLUDES := $(nativepowerman_CommonCIncludes)
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/../include
LOCAL_SHARED_LIBRARIES := \
  $(nativepowerman_CommonSharedLibraries) \
  libchromeos \

LOCAL_SRC_FILES := \
  BnPowerManager.cc \
  power_manager.cc \
  system_property_setter.cc \
  wake_lock_manager.cc \

include $(BUILD_STATIC_LIBRARY)

# nativepowerman_tests executable
# ========================================================

include $(CLEAR_VARS)
LOCAL_MODULE := nativepowerman_tests
ifdef BRILLO
  LOCAL_MODULE_TAGS := debug
endif
LOCAL_CPP_EXTENSION := .cc
LOCAL_CFLAGS := $(nativepowerman_CommonCFlags)
LOCAL_STATIC_LIBRARIES := libnativepowerman libgtest libBionicGtestMain
LOCAL_SHARED_LIBRARIES := \
  $(nativepowerman_CommonSharedLibraries) \
  libbinderwrapper_test_support \
  libnativepower_test_support \

LOCAL_SRC_FILES := \
  power_manager_unittest.cc \
  system_property_setter_stub.cc \
  wake_lock_manager_unittest.cc \

include $(BUILD_NATIVE_TEST)

# libnativepower_test_support shared library
# ========================================================

include $(CLEAR_VARS)
LOCAL_MODULE := libnativepower_test_support
LOCAL_CPP_EXTENSION := .cc
LOCAL_CFLAGS := $(nativepowerman_CommonCFlags)
LOCAL_C_INCLUDES := $(nativepowerman_CommonCIncludes)
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/../include
LOCAL_SHARED_LIBRARIES := $(nativepowerman_CommonSharedLibraries)
LOCAL_SRC_FILES := \
  BnPowerManager.cc \
  power_manager_stub.cc \
  wake_lock_manager.cc \
  wake_lock_manager_stub.cc \

include $(BUILD_SHARED_LIBRARY)
