Makefile 1.8 KB

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