1 ################################################################################
5 ################################################################################
7 BUSYBOX_VERSION
= 1.25.1
8 BUSYBOX_SITE
= http
://www.busybox.net
/downloads
9 BUSYBOX_SOURCE
= busybox-
$(BUSYBOX_VERSION
).
tar.bz2
10 BUSYBOX_LICENSE
= GPLv2
11 BUSYBOX_LICENSE_FILES
= LICENSE
13 define BUSYBOX_HELP_CMDS
14 @echo
' busybox-menuconfig - Run BusyBox menuconfig'
23 # Link against libtirpc if available so that we can leverage its RPC
24 # support for NFS mounting with BusyBox
25 ifeq ($(BR2_PACKAGE_LIBTIRPC
),y
)
26 BUSYBOX_DEPENDENCIES
+= libtirpc host-pkgconf
27 BUSYBOX_CFLAGS
+= "`$(PKG_CONFIG_HOST_BINARY) --cflags libtirpc`"
28 # Don't use LDFLAGS for -ltirpc, because LDFLAGS is used for
29 # the non-final link of modules as well.
30 BUSYBOX_CFLAGS_busybox
+= "`$(PKG_CONFIG_HOST_BINARY) --libs libtirpc`"
33 BUSYBOX_BUILD_CONFIG
= $(BUSYBOX_DIR
)/.config
34 # Allows the build system to tweak CFLAGS
37 CFLAGS
="$(BUSYBOX_CFLAGS)" \
38 CFLAGS_busybox
="$(BUSYBOX_CFLAGS_busybox)"
40 ifeq ($(BR2_REPRODUCIBLE
),y
)
48 PREFIX
="$(TARGET_DIR)" \
49 EXTRA_LDFLAGS
="$(BUSYBOX_LDFLAGS)" \
50 CROSS_COMPILE
="$(TARGET_CROSS)" \
51 CONFIG_PREFIX
="$(TARGET_DIR)" \
54 ifndef BUSYBOX_CONFIG_FILE
55 BUSYBOX_CONFIG_FILE
= $(call qstrip
,$(BR2_PACKAGE_BUSYBOX_CONFIG
))
58 BUSYBOX_KCONFIG_FILE
= $(BUSYBOX_CONFIG_FILE
)
59 BUSYBOX_KCONFIG_FRAGMENT_FILES
= $(call qstrip
,$(BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES
))
60 BUSYBOX_KCONFIG_EDITORS
= menuconfig xconfig gconfig
61 BUSYBOX_KCONFIG_OPTS
= $(BUSYBOX_MAKE_OPTS
)
63 define BUSYBOX_PERMISSIONS
64 /bin
/busybox f
4755 0 0 - - - - -
67 # If mdev will be used for device creation enable it and copy S10mdev to /etc/init.d
68 ifeq ($(BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV
),y
)
69 define BUSYBOX_INSTALL_MDEV_SCRIPT
70 $(INSTALL
) -D
-m
0755 package
/busybox
/S10mdev \
71 $(TARGET_DIR
)/etc
/init.d
/S10mdev
73 define BUSYBOX_INSTALL_MDEV_CONF
74 $(INSTALL
) -D
-m
0644 package
/busybox
/mdev.conf \
75 $(TARGET_DIR
)/etc
/mdev.conf
77 define BUSYBOX_SET_MDEV
78 $(call KCONFIG_ENABLE_OPT
,CONFIG_MDEV
,$(BUSYBOX_BUILD_CONFIG
))
79 $(call KCONFIG_ENABLE_OPT
,CONFIG_FEATURE_MDEV_CONF
,$(BUSYBOX_BUILD_CONFIG
))
80 $(call KCONFIG_ENABLE_OPT
,CONFIG_FEATURE_MDEV_EXEC
,$(BUSYBOX_BUILD_CONFIG
))
81 $(call KCONFIG_ENABLE_OPT
,CONFIG_FEATURE_MDEV_LOAD_FIRMWARE
,$(BUSYBOX_BUILD_CONFIG
))
85 # sha passwords need USE_BB_CRYPT_SHA
86 ifeq ($(BR2_TARGET_GENERIC_PASSWD_SHA256
)$(BR2_TARGET_GENERIC_PASSWD_SHA512
),y
)
87 define BUSYBOX_SET_CRYPT_SHA
88 $(call KCONFIG_ENABLE_OPT
,CONFIG_USE_BB_CRYPT_SHA
,$(BUSYBOX_BUILD_CONFIG
))
92 ifeq ($(BR2_USE_MMU
),y
)
93 define BUSYBOX_SET_MMU
94 $(call KCONFIG_DISABLE_OPT
,CONFIG_NOMMU
,$(BUSYBOX_BUILD_CONFIG
))
97 define BUSYBOX_SET_MMU
98 $(call KCONFIG_ENABLE_OPT
,CONFIG_NOMMU
,$(BUSYBOX_BUILD_CONFIG
))
99 $(call KCONFIG_DISABLE_OPT
,CONFIG_SWAPONOFF
,$(BUSYBOX_BUILD_CONFIG
))
100 $(call KCONFIG_DISABLE_OPT
,CONFIG_ASH
,$(BUSYBOX_BUILD_CONFIG
))
101 $(call KCONFIG_ENABLE_OPT
,CONFIG_HUSH
,$(BUSYBOX_BUILD_CONFIG
))
102 $(call KCONFIG_ENABLE_OPT
,CONFIG_HUSH_BASH_COMPAT
,$(BUSYBOX_BUILD_CONFIG
))
103 $(call KCONFIG_ENABLE_OPT
,CONFIG_HUSH_BRACE_EXPANSION
,$(BUSYBOX_BUILD_CONFIG
))
104 $(call KCONFIG_ENABLE_OPT
,CONFIG_HUSH_HELP
,$(BUSYBOX_BUILD_CONFIG
))
105 $(call KCONFIG_ENABLE_OPT
,CONFIG_HUSH_INTERACTIVE
,$(BUSYBOX_BUILD_CONFIG
))
106 $(call KCONFIG_ENABLE_OPT
,CONFIG_HUSH_SAVEHISTORY
,$(BUSYBOX_BUILD_CONFIG
))
107 $(call KCONFIG_ENABLE_OPT
,CONFIG_HUSH_JOB
,$(BUSYBOX_BUILD_CONFIG
))
108 $(call KCONFIG_ENABLE_OPT
,CONFIG_HUSH_TICK
,$(BUSYBOX_BUILD_CONFIG
))
109 $(call KCONFIG_ENABLE_OPT
,CONFIG_HUSH_IF
,$(BUSYBOX_BUILD_CONFIG
))
110 $(call KCONFIG_ENABLE_OPT
,CONFIG_HUSH_LOOPS
,$(BUSYBOX_BUILD_CONFIG
))
111 $(call KCONFIG_ENABLE_OPT
,CONFIG_HUSH_CASE
,$(BUSYBOX_BUILD_CONFIG
))
112 $(call KCONFIG_ENABLE_OPT
,CONFIG_HUSH_FUNCTIONS
,$(BUSYBOX_BUILD_CONFIG
))
113 $(call KCONFIG_ENABLE_OPT
,CONFIG_HUSH_LOCAL
,$(BUSYBOX_BUILD_CONFIG
))
114 $(call KCONFIG_ENABLE_OPT
,CONFIG_HUSH_RANDOM_SUPPORT
,$(BUSYBOX_BUILD_CONFIG
))
115 $(call KCONFIG_ENABLE_OPT
,CONFIG_HUSH_EXPORT_N
,$(BUSYBOX_BUILD_CONFIG
))
116 $(call KCONFIG_ENABLE_OPT
,CONFIG_HUSH_MODE_X
,$(BUSYBOX_BUILD_CONFIG
))
120 # If we're using static libs do the same for busybox
121 ifeq ($(BR2_STATIC_LIBS
),y
)
122 define BUSYBOX_PREFER_STATIC
123 $(call KCONFIG_ENABLE_OPT
,CONFIG_STATIC
,$(BUSYBOX_BUILD_CONFIG
))
127 # Disable shadow passwords support if unsupported by the C library
128 ifeq ($(BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS
),)
129 define BUSYBOX_INTERNAL_SHADOW_PASSWORDS
130 $(call KCONFIG_ENABLE_OPT
,CONFIG_USE_BB_PWD_GRP
,$(BUSYBOX_BUILD_CONFIG
))
131 $(call KCONFIG_ENABLE_OPT
,CONFIG_USE_BB_SHADOW
,$(BUSYBOX_BUILD_CONFIG
))
135 # We also need to use internal shadow password functions when using
136 # the musl C library, since some of them are not yet implemented by
139 # Do not use utmp/wmtp support. wmtp support is not available in musl,
140 # and utmp support is not sufficient for Busybox.
141 ifeq ($(BR2_TOOLCHAIN_USES_MUSL
),y
)
142 define BUSYBOX_MUSL_TWEAKS
143 $(call KCONFIG_ENABLE_OPT
,CONFIG_USE_BB_PWD_GRP
,$(BUSYBOX_BUILD_CONFIG
))
144 $(call KCONFIG_ENABLE_OPT
,CONFIG_USE_BB_SHADOW
,$(BUSYBOX_BUILD_CONFIG
))
145 $(call KCONFIG_DISABLE_OPT
,CONFIG_FEATURE_UTMP
,$(BUSYBOX_BUILD_CONFIG
))
146 $(call KCONFIG_DISABLE_OPT
,CONFIG_FEATURE_WTMP
,$(BUSYBOX_BUILD_CONFIG
))
150 define BUSYBOX_INSTALL_UDHCPC_SCRIPT
151 if grep
-q CONFIG_UDHCPC
=y
$(@D
)/.config
; then \
152 $(INSTALL
) -m
0755 -D package
/busybox
/udhcpc.script \
153 $(TARGET_DIR
)/usr
/share
/udhcpc
/default.script
; \
154 $(INSTALL
) -m
0755 -d \
155 $(TARGET_DIR
)/usr
/share
/udhcpc
/default.script.d
; \
159 ifeq ($(BR2_INIT_BUSYBOX
),y
)
160 define BUSYBOX_SET_INIT
161 $(call KCONFIG_ENABLE_OPT
,CONFIG_INIT
,$(BUSYBOX_BUILD_CONFIG
))
165 ifeq ($(BR2_PACKAGE_BUSYBOX_SELINUX
),y
)
166 BUSYBOX_DEPENDENCIES
+= host-pkgconf libselinux libsepol
167 define BUSYBOX_SET_SELINUX
168 $(call KCONFIG_ENABLE_OPT
,CONFIG_SELINUX
,$(BUSYBOX_BUILD_CONFIG
))
169 $(call KCONFIG_ENABLE_OPT
,CONFIG_SELINUXENABLED
,$(BUSYBOX_BUILD_CONFIG
))
173 define BUSYBOX_INSTALL_LOGGING_SCRIPT
174 if grep
-q CONFIG_SYSLOGD
=y
$(@D
)/.config
; then \
175 $(INSTALL
) -m
0755 -D package
/busybox
/S01logging \
176 $(TARGET_DIR
)/etc
/init.d
/S01logging
; \
177 else rm -f
$(TARGET_DIR
)/etc
/init.d
/S01logging
; fi
180 ifeq ($(BR2_INIT_BUSYBOX
),y
)
181 define BUSYBOX_INSTALL_INITTAB
182 $(INSTALL
) -D
-m
0644 package
/busybox
/inittab
$(TARGET_DIR
)/etc
/inittab
186 ifeq ($(BR2_PACKAGE_BUSYBOX_WATCHDOG
),y
)
187 define BUSYBOX_SET_WATCHDOG
188 $(call KCONFIG_ENABLE_OPT
,CONFIG_WATCHDOG
,$(BUSYBOX_BUILD_CONFIG
))
190 define BUSYBOX_INSTALL_WATCHDOG_SCRIPT
191 $(INSTALL
) -D
-m
0755 package
/busybox
/S15watchdog \
192 $(TARGET_DIR
)/etc
/init.d
/S15watchdog
193 $(SED
) s
/PERIOD
/$(call qstrip
,$(BR2_PACKAGE_BUSYBOX_WATCHDOG_PERIOD
))/ \
194 $(TARGET_DIR
)/etc
/init.d
/S15watchdog
198 # PAM support requires thread support in the toolchain
199 ifeq ($(BR2_PACKAGE_LINUX_PAM
)$(BR2_TOOLCHAIN_HAS_THREADS
),yy
)
200 define BUSYBOX_LINUX_PAM
201 $(call KCONFIG_ENABLE_OPT
,CONFIG_PAM
,$(BUSYBOX_BUILD_CONFIG
))
203 BUSYBOX_DEPENDENCIES
+= linux-pam
207 define BUSYBOX_INSTALL_TELNET_SCRIPT
208 if grep
-q CONFIG_FEATURE_TELNETD_STANDALONE
=y
$(@D
)/.config
; then \
209 $(INSTALL
) -m
0755 -D package
/busybox
/S50telnet \
210 $(TARGET_DIR
)/etc
/init.d
/S50telnet
; \
214 # Enable "noclobber" in install.sh, to prevent BusyBox from overwriting any
215 # full-blown versions of apps installed by other packages with sym/hard links.
216 define BUSYBOX_NOCLOBBER_INSTALL
217 $(SED
) 's/^noclobber="0"$$/noclobber="1"/' $(@D
)/applets
/install.sh
220 define BUSYBOX_KCONFIG_FIXUP_CMDS
222 $(BUSYBOX_PREFER_STATIC
)
224 $(BUSYBOX_SET_CRYPT_SHA
)
226 $(BUSYBOX_INTERNAL_SHADOW_PASSWORDS
)
228 $(BUSYBOX_SET_WATCHDOG
)
229 $(BUSYBOX_SET_SELINUX
)
230 $(BUSYBOX_MUSL_TWEAKS
)
233 define BUSYBOX_CONFIGURE_CMDS
234 $(BUSYBOX_NOCLOBBER_INSTALL
)
237 define BUSYBOX_BUILD_CMDS
238 $(BUSYBOX_MAKE_ENV
) $(MAKE
) $(BUSYBOX_MAKE_OPTS
) -C
$(@D
)
241 define BUSYBOX_INSTALL_TARGET_CMDS
242 $(BUSYBOX_MAKE_ENV
) $(MAKE
) $(BUSYBOX_MAKE_OPTS
) -C
$(@D
) install
243 $(BUSYBOX_INSTALL_INITTAB
)
244 $(BUSYBOX_INSTALL_UDHCPC_SCRIPT
)
245 $(BUSYBOX_INSTALL_MDEV_CONF
)
248 define BUSYBOX_INSTALL_INIT_SYSV
249 $(BUSYBOX_INSTALL_MDEV_SCRIPT
)
250 $(BUSYBOX_INSTALL_LOGGING_SCRIPT
)
251 $(BUSYBOX_INSTALL_WATCHDOG_SCRIPT
)
252 $(BUSYBOX_INSTALL_TELNET_SCRIPT
)
255 # Checks to give errors that the user can understand
256 # Must be before we call to kconfig-package
257 ifeq ($(BR2_PACKAGE_BUSYBOX
)$(BR_BUILDING
),yy
)
258 ifeq ($(call qstrip
,$(BR2_PACKAGE_BUSYBOX_CONFIG
)),)
259 $(error No BusyBox configuration file specified
, check your BR2_PACKAGE_BUSYBOX_CONFIG setting
)
263 $(eval
$(kconfig-package
))