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

aidl_cflags := -Wall -Wextra -Werror
aidl_static_libraries := libbase libcutils

aidl_module_host_os := darwin linux windows
ifdef BRILLO
  aidl_module_host_os := darwin linux
endif

# Logic shared between aidl and its unittests
include $(CLEAR_VARS)
LOCAL_MODULE := libaidl-common
LOCAL_MODULE_HOST_OS := $(aidl_module_host_os)

LOCAL_WHOLE_STATIC_LIBRARIES := libgtest_prod
LOCAL_CLANG_CFLAGS := $(aidl_cflags)
# Tragically, the code is riddled with unused parameters.
LOCAL_CLANG_CFLAGS += -Wno-unused-parameter
# yacc dumps a lot of code *just in case*.
LOCAL_CLANG_CFLAGS += -Wno-unused-function
LOCAL_CLANG_CFLAGS += -Wno-unneeded-internal-declaration
# yacc is a tool from a more civilized age.
LOCAL_CLANG_CFLAGS += -Wno-deprecated-register
# yacc also has a habit of using char* over const char*.
LOCAL_CLANG_CFLAGS += -Wno-writable-strings
LOCAL_STATIC_LIBRARIES := $(aidl_static_libraries)

LOCAL_SRC_FILES := \
    aidl.cpp \
    aidl_language.cpp \
    aidl_language_l.ll \
    aidl_language_y.yy \
    ast_cpp.cpp \
    ast_java.cpp \
    code_writer.cpp \
    generate_cpp.cpp \
    generate_java.cpp \
    generate_java_binder.cpp \
    import_resolver.cpp \
    line_reader.cpp \
    io_delegate.cpp \
    options.cpp \
    type_cpp.cpp \
    type_java.cpp \
    type_namespace.cpp \

include $(BUILD_HOST_STATIC_LIBRARY)


# aidl executable
include $(CLEAR_VARS)
LOCAL_MODULE := aidl

LOCAL_MODULE_HOST_OS := $(aidl_module_host_os)
LOCAL_CFLAGS := $(aidl_cflags)
LOCAL_WHOLE_STATIC_LIBRARIES := libgtest_prod
LOCAL_SRC_FILES := main_java.cpp
LOCAL_STATIC_LIBRARIES := libaidl-common $(aidl_static_libraries)
include $(BUILD_HOST_EXECUTABLE)

# aidl-cpp executable
include $(CLEAR_VARS)
LOCAL_MODULE := aidl-cpp

LOCAL_MODULE_HOST_OS := $(aidl_module_host_os)
LOCAL_CFLAGS := $(aidl_cflags)
LOCAL_WHOLE_STATIC_LIBRARIES := libgtest_prod
LOCAL_SRC_FILES := main_cpp.cpp
LOCAL_STATIC_LIBRARIES := libaidl-common $(aidl_static_libraries)
include $(BUILD_HOST_EXECUTABLE)

# Unit tests
include $(CLEAR_VARS)
LOCAL_MODULE := aidl_unittests
LOCAL_MODULE_HOST_OS := darwin linux

LOCAL_CFLAGS := $(aidl_cflags) -g -DUNIT_TEST
# Tragically, the code is riddled with unused parameters.
LOCAL_CLANG_CFLAGS := -Wno-unused-parameter
LOCAL_SRC_FILES := \
    aidl_unittest.cpp \
    ast_cpp_unittest.cpp \
    ast_java_unittest.cpp \
    generate_cpp_unittest.cpp \
    io_delegate_unittest.cpp \
    options_unittest.cpp \
    tests/end_to_end_tests.cpp \
    tests/fake_io_delegate.cpp \
    tests/main.cpp \
    tests/test_data_example_interface.cpp \
    tests/test_data_ping_responder.cpp \
    tests/test_data_string_constants.cpp \
    tests/test_util.cpp \
    type_cpp_unittest.cpp \
    type_java_unittest.cpp \

LOCAL_STATIC_LIBRARIES := \
    libaidl-common \
    $(aidl_static_libraries) \
    libgmock_host \

LOCAL_LDLIBS_linux := -lrt
include $(BUILD_HOST_NATIVE_TEST)

#
# Everything below here is used for integration testing of generated AIDL code.
#
aidl_integration_test_cflags := $(aidl_cflags) -Wunused-parameter
aidl_integration_test_shared_libs := \
    libbase \
    libbinder \
    liblog \
    libutils

include $(CLEAR_VARS)
LOCAL_MODULE := libaidl-integration-test
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_CFLAGS := $(aidl_integration_test_cflags)
LOCAL_SHARED_LIBRARIES := $(aidl_integration_test_shared_libs)
LOCAL_AIDL_INCLUDES := \
    system/tools/aidl/tests/ \
    frameworks/native/aidl/binder
LOCAL_SRC_FILES := \
    tests/android/aidl/tests/ITestService.aidl \
    tests/android/aidl/tests/INamedCallback.aidl \
    tests/simple_parcelable.cpp
include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := aidl_test_service
LOCAL_CFLAGS := $(aidl_integration_test_cflags)
LOCAL_SHARED_LIBRARIES := \
    libaidl-integration-test \
    $(aidl_integration_test_shared_libs)
LOCAL_SRC_FILES := \
    tests/aidl_test_service.cpp
include $(BUILD_EXECUTABLE)

include $(CLEAR_VARS)
LOCAL_MODULE := aidl_test_client
LOCAL_CFLAGS := $(aidl_integration_test_cflags)
LOCAL_SHARED_LIBRARIES := \
    libaidl-integration-test \
    $(aidl_integration_test_shared_libs)
LOCAL_SRC_FILES := \
    tests/aidl_test_client.cpp \
    tests/aidl_test_client_file_descriptors.cpp \
    tests/aidl_test_client_parcelables.cpp \
    tests/aidl_test_client_nullables.cpp \
    tests/aidl_test_client_primitives.cpp \
    tests/aidl_test_client_utf8_strings.cpp \
    tests/aidl_test_client_service_exceptions.cpp
include $(BUILD_EXECUTABLE)

include $(CLEAR_VARS)
LOCAL_MODULE := aidl_test_sentinel_searcher
LOCAL_SRC_FILES := tests/aidl_test_sentinel_searcher.cpp
LOCAL_CFLAGS := $(aidl_integration_test_cflags)
include $(BUILD_EXECUTABLE)


# aidl on its own doesn't need the framework, but testing native/java
# compatibility introduces java dependencies.
ifndef BRILLO

include $(CLEAR_VARS)
LOCAL_PACKAGE_NAME := aidl_test_services
# Turn off Java optimization tools to speed up our test iterations.
LOCAL_PROGUARD_ENABLED := disabled
LOCAL_DEX_PREOPT := false
LOCAL_CERTIFICATE := platform
LOCAL_MANIFEST_FILE := tests/java_app/AndroidManifest.xml
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/tests/java_app/resources
LOCAL_SRC_FILES := \
    tests/android/aidl/tests/INamedCallback.aidl \
    tests/android/aidl/tests/ITestService.aidl \
    tests/java_app/src/android/aidl/tests/NullableTests.java \
    tests/java_app/src/android/aidl/tests/SimpleParcelable.java \
    tests/java_app/src/android/aidl/tests/TestFailException.java \
    tests/java_app/src/android/aidl/tests/TestLogger.java \
    tests/java_app/src/android/aidl/tests/TestServiceClient.java
LOCAL_AIDL_INCLUDES := \
    system/tools/aidl/tests/ \
    frameworks/native/aidl/binder
include $(BUILD_PACKAGE)

endif  # not defined BRILLO
