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