summaryrefslogtreecommitdiff
path: root/Android.mk (plain)
blob: 334b8593d2ac7bd73733fe1cc36ea7626574610d
1####busybox #######
2LOCAL_PATH := $(call my-dir)
3BB_PATH := $(LOCAL_PATH)
4
5# Bionic Branches Switches (GB/ICS/L)
6BIONIC_ICS := false
7BIONIC_L := true
8
9# Make a static library for regex.
10include $(CLEAR_VARS)
11LOCAL_SRC_FILES := android/regex/bb_regex.c
12LOCAL_C_INCLUDES := $(BB_PATH)/android/regex
13LOCAL_CFLAGS := -Wno-sign-compare
14LOCAL_MODULE := libclearsilverregex
15
16LOCAL_CFLAGS += -DANDROID_PLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION)
17
18
19include $(BUILD_STATIC_LIBRARY)
20
21# Make a static library for RPC library (coming from uClibc).
22include $(CLEAR_VARS)
23LOCAL_SRC_FILES := $(shell cat $(BB_PATH)/android/librpc.sources)
24LOCAL_C_INCLUDES := $(BB_PATH)/android/librpc
25LOCAL_MODULE := libuclibcrpc
26LOCAL_CFLAGS += -fno-strict-aliasing
27
28LOCAL_CFLAGS += -DANDROID_PLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION)
29
30
31ifeq ($(BIONIC_L),true)
32LOCAL_CFLAGS += -DBIONIC_ICS -DBIONIC_L
33endif
34include $(BUILD_STATIC_LIBRARY)
35
36#####################################################################
37
38# Execute make prepare for normal config & static lib (recovery)
39
40LOCAL_PATH := $(BB_PATH)
41include $(CLEAR_VARS)
42
43# Explicitly set an architecture specific CONFIG_CROSS_COMPILER_PREFIX
44ifneq ($(filter arm arm64,$(TARGET_ARCH)),)
45 BUSYBOX_CROSS_COMPILER_PREFIX := arm-linux-androideabi-
46endif
47ifneq ($(filter x86 x86_64,$(TARGET_ARCH)),)
48 BUSYBOX_CROSS_COMPILER_PREFIX := $(if $(filter x86_64,$(HOST_ARCH)),x86_64,i686)-linux-android-
49endif
50ifeq ($(TARGET_ARCH),mips)
51 BUSYBOX_CROSS_COMPILER_PREFIX := mipsel-linux-android-
52endif
53
54BB_PREPARE_FLAGS:=
55ifeq ($(HOST_OS),darwin)
56 BB_HOSTCC := $(ANDROID_BUILD_TOP)/prebuilts/gcc/darwin-x86/host/i686-apple-darwin-4.2.1/bin/i686-apple-darwin11-gcc
57 BB_PREPARE_FLAGS := HOSTCC=$(BB_HOSTCC)
58endif
59
60# On aosp (master), path is relative, not on cm (kitkat)
61bb_gen := $(abspath $(TARGET_OUT_INTERMEDIATES)/busybox)
62
63busybox_prepare_full := $(bb_gen)/full/.config
64$(busybox_prepare_full): $(BB_PATH)/busybox-full.config
65 @echo -e ${CL_YLW}"Prepare config for busybox binary"${CL_RST}
66 @rm -rf $(bb_gen)/full
67 @rm -f $(addsuffix /*.o, $(abspath $(call intermediates-dir-for,EXECUTABLES,busybox)))
68 @mkdir -p $(@D)
69 @cat $^ > $@ && echo "CONFIG_CROSS_COMPILER_PREFIX=\"$(BUSYBOX_CROSS_COMPILER_PREFIX)\"" >> $@
70 $(MAKE) -C $(BB_PATH) prepare O=$(@D) $(BB_PREPARE_FLAGS)
71
72busybox_prepare_minimal := $(bb_gen)/minimal/.config
73$(busybox_prepare_minimal): $(BB_PATH)/busybox-minimal.config
74 @echo -e ${CL_YLW}"Prepare config for libbusybox"${CL_RST}
75 @rm -rf $(bb_gen)/minimal
76 @rm -f $(addsuffix /*.o, $(abspath $(call intermediates-dir-for,STATIC_LIBRARIES,libbusybox)))
77 @mkdir -p $(@D)
78 @cat $^ > $@ && echo "CONFIG_CROSS_COMPILER_PREFIX=\"$(BUSYBOX_CROSS_COMPILER_PREFIX)\"" >> $@
79 $(MAKE) -C $(BB_PATH) prepare O=$(@D) $(BB_PREPARE_FLAGS)
80
81KERNEL_MODULES_DIR ?= /system/lib/modules
82BUSYBOX_CONFIG := minimal full
83$(BUSYBOX_CONFIG):
84 @echo -e ${CL_PFX}"prepare config for busybox $@ profile"${CL_RST}
85 @cd $(BB_PATH) && make clean
86 @cd $(BB_PATH) && git clean -f -- ./include-$@/
87 cp $(BB_PATH)/.config-$@ $(BB_PATH)/.config
88 cd $(BB_PATH) && make prepare
89 @#cp $(BB_PATH)/.config $(BB_PATH)/.config-$@
90 @mkdir -p $(BB_PATH)/include-$@
91 cp $(BB_PATH)/include/*.h $(BB_PATH)/include-$@/
92 @rm $(BB_PATH)/include/usage_compressed.h
93 @rm $(BB_PATH)/include/autoconf.h
94 @rm -f $(BB_PATH)/.config-old
95
96busybox_prepare: $(BUSYBOX_CONFIG)
97LOCAL_MODULE := busybox_prepare
98LOCAL_MODULE_TAGS := eng debug
99
100LOCAL_CFLAGS += -DANDROID_PLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION)
101
102#include $(BUILD_STATIC_LIBRARY)
103
104#####################################################################
105
106LOCAL_PATH := $(BB_PATH)
107include $(CLEAR_VARS)
108
109KERNEL_MODULES_DIR ?= /system/lib/modules
110
111SUBMAKE := make -s -C $(BB_PATH) CC=$(CC)
112
113ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 26 && echo OK),OK)
114BUSYBOX_SRC_FILES = \
115 $(shell cat $(BB_PATH)/busybox-$(BUSYBOX_CONFIG).sources) \
116 android/libc/mktemp.c \
117 android/libc/pty.c \
118 shell/ash_80.c \
119 android/android.c
120else
121BUSYBOX_SRC_FILES = \
122 $(shell cat $(BB_PATH)/busybox-$(BUSYBOX_CONFIG).sources) \
123 android/libc/mktemp.c \
124 android/libc/pty.c \
125 shell/ash.c \
126 android/android.c
127endif
128
129BUSYBOX_ASM_FILES =
130ifneq ($(BIONIC_L),true)
131 BUSYBOX_ASM_FILES += swapon.S swapoff.S sysinfo.S
132endif
133
134ifneq ($(filter arm x86 mips,$(TARGET_ARCH)),)
135 BUSYBOX_SRC_FILES += \
136 $(addprefix android/libc/arch-$(TARGET_ARCH)/syscalls/,$(BUSYBOX_ASM_FILES))
137endif
138
139BUSYBOX_C_INCLUDES = \
140 $(BB_PATH)/include $(BB_PATH)/libbb \
141 bionic/libc/private \
142 bionic/libm/include \
143 bionic/libc \
144 bionic/libm \
145 libc/kernel/common \
146 external/libselinux/include \
147 external/selinux/libsepol/include \
148 $(BB_PATH)/android/regex \
149 $(BB_PATH)/android/librpc
150
151BUSYBOX_CFLAGS = \
152 -Werror=implicit -Wno-clobbered \
153 -DNDEBUG \
154 -DANDROID \
155 -fno-strict-aliasing \
156 -fno-builtin-stpcpy \
157 -include $(bb_gen)/$(BUSYBOX_CONFIG)/include/autoconf.h \
158 -D'CONFIG_DEFAULT_MODULES_DIR="$(KERNEL_MODULES_DIR)"' \
159 -D'BB_VER="$(strip $(shell $(SUBMAKE) kernelversion)) $(BUSYBOX_SUFFIX)"' -DBB_BT=AUTOCONF_TIMESTAMP
160
161ifeq ($(BIONIC_L),true)
162 BUSYBOX_CFLAGS += -DBIONIC_L
163 BUSYBOX_AFLAGS += -DBIONIC_L
164 # include changes for ICS/JB/KK
165 BIONIC_ICS := true
166endif
167
168ifeq ($(BIONIC_ICS),true)
169 BUSYBOX_CFLAGS += -DBIONIC_ICS
170endif
171
172
173# Build the static lib for the recovery tool
174
175BUSYBOX_CONFIG:=minimal
176BUSYBOX_SUFFIX:=static
177LOCAL_SRC_FILES := $(BUSYBOX_SRC_FILES)
178LOCAL_C_INCLUDES := $(bb_gen)/minimal/include $(BUSYBOX_C_INCLUDES)
179LOCAL_CFLAGS := -Dmain=busybox_driver $(BUSYBOX_CFLAGS)
180LOCAL_CFLAGS += \
181 -DRECOVERY_VERSION \
182 -Dgetusershell=busybox_getusershell \
183 -Dsetusershell=busybox_setusershell \
184 -Dendusershell=busybox_endusershell \
185 -Dgetmntent=busybox_getmntent \
186 -Dgetmntent_r=busybox_getmntent_r \
187 -Dgenerate_uuid=busybox_generate_uuid
188LOCAL_ASFLAGS := $(BUSYBOX_AFLAGS)
189LOCAL_MODULE := libbusybox
190LOCAL_MODULE_TAGS := eng debug
191#$(LOCAL_MODULE): busybox_prepare
192LOCAL_STATIC_LIBRARIES := libcutils libc libm libselinux
193LOCAL_ADDITIONAL_DEPENDENCIES := $(busybox_prepare_minimal)
194
195LOCAL_CFLAGS += -DANDROID_PLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION)
196
197
198include $(BUILD_STATIC_LIBRARY)
199
200
201# Bionic Busybox /system/xbin
202
203LOCAL_PATH := $(BB_PATH)
204include $(CLEAR_VARS)
205
206BUSYBOX_CONFIG:=full
207BUSYBOX_SUFFIX:=bionic
208LOCAL_SRC_FILES := $(BUSYBOX_SRC_FILES)
209LOCAL_C_INCLUDES := $(bb_gen)/full/include $(BUSYBOX_C_INCLUDES)
210LOCAL_CFLAGS := $(BUSYBOX_CFLAGS)
211LOCAL_ASFLAGS := $(BUSYBOX_AFLAGS)
212LOCAL_MODULE := busybox
213LOCAL_MODULE_TAGS := eng debug
214
215LOCAL_SHARED_LIBRARIES := libc libcutils libm
216#$(LOCAL_MODULE): busybox_prepare
217LOCAL_STATIC_LIBRARIES += libclearsilverregex libuclibcrpc libselinux
218LOCAL_ADDITIONAL_DEPENDENCIES := $(busybox_prepare_full)
219
220LOCAL_CFLAGS += -DANDROID_PLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION)
221
222LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
223
224include $(BUILD_EXECUTABLE)
225
226BUSYBOX_LINKS := $(shell cat $(BB_PATH)/busybox-$(BUSYBOX_CONFIG).links)
227# nc is provided by external/netcat
228exclude := nc which
229
230
231SYMLINKS := $(addprefix $(TARGET_OUT_OPTIONAL_EXECUTABLES)/,$(filter-out $(exclude),$(notdir $(BUSYBOX_LINKS))))
232
233
234$(SYMLINKS): BUSYBOX_BINARY := $(LOCAL_MODULE)
235$(SYMLINKS): $(LOCAL_INSTALLED_MODULE)
236 @echo -e ${CL_CYN}"Symlink:"${CL_RST}" $@ -> $(BUSYBOX_BINARY)"
237 @mkdir -p $(dir $@)
238 @rm -rf $@
239 $(hide) ln -sf $(BUSYBOX_BINARY) $@
240
241ALL_DEFAULT_INSTALLED_MODULES += $(SYMLINKS)
242
243# We need this so that the installed files could be picked up based on the
244# local module name
245ALL_MODULES.$(LOCAL_MODULE).INSTALLED := \
246 $(ALL_MODULES.$(LOCAL_MODULE).INSTALLED) $(SYMLINKS)
247
248
249# Static Busybox
250
251LOCAL_PATH := $(BB_PATH)
252include $(CLEAR_VARS)
253
254BUSYBOX_CONFIG:=full
255BUSYBOX_SUFFIX:=static
256LOCAL_SRC_FILES := $(BUSYBOX_SRC_FILES)
257LOCAL_C_INCLUDES := $(bb_gen)/full/include $(BUSYBOX_C_INCLUDES)
258LOCAL_CFLAGS := $(BUSYBOX_CFLAGS)
259LOCAL_CFLAGS += \
260 -Dgetusershell=busybox_getusershell \
261 -Dsetusershell=busybox_setusershell \
262 -Dendusershell=busybox_endusershell \
263 -Dgetmntent=busybox_getmntent \
264 -Dgetmntent_r=busybox_getmntent_r \
265 -Dgenerate_uuid=busybox_generate_uuid
266LOCAL_ASFLAGS := $(BUSYBOX_AFLAGS)
267LOCAL_FORCE_STATIC_EXECUTABLE := true
268LOCAL_MODULE := static_busybox
269LOCAL_MODULE_STEM := busybox
270LOCAL_MODULE_TAGS := optional
271LOCAL_STATIC_LIBRARIES := libclearsilverregex libc libcutils libm libuclibcrpc libselinux
272LOCAL_MODULE_CLASS := EXECUTABLES
273LOCAL_MODULE_PATH := $(PRODUCT_OUT)/utilities
274LOCAL_UNSTRIPPED_PATH := $(PRODUCT_OUT)/symbols/utilities
275#$(LOCAL_MODULE): busybox_prepare
276LOCAL_ADDITIONAL_DEPENDENCIES := $(busybox_prepare_full)
277
278LOCAL_CFLAGS += -DANDROID_PLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION)
279
280include $(BUILD_EXECUTABLE)
281