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

# Common variables
# ========================================================

libweaveCommonCppExtension := .cc
libweaveCommonCFlags := -Wall -Werror \
	-Wno-char-subscripts -Wno-missing-field-initializers \
	-Wno-unused-function -Wno-unused-parameter

libweaveCommonCppFlags := \
	-Wno-deprecated-register \
	-Wno-sign-compare \
	-Wno-sign-promo \
	-Wno-non-virtual-dtor \

libweaveCommonCIncludes := \
	$(LOCAL_PATH)/.. \
	$(LOCAL_PATH)/include \
	$(LOCAL_PATH)/third_party/modp_b64/modp_b64 \
	external/gtest/include \

libweaveSharedLibraries := \
	libchrome \
	libexpat \
	libcrypto \

# libweave-external
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libweave-external
LOCAL_CPP_EXTENSION := $(libweaveCommonCppExtension)
LOCAL_CFLAGS := $(libweaveCommonCFlags)
LOCAL_CPPFLAGS := $(libweaveCommonCppFlags)
LOCAL_C_INCLUDES := $(libweaveCommonCIncludes)
LOCAL_SHARED_LIBRARIES := $(libweaveSharedLibraries)
LOCAL_STATIC_LIBRARIES :=
LOCAL_RTTI_FLAG := -frtti
LOCAL_CLANG := true
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/external

LOCAL_SRC_FILES := \
	third_party/chromium/crypto/p224.cc \
	third_party/chromium/crypto/p224_spake.cc \
	third_party/chromium/crypto/sha2.cc \
	third_party/modp_b64/modp_b64.cc \

include $(BUILD_STATIC_LIBRARY)

# libweave-common
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libweave-common
LOCAL_CPP_EXTENSION := $(libweaveCommonCppExtension)
LOCAL_CFLAGS := $(libweaveCommonCFlags)
LOCAL_CPPFLAGS := $(libweaveCommonCppFlags)
LOCAL_C_INCLUDES := $(libweaveCommonCIncludes)
LOCAL_SHARED_LIBRARIES := $(libweaveSharedLibraries)
LOCAL_STATIC_LIBRARIES := libweave-external
LOCAL_RTTI_FLAG := -frtti
LOCAL_CLANG := true
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)

LOCAL_SRC_FILES := \
	src/backoff_entry.cc \
	src/base_api_handler.cc \
	src/commands/cloud_command_proxy.cc \
	src/commands/command_definition.cc \
	src/commands/command_dictionary.cc \
	src/commands/command_instance.cc \
	src/commands/command_manager.cc \
	src/commands/command_queue.cc \
	src/commands/object_schema.cc \
	src/commands/prop_constraints.cc \
	src/commands/prop_types.cc \
	src/commands/prop_values.cc \
	src/commands/schema_constants.cc \
	src/commands/schema_utils.cc \
	src/config.cc \
	src/data_encoding.cc \
	src/device_manager.cc \
	src/device_registration_info.cc \
	src/error.cc \
	src/http_constants.cc \
	src/json_error_codes.cc \
	src/notification/notification_parser.cc \
	src/notification/pull_channel.cc \
	src/notification/xml_node.cc \
	src/notification/xmpp_channel.cc \
	src/notification/xmpp_iq_stanza_handler.cc \
	src/notification/xmpp_stream_parser.cc \
	src/privet/cloud_delegate.cc \
	src/privet/constants.cc \
	src/privet/device_delegate.cc \
	src/privet/device_ui_kind.cc \
	src/privet/openssl_utils.cc \
	src/privet/privet_handler.cc \
	src/privet/privet_manager.cc \
	src/privet/privet_types.cc \
	src/privet/publisher.cc \
	src/privet/security_manager.cc \
	src/privet/wifi_bootstrap_manager.cc \
	src/privet/wifi_ssid_generator.cc \
	src/registration_status.cc \
	src/states/error_codes.cc \
	src/states/state_change_queue.cc \
	src/states/state_manager.cc \
	src/states/state_package.cc \
	src/string_utils.cc \
	src/utils.cc \

