// Copyright (c) 2016, Intel Corporation
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation and/or
// other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors
// may be used to endorse or promote products derived from this software without
// specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

cc_defaults {
    name: "pfw_defaults",
    host_supported: true,
    vendor_available: true,

    cflags: [
        "-frtti",
        "-fexceptions",
        "-Wall",
        "-Werror",
        "-Wextra",
    ],
    rtti: true,
}

cc_library_static {
    name: "libpfw_utility",
    defaults: ["pfw_defaults"],
    host_supported: true,
    vendor_available: true,

    export_include_dirs: ["upstream/utility"],

    srcs: [
        "upstream/utility/DynamicLibrary.cpp",
        "upstream/utility/posix/DynamicLibrary.cpp",
        "upstream/utility/Tokenizer.cpp",
        "upstream/utility/Utility.cpp",
    ],
}

cc_defaults {
    name: "libremote-processor-defaults",
    defaults: ["pfw_defaults"],

    cflags: ["-Wno-implicit-fallthrough"],
    export_include_dirs: [
        "upstream/remote-processor",
        "support/android/remote-processor",
    ],

    srcs: [
        "upstream/remote-processor/RequestMessage.cpp",
        "upstream/remote-processor/Message.cpp",
        "upstream/remote-processor/AnswerMessage.cpp",
        "upstream/remote-processor/RemoteProcessorServer.cpp",
        "upstream/remote-processor/BackgroundRemoteProcessorServer.cpp",
    ],
    static_libs: ["libpfw_utility"],
}

cc_library_shared {
    name: "libremote-processor",
    defaults: ["libremote-processor-defaults"],

    local_include_dirs: [
        "asio/include",
        "support/android/asio",
    ],
    cflags: ["-Wno-unused-local-typedef"],
}

cc_defaults {
    name: "libparameter-defaults",
    defaults: ["pfw_defaults"],
    vendor_available: true,

    cppflags: [
        "-Wno-instantiation-after-specialization",
        "-Wno-implicit-fallthrough",
    ],
    export_include_dirs: [
        "upstream/parameter",
        "upstream/parameter/log/include",
        "upstream/parameter/include",
        "upstream/xmlserializer",
        "upstream/remote-processor",
        "support/android/parameter",
    ],
    shared_libs: [
        "libxml2",
    ],
    static_libs: [
        "libpfw_utility",
    ],

    srcs: [
        "upstream/parameter/ParameterMgrPlatformConnector.cpp",
        "upstream/parameter/LoggingElementBuilderTemplate.cpp",
        "upstream/parameter/StringParameterType.cpp",
        "upstream/parameter/SyncerSet.cpp",
        "upstream/parameter/BitParameter.cpp",
        "upstream/parameter/BaseParameter.cpp",
        "upstream/parameter/ParameterBlockType.cpp",
        "upstream/parameter/FloatingPointParameterType.cpp",
        "upstream/parameter/SelectionCriteriaDefinition.cpp",
        "upstream/parameter/EnumValuePair.cpp",
        "upstream/parameter/SelectionCriteria.cpp",
        "upstream/parameter/SelectionCriterionRule.cpp",
        "upstream/parameter/AreaConfiguration.cpp",
        "upstream/parameter/BitParameterBlockType.cpp",
        "upstream/parameter/ConfigurationAccessContext.cpp",
        "upstream/parameter/BitwiseAreaConfiguration.cpp",
        "upstream/parameter/ArrayParameter.cpp",
        "upstream/parameter/ParameterBlackboard.cpp",
        "upstream/parameter/InstanceConfigurableElement.cpp",
        "upstream/parameter/LogarithmicParameterAdaptation.cpp",
        "upstream/parameter/ConfigurableDomain.cpp",
        "upstream/parameter/FormattedSubsystemObject.cpp",
        "upstream/parameter/MappingData.cpp",
        "upstream/parameter/SubsystemElementBuilder.cpp",
        "upstream/parameter/BooleanParameterType.cpp",
        "upstream/parameter/FixedPointParameterType.cpp",
        "upstream/parameter/ComponentType.cpp",
        "upstream/parameter/EnumParameterType.cpp",
        "upstream/parameter/RuleParser.cpp",
        "upstream/parameter/VirtualSubsystem.cpp",
        "upstream/parameter/Element.cpp",
        "upstream/parameter/ParameterFrameworkConfiguration.cpp",
        "upstream/parameter/SelectionCriterionLibrary.cpp",
        "upstream/parameter/StringParameter.cpp",
        "upstream/parameter/CompoundRule.cpp",
        "upstream/parameter/ConfigurableDomains.cpp",
        "upstream/parameter/VirtualSyncer.cpp",
        "upstream/parameter/MappingContext.cpp",
        "upstream/parameter/LinearParameterAdaptation.cpp",
        "upstream/parameter/ComponentLibrary.cpp",
        "upstream/parameter/BitParameterBlock.cpp",
        "upstream/parameter/ParameterMgrFullConnector.cpp",
        "upstream/parameter/ConfigurableElement.cpp",
        "upstream/parameter/ConfigurableElementAggregator.cpp",
        "upstream/parameter/SubsystemObject.cpp",
        "upstream/parameter/TypeElement.cpp",
        "upstream/parameter/PathNavigator.cpp",
        "upstream/parameter/ElementLocator.cpp",
        "upstream/parameter/SimulatedBackSynchronizer.cpp",
        "upstream/parameter/Parameter.cpp",
        "upstream/parameter/ComponentInstance.cpp",
        "upstream/parameter/InstanceDefinition.cpp",
        "upstream/parameter/SubsystemObjectCreator.cpp",
        "upstream/parameter/ParameterType.cpp",
        "upstream/parameter/DomainConfiguration.cpp",
        "upstream/parameter/PluginLocation.cpp",
        "upstream/parameter/HardwareBackSynchronizer.cpp",
        "upstream/parameter/SystemClass.cpp",
        "upstream/parameter/ElementLibrary.cpp",
        "upstream/parameter/ParameterAccessContext.cpp",
        "upstream/parameter/XmlParameterSerializingContext.cpp",
        "upstream/parameter/ElementHandle.cpp",
        "upstream/parameter/ParameterMgr.cpp",
        "upstream/parameter/SelectionCriterionType.cpp",
        "upstream/parameter/Subsystem.cpp",
        "upstream/parameter/BaseIntegerParameterType.cpp",
        "upstream/parameter/BitParameterType.cpp",
        "upstream/parameter/SelectionCriterion.cpp",
        "upstream/parameter/XmlElementSerializingContext.cpp",
        "upstream/parameter/ElementLibrarySet.cpp",
        "upstream/parameter/FrameworkConfigurationLocation.cpp",
        "upstream/parameter/ParameterAdaptation.cpp",
        "upstream/parameter/XmlFileIncluderElement.cpp",
        "upstream/xmlserializer/XmlElement.cpp",
        "upstream/xmlserializer/XmlSerializingContext.cpp",
        "upstream/xmlserializer/XmlMemoryDocSource.cpp",
        "upstream/xmlserializer/XmlDocSource.cpp",
        "upstream/xmlserializer/XmlMemoryDocSink.cpp",
        "upstream/xmlserializer/XmlStreamDocSink.cpp",
        "upstream/parameter/CommandHandlerWrapper.cpp",
    ],
}

