From fb92d8aa0d0ae1bcd070e0f8ee401a6e5782cac7 Mon Sep 17 00:00:00 2001 From: Jeffy Chen Date: Wed, 10 Apr 2024 17:18:14 +0800 Subject: [PATCH 3/3] adb: client: Support linux Tested with: 1/ meson setup build 2/ ninja -C build Signed-off-by: Jeffy Chen --- adb/adb_listeners.cpp | 15 ++-- adb/fdevent.cpp | 2 +- adb/transport_local.cpp | 3 +- adb/transport_mdns_unsupported.cpp | 1 + base/include/android-base/logging.h | 2 + meson.build | 133 ++++++++++++++++++++++++++++ 6 files changed, 145 insertions(+), 11 deletions(-) create mode 100644 adb/transport_mdns_unsupported.cpp create mode 100644 meson.build diff --git a/adb/adb_listeners.cpp b/adb/adb_listeners.cpp index 29909a5..a2391c6 100644 --- a/adb/adb_listeners.cpp +++ b/adb/adb_listeners.cpp @@ -109,7 +109,7 @@ static void listener_event_func(int _fd, unsigned ev, void* _l) } // Called as a transport disconnect function. |arg| is the raw alistener*. -static void listener_disconnect(void* arg, atransport*) EXCLUDES(listener_list_mutex) { +static void EXCLUDES(listener_list_mutex) listener_disconnect(void* arg, atransport*) { std::lock_guard lock(listener_list_mutex); for (auto iter = listener_list.begin(); iter != listener_list.end(); ++iter) { if (iter->get() == arg) { @@ -121,7 +121,7 @@ static void listener_disconnect(void* arg, atransport*) EXCLUDES(listener_list_m } // Write the list of current listeners (network redirections) into a string. -std::string format_listeners() EXCLUDES(listener_list_mutex) { +std::string EXCLUDES(listener_list_mutex) format_listeners() { std::lock_guard lock(listener_list_mutex); std::string result; for (auto& l : listener_list) { @@ -139,8 +139,7 @@ std::string format_listeners() EXCLUDES(listener_list_mutex) { return result; } -InstallStatus remove_listener(const char* local_name, atransport* transport) - EXCLUDES(listener_list_mutex) { +InstallStatus EXCLUDES(listener_list_mutex) remove_listener(const char* local_name, atransport* transport) { std::lock_guard lock(listener_list_mutex); for (auto iter = listener_list.begin(); iter != listener_list.end(); ++iter) { if (local_name == (*iter)->local_name) { @@ -151,7 +150,7 @@ InstallStatus remove_listener(const char* local_name, atransport* transport) return INSTALL_STATUS_LISTENER_NOT_FOUND; } -void remove_all_listeners() EXCLUDES(listener_list_mutex) { +void EXCLUDES(listener_list_mutex) remove_all_listeners() { std::lock_guard lock(listener_list_mutex); auto iter = listener_list.begin(); while (iter != listener_list.end()) { @@ -164,7 +163,7 @@ void remove_all_listeners() EXCLUDES(listener_list_mutex) { } } -void close_smartsockets() EXCLUDES(listener_list_mutex) { +void EXCLUDES(listener_list_mutex) close_smartsockets() { std::lock_guard lock(listener_list_mutex); auto pred = [](const std::unique_ptr& listener) { return listener->local_name == "*smartsocket*"; @@ -172,9 +171,9 @@ void close_smartsockets() EXCLUDES(listener_list_mutex) { listener_list.remove_if(pred); } -InstallStatus install_listener(const std::string& local_name, const char* connect_to, +InstallStatus EXCLUDES(listener_list_mutex) install_listener(const std::string& local_name, const char* connect_to, atransport* transport, int no_rebind, int* resolved_tcp_port, - std::string* error) EXCLUDES(listener_list_mutex) { + std::string* error) { std::lock_guard lock(listener_list_mutex); for (auto& l : listener_list) { if (local_name == l->local_name) { diff --git a/adb/fdevent.cpp b/adb/fdevent.cpp index 32f9086..aebb722 100644 --- a/adb/fdevent.cpp +++ b/adb/fdevent.cpp @@ -376,7 +376,7 @@ static void fdevent_call_fdfunc(fdevent* fde) { fde->func); } -static void fdevent_run_flush() EXCLUDES(run_queue_mutex) { +static void EXCLUDES(run_queue_mutex) fdevent_run_flush() { // We need to be careful around reentrancy here, since a function we call can queue up another // function. while (true) { diff --git a/adb/transport_local.cpp b/adb/transport_local.cpp index b9f738d..9d839eb 100644 --- a/adb/transport_local.cpp +++ b/adb/transport_local.cpp @@ -345,8 +345,7 @@ struct EmulatorConnection : public FdConnection { }; /* Only call this function if you already hold local_transports_lock. */ -static atransport* find_emulator_transport_by_adb_port_locked(int adb_port) - REQUIRES(local_transports_lock) { +static atransport* REQUIRES(local_transports_lock) find_emulator_transport_by_adb_port_locked(int adb_port) { auto it = local_transports.find(adb_port); if (it == local_transports.end()) { return nullptr; diff --git a/adb/transport_mdns_unsupported.cpp b/adb/transport_mdns_unsupported.cpp new file mode 100644 index 0000000..77924aa --- /dev/null +++ b/adb/transport_mdns_unsupported.cpp @@ -0,0 +1 @@ +void init_mdns_transport_discovery(void) {} diff --git a/base/include/android-base/logging.h b/base/include/android-base/logging.h index 76f90cb..5369467 100644 --- a/base/include/android-base/logging.h +++ b/base/include/android-base/logging.h @@ -469,6 +469,7 @@ class ScopedLogSeverity { } // namespace base } // namespace android +#ifdef __clang__ namespace std { // Emit a warning of ostream<< with std::string*. The intention was most likely to print *string. @@ -490,3 +491,4 @@ inline std::ostream& operator<<(std::ostream& stream, const std::string* string_ #pragma clang diagnostic pop } // namespace std +#endif diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..003eaf6 --- /dev/null +++ b/meson.build @@ -0,0 +1,133 @@ +project( + 'adbd', + ['c', 'cpp'], + version : '10.0.0', + meson_version : '>=0.50.0', +) + +pkgconfig = import('pkgconfig') + +cc = meson.get_compiler('c') + +libthreads_dep = dependency('threads') +libcrypto_dep = dependency('libcrypto') +libusb_dep = dependency('libusb-1.0') + +adb_deps = [ + libthreads_dep, + libcrypto_dep, + libusb_dep, + cc.find_library('resolv'), # b64_pton + cc.find_library('util'), # forkpty +] + +adb_srcs = [ + 'adb/adb.cpp', + 'adb/adb_io.cpp', + 'adb/adb_utils.cpp', + 'adb/adb_trace.cpp', + 'adb/adb_listeners.cpp', + 'adb/fdevent.cpp', + 'adb/transport.cpp', + 'adb/transport_usb.cpp', + 'adb/transport_local.cpp', + 'adb/sockets.cpp', + 'adb/socket_spec.cpp', + 'adb/sysdeps_unix.cpp', + 'adb/sysdeps/errno.cpp', + 'adb/sysdeps/posix/network.cpp', + + 'adb/client/adb_client.cpp', + 'adb/client/bugreport.cpp', + 'adb/client/commandline.cpp', + 'adb/client/file_sync_client.cpp', + 'adb/client/main.cpp', + 'adb/client/console.cpp', + 'adb/client/adb_install.cpp', + 'adb/client/line_printer.cpp', + 'adb/shell_service_protocol.cpp', +] + +adb_srcs += [ + 'adb/adb.cpp', + 'adb/adb_io.cpp', + 'adb/adb_listeners.cpp', + 'adb/adb_trace.cpp', + 'adb/adb_unique_fd.cpp', + 'adb/adb_utils.cpp', + 'adb/fdevent.cpp', + 'adb/services.cpp', + 'adb/sockets.cpp', + 'adb/socket_spec.cpp', + 'adb/sysdeps/errno.cpp', + 'adb/transport.cpp', + 'adb/transport_fd.cpp', + 'adb/transport_local.cpp', + 'adb/transport_usb.cpp', +] + +adb_srcs += [ + 'adb/sysdeps_unix.cpp', + 'adb/sysdeps/posix/network.cpp', +] + +adb_srcs += [ + 'adb/client/auth.cpp', + 'adb/client/usb_dispatch.cpp', + 'adb/client/usb_libusb.cpp', + 'adb/client/usb_linux.cpp', +] + +adb_srcs += [ 'adb/transport_mdns_unsupported.cpp' ] + +adb_srcs += [ + 'base/file.cpp', + 'base/logging.cpp', + 'base/chrono_utils.cpp', + 'base/threads.cpp', + 'base/strings.cpp', + 'base/stringprintf.cpp', + 'base/parsenetaddress.cpp', + 'diagnose_usb/diagnose_usb.cpp', + 'libcutils/sockets.cpp', + 'libcutils/sockets_unix.cpp', + 'libcutils/socket_local_client_unix.cpp', + 'libcutils/socket_local_server_unix.cpp', + 'libcutils/socket_network_client_unix.cpp', + 'libcutils/socket_inaddr_any_server_unix.cpp', + 'libcrypto_utils/android_pubkey.c', +] + +adb_inc = [ + 'include', + 'adb', + 'adb/client', + 'base/include', + 'diagnose_usb/include', + 'libcutils/include', + 'libcrypto_utils/include', +] + +add_project_arguments( + [ + '-std=gnu++2a', + '-DADB_HOST=1', + '-DADB_VERSION="' + meson.project_version() + '"', + '-DPLATFORM_TOOLS_VERSION="28.0.2"', + '-DADB_HOST_ON_TARGET', + '-Wno-unused-result', + '-Wno-attributes', + '-Wno-unused-but-set-variable', + '-Wno-deprecated-declarations', + '-Wno-format-truncation', + '-Wno-ignored-attributes', + ], + language: 'cpp') + +executable( + 'adb', + adb_srcs, + include_directories : adb_inc, + dependencies : adb_deps, + install : true, +) -- 2.20.1