1# Copyright 2005 The Android Open Source Project
2#
3# Android.mk for adb
4#
5
6LOCAL_PATH:= $(call my-dir)
7
8adb_host_sanitize :=
9adb_target_sanitize :=
10
11adb_version := $(shell git -C $(LOCAL_PATH) rev-parse --short=12 HEAD 2>/dev/null)-android
12
13ADB_COMMON_CFLAGS := \
14    -Wall -Wextra -Werror \
15    -Wno-unused-parameter \
16    -Wno-missing-field-initializers \
17    -Wvla \
18    -DADB_REVISION='"$(adb_version)"' \
19
20ADB_COMMON_linux_CFLAGS := \
21    -Wexit-time-destructors \
22
23ADB_COMMON_darwin_CFLAGS := \
24    -Wexit-time-destructors \
25
26# Define windows.h and tchar.h Unicode preprocessor symbols so that
27# CreateFile(), _tfopen(), etc. map to versions that take wchar_t*, breaking the
28# build if you accidentally pass char*. Fix by calling like:
29#   std::wstring path_wide;
30#   if (!android::base::UTF8ToWide(path_utf8, &path_wide)) { /* error handling */ }
31#   CreateFileW(path_wide.c_str());
32ADB_COMMON_windows_CFLAGS := \
33    -DUNICODE=1 -D_UNICODE=1 \
34
35# libadb
36# =========================================================
37
38# Much of adb is duplicated in bootable/recovery/minadb and fastboot. Changes
39# made to adb rarely get ported to the other two, so the trees have diverged a
40# bit. We'd like to stop this because it is a maintenance nightmare, but the
41# divergence makes this difficult to do all at once. For now, we will start
42# small by moving common files into a static library. Hopefully some day we can
43# get enough of adb in here that we no longer need minadb. https://b/17626262
44LIBADB_SRC_FILES := \
45    adb.cpp \
46    adb_io.cpp \
47    adb_listeners.cpp \
48    adb_trace.cpp \
49    adb_utils.cpp \
50    fdevent.cpp \
51    sockets.cpp \
52    socket_spec.cpp \
53    sysdeps/errno.cpp \
54    transport.cpp \
55    transport_local.cpp \
56    transport_usb.cpp \
57
58LIBADB_TEST_SRCS := \
59    adb_io_test.cpp \
60    adb_listeners_test.cpp \
61    adb_utils_test.cpp \
62    fdevent_test.cpp \
63    socket_spec_test.cpp \
64    socket_test.cpp \
65    sysdeps_test.cpp \
66    sysdeps/stat_test.cpp \
67    transport_test.cpp \
68
69LIBADB_CFLAGS := \
70    $(ADB_COMMON_CFLAGS) \
71    -fvisibility=hidden \
72
73LIBADB_linux_CFLAGS := \
74    $(ADB_COMMON_linux_CFLAGS) \
75
76LIBADB_darwin_CFLAGS := \
77    $(ADB_COMMON_darwin_CFLAGS) \
78
79LIBADB_windows_CFLAGS := \
80    $(ADB_COMMON_windows_CFLAGS) \
81
82LIBADB_darwin_SRC_FILES := \
83    sysdeps_unix.cpp \
84    client/usb_dispatch.cpp \
85    client/usb_libusb.cpp \
86    client/usb_osx.cpp \
87
88LIBADB_linux_SRC_FILES := \
89    sysdeps_unix.cpp \
90    client/usb_dispatch.cpp \
91    client/usb_libusb.cpp \
92    client/usb_linux.cpp \
93
94LIBADB_windows_SRC_FILES := \
95    sysdeps_win32.cpp \
96    sysdeps/win32/errno.cpp \
97    sysdeps/win32/stat.cpp \
98    client/usb_windows.cpp \
99
100LIBADB_TEST_windows_SRCS := \
101    sysdeps/win32/errno_test.cpp \
102    sysdeps_win32_test.cpp \
103
104include $(CLEAR_VARS)
105LOCAL_CLANG := true
106LOCAL_MODULE := libadbd_usb
107LOCAL_CFLAGS := $(LIBADB_CFLAGS) -DADB_HOST=0
108LOCAL_SRC_FILES := daemon/usb.cpp
109
110LOCAL_SANITIZE := $(adb_target_sanitize)
111
112# Even though we're building a static library (and thus there's no link step for
113# this to take effect), this adds the includes to our path.
114LOCAL_STATIC_LIBRARIES := libcrypto_utils libcrypto libbase
115
116include $(BUILD_STATIC_LIBRARY)
117
118include $(CLEAR_VARS)
119LOCAL_CLANG := true
120LOCAL_MODULE := libadbd
121LOCAL_CFLAGS := $(LIBADB_CFLAGS) -DADB_HOST=0
122LOCAL_SRC_FILES := \
123    $(LIBADB_SRC_FILES) \
124    adbd_auth.cpp \
125    jdwp_service.cpp \
126
127LOCAL_SANITIZE := $(adb_target_sanitize)
128
129# Even though we're building a static library (and thus there's no link step for
130# this to take effect), this adds the includes to our path.
131LOCAL_STATIC_LIBRARIES := libcrypto_utils libcrypto libbase
132
133LOCAL_WHOLE_STATIC_LIBRARIES := libadbd_usb
134
135include $(BUILD_STATIC_LIBRARY)
136
137include $(CLEAR_VARS)
138LOCAL_MODULE := libadb
139LOCAL_MODULE_HOST_OS := darwin linux windows
140LOCAL_CFLAGS := $(LIBADB_CFLAGS) -DADB_HOST=1
141LOCAL_CFLAGS_windows := $(LIBADB_windows_CFLAGS)
142LOCAL_CFLAGS_linux := $(LIBADB_linux_CFLAGS)
143LOCAL_CFLAGS_darwin := $(LIBADB_darwin_CFLAGS)
144LOCAL_SRC_FILES := \
145    $(LIBADB_SRC_FILES) \
146    adb_auth_host.cpp \
147    transport_mdns.cpp \
148
149LOCAL_SRC_FILES_darwin := $(LIBADB_darwin_SRC_FILES)
150LOCAL_SRC_FILES_linux := $(LIBADB_linux_SRC_FILES)
151LOCAL_SRC_FILES_windows := $(LIBADB_windows_SRC_FILES)
152
153LOCAL_SANITIZE := $(adb_host_sanitize)
154
155# Even though we're building a static library (and thus there's no link step for
156# this to take effect), this adds the includes to our path.
157LOCAL_STATIC_LIBRARIES := libcrypto_utils libcrypto libbase libmdnssd
158LOCAL_STATIC_LIBRARIES_linux := libusb
159LOCAL_STATIC_LIBRARIES_darwin := libusb
160
161LOCAL_C_INCLUDES_windows := development/host/windows/usb/api/
162LOCAL_MULTILIB := first
163
164include $(BUILD_HOST_STATIC_LIBRARY)
165
166include $(CLEAR_VARS)
167LOCAL_CLANG := true
168LOCAL_MODULE := adbd_test
169LOCAL_CFLAGS := -DADB_HOST=0 $(LIBADB_CFLAGS)
170LOCAL_SRC_FILES := \
171    $(LIBADB_TEST_SRCS) \
172    $(LIBADB_TEST_linux_SRCS) \
173    shell_service.cpp \
174    shell_service_protocol.cpp \
175    shell_service_protocol_test.cpp \
176    shell_service_test.cpp \
177
178LOCAL_SANITIZE := $(adb_target_sanitize)
179LOCAL_STATIC_LIBRARIES := libadbd libcrypto_utils libcrypto libusb libmdnssd
180LOCAL_SHARED_LIBRARIES := liblog libbase libcutils
181include $(BUILD_NATIVE_TEST)
182
183# libdiagnose_usb
184# =========================================================
185
186include $(CLEAR_VARS)
187LOCAL_MODULE := libdiagnose_usb
188LOCAL_MODULE_HOST_OS := darwin linux windows
189LOCAL_CFLAGS := $(LIBADB_CFLAGS)
190LOCAL_SRC_FILES := diagnose_usb.cpp
191# Even though we're building a static library (and thus there's no link step for
192# this to take effect), this adds the includes to our path.
193LOCAL_STATIC_LIBRARIES := libbase
194include $(BUILD_HOST_STATIC_LIBRARY)
195
196# adb_test
197# =========================================================
198
199include $(CLEAR_VARS)
200LOCAL_MODULE := adb_test
201LOCAL_MODULE_HOST_OS := darwin linux windows
202LOCAL_CFLAGS := -DADB_HOST=1 $(LIBADB_CFLAGS)
203LOCAL_CFLAGS_windows := $(LIBADB_windows_CFLAGS)
204LOCAL_CFLAGS_linux := $(LIBADB_linux_CFLAGS)
205LOCAL_CFLAGS_darwin := $(LIBADB_darwin_CFLAGS)
206LOCAL_SRC_FILES := \
207    $(LIBADB_TEST_SRCS) \
208    adb_client.cpp \
209    bugreport.cpp \
210    bugreport_test.cpp \
211    line_printer.cpp \
212    services.cpp \
213    shell_service_protocol.cpp \
214    shell_service_protocol_test.cpp \
215
216LOCAL_SRC_FILES_linux := $(LIBADB_TEST_linux_SRCS)
217LOCAL_SRC_FILES_darwin := $(LIBADB_TEST_darwin_SRCS)
218LOCAL_SRC_FILES_windows := $(LIBADB_TEST_windows_SRCS)
219LOCAL_SANITIZE := $(adb_host_sanitize)
220LOCAL_SHARED_LIBRARIES := libbase
221LOCAL_STATIC_LIBRARIES := \
222    libadb \
223    libcrypto_utils \
224    libcrypto \
225    libcutils \
226    libdiagnose_usb \
227    libmdnssd \
228    libgmock_host
229
230LOCAL_STATIC_LIBRARIES_linux := libusb
231LOCAL_STATIC_LIBRARIES_darwin := libusb
232
233# Set entrypoint to wmain from sysdeps_win32.cpp instead of main
234LOCAL_LDFLAGS_windows := -municode
235LOCAL_LDLIBS_linux := -lrt -ldl -lpthread
236LOCAL_LDLIBS_darwin := -framework CoreFoundation -framework IOKit -lobjc
237LOCAL_LDLIBS_windows := -lws2_32 -luserenv
238LOCAL_STATIC_LIBRARIES_windows := AdbWinApi
239
240LOCAL_MULTILIB := first
241
242include $(BUILD_HOST_NATIVE_TEST)
243
244# adb host tool
245# =========================================================
246include $(CLEAR_VARS)
247
248LOCAL_LDLIBS_linux := -lrt -ldl -lpthread
249
250LOCAL_LDLIBS_darwin := -lpthread -framework CoreFoundation -framework IOKit -framework Carbon -lobjc
251
252# Use wmain instead of main
253LOCAL_LDFLAGS_windows := -municode
254LOCAL_LDLIBS_windows := -lws2_32 -lgdi32
255LOCAL_STATIC_LIBRARIES_windows := AdbWinApi
256LOCAL_REQUIRED_MODULES_windows := AdbWinApi AdbWinUsbApi
257
258LOCAL_SRC_FILES := \
259    adb_client.cpp \
260    bugreport.cpp \
261    client/main.cpp \
262    console.cpp \
263    commandline.cpp \
264    file_sync_client.cpp \
265    line_printer.cpp \
266    services.cpp \
267    shell_service_protocol.cpp \
268
269LOCAL_CFLAGS += \
270    $(ADB_COMMON_CFLAGS) \
271    -D_GNU_SOURCE \
272    -DADB_HOST=1 \
273
274LOCAL_CFLAGS_windows := \
275    $(ADB_COMMON_windows_CFLAGS)
276
277LOCAL_CFLAGS_linux := \
278    $(ADB_COMMON_linux_CFLAGS) \
279
280LOCAL_CFLAGS_darwin := \
281    $(ADB_COMMON_darwin_CFLAGS) \
282    -Wno-sizeof-pointer-memaccess -Wno-unused-parameter \
283
284LOCAL_MODULE := adb
285LOCAL_MODULE_TAGS := debug
286LOCAL_MODULE_HOST_OS := darwin linux windows
287
288LOCAL_SANITIZE := $(adb_host_sanitize)
289LOCAL_STATIC_LIBRARIES := \
290    libadb \
291    libbase \
292    libcrypto_utils \
293    libcrypto \
294    libdiagnose_usb \
295    liblog \
296    libmdnssd
297
298# Don't use libcutils on Windows.
299LOCAL_STATIC_LIBRARIES_darwin := libcutils
300LOCAL_STATIC_LIBRARIES_linux := libcutils
301
302LOCAL_STATIC_LIBRARIES_darwin += libusb
303LOCAL_STATIC_LIBRARIES_linux += libusb
304
305LOCAL_CXX_STL := libc++_static
306
307# Don't add anything here, we don't want additional shared dependencies
308# on the host adb tool, and shared libraries that link against libc++
309# will violate ODR
310LOCAL_SHARED_LIBRARIES :=
311
312include $(BUILD_HOST_EXECUTABLE)
313
314$(call dist-for-goals,dist_files sdk win_sdk,$(LOCAL_BUILT_MODULE))
315ifdef HOST_CROSS_OS
316# Archive adb.exe for win_sdk build.
317$(call dist-for-goals,win_sdk,$(ALL_MODULES.host_cross_adb.BUILT))
318endif
319
320
321# adbd device daemon
322# =========================================================
323
324include $(CLEAR_VARS)
325
326LOCAL_CLANG := true
327
328LOCAL_SRC_FILES := \
329    daemon/main.cpp \
330    daemon/mdns.cpp \
331    services.cpp \
332    file_sync_service.cpp \
333    framebuffer_service.cpp \
334    remount_service.cpp \
335    set_verity_enable_state_service.cpp \
336    shell_service.cpp \
337    shell_service_protocol.cpp \
338
339LOCAL_CFLAGS := \
340    $(ADB_COMMON_CFLAGS) \
341    $(ADB_COMMON_linux_CFLAGS) \
342    -DADB_HOST=0 \
343    -D_GNU_SOURCE \
344    -Wno-deprecated-declarations \
345
346LOCAL_CFLAGS += -DALLOW_ADBD_NO_AUTH=$(if $(filter userdebug eng,$(TARGET_BUILD_VARIANT)),1,0)
347
348ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
349LOCAL_CFLAGS += -DALLOW_ADBD_DISABLE_VERITY=1
350LOCAL_CFLAGS += -DALLOW_ADBD_ROOT=1
351endif
352
353LOCAL_MODULE := adbd
354
355LOCAL_FORCE_STATIC_EXECUTABLE := true
356LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT_SBIN)
357LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_SBIN_UNSTRIPPED)
358
359LOCAL_SANITIZE := $(adb_target_sanitize)
360LOCAL_STRIP_MODULE := keep_symbols
361LOCAL_STATIC_LIBRARIES := \
362    libadbd \
363    libbase \
364    libbootloader_message \
365    libfs_mgr \
366    libfec \
367    libfec_rs \
368    libselinux \
369    liblog \
370    libext4_utils \
371    libsquashfs_utils \
372    libcutils \
373    libbase \
374    libcrypto_utils \
375    libcrypto \
376    libminijail \
377    libmdnssd \
378    libdebuggerd_handler \
379
380include $(BUILD_EXECUTABLE)
381
382include $(call first-makefiles-under,$(LOCAL_PATH))
383