cc_library_shared {
    name: "libparameter",
    defaults: ["libparameter-defaults"],
    shared_libs: [
        "libremote-processor",
    ],
}

// Userdebug only, should not be used in a user build device image.
cc_binary {
    name: "test-platform",
    defaults: ["pfw_defaults"],

    local_include_dirs: [
        "upstream/test/test-platform",
        "support/android/asio",
        "asio/include",
    ],
    srcs: [
        "upstream/test/test-platform/main.cpp",
        "upstream/test/test-platform/TestPlatform.cpp",
    ],
    cflags: [
        "-Wno-unused-local-typedef",
        "-Wno-implicit-fallthrough"
    ],
    static_libs: ["libpfw_utility"],
    shared_libs: [
        "libparameter",
        "libremote-processor",
    ],
}

cc_binary_host {
    name: "domainGeneratorConnector",
    defaults: ["pfw_defaults"],

    owner: "intel",
    static_libs: ["libpfw_utility"],
    shared_libs: ["libparameter"],
    srcs: ["upstream/tools/xmlGenerator/domainGeneratorConnector.cpp"],
}

// Resources are not compiled so the prebuild mechanism is used to export them.
// Schemas are only used by host, in order to validate xml files
//////////////////////////////////////////////////

prebuilt_etc_host {
    name: "ParameterFrameworkConfiguration.xsd",
    owner: "intel",
    src: "upstream/schemas/ParameterFrameworkConfiguration.xsd",
    sub_dir: "parameter-framework/Schemas",
}

prebuilt_etc_host {
    name: "ConfigurableDomain.xsd",
    owner: "intel",
    src: "upstream/schemas/ConfigurableDomain.xsd",
    sub_dir: "parameter-framework/Schemas",
    required: ["ParameterSettings.xsd"],
}

prebuilt_etc_host {
    name: "ConfigurableDomains.xsd",
    owner: "intel",
    src: "upstream/schemas/ConfigurableDomains.xsd",
    sub_dir: "parameter-framework/Schemas",
    required: ["ConfigurableDomain.xsd"],
}

prebuilt_etc_host {
    name: "SystemClass.xsd",
    owner: "intel",
    src: "upstream/schemas/SystemClass.xsd",
    sub_dir: "parameter-framework/Schemas",
    required: [
        "FileIncluder.xsd",
        "Subsystem.xsd",
    ],
}

prebuilt_etc_host {
    name: "ParameterSettings.xsd",
    owner: "intel",
    src: "upstream/schemas/ParameterSettings.xsd",
    sub_dir: "parameter-framework/Schemas",
}

prebuilt_etc_host {
    name: "FileIncluder.xsd",
    owner: "intel",
    src: "upstream/schemas/FileIncluder.xsd",
    sub_dir: "parameter-framework/Schemas",
}

