diff --git a/package/Config.in b/package/Config.in index c7743a23bd..8a5feed99c 100644 --- a/package/Config.in +++ b/package/Config.in @@ -1618,6 +1618,7 @@ endmenu menu "System tools" source "package/acl/Config.in" + source "package/android-tools/Config.in" source "package/attr/Config.in" source "package/audit/Config.in" if BR2_PACKAGE_BUSYBOX_SHOW_OTHERS diff --git a/package/Config.in.host b/package/Config.in.host index d27242fe31..13acb22ee6 100644 --- a/package/Config.in.host +++ b/package/Config.in.host @@ -1,6 +1,7 @@ menu "Host utilities" source "package/aespipe/Config.in.host" + source "package/android-tools/Config.in.host" source "package/cbootimage/Config.in.host" source "package/checkpolicy/Config.in.host" source "package/cramfs/Config.in.host" diff --git a/package/android-tools/0001-Fix-makefiles-for-out-of-tree-build.patch b/package/android-tools/0001-Fix-makefiles-for-out-of-tree-build.patch new file mode 100644 index 0000000000..af0723620f --- /dev/null +++ b/package/android-tools/0001-Fix-makefiles-for-out-of-tree-build.patch @@ -0,0 +1,162 @@ +[PATCH] Fix makefiles for out-of-tree build + +Signed-off-by: Gary Bisson +--- + debian/makefiles/adb.mk | 10 +++++----- + debian/makefiles/adbd.mk | 33 ++++++++++++++++----------------- + debian/makefiles/fastboot.mk | 17 +++++++++-------- + 3 files changed, 30 insertions(+), 30 deletions(-) + +diff --git a/debian/makefiles/adb.mk b/debian/makefiles/adb.mk +index d9d4feb..654b9f1 100644 +--- a/debian/makefiles/adb.mk ++++ b/debian/makefiles/adb.mk +@@ -1,5 +1,6 @@ + # Makefile for adb; from https://heiher.info/2227.html + ++VPATH+= $(SRCDIR)/core/adb + SRCS+= adb.c + SRCS+= adb_client.c + SRCS+= adb_auth_host.c +@@ -17,7 +18,7 @@ SRCS+= usb_linux.c + SRCS+= usb_vendors.c + SRCS+= utils.c + +-VPATH+= ../libcutils ++VPATH+= $(SRCDIR)/core/libcutils + SRCS+= abort_socket.c + SRCS+= socket_inaddr_any_server.c + SRCS+= socket_local_client.c +@@ -28,7 +29,7 @@ SRCS+= socket_network_client.c + SRCS+= list.c + SRCS+= load_file.c + +-VPATH+= ../libzipfile ++VPATH+= $(SRCDIR)/core/libzipfile + SRCS+= centraldir.c + SRCS+= zipfile.c + +@@ -37,9 +38,8 @@ CPPFLAGS+= -DADB_HOST=1 + CPPFLAGS+= -DHAVE_FORKEXEC=1 + CPPFLAGS+= -DHAVE_SYMLINKS + CPPFLAGS+= -DHAVE_TERMIO_H +-CPPFLAGS+= -I. +-CPPFLAGS+= -I../include +-CPPFLAGS+= -I../../../external/zlib ++CPPFLAGS+= -I$(SRCDIR)/core/adb ++CPPFLAGS+= -I$(SRCDIR)/core/include + + LIBS+= -lc -lpthread -lz -lcrypto + +diff --git a/debian/makefiles/adbd.mk b/debian/makefiles/adbd.mk +index 94d3a90..49dab8c 100644 +--- a/debian/makefiles/adbd.mk ++++ b/debian/makefiles/adbd.mk +@@ -1,18 +1,6 @@ + # Makefile for adbd + +-VPATH+= ../libcutils +-SRCS+= abort_socket.c +-SRCS+= socket_inaddr_any_server.c +-SRCS+= socket_local_client.c +-SRCS+= socket_local_server.c +-SRCS+= socket_loopback_client.c +-SRCS+= socket_loopback_server.c +-SRCS+= socket_network_client.c +-SRCS+= list.c +-SRCS+= load_file.c +-SRCS+= android_reboot.c +- +-#VPATH+= ../adb ++VPATH+= $(SRCDIR)/core/adbd + SRCS+= adb.c + SRCS+= backup_service.c + SRCS+= fdevent.c +@@ -31,7 +19,19 @@ SRCS+= log_service.c + SRCS+= utils.c + SRCS+= base64.c + +-VPATH+= ../libzipfile ++VPATH+= $(SRCDIR)/core/libcutils ++SRCS+= abort_socket.c ++SRCS+= socket_inaddr_any_server.c ++SRCS+= socket_local_client.c ++SRCS+= socket_local_server.c ++SRCS+= socket_loopback_client.c ++SRCS+= socket_loopback_server.c ++SRCS+= socket_network_client.c ++SRCS+= list.c ++SRCS+= load_file.c ++SRCS+= android_reboot.c ++ ++VPATH+= $(SRCDIR)/core/libzipfile + SRCS+= centraldir.c + SRCS+= zipfile.c + +@@ -40,10 +40,9 @@ CPPFLAGS+= -O2 -g -Wall -Wno-unused-parameter + CPPFLAGS+= -DADB_HOST=0 -DHAVE_FORKEXEC=1 -D_XOPEN_SOURCE -D_GNU_SOURCE -DALLOW_ADBD_ROOT=1 + CPPFLAGS+= -DHAVE_SYMLINKS -DBOARD_ALWAYS_INSECURE + CPPFLAGS+= -DHAVE_TERMIO_H +-CPPFLAGS+= -I. +-CPPFLAGS+= -I../include +-CPPFLAGS+= -I../../../external/zlib + CPPFLAGS+= `pkg-config --cflags glib-2.0 gio-2.0` ++CPPFLAGS+= -I$(SRCDIR)/core/adbd ++CPPFLAGS+= -I$(SRCDIR)/core/include + + LIBS+= -lc -lpthread -lz -lcrypto -lcrypt `pkg-config --libs glib-2.0 gio-2.0` + +diff --git a/debian/makefiles/fastboot.mk b/debian/makefiles/fastboot.mk +index 9e8b751..94a069b 100644 +--- a/debian/makefiles/fastboot.mk ++++ b/debian/makefiles/fastboot.mk +@@ -1,5 +1,6 @@ + # Makefile for fastboot; from https://heiher.info/2227.html + ++VPATH+= $(SRCDIR)/core/fastboot + SRCS+= bootimg.c + SRCS+= engine.c + SRCS+= fastboot.c +@@ -7,11 +8,11 @@ SRCS+= protocol.c + SRCS+= usb_linux.c + SRCS+= util_linux.c + +-VPATH+= ../libzipfile ++VPATH+= $(SRCDIR)/core/libzipfile + SRCS+= centraldir.c + SRCS+= zipfile.c + +-VPATH+= ../libsparse ++VPATH+= $(SRCDIR)/core/libsparse + SRCS+= backed_block.c + SRCS+= sparse_crc32.c + SRCS+= sparse.c +@@ -19,7 +20,7 @@ SRCS+= sparse_read.c + SRCS+= sparse_err.c + SRCS+= output_file.c + +-VPATH+= ../../extras/ext4_utils/ ++VPATH+= $(SRCDIR)/extras/ext4_utils/ + SRCS+= make_ext4fs.c + SRCS+= crc16.c + SRCS+= ext4_utils.c +@@ -31,11 +32,11 @@ SRCS+= extent.c + SRCS+= wipe.c + SRCS+= sha1.c + +-CPPFLAGS+= -I. +-CPPFLAGS+= -I../include +-CPPFLAGS+= -I../mkbootimg +-CPPFLAGS+= -I../../extras/ext4_utils/ +-CPPFLAGS+= -I../libsparse/include/ ++CPPFLAGS+= -I$(SRCDIR)/core/fastboot ++CPPFLAGS+= -I$(SRCDIR)/core/include ++CPPFLAGS+= -I$(SRCDIR)/core/mkbootimg ++CPPFLAGS+= -I$(SRCDIR)/extras/ext4_utils/ ++CPPFLAGS+= -I$(SRCDIR)/core/libsparse/include/ + + LIBS+= -lz -lselinux + +-- +2.5.1 + diff --git a/package/android-tools/0002-Fix-adbd-for-non-Ubuntu-systems.patch b/package/android-tools/0002-Fix-adbd-for-non-Ubuntu-systems.patch new file mode 100644 index 0000000000..35f6c8a3be --- /dev/null +++ b/package/android-tools/0002-Fix-adbd-for-non-Ubuntu-systems.patch @@ -0,0 +1,264 @@ +[PATCH] Fix adbd for non-Ubuntu systems + +Remove glib/dbus dependencies and partially restore services.c to be +closer to the original source code in order to run on systems without +sudo. + +Signed-off-by: Gary Bisson +--- + core/adbd/adb.c | 1 - + core/adbd/services.c | 160 ++++------------------------------------------- + debian/makefiles/adbd.mk | 4 +- + 3 files changed, 14 insertions(+), 151 deletions(-) + +diff --git a/core/adbd/adb.c b/core/adbd/adb.c +index d90e6b8..7fe6445 100644 +--- a/core/adbd/adb.c ++++ b/core/adbd/adb.c +@@ -1165,7 +1165,6 @@ void build_local_name(char* target_str, size_t target_size, int server_port) + + #if !ADB_HOST + static int should_drop_privileges() { +- return 1; + #ifndef ALLOW_ADBD_ROOT + return 1; + #else /* ALLOW_ADBD_ROOT */ +diff --git a/core/adbd/services.c b/core/adbd/services.c +index 05bd0d0..5adcefe 100644 +--- a/core/adbd/services.c ++++ b/core/adbd/services.c +@@ -20,15 +20,6 @@ + #include + #include + #include +-#include +-#include +- +-#define UNITY_SERVICE "com.canonical.UnityGreeter" +-#define GREETER_OBJ "/" +-#define GREETER_INTERFACE "com.canonical.UnityGreeter" +-#define PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties" +-#define ACTIVE_PROPERTY "IsActive" +-#define UNLOCK_PATH "/userdata/.adb_onlock" + + #include "sysdeps.h" + +@@ -268,11 +259,11 @@ static int create_service_thread(void (*func)(int, void *), void *cookie) + } + + #if !ADB_HOST +-static int create_subprocess(const char *cmd, const char *arg0, const char *arg1, const char *arg2, const char *arg3, const char *arg4, pid_t *pid) ++static int create_subprocess(const char *cmd, const char *arg0, const char *arg1, pid_t *pid) + { + #ifdef HAVE_WIN32_PROC +- D("create_subprocess(cmd=%s, arg0=%s, arg1=%s, arg2=%s, arg3=%, arg4=%ss)\n", cmd, arg0, arg1, arg2, arg3, arg4); +- fprintf(stderr, "error: create_subprocess not implemented on Win32 (%s %s %s %s %s %s)\n", cmd, arg0, arg1, arg2, arg3, arg4); ++ D("create_subprocess(cmd=%s, arg0=%s, arg1=%s)\n", cmd, arg0, arg1); ++ fprintf(stderr, "error: create_subprocess not implemented on Win32 (%s %s %s)\n", cmd, arg0, arg1); + return -1; + #else /* !HAVE_WIN32_PROC */ + char *devname; +@@ -327,7 +318,7 @@ static int create_subprocess(const char *cmd, const char *arg0, const char *arg1 + } else { + D("adb: unable to open %s\n", text); + } +- execl(cmd, cmd, arg0, arg1, arg2, arg3, arg4, NULL); ++ execl(cmd, cmd, arg0, arg1, NULL); + fprintf(stderr, "- exec '%s' failed: %s (%d) -\n", + cmd, strerror(errno), errno); + exit(-1); +@@ -342,7 +333,7 @@ static int create_subprocess(const char *cmd, const char *arg0, const char *arg1 + } + #endif /* !ABD_HOST */ + +-#if ADB_HOST ++#if ADB_HOST || ADBD_NON_ANDROID + #define SHELL_COMMAND "/bin/sh" + #else + #define SHELL_COMMAND "/system/bin/sh" +@@ -380,139 +371,16 @@ static void subproc_waiter_service(int fd, void *cookie) + } + } + +-int is_phone_locked() { +- GError *error = NULL; +- GVariant *variant = NULL; +- GDBusConnection *connection = NULL; +- +- if (g_file_test(UNLOCK_PATH, G_FILE_TEST_EXISTS)) { +- D("unlock path present."); +- return 0; +- } +- +- // check if the environment variable is present, if not we grab it from +- // the phablet user +- if (g_getenv("DBUS_SESSION_BUS_ADDRESS") == NULL) { +- D("DBUS_SESSION_BUS_ADDRESS missing.\n"); +- struct passwd *pw = getpwuid(AID_SHELL); +- char user_id[15]; +- gchar *path = NULL; +- gchar *contents = NULL; +- gchar *session_path = NULL; +- +- snprintf(user_id, sizeof user_id, "%d", pw->pw_uid); +- +- path = g_build_filename("/run", "user", user_id, "dbus-session", NULL); +- +- g_file_get_contents(path, &contents, NULL, &error); +- session_path = g_strstrip(g_strsplit(contents, "DBUS_SESSION_BUS_ADDRESS=", -1)[1]); +- D("Session bus is %s\n", session_path); +- +- // path is not longer used +- g_free(path); +- +- if (error != NULL) { +- g_clear_error(&error); +- D("Couldn't set session bus\n"); +- return 1; +- } +- +- g_setenv("DBUS_SESSION_BUS_ADDRESS", session_path, TRUE); +- g_free(contents); +- } +- +- // set the uid to be able to connect to the phablet user session bus +- setuid(AID_SHELL); +- connection = g_dbus_connection_new_for_address_sync(g_getenv("DBUS_SESSION_BUS_ADDRESS"), +- G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT | G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION, +- NULL, +- NULL, +- &error); +- if (connection == NULL) { +- D("session bus not available: %s", error->message); +- g_error_free (error); +- return 1; +- } +- +- variant = g_dbus_connection_call_sync(connection, +- UNITY_SERVICE, +- GREETER_OBJ, +- PROPERTIES_INTERFACE, +- "Get", +- g_variant_new("(ss)", GREETER_INTERFACE, ACTIVE_PROPERTY), +- g_variant_type_new("(v)"), +- G_DBUS_CALL_FLAGS_NONE, +- -1, +- NULL, +- &error); +- +- if (error != NULL) { +- D("Could not get property: %s", error->message); +- g_object_unref(connection); +- g_error_free(error); +- return 1; +- } +- +- if (variant == NULL) { +- D("Failed to get property '%s': %s", "IsActive", error->message); +- g_object_unref(connection); +- g_error_free(error); +- return 1; +- } +- +- variant = g_variant_get_variant(g_variant_get_child_value(variant, 0)); +- +- int active = 1; +- if (!g_variant_get_boolean(variant)) { +- active = 0; +- } +- +- // get back to be root and return the value +- g_object_unref(connection); +- g_variant_unref(variant); +- setuid(0); +- return active; +-} +- + static int create_subproc_thread(const char *name) + { +- if (is_phone_locked() ) { +- fprintf(stderr, "device is locked\n"); +- return -1; +- } +- + stinfo *sti; + adb_thread_t t; + int ret_fd; + pid_t pid; +- +- struct passwd *user = getpwuid(getuid()); +- char *shell; +- char *shellopts = "-c"; +- char *home; +- char *sudo = "/usr/bin/sudo"; +- char useropt[256] = "-u"; +- +- if (user->pw_name) +- strcat(useropt, user->pw_name); +- +- if (user && user->pw_shell) { +- shell = user->pw_shell; +- shellopts = "-cl"; +- } else { +- shell = SHELL_COMMAND; +- } +- +- if (user->pw_dir) +- home = user->pw_dir; +- if(chdir(home) < 0 ) +- return 1; +- + if(name) { +- ret_fd = create_subprocess(sudo, useropt, "-i", shell, shellopts, name, &pid); ++ ret_fd = create_subprocess(SHELL_COMMAND, "-c", name, &pid); + } else { +- shellopts = "-l"; +- ret_fd = create_subprocess(sudo, useropt, "-i", shell, shellopts, 0, &pid); ++ ret_fd = create_subprocess(SHELL_COMMAND, "-", 0, &pid); + } + D("create_subprocess() ret_fd=%d pid=%d\n", ret_fd, pid); + +@@ -585,17 +453,13 @@ int service_to_fd(const char *name) + } else if (!strncmp(name, "log:", 4)) { + ret = create_service_thread(log_service, get_log_file_path(name + 4)); + } else if(!HOST && !strncmp(name, "shell:", 6)) { +- if (!is_phone_locked() ) { +- if(name[6]) { +- ret = create_subproc_thread(name + 6); +- } else { +- ret = create_subproc_thread(0); +- } ++ if(name[6]) { ++ ret = create_subproc_thread(name + 6); ++ } else { ++ ret = create_subproc_thread(0); + } + } else if(!strncmp(name, "sync:", 5)) { +- if (!is_phone_locked() ) { +- ret = create_service_thread(file_sync_service, NULL); +- } ++ ret = create_service_thread(file_sync_service, NULL); + } else if(!strncmp(name, "remount:", 8)) { + ret = create_service_thread(remount_service, NULL); + } else if(!strncmp(name, "reboot:", 7)) { +diff --git a/debian/makefiles/adbd.mk b/debian/makefiles/adbd.mk +index 49dab8c..22c1816 100644 +--- a/debian/makefiles/adbd.mk ++++ b/debian/makefiles/adbd.mk +@@ -40,11 +40,11 @@ CPPFLAGS+= -O2 -g -Wall -Wno-unused-parameter + CPPFLAGS+= -DADB_HOST=0 -DHAVE_FORKEXEC=1 -D_XOPEN_SOURCE -D_GNU_SOURCE -DALLOW_ADBD_ROOT=1 + CPPFLAGS+= -DHAVE_SYMLINKS -DBOARD_ALWAYS_INSECURE + CPPFLAGS+= -DHAVE_TERMIO_H +-CPPFLAGS+= `pkg-config --cflags glib-2.0 gio-2.0` ++CPPFLAGS+= -DADBD_NON_ANDROID + CPPFLAGS+= -I$(SRCDIR)/core/adbd + CPPFLAGS+= -I$(SRCDIR)/core/include + +-LIBS+= -lc -lpthread -lz -lcrypto -lcrypt `pkg-config --libs glib-2.0 gio-2.0` ++LIBS+= -lc -lpthread -lz -lcrypto -lcrypt + + OBJS= $(patsubst %, %.o, $(basename $(SRCS))) + +-- +2.5.1 + diff --git a/package/android-tools/0003-Fix-build-issue-with-uclibc.patch b/package/android-tools/0003-Fix-build-issue-with-uclibc.patch new file mode 100644 index 0000000000..95517c307b --- /dev/null +++ b/package/android-tools/0003-Fix-build-issue-with-uclibc.patch @@ -0,0 +1,36 @@ +[PATCH] Fix build issue with uclibc + +Signed-off-by: Gary Bisson +--- + core/adbd/adb_auth_client.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/core/adb/adb_auth_client.c b/core/adb/adb_auth_client.c +index 0b4913e..068d837 100644 +--- a/core/adb/adb_auth_client.c ++++ b/core/adb/adb_auth_client.c +@@ -72,7 +72,7 @@ static void read_keys(const char *file, struct listnode *list) + if (sep) + *sep = '\0'; + +- ret = __b64_pton(buf, (u_char *)&key->key, sizeof(key->key) + 4); ++ ret = b64_pton(buf, (u_char *)&key->key, sizeof(key->key) + 4); + if (ret != sizeof(key->key)) { + D("%s: Invalid base64 data ret=%d\n", file, ret); + free(key); +diff --git a/core/adbd/adb_auth_client.c b/core/adbd/adb_auth_client.c +index 0b4913e..068d837 100644 +--- a/core/adbd/adb_auth_client.c ++++ b/core/adbd/adb_auth_client.c +@@ -72,7 +72,7 @@ static void read_keys(const char *file, struct listnode *list) + if (sep) + *sep = '\0'; + +- ret = __b64_pton(buf, (u_char *)&key->key, sizeof(key->key) + 4); ++ ret = b64_pton(buf, (u_char *)&key->key, sizeof(key->key) + 4); + if (ret != sizeof(key->key)) { + D("%s: Invalid base64 data ret=%d\n", file, ret); + free(key); +-- +2.6.1 + diff --git a/package/android-tools/0004-Fix-build-issue-with-musl.patch b/package/android-tools/0004-Fix-build-issue-with-musl.patch new file mode 100644 index 0000000000..e5ba0e6ec4 --- /dev/null +++ b/package/android-tools/0004-Fix-build-issue-with-musl.patch @@ -0,0 +1,231 @@ +[PATCH] Fix build issue with musl + +cdefs.h header doesn't exist in musl toolchains: +http://wiki.musl-libc.org/wiki/FAQ + +Also arpa/nameser.h doesn't use the same macro name to avoid several +inclusions. + +Finally had an issue with framebuffer_service.c since it was missing the +TEMP_FAILURE_RETRY macro. + +Signed-off-by: Gary Bisson +--- + core/adbd/arpa_nameser.h | 12 +++++++++--- + core/adbd/base64.c | 1 - + core/adbd/framebuffer_service.c | 1 + + core/adbd/qemu_pipe.h | 1 - + core/include/cutils/android_reboot.h | 8 ++++++-- + core/include/cutils/bitops.h | 10 ++++++---- + core/include/cutils/partition_utils.h | 8 ++++++-- + extras/ext4_utils/sha1.c | 3 --- + extras/ext4_utils/sha1.h | 13 ++++++------- + 9 files changed, 34 insertions(+), 23 deletions(-) + +diff --git a/core/adbd/arpa_nameser.h b/core/adbd/arpa_nameser.h +index 438dc04..b2a28d6 100644 +--- a/core/adbd/arpa_nameser.h ++++ b/core/adbd/arpa_nameser.h +@@ -52,11 +52,12 @@ + + #ifndef _ARPA_NAMESER_H_ + #define _ARPA_NAMESER_H_ ++#ifndef _ARPA_NAMESER_H ++#define _ARPA_NAMESER_H + + #define BIND_4_COMPAT + + #include +-#include + + /* + * Revision information. This is the release date in YYYYMMDD format. +@@ -505,7 +506,9 @@ typedef enum __ns_cert_types { + #define ns_makecanon __ns_makecanon + #define ns_samename __ns_samename + +-__BEGIN_DECLS ++#ifdef __cplusplus ++extern "C" { ++#endif + int ns_msg_getflag(ns_msg, int); + uint16_t ns_get16(const u_char *); + uint32_t ns_get32(const u_char *); +@@ -560,7 +563,9 @@ int ns_samedomain(const char *, const char *); + int ns_subdomain(const char *, const char *); + int ns_makecanon(const char *, char *, size_t); + int ns_samename(const char *, const char *); +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif + + #ifdef BIND_4_COMPAT + #include "arpa_nameser_compat.h" +@@ -574,4 +579,5 @@ __END_DECLS + #define XLOG(...) do {} while (0) + #endif + ++#endif /* !_ARPA_NAMESER_H */ + #endif /* !_ARPA_NAMESER_H_ */ +diff --git a/core/adbd/base64.c b/core/adbd/base64.c +index 7270703..73725f5 100644 +--- a/core/adbd/base64.c ++++ b/core/adbd/base64.c +@@ -42,7 +42,6 @@ + * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES. + */ + +-#include + #if defined(LIBC_SCCS) && !defined(lint) + __RCSID("$NetBSD: base64.c,v 1.8 2002/11/11 01:15:17 thorpej Exp $"); + #endif /* LIBC_SCCS and not lint */ +diff --git a/core/adbd/framebuffer_service.c b/core/adbd/framebuffer_service.c +index 20c08d2..48e0241 100644 +--- a/core/adbd/framebuffer_service.c ++++ b/core/adbd/framebuffer_service.c +@@ -26,6 +26,7 @@ + #include "fdevent.h" + #include "adb.h" + ++#include + #include + #include + #include +diff --git a/core/adbd/qemu_pipe.h b/core/adbd/qemu_pipe.h +index 1a67022..572a242 100644 +--- a/core/adbd/qemu_pipe.h ++++ b/core/adbd/qemu_pipe.h +@@ -16,7 +16,6 @@ + #ifndef ANDROID_INCLUDE_HARDWARE_QEMU_PIPE_H + #define ANDROID_INCLUDE_HARDWARE_QEMU_PIPE_H + +-#include + #include + #include + #include +diff --git a/core/include/cutils/android_reboot.h b/core/include/cutils/android_reboot.h +index 0c79be7..2ebe1cf 100644 +--- a/core/include/cutils/android_reboot.h ++++ b/core/include/cutils/android_reboot.h +@@ -17,7 +17,9 @@ + #ifndef __CUTILS_ANDROID_REBOOT_H__ + #define __CUTILS_ANDROID_REBOOT_H__ + +-__BEGIN_DECLS ++#ifdef __cplusplus ++extern "C" { ++#endif + + /* Commands */ + #define ANDROID_RB_RESTART 0xDEAD0001 +@@ -30,6 +32,8 @@ __BEGIN_DECLS + + int android_reboot(int cmd, int flags, char *arg); + +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif + + #endif /* __CUTILS_ANDROID_REBOOT_H__ */ +diff --git a/core/include/cutils/bitops.h b/core/include/cutils/bitops.h +index 1b3b762..a7c8cab 100644 +--- a/core/include/cutils/bitops.h ++++ b/core/include/cutils/bitops.h +@@ -17,9 +17,9 @@ + #ifndef __CUTILS_BITOPS_H + #define __CUTILS_BITOPS_H + +-#include +- +-__BEGIN_DECLS ++#ifdef __cplusplus ++extern "C" { ++#endif + + static inline int popcount(unsigned int x) + { +@@ -36,6 +36,8 @@ static inline int popcountll(unsigned long long x) + return __builtin_popcountll(x); + } + +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif + + #endif /* __CUTILS_BITOPS_H */ +diff --git a/core/include/cutils/partition_utils.h b/core/include/cutils/partition_utils.h +index 597df92..0da9d5b 100644 +--- a/core/include/cutils/partition_utils.h ++++ b/core/include/cutils/partition_utils.h +@@ -17,11 +17,15 @@ + #ifndef __CUTILS_PARTITION_WIPED_H__ + #define __CUTILS_PARTITION_WIPED_H__ + +-__BEGIN_DECLS ++#ifdef __cplusplus ++extern "C" { ++#endif + + int partition_wiped(char *source); + void erase_footer(const char *dev_path, long long size); + +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif + + #endif /* __CUTILS_PARTITION_WIPED_H__ */ +diff --git a/extras/ext4_utils/sha1.c b/extras/ext4_utils/sha1.c +index 463ec38..e2e29cf 100644 +--- a/extras/ext4_utils/sha1.c ++++ b/extras/ext4_utils/sha1.c +@@ -17,9 +17,6 @@ + + #define SHA1HANDSOFF /* Copies data before messing with it. */ + +-#ifndef USE_MINGW +-#include +-#endif + #include + #include + #include +diff --git a/extras/ext4_utils/sha1.h b/extras/ext4_utils/sha1.h +index 9a8f7e3..fe3217e 100644 +--- a/extras/ext4_utils/sha1.h ++++ b/extras/ext4_utils/sha1.h +@@ -17,11 +17,6 @@ typedef unsigned char u_char; + typedef unsigned int uint32_t; + typedef unsigned int u_int32_t; + typedef unsigned int u_int; +- +-#define __BEGIN_DECLS +-#define __END_DECLS +-#else +-#include + #endif + + #define SHA1_DIGEST_LENGTH 20 +@@ -33,11 +28,15 @@ typedef struct { + u_char buffer[64]; + } SHA1_CTX; + +-__BEGIN_DECLS ++#ifdef __cplusplus ++extern "C" { ++#endif + void SHA1Transform(uint32_t[5], const u_char[64]); + void SHA1Init(SHA1_CTX *); + void SHA1Update(SHA1_CTX *, const u_char *, u_int); + void SHA1Final(u_char[SHA1_DIGEST_LENGTH], SHA1_CTX *); +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif + + #endif /* _SYS_SHA1_H_ */ +-- +2.6.1 + diff --git a/package/android-tools/Config.in b/package/android-tools/Config.in new file mode 100644 index 0000000000..f84f6980c7 --- /dev/null +++ b/package/android-tools/Config.in @@ -0,0 +1,40 @@ +config BR2_PACKAGE_ANDROID_TOOLS + bool "android-tools" + select BR2_PACKAGE_ANDROID_TOOLS_ADBD if \ + !BR2_PACKAGE_ANDROID_TOOLS_FASTBOOT && \ + !BR2_PACKAGE_ANDROID_TOOLS_ADB + help + This package contains the fastboot and adb utilities, that + can be used to interact with target devices using of these + protocols. + +if BR2_PACKAGE_ANDROID_TOOLS + +config BR2_PACKAGE_ANDROID_TOOLS_FASTBOOT + bool "fastboot" + select BR2_PACKAGE_LIBSELINUX + select BR2_PACKAGE_ZLIB + help + This option will build and install the fastboot utility for + the target, which can be used to reflash other target devices + implementing the fastboot protocol. + +config BR2_PACKAGE_ANDROID_TOOLS_ADB + bool "adb" + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_ZLIB + help + This option will build and install the adb utility for the + target, which can be used to interact with other target + devices implementing the ADB protocol. + +config BR2_PACKAGE_ANDROID_TOOLS_ADBD + bool "adbd" + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_ZLIB + help + This option will build and install the adbd utility for the + target, which can be used to interact with a host machine + implementing the ADB protocol. + +endif diff --git a/package/android-tools/Config.in.host b/package/android-tools/Config.in.host new file mode 100644 index 0000000000..1c3a5199a8 --- /dev/null +++ b/package/android-tools/Config.in.host @@ -0,0 +1,26 @@ +config BR2_PACKAGE_HOST_ANDROID_TOOLS + bool "host android-tools" + select BR2_PACKAGE_ANDROID_TOOLS_ADB if \ + !BR2_PACKAGE_ANDROID_TOOLS_FASTBOOT + help + This package contains the fastboot and adb utilities, that + can be used to interact with target devices using of these + protocols. + +if BR2_PACKAGE_HOST_ANDROID_TOOLS + +config BR2_PACKAGE_HOST_ANDROID_TOOLS_FASTBOOT + bool "fastboot" + help + This option will build and install the fastboot utility for + the host, which can be used to reflash target devices + implementing the fastboot protocol. + +config BR2_PACKAGE_HOST_ANDROID_TOOLS_ADB + bool "adb" + help + This option will build and install the adb utility for the + host, which can be used to interact with target devices + implementing the ADB protocol. + +endif diff --git a/package/android-tools/android-tools.hash b/package/android-tools/android-tools.hash new file mode 100644 index 0000000000..7afa04430b --- /dev/null +++ b/package/android-tools/android-tools.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 9bfba987e1351b12aa983787b9ae4424ab752e9e646d8e93771538dc1e5d932f android-tools_4.2.2+git20130218.orig.tar.xz +sha256 73c3078de3e44d8a3cadf7a360863c63155d9d558c2f0933cf38ad901a3f5998 android-tools_4.2.2+git20130218-3ubuntu41.debian.tar.gz diff --git a/package/android-tools/android-tools.mk b/package/android-tools/android-tools.mk new file mode 100644 index 0000000000..45103923eb --- /dev/null +++ b/package/android-tools/android-tools.mk @@ -0,0 +1,85 @@ +################################################################################ +# +# android-tools +# +################################################################################ + +ANDROID_TOOLS_SITE = https://launchpad.net/ubuntu/+archive/primary/+files +ANDROID_TOOLS_VERSION = 4.2.2+git20130218 +ANDROID_TOOLS_SOURCE = android-tools_$(ANDROID_TOOLS_VERSION).orig.tar.xz +ANDROID_TOOLS_EXTRA_DOWNLOADS = android-tools_$(ANDROID_TOOLS_VERSION)-3ubuntu41.debian.tar.gz +HOST_ANDROID_TOOLS_EXTRA_DOWNLOADS = $(ANDROID_TOOLS_EXTRA_DOWNLOADS) +ANDROID_TOOLS_LICENSE = Apache-2.0 +ANDROID_TOOLS_LICENSE_FILES = debian/copyright + +# Extract the Debian tarball inside the sources +define ANDROID_TOOLS_DEBIAN_EXTRACT + $(call suitable-extractor,$(notdir $(ANDROID_TOOLS_EXTRA_DOWNLOADS))) \ + $(DL_DIR)/$(notdir $(ANDROID_TOOLS_EXTRA_DOWNLOADS)) | \ + $(TAR) -C $(@D) $(TAR_OPTIONS) - +endef + +HOST_ANDROID_TOOLS_POST_EXTRACT_HOOKS += ANDROID_TOOLS_DEBIAN_EXTRACT +ANDROID_TOOLS_POST_EXTRACT_HOOKS += ANDROID_TOOLS_DEBIAN_EXTRACT + +# Apply the Debian patches before applying the Buildroot patches +define ANDROID_TOOLS_DEBIAN_PATCH + $(APPLY_PATCHES) $(@D) $(@D)/debian/patches \* +endef + +HOST_ANDROID_TOOLS_PRE_PATCH_HOOKS += ANDROID_TOOLS_DEBIAN_PATCH +ANDROID_TOOLS_PRE_PATCH_HOOKS += ANDROID_TOOLS_DEBIAN_PATCH + +ifeq ($(BR2_PACKAGE_HOST_ANDROID_TOOLS_FASTBOOT),y) +HOST_ANDROID_TOOLS_TARGETS += fastboot +HOST_ANDROID_TOOLS_DEPENDENCIES += host-zlib host-libselinux +endif + +ifeq ($(BR2_PACKAGE_HOST_ANDROID_TOOLS_ADB),y) +HOST_ANDROID_TOOLS_TARGETS += adb +HOST_ANDROID_TOOLS_DEPENDENCIES += host-zlib host-openssl +endif + +ifeq ($(BR2_PACKAGE_ANDROID_TOOLS_FASTBOOT),y) +ANDROID_TOOLS_TARGETS += fastboot +ANDROID_TOOLS_DEPENDENCIES += zlib libselinux +endif + +ifeq ($(BR2_PACKAGE_ANDROID_TOOLS_ADB),y) +ANDROID_TOOLS_TARGETS += adb +ANDROID_TOOLS_DEPENDENCIES += zlib openssl +endif + +ifeq ($(BR2_PACKAGE_ANDROID_TOOLS_ADBD),y) +ANDROID_TOOLS_TARGETS += adbd +ANDROID_TOOLS_DEPENDENCIES += zlib openssl +endif + +# Build each tool in its own directory not to share object files + +define HOST_ANDROID_TOOLS_BUILD_CMDS + $(foreach t,$(HOST_ANDROID_TOOLS_TARGETS),\ + mkdir -p $(@D)/build-$(t) && \ + $(HOST_MAKE_ENV) $(HOST_CONFIGURE_OPTS) $(MAKE) SRCDIR=$(@D) \ + -C $(@D)/build-$(t) -f $(@D)/debian/makefiles/$(t).mk$(sep)) +endef + +define ANDROID_TOOLS_BUILD_CMDS + $(foreach t,$(ANDROID_TOOLS_TARGETS),\ + mkdir -p $(@D)/build-$(t) && \ + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) SRCDIR=$(@D) \ + -C $(@D)/build-$(t) -f $(@D)/debian/makefiles/$(t).mk$(sep)) +endef + +define HOST_ANDROID_TOOLS_INSTALL_CMDS + $(foreach t,$(HOST_ANDROID_TOOLS_TARGETS),\ + $(INSTALL) -D -m 0755 $(@D)/build-$(t)/$(t) $(HOST_DIR)/usr/bin/$(t)$(sep)) +endef + +define ANDROID_TOOLS_INSTALL_TARGET_CMDS + $(foreach t,$(ANDROID_TOOLS_TARGETS),\ + $(INSTALL) -D -m 0755 $(@D)/build-$(t)/$(t) $(TARGET_DIR)/usr/bin/$(t)$(sep)) +endef + +$(eval $(host-generic-package)) +$(eval $(generic-package))