# Android build config for libusb, examples and tests
# Copyright © 2012-2013 RealVNC Ltd. <toby.gray@realvnc.com>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := libusb

LOCAL_SRC_FILES := \
	libusb/core.c \
	libusb/descriptor.c \
	libusb/hotplug.c \
	libusb/io.c \
	libusb/sync.c \
	libusb/strerror.c \
	libusb/os/linux_usbfs.c \
	libusb/os/poll_posix.c \
	libusb/os/threads_posix.c \
	libusb/os/linux_netlink.c \

LOCAL_C_INCLUDES := \
	external/libusb/include/libusb \
	external/libusb/libusb \
	external/libusb/android \

LOCAL_CFLAGS := \
	-Wall \
	-Wno-error=sign-compare \
	-Wno-error=switch \
	-v \

LOCAL_SHARED_LIBRARIES := \
	liblog \

include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE := libusb-host

LOCAL_SRC_FILES := \
	libusb/core.c \
	libusb/descriptor.c \
	libusb/hotplug.c \
	libusb/io.c \
	libusb/sync.c \
	libusb/strerror.c \
	libusb/os/linux_usbfs.c \
	libusb/os/poll_posix.c \
	libusb/os/threads_posix.c \
	libusb/os/linux_netlink.c \

LOCAL_C_INCLUDES := \
	external/libusb/include/libusb \
	external/libusb/libusb \
	external/libusb/android \

LOCAL_CFLAGS := \
	-Wall \
	-Wno-error=sign-compare \
	-Wno-error=switch \
	-v \

LOCAL_SHARED_LIBRARIES := \
	liblog \

LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include/libusb

include $(BUILD_HOST_SHARED_LIBRARY)

include $(CLEAR_VARS)

### WARNING: since libusb is LGPL, this may only be used for INTERNAL-ONLY tools.
### See http://go/thirdpartylicenses?cl=head#LinkingRequirements
LOCAL_MODULE := libusb-static-host

LOCAL_SRC_FILES := \
	libusb/core.c \
	libusb/descriptor.c \
	libusb/hotplug.c \
	libusb/io.c \
	libusb/sync.c \
	libusb/strerror.c \
	libusb/os/linux_usbfs.c \
	libusb/os/poll_posix.c \
	libusb/os/threads_posix.c \
	libusb/os/linux_netlink.c \

LOCAL_C_INCLUDES := \
	external/libusb/include/libusb \
	external/libusb/libusb \
	external/libusb/android \

LOCAL_CFLAGS := \
	-Wall \
	-Wno-error=sign-compare \
	-Wno-error=switch \
	-v \

LOCAL_STATIC_LIBRARIES := \
	liblog \

LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include/libusb

include $(BUILD_HOST_STATIC_LIBRARY)