prebuilt_etc_host {
    name: "Subsystem.xsd",
    owner: "intel",
    src: "upstream/schemas/Subsystem.xsd",
    sub_dir: "parameter-framework/Schemas",
    required: ["ComponentLibrary.xsd"],
}

prebuilt_etc_host {
    name: "ComponentLibrary.xsd",
    owner: "intel",
    src: "upstream/schemas/ComponentLibrary.xsd",
    sub_dir: "parameter-framework/Schemas",
    required: [
        "ComponentTypeSet.xsd",
        "W3cXmlAttributes.xsd",
    ],
}

prebuilt_etc_host {
    name: "ComponentTypeSet.xsd",
    owner: "intel",
    src: "upstream/schemas/ComponentTypeSet.xsd",
    sub_dir: "parameter-framework/Schemas",
    required: [
        "Parameter.xsd",
        "W3cXmlAttributes.xsd",
    ],
}

prebuilt_etc_host {
    name: "W3cXmlAttributes.xsd",
    owner: "intel",
    src: "upstream/schemas/W3cXmlAttributes.xsd",
    sub_dir: "parameter-framework/Schemas",
}

prebuilt_etc_host {
    name: "Parameter.xsd",
    owner: "intel",
    src: "upstream/schemas/Parameter.xsd",
    sub_dir: "parameter-framework/Schemas",
}

filegroup {
    name: "EddParser.py-srcs",
    srcs: ["upstream/tools/xmlGenerator/EddParser.py"],
    path: "upstream/tools/xmlGenerator/",
}

python_library_host {
    name: "EddParser.py",
    defaults: ["pfw_defaults"],
    owner: "intel",

    srcs: [":EddParser.py-srcs"],
    version: {
        py2: {
            enabled: true,
        },
        py3: {
            enabled: false,
        },
    },
}

filegroup {
    name: "PfwBaseTranslator.py-srcs",
    srcs: ["upstream/tools/xmlGenerator/PfwBaseTranslator.py"],
    path: "upstream/tools/xmlGenerator/",
}

python_library_host {
    name: "PfwBaseTranslator.py",
    defaults: ["pfw_defaults"],
    owner: "intel",

    srcs: [":PfwBaseTranslator.py-srcs"],
    version: {
        py2: {
            enabled: true,
        },
        py3: {
            enabled: false,
        },
    },
}

filegroup {
    name: "PFWScriptGenerator.py-srcs",
    srcs: ["upstream/tools/xmlGenerator/PFWScriptGenerator.py"],
    path: "upstream/tools/xmlGenerator/",
}

python_library_host {
    name: "PFWScriptGenerator.py",
    defaults: ["pfw_defaults"],
    owner: "intel",

    srcs: [":PFWScriptGenerator.py-srcs"],
    libs: [
        "PfwBaseTranslator.py",
        "EddParser.py",
    ],
    version: {
        py2: {
            enabled: true,
        },
        py3: {
            enabled: false,
        },
    },
}

cc_prebuilt_binary {
    name: "updateRoutageDomains.sh",
    defaults: ["pfw_defaults"],
    owner: "intel",

    host_supported: true,
    srcs: ["upstream/tools/xmlGenerator/updateRoutageDomains.sh"],
}

filegroup {
    name: "hostConfig.py-srcs",
    srcs: ["upstream/tools/xmlGenerator/hostConfig.py"],
    path: "upstream/tools/xmlGenerator/",
}

python_library_host {
    name: "hostConfig.py",
    defaults: ["pfw_defaults"],
    owner: "intel",

    srcs: [":hostConfig.py-srcs"],
    version: {
        py2: {
            enabled: true,
        },
        py3: {
            enabled: false,
        },
    },
}

python_binary_host {
    name: "domainGenerator.py",
    defaults: ["pfw_defaults"],
    owner: "intel",

    main: "upstream/tools/xmlGenerator/domainGenerator.py",
    srcs: ["upstream/tools/xmlGenerator/domainGenerator.py"],
    libs: [
        "EddParser.py",
        "hostConfig.py",
        "PFWScriptGenerator.py",
    ],
    version: {
        py2: {
            enabled: true,
        },
        py3: {
            enabled: false,
        },
    },
    required: [
        "domainGeneratorConnector",
    ],
}

cc_prebuilt_binary {
    name: "domainGenerator.sh",
    defaults: ["pfw_defaults"],
    owner: "intel",

    host_supported: true,
    srcs: ["upstream/tools/xmlGenerator/domainGenerator.sh"],
}

cc_prebuilt_binary {
    name: "lightRoutingUpdate.sh",
    defaults: ["pfw_defaults"],
    owner: "intel",

    host_supported: true,
    srcs: ["upstream/tools/xmlGenerator/lightRoutingUpdate.sh"],
}

//////////////////////////////////////////////////

cc_binary {
    name: "remote-process",
    defaults: ["pfw_defaults"],

    srcs: ["upstream/remote-process/main.cpp"],
    local_include_dirs: [
        "upstream/utility",
        "support/android/asio",
        "asio/include",
    ],
    cflags: ["-Wno-unused-local-typedef"],
    shared_libs: ["libremote-processor"],
}