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

# Common variables
# ========================================================
defaultCppExtension := .cc
defaultCFlags := \
  -Wall -Werror \
  -Wno-unused-parameter \
  -fvisibility=hidden \
  -DUSE_TPM2 \
  -DUSE_BINDER_IPC
defaultIncludes := $(LOCAL_PATH)/..
defaultSharedLibraries := \
  libbase \
  libbinder \
  libbinderwrapper \
  libbrillo \
  libbrillo-binder \
  libchrome \
  libchrome-crypto \
  libcrypto \
  libprotobuf-cpp-lite \
  libtrunks \
  libutils

# libtpm_manager_generated
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libtpm_manager_generated
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
LOCAL_CPP_EXTENSION := $(defaultCppExtension)
LOCAL_CFLAGS := $(defaultCFlags) -fvisibility=default
LOCAL_CLANG := true
proto_include := $(call local-generated-sources-dir)/proto/$(LOCAL_PATH)/..
aidl_include := $(call local-generated-sources-dir)/aidl-generated/include
LOCAL_C_INCLUDES := $(proto_include) $(aidl_include) $(defaultIncludes)
LOCAL_EXPORT_C_INCLUDE_DIRS := $(proto_include) $(aidl_include)
LOCAL_SHARED_LIBRARIES := $(defaultSharedLibraries)
LOCAL_SRC_FILES := \
  common/tpm_manager.proto \
  aidl/android/tpm_manager/ITpmManagerClient.aidl \
  aidl/android/tpm_manager/ITpmNvram.aidl \
  aidl/android/tpm_manager/ITpmOwnership.aidl
LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/aidl
include $(BUILD_STATIC_LIBRARY)

# libtpm_manager_common
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libtpm_manager_common
LOCAL_CPP_EXTENSION := $(defaultCppExtension)
LOCAL_CFLAGS := $(defaultCFlags) -fvisibility=default
LOCAL_CLANG := true
LOCAL_C_INCLUDES := $(defaultIncludes)
LOCAL_SHARED_LIBRARIES := $(defaultSharedLibraries)
LOCAL_STATIC_LIBRARIES := libtpm_manager_generated
LOCAL_SRC_FILES := \
  common/print_tpm_manager_proto.cc
include $(BUILD_STATIC_LIBRARY)

# libtpm_manager_server
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libtpm_manager_server
LOCAL_CPP_EXTENSION := $(defaultCppExtension)
LOCAL_CFLAGS := $(defaultCFlags)
LOCAL_CLANG := true
LOCAL_C_INCLUDES := $(defaultIncludes)
LOCAL_SHARED_LIBRARIES := $(defaultSharedLibraries)
LOCAL_STATIC_LIBRARIES := libtpm_manager_generated
LOCAL_SRC_FILES := \
  server/binder_service.cc \
  server/local_data_store_impl.cc \
  server/openssl_crypto_util_impl.cc \
  server/tpm2_initializer_impl.cc \
  server/tpm2_nvram_impl.cc \
  server/tpm2_status_impl.cc \
  server/tpm_manager_service.cc
include $(BUILD_STATIC_LIBRARY)

# tpm_managerd
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := tpm_managerd
LOCAL_CPP_EXTENSION := $(defaultCppExtension)
LOCAL_CFLAGS := $(defaultCFlags)
LOCAL_CLANG := true
LOCAL_INIT_RC := server/tpm_managerd.rc
LOCAL_C_INCLUDES := $(defaultIncludes)
LOCAL_SHARED_LIBRARIES := $(defaultSharedLibraries)
LOCAL_STATIC_LIBRARIES := \
  libtpm_manager_server \
  libtpm_manager_common \
  libtpm_manager_generated
LOCAL_REQUIRED_MODULES := tpm_managerd-seccomp.policy
LOCAL_SRC_FILES := \
  server/main.cc

include $(BUILD_EXECUTABLE)

# tpm_managerd-seccomp.policy
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := tpm_managerd-seccomp.policy
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT)/usr/share/policy/
LOCAL_SRC_FILES := server/tpm_managerd-seccomp-$(TARGET_ARCH).policy
include $(BUILD_PREBUILT)

# libtpm_manager
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libtpm_manager
LOCAL_CPP_EXTENSION := $(defaultCppExtension)
LOCAL_CFLAGS := $(defaultCFlags)
LOCAL_CLANG := true
LOCAL_C_INCLUDES := $(defaultIncludes)
LOCAL_SHARED_LIBRARIES := $(defaultSharedLibraries)
LOCAL_WHOLE_STATIC_LIBRARIES := \
  libtpm_manager_common \
  libtpm_manager_generated
LOCAL_SRC_FILES := \
  client/tpm_nvram_binder_proxy.cc \
  client/tpm_ownership_binder_proxy.cc
include $(BUILD_SHARED_LIBRARY)

# tpm_manager_client
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := tpm_manager_client
LOCAL_CPP_EXTENSION := $(defaultCppExtension)
LOCAL_CFLAGS := $(defaultCFlags)
LOCAL_CLANG := true
LOCAL_C_INCLUDES := $(defaultIncludes)
LOCAL_SHARED_LIBRARIES := $(defaultSharedLibraries) libtpm_manager
LOCAL_SRC_FILES := \
  client/main.cc
include $(BUILD_EXECUTABLE)

# Target unit tests
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := tpm_manager_test
LOCAL_MODULE_TAGS := eng
LOCAL_CPP_EXTENSION := $(defaultCppExtension)
LOCAL_CFLAGS := $(defaultCFlags) -Wno-sign-compare
LOCAL_CLANG := true
LOCAL_C_INCLUDES := $(defaultIncludes)
LOCAL_SHARED_LIBRARIES := $(defaultSharedLibraries) libtpm_manager
LOCAL_SRC_FILES := \
  common/mock_tpm_nvram_interface.cc \
  common/mock_tpm_ownership_interface.cc \
  server/binder_service_test.cc \
  server/mock_local_data_store.cc \
  server/mock_openssl_crypto_util.cc \
  server/mock_tpm_initializer.cc \
  server/mock_tpm_nvram.cc \
  server/mock_tpm_status.cc \
  server/tpm2_initializer_test.cc \
  server/tpm2_nvram_test.cc \
  server/tpm2_status_test.cc \
  server/tpm_manager_service_test.cc
LOCAL_STATIC_LIBRARIES := \
  libBionicGtestMain \
  libgmock \
  libtpm_manager_common \
  libtpm_manager_generated \
  libtpm_manager_server \
  libtrunks_test
include $(BUILD_NATIVE_TEST)
