Makefile 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. ARCH ?= x86_64
  2. busybox_version := 1.35.0
  3. busybox_tarball := busybox-$(busybox_version).tar.bz2
  4. busybox_tarball_path := $(busybox_tarball)
  5. build_dir := build/$(ARCH)
  6. busybox_dir := $(build_dir)/busybox-$(busybox_version)
  7. prefix := $(ARCH)-linux-musl-
  8. bin := build/$(ARCH)/busybox
  9. # 特殊架构处理
  10. ifeq ($(ARCH), mipsel)
  11. prefix := mipsel-linux-musln32-
  12. endif
  13. cc := $(prefix)gcc
  14. strip := $(prefix)strip
  15. # 下载 busybox 的 md5sum 文件
  16. $(busybox_tarball_path).md5sum:
  17. wget https://mirrors.dragonos.org.cn/pub/third_party/busybox/$(busybox_tarball).md5sum
  18. # 下载源码
  19. $(busybox_tarball_path): $(busybox_tarball_path).md5sum
  20. @if [ ! -f $@ ] || ! md5sum -c $(busybox_tarball_path).md5sum; then \
  21. echo "Downloading $@..."; \
  22. wget https://mirrors.dragonos.org.cn/pub/third_party/busybox/$(busybox_tarball); \
  23. fi
  24. # 解压源码包
  25. $(busybox_dir): $(busybox_tarball_path)
  26. mkdir -p $(build_dir)
  27. tar -xjf $< -C $(build_dir)
  28. # 配置和编译
  29. $(bin): $(busybox_dir)
  30. @# 应用必要补丁和配置调整
  31. cd $(busybox_dir) && \
  32. make defconfig && \
  33. sed -i '/CONFIG_STATIC/s/.*/CONFIG_STATIC=y/' .config && \
  34. sed -i '/CONFIG_PIE/d' .config && \
  35. sed -i '/CONFIG_FEATURE_EDITING/s/=y/=n/' .config && \
  36. sed -i '/CONFIG_HUSH/s/=y/=n/' .config && \
  37. sed -i '/CONFIG_NOMMU/s/=y/=n/' .config && \
  38. echo "CONFIG_CROSS_COMPILER_PREFIX=\"$(prefix)\"" >> .config && \
  39. echo "CONFIG_FEATURE_STATIC=y" >> .config && \
  40. echo "CONFIG_STATIC_LIBGCC=y" >> .config && \
  41. echo "CONFIG_ASH=y" >> .config && \
  42. echo "CONFIG_ASH_READ_PROFILE=y" >> .config && \
  43. echo "CONFIG_FEATURE_EDITING=y" >> .config && \
  44. echo "CONFIG_HUSH=y" >> .config
  45. @# 执行编译
  46. cd $(busybox_dir) && \
  47. KCONFIG_NOTIMESTAMP=1 make CC="$(cc)" CFLAGS_EXTRA="-static -Os" LDFLAGS="--static" -j$(nproc)
  48. @# 处理编译输出
  49. mkdir -p $(dir $(bin))
  50. cp $(busybox_dir)/busybox $(bin)
  51. $(strip) $(bin)
  52. .PHONY: all clean menuconfig
  53. all: $(bin)
  54. install: all
  55. mv $(bin) $(DADK_CURRENT_BUILD_DIR)/busybox
  56. # 交互式配置菜单
  57. menuconfig: $(busybox_dir)
  58. cd $(busybox_dir) && make menuconfig
  59. clean:
  60. rm -rf build/
  61. distclean: clean
  62. rm -f $(busybox_tarball_path) $(busybox_tarball_path).md5sum