Makefile 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. # Makefile using arduino-cli
  2. ARDUINO_HOME=$(HOME)/.arduino15
  3. ESP32_VER=2.0.3
  4. ESP32_TOOLS=$(ARDUINO_HOME)/packages/esp32/hardware/esp32/$(ESP32_VER)/tools
  5. ESPTOOL=$(ESP32_TOOLS)/esptool.py
  6. ESP32_FQBN=esp32:esp32:$(CHIP)
  7. SERDEV := $(wildcard /dev/serial/by-id/usb-Espressif_*)
  8. ARDUINO_CLI=../bin/arduino-cli
  9. APP_PARTITION_SIZE=2031616 # 给程序分配0x1F0000空间 目前 0x165560
  10. # ensure python tools are in $PATH
  11. export PATH := $(HOME)/.local/bin:$(PATH)
  12. .PHONY: headers
  13. # 不管你的文件夹里有没有叫 headers 的文件 / 文件夹,只要你在终端敲 make headers,
  14. # 电脑就必须执行你给 headers 定好的那些命令(比如复制头文件、生成文件),不会找任何借口偷懒。
  15. # 没有 .PHONY 时:电脑会先看有没有叫 headers 的文件,如果有,就觉得 “这事儿已经做完了”,直接说 “不用弄了”,不执行你写的命令
  16. # 加了 .PHONY: headers 后:电脑不管有没有这个文件,都当 “这事儿还没做”,乖乖执行你安排的命令,绝不偷懒
  17. # all: headers esp32s3dev esp32c3dev bluemark-db200 bluemark-db110 jw-tbd mro-rid jwrid-esp32s3 bluemark-db202 bluemark-db210 bluemark-db203 holybro-RemoteID CUAV-RID VKUAV-RID
  18. # 电脑会按你写的顺序来 —— 先跑 headers 的命令,跑完再跑 esp32s3dev,以此类推,前面的没做完,后面的不会开始
  19. # 如果你不想全做,只想做其中一个(比如只编译 esp32c3dev),也可以敲 make esp32c3dev,电脑只会执行这一个指令
  20. all: headers VKUAV-RID
  21. # esp32s3dev VKUAV-RID CUAV-RID
  22. esp32s3dev: CHIP=esp32s3
  23. esp32s3dev: ArduRemoteID-ESP32S3_DEV.bin
  24. esp32c3dev: CHIP=esp32c3
  25. esp32c3dev: ArduRemoteID-ESP32C3_DEV.bin
  26. bluemark-db200: CHIP=esp32c3
  27. bluemark-db200: ArduRemoteID-BLUEMARK_DB200.bin
  28. bluemark-db110: CHIP=esp32c3
  29. bluemark-db110: ArduRemoteID-BLUEMARK_DB110.bin
  30. jw-tbd: CHIP=esp32s3
  31. jw-tbd: ArduRemoteID-JW_TBD.bin
  32. jwrid-esp32s3: CHIP=esp32s3
  33. jwrid-esp32s3: ArduRemoteID-JWRID_ESP32S3.bin
  34. mro-rid: CHIP=esp32c3
  35. mro-rid: ArduRemoteID-MRO_RID.bin
  36. bluemark-db202: CHIP=esp32c3
  37. bluemark-db202: ArduRemoteID-BLUEMARK_DB202.bin
  38. bluemark-db210: CHIP=esp32s3
  39. bluemark-db210: ArduRemoteID-BLUEMARK_DB210.bin
  40. bluemark-db203: CHIP=esp32c3
  41. bluemark-db203: ArduRemoteID-BLUEMARK_DB203.bin
  42. holybro-RemoteID: CHIP=esp32c3
  43. holybro-RemoteID: ArduRemoteID-Holybro_RemoteID.bin
  44. CUAV-RID: CHIP=esp32s3
  45. CUAV-RID: ArduRemoteID-CUAV_RID.bin
  46. VKUAV-RID: CHIP=esp32s3
  47. VKUAV-RID: ArduRemoteID-VKUAV_RID.bin
  48. # 让 Arduino 命令行工具(arduino-cli)更新硬件库的 “索引列表”
  49. # 安装指定版本($(ESP32_VER) 是提前定义的版本号,比如 2.0.14)的 ESP32 核心开发包
  50. # 自动安装 “Adafruit NeoPixel” 这个第三方库(用来控制灯带的常用库)
  51. setup:
  52. @echo "Installing ESP32 support"
  53. $(ARDUINO_CLI) core update-index --config-file arduino-cli.yaml
  54. $(ARDUINO_CLI) core install esp32:esp32@$(ESP32_VER)
  55. $(ARDUINO_CLI) lib install "Adafruit NeoPixel"
  56. # 电脑会自动去执行上级目录下 scripts 文件夹里的 git-version.sh 这个脚本文件
  57. gitversion:
  58. @../scripts/git-version.sh
  59. # 根据刚获取的 Git 版本信息,重新生成项目的头文件 具体
  60. # 主要做两件事:生成 MAVLink2 和 DroneCAN 通信协议的头文件(让 ESP32 能和无人机 / 飞控通信)
  61. # 再更新 RemoteIDModule 模块的 Git 版本信息,全程自动化不用手动改代码
  62. headers: gitversion
  63. @cd .. && scripts/regen_headers.sh
  64. romfs_files.h: web/*.html web/js/*.js web/styles/*css web/images/*.jpg web/images/*.png public_keys/*.dat
  65. @../scripts/make_romfs.py romfs_files.h web/*.html web/js/*.js web/styles/*css web/images/*.jpg web/images/*.png public_keys/*.dat
  66. ArduRemoteID-%.bin: gitversion *.cpp *.ino *.h romfs_files.h
  67. @echo "Building $* on $(CHIP)"
  68. @BUILD_FLAGS="-DBOARD_$*"
  69. @rm -rf build build-$*
  70. @$(ARDUINO_CLI) compile -b esp32:esp32:$(CHIP) --export-binaries --build-property build.extra_flags="-DBOARD_$* -DESP32" --build-property upload.maximum_size=$(APP_PARTITION_SIZE)
  71. @cp build/esp32.esp32.$(CHIP)/RemoteIDModule.ino.bin ArduRemoteID_$*_OTA.bin
  72. @echo "Merging $*"
  73. @python3 $(ESPTOOL) --chip $(CHIP) merge_bin -o ArduRemoteID-$*.bin --flash_size 4MB 0x0 build/esp32.esp32.$(CHIP)/RemoteIDModule.ino.bootloader.bin 0x8000 build/esp32.esp32.$(CHIP)/RemoteIDModule.ino.partitions.bin 0xe000 $(ESP32_TOOLS)/partitions/boot_app0.bin 0x10000 build/esp32.esp32.$(CHIP)/RemoteIDModule.ino.bin
  74. @mv build build-$*
  75. boards:
  76. @echo "Listing boards"
  77. @$(ARDUINO_CLI) board list
  78. checkdev:
  79. @[ "${SERDEV}" ] && echo "Using device $(SERDEV)" || ( echo "Failed to find serial device"; exit 1 )
  80. upload-%: checkdev
  81. @echo "Flashing ArduRemoteID-$*.bin"
  82. @python3 $(ESPTOOL) --port $(SERDEV) write_flash 0x0 ArduRemoteID-$*.bin
  83. uploadota-%: checkdev
  84. @echo "Flashing ArduRemoteID-$*_OTA.bin"
  85. @python3 $(ESPTOOL) --port $(SERDEV) write_flash 0x10000 ArduRemoteID_$*_OTA.bin
  86. upload: upload-ESP32S3_DEV
  87. submodule_update:
  88. git submodule update --recursive --force --init
  89. clean:
  90. rm -rf ..esp32* *.bin build* romfs_files.h