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

###
### netd service AIDL interface.
###
include $(CLEAR_VARS)

LOCAL_CFLAGS := -Wall -Werror -Wthread-safety
LOCAL_MODULE := libnetdaidl_static
LOCAL_SHARED_LIBRARIES := \
        libbinder \
        libutils
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/binder
LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/binder frameworks/native/aidl/binder
LOCAL_C_INCLUDES := $(LOCAL_PATH)/binder
LOCAL_SRC_FILES := \
        binder/android/net/INetd.aidl \
        binder/android/net/UidRange.cpp

include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)

LOCAL_CFLAGS := -Wall -Werror -Wthread-safety
LOCAL_MODULE := libnetdaidl
LOCAL_SHARED_LIBRARIES := \
        libbinder \
        libutils
LOCAL_WHOLE_STATIC_LIBRARIES := libnetdaidl_static
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/binder

include $(BUILD_SHARED_LIBRARY)

###
### netd daemon.
###
include $(CLEAR_VARS)

LOCAL_C_INCLUDES := \
        $(call include-path-for, libhardware_legacy)/hardware_legacy \
        bionic/libc/dns/include \
        external/mdnsresponder/mDNSShared \
        system/netd/include \

LOCAL_CPPFLAGS := -Wall -Werror -Wthread-safety -Wnullable-to-nonnull-conversion
LOCAL_MODULE := netd

# Bug: http://b/29823425 Disable -Wvarargs for Clang update to r271374
LOCAL_CPPFLAGS +=  -Wno-varargs \

ifeq ($(TARGET_ARCH), x86)
ifneq ($(TARGET_PRODUCT), gce_x86_phone)
        LOCAL_CPPFLAGS += -D NETLINK_COMPAT32
endif
endif

LOCAL_INIT_RC := netd.rc

LOCAL_SHARED_LIBRARIES := \
        android.system.net.netd@1.0 \
        android.system.net.netd@1.1 \
        libbinder \
        libbpf    \
        libcrypto \
        libcutils \
        libdl \
        libhidlbase \
        libhidltransport \
        liblog \
        liblogwrap \
        libmdnssd \
        libnetdaidl \
        libnetutils \
        libnetdutils \
        libselinux \
        libssl \
        libsysutils \
        libbase \
        libutils \
        libpcap \
        libqtaguid \

LOCAL_SRC_FILES := \
        BandwidthController.cpp \
        ClatdController.cpp \
        CommandListener.cpp \
        Controllers.cpp \
        DnsProxyListener.cpp \
        DummyNetwork.cpp \
        DumpWriter.cpp \
        EventReporter.cpp \
        FirewallController.cpp \
        FwmarkServer.cpp \
        IdletimerController.cpp \
        InterfaceController.cpp \
        IptablesRestoreController.cpp \
        LocalNetwork.cpp \
        MDnsSdListener.cpp \
        NetdCommand.cpp \
        NetdConstants.cpp \
        NetdHwService.cpp \
        NetdNativeService.cpp \
        NetlinkHandler.cpp \
        NetlinkManager.cpp \
        NetlinkCommands.cpp \
        NetlinkListener.cpp \
        Network.cpp \
        NetworkController.cpp \
        NFLogListener.cpp \
        PhysicalNetwork.cpp \
        PppController.cpp \
        ResolverController.cpp \
        RouteController.cpp \
        SockDiag.cpp \
        StrictController.cpp \
        TetherController.cpp \
        TrafficController.cpp \
        UidRanges.cpp \
        VirtualNetwork.cpp \
        WakeupController.cpp \
        XfrmController.cpp \
        TcpSocketMonitor.cpp \
        main.cpp \
        oem_iptables_hook.cpp \
        binder/android/net/UidRange.cpp \
        binder/android/net/metrics/INetdEventListener.aidl \
        dns/DnsTlsDispatcher.cpp \
        dns/DnsTlsQueryMap.cpp \
        dns/DnsTlsTransport.cpp \
        dns/DnsTlsServer.cpp \
        dns/DnsTlsSessionCache.cpp \
        dns/DnsTlsSocket.cpp \

LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/binder

include $(BUILD_EXECUTABLE)


###
### ndc binary.
###
include $(CLEAR_VARS)

LOCAL_CFLAGS := -Wall -Werror -Wthread-safety
LOCAL_SANITIZE := unsigned-integer-overflow
LOCAL_CLANG := true
LOCAL_MODULE := ndc
LOCAL_SHARED_LIBRARIES := libcutils
LOCAL_SRC_FILES := ndc.cpp

include $(BUILD_EXECUTABLE)

###
### netd unit tests.
###
include $(CLEAR_VARS)
LOCAL_MODULE := netd_unit_test
LOCAL_COMPATIBILITY_SUITE := device-tests
LOCAL_SANITIZE := unsigned-integer-overflow
LOCAL_CFLAGS := -Wall -Werror -Wunused-parameter -Wthread-safety
# Bug: http://b/29823425 Disable -Wvarargs for Clang update to r271374
LOCAL_CFLAGS += -Wno-varargs

LOCAL_C_INCLUDES := \
        bionic/libc/dns/include \
        system/netd/include \
        system/netd/server \
        system/netd/server/binder \
        system/netd/tests \
        system/core/logwrapper/include \

LOCAL_SRC_FILES := \
        InterfaceController.cpp InterfaceControllerTest.cpp \
        Controllers.cpp ControllersTest.cpp \
        NetdConstants.cpp IptablesBaseTest.cpp \
        IptablesRestoreController.cpp IptablesRestoreControllerTest.cpp \
        BandwidthController.cpp BandwidthControllerTest.cpp \
        FirewallControllerTest.cpp FirewallController.cpp \
        IdletimerController.cpp IdletimerControllerTest.cpp \
        NetlinkCommands.cpp NetlinkManager.cpp \
        RouteController.cpp RouteControllerTest.cpp \
        SockDiagTest.cpp SockDiag.cpp \
        StrictController.cpp StrictControllerTest.cpp \
        TetherController.cpp TetherControllerTest.cpp \
        TrafficController.cpp TrafficControllerTest.cpp \
        XfrmController.cpp XfrmControllerTest.cpp \
        TcpSocketMonitor.cpp \
        UidRanges.cpp \
        NetlinkListener.cpp \
        WakeupController.cpp WakeupControllerTest.cpp \
        NFLogListener.cpp NFLogListenerTest.cpp \
        binder/android/net/UidRange.cpp \
        binder/android/net/metrics/INetdEventListener.aidl \
        ../tests/tun_interface.cpp \
        dns/DnsTlsDispatcher.cpp \
        dns/DnsTlsTransport.cpp \
        dns/DnsTlsServer.cpp \
        dns/DnsTlsSessionCache.cpp \
        dns/DnsTlsSocket.cpp \

LOCAL_MODULE_TAGS := tests
LOCAL_STATIC_LIBRARIES := libgmock libpcap
LOCAL_SHARED_LIBRARIES := \
        libbpf    \
        libnetdaidl \
        libbase \
        libbinder \
        libcrypto \
        libcutils \
        liblog \
        liblogwrap \
        libnetutils \
        libnetdutils \
        libqtaguid \
        libsysutils \
        libutils \
        libssl \

include $(BUILD_NATIVE_TEST)