include $(BUILD_STATIC_LIBRARY)

# libweave-test
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libweave-test
LOCAL_CPP_EXTENSION := $(libweaveCommonCppExtension)
LOCAL_CFLAGS := $(libweaveCommonCFlags)
LOCAL_CPPFLAGS := $(libweaveCommonCppFlags)
LOCAL_C_INCLUDES := \
	$(libweaveCommonCIncludes) \
	external/gmock/include \

LOCAL_SHARED_LIBRARIES := $(libweaveSharedLibraries)
LOCAL_STATIC_LIBRARIES := libgtest libgmock
LOCAL_CLANG := true
LOCAL_RTTI_FLAG := -frtti
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include

LOCAL_SRC_FILES := \
	src/test/fake_stream.cc \
	src/test/fake_task_runner.cc \
	src/test/mock_command.cc \
	src/test/unittest_utils.cc \

include $(BUILD_STATIC_LIBRARY)

# libweave
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libweave
LOCAL_CPP_EXTENSION := $(libweaveCommonCppExtension)
LOCAL_CFLAGS := $(libweaveCommonCFlags)
LOCAL_CPPFLAGS := $(libweaveCommonCppFlags)
LOCAL_C_INCLUDES := $(libweaveCommonCIncludes)
LOCAL_SHARED_LIBRARIES := $(libweaveSharedLibraries)
LOCAL_WHOLE_STATIC_LIBRARIES := libweave-external libweave-common
LOCAL_CLANG := true
LOCAL_RTTI_FLAG := -frtti
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include

LOCAL_SRC_FILES := \
	src/empty.cc

include $(BUILD_SHARED_LIBRARY)

# libweave_test
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libweave_test
LOCAL_MODULE_TAGS := debug
LOCAL_CPP_EXTENSION := $(libweaveCommonCppExtension)
LOCAL_CFLAGS := $(libweaveCommonCFlags)
LOCAL_CPPFLAGS := $(libweaveCommonCppFlags)
LOCAL_C_INCLUDES := \
	$(libweaveCommonCIncludes) \
	external/gmock/include \

LOCAL_SHARED_LIBRARIES := \
	$(libweaveSharedLibraries) \

LOCAL_STATIC_LIBRARIES := \
	libweave-external \
	libweave-common \
	libweave-test \
	libgtest libgmock \
	libchrome_test_helpers \

LOCAL_CLANG := true
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)

LOCAL_SRC_FILES := \
	src/backoff_entry_unittest.cc \
	src/base_api_handler_unittest.cc \
	src/commands/cloud_command_proxy_unittest.cc \
	src/commands/command_definition_unittest.cc \
	src/commands/command_dictionary_unittest.cc \
	src/commands/command_instance_unittest.cc \
	src/commands/command_manager_unittest.cc \
	src/commands/command_queue_unittest.cc \
	src/commands/object_schema_unittest.cc \
	src/commands/schema_utils_unittest.cc \
	src/config_unittest.cc \
	src/data_encoding_unittest.cc \
	src/device_registration_info_unittest.cc \
	src/error_unittest.cc \
	src/notification/notification_parser_unittest.cc \
	src/notification/xml_node_unittest.cc \
	src/notification/xmpp_channel_unittest.cc \
	src/notification/xmpp_iq_stanza_handler_unittest.cc \
	src/notification/xmpp_stream_parser_unittest.cc \
	src/privet/privet_handler_unittest.cc \
	src/privet/security_manager_unittest.cc \
	src/privet/wifi_ssid_generator_unittest.cc \
	src/states/state_change_queue_unittest.cc \
	src/states/state_manager_unittest.cc \
	src/states/state_package_unittest.cc \
	src/string_utils_unittest.cc \
	src/test/weave_testrunner.cc \
	src/weave_unittest.cc \
	third_party/chromium/crypto/p224_spake_unittest.cc \
	third_party/chromium/crypto/p224_unittest.cc \
	third_party/chromium/crypto/sha2_unittest.cc \

include $(BUILD_NATIVE_TEST)
