Makefile 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. echo "CONFIG_CROSS_COMPILER_PREFIX=\"$(prefix)\"" >> .config && \
  36. echo "CONFIG_FEATURE_STATIC=y" >> .config && \
  37. echo "CONFIG_STATIC_LIBGCC=y" >> .config && \
  38. echo "CONFIG_ASH=y" >> .config && \
  39. echo "CONFIG_ASH_READ_PROFILE=y" >> .config
  40. @# 执行编译
  41. cd $(busybox_dir) && \
  42. KCONFIG_NOTIMESTAMP=1 make CC="$(cc)" CFLAGS_EXTRA="-static -Os" LDFLAGS="--static" -j$(nproc)
  43. @# 处理编译输出
  44. mkdir -p $(dir $(bin))
  45. cp $(busybox_dir)/busybox $(bin)
  46. $(strip) $(bin)
  47. .PHONY: all clean menuconfig
  48. all: $(bin)
  49. install: all
  50. mv $(bin) $(DADK_CURRENT_BUILD_DIR)/busybox
  51. # 交互式配置菜单
  52. menuconfig: $(busybox_dir)
  53. cd $(busybox_dir) && make menuconfig
  54. clean:
  55. rm -rf build/
  56. distclean: clean
  57. rm -f $(busybox_tarball_path) $(busybox_tarball_path).md5sum