Advertisement
Guest User

esphttpd_ota makefile

a guest
Mar 30th, 2015
856
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Make 9.82 KB | None | 0 0
  1. # tnx to mamalala
  2. # Changelog
  3. # Changed the variables to include the header file directory
  4. # Added global var for the XTENSA tool root
  5. #
  6. # This make file still needs some work.
  7. #
  8. #
  9. # Output directors to store intermediate compiled files
  10. # relative to the project directory
  11. BUILD_BASE  = build
  12. FW_BASE     = firmware
  13.  
  14. # Base directory for the compiler
  15. XTENSA_TOOLS_ROOT ?= /opt/Espressif/crosstool-NG/builds/xtensa-lx106-elf/bin
  16.  
  17. #Extra Tensilica includes from the ESS VM
  18. SDK_EXTRA_INCLUDES ?= /opt/Espressif/include
  19. SDK_EXTRA_LIBS ?= /opt/Espressif/arch/lib
  20.  
  21. # base directory of the ESP8266 SDK package, absolute
  22. SDK_ROOT    ?= /opt/Espressif/ESP8266_SDK/
  23. SDK_VERSION ?= 1.0.0
  24. SDK_BASE    ?= $(SDK_ROOT)esp_iot_sdk_v$(SDK_VERSION)/
  25.  
  26. # Hardware info
  27. ESP_FLASH_SIZE  ?= 512
  28. ESP_SPI_SIZE    ?= 0
  29. ESP_FLASH_MODE  ?= 0
  30. ESP_FLASH_FREQ_DIV ?= 0
  31.  
  32. #Esptool.py path and port
  33. # I'd love to move to only needing one tool, but esptool.py does a better job of flashing
  34. # and mamalalas esptool does a better job of extracting the file parts
  35. ESPTOOL     ?= esptool
  36. FW_TOOL     ?= esptool
  37. JOIN_TOOL   ?= tools/gen_flashbin.py
  38. APPGEN_TOOL ?= tools/gen_appbin.py
  39. ESPTOOLPY   ?= esptool/esptool.py
  40. ESPPORT     ?= /dev/ttyUSB0
  41.  
  42. #ESPDELAY indicates seconds to wait between flashing the two binary images
  43. ESPDELAY    ?= 3
  44. ESPBAUD     ?= 115200
  45.  
  46. # name for the target project
  47. TARGET      = httpd
  48.  
  49. # Bootloader and defaults
  50. BLANK       = blank.bin
  51.  
  52. ESP_BOOT_VER    ?= new
  53.  
  54. ifeq ("$(SDK_VERSION)","0.9.3")
  55. ESP_BOOT_VER    = old
  56. BOOTLOADER  ?= boot_v1.1.bin
  57. endif
  58. ifeq ("$(ESP_BOOT_VER)","new")
  59. ifeq ("$(SDK_VERSION)","1.0.0")
  60. BOOTLOADER      ?= boot_v1.3\(b3\).bin
  61. else
  62. BOOTLOADER      ?= boot_v1.2.bin
  63. endif
  64. else
  65. BOOTLOADER  ?= boot_v1.1.bin
  66. endif
  67.  
  68. ifeq ("$(ESP_BOOT_VER)","new")
  69. BOOT_MODE = 2
  70. else
  71. BOOT_MODE = 1
  72. endif
  73.  
  74. # which modules (subdirectories) of the project to include in compiling
  75. #MODULES        = driver user lwip/api lwip/app lwip/core lwip/core/ipv4 lwip/netif
  76. MODULES     = driver user
  77. EXTRA_INCDIR    = include \
  78.         . \
  79.         lib/heatshrink/ \
  80.         $(SDK_EXTRA_INCLUDES)
  81.  
  82. # libraries used in this project, mainly provided by the SDK
  83. LIBS        = c gcc hal phy pp net80211 wpa main lwip upgrade
  84.  
  85. # compiler flags using during compilation of source files
  86. CFLAGS      = -Os -ggdb -std=c99 -Wpointer-arith -Wundef -Wall -Wl,-EL -fno-inline-functions \
  87.         -nostdlib -mlongcalls -mtext-section-literals  -D__ets__ -DICACHE_FLASH \
  88.         -Wno-address
  89.  
  90. # linker flags used to generate the main object file
  91. LDFLAGS     = -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static -L$(SDK_EXTRA_LIBS)
  92.  
  93. # linker script used for the above linkier step
  94. LD_SCRIPT   = eagle.app.v6.ld
  95. ifeq ("$(SDK_VERSION)","0.9.3")
  96. LD_SCRIPT1      = eagle.app.v6.app1.ld
  97. LD_SCRIPT2      = eagle.app.v6.app2.ld
  98. else
  99. LD_SCRIPT1      = eagle.app.v6.$(ESP_BOOT_VER).$(ESP_FLASH_SIZE).app1.ld
  100. LD_SCRIPT2      = eagle.app.v6.$(ESP_BOOT_VER).$(ESP_FLASH_SIZE).app2.ld
  101. endif
  102. # various paths from the SDK used in this project
  103. SDK_LIBDIR  = lib
  104. SDK_LDDIR   = ld
  105. SDK_INCDIR  = include include/json
  106. SDK_BIN     = bin
  107.  
  108. # we create two different files for uploading into the flash
  109. # these are the names and options to generate them
  110. FW_FILE_1   = 0x00000
  111. FW_FILE_1_ARGS  = -bo $@ -bs .text -bs .data -bs .rodata -bc -ec
  112. FW_FILE_2   = 0x40000
  113. FW_FILE_2_ARGS  = -es .irom0.text $@ -ec
  114. OTA_FW_FILE_1   = user1
  115. OTA_FW_FILE_2   = user2
  116. WEB_FW_FILE = website
  117.  
  118. #Intermediate files for User1.bin and User2.bin
  119. OTA_FW_1_PT_1   = 0x01000
  120. OTA_FW_1_PT_1_ARGS= -bo $(OTA_FW_1_PT_1) -bs .text -bs .data -bs .rodata -bc -ec
  121.  
  122. OTA_FW_1_PT_2   = 0x11000
  123. OTA_FW_1_PT_2_ARGS= -es .irom0.text $(OTA_FW_1_PT_2) -ec
  124.  
  125. OTA_FW_2_PT_1   = 0x41000
  126. OTA_FW_2_PT_1_ARGS= -bo $(OTA_FW_2_PT_1) -bs .text -bs .data -bs .rodata -bc -ec
  127.  
  128. OTA_FW_2_PT_2   = 0x51000
  129. OTA_FW_2_PT_2_ARGS= -es .irom0.text $(OTA_FW_2_PT_2) -ec
  130.  
  131.  
  132. # select which tools to use as compiler, librarian and linker
  133. CC      := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-gcc
  134. AR      := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-ar
  135. LD      := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-gcc
  136. OBJCOPY     := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-objcopy
  137.  
  138.  
  139. ####
  140. #### no user configurable options below here
  141. ####
  142. SRC_DIR     := $(MODULES)
  143. BUILD_DIR   := $(addprefix $(BUILD_BASE)/,$(MODULES))
  144.  
  145. SDK_LIBDIR  := $(addprefix $(SDK_BASE)/,$(SDK_LIBDIR))
  146. SDK_INCDIR  := $(addprefix -I$(SDK_BASE)/,$(SDK_INCDIR))
  147. SDK_BIN     := $(addprefix $(SDK_BASE)/,$(SDK_BIN))
  148. SRC     := $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.c))
  149. OBJ     := $(patsubst %.c,$(BUILD_BASE)/%.o,$(SRC))
  150. LIBS        := $(addprefix -l,$(LIBS))
  151. APP_AR      := $(addprefix $(BUILD_BASE)/,$(TARGET)_app.a)
  152. TARGET_OUT  := $(addprefix $(BUILD_BASE)/,$(TARGET).out)
  153. BOOTLOADER  := $(addprefix $(SDK_BIN)/,$(BOOTLOADER))
  154. BLANK       := $(addprefix $(SDK_BIN)/,$(BLANK))
  155.  
  156. JOIN_TOOL   := $(addprefix $(SDK_BASE)/,$(JOIN_TOOL))
  157. APPGEN_TOOL := $(addprefix $(SDK_BASE)/,$(APPGEN_TOOL))
  158. ESPTOOLPY   := $(addprefix $(SDK_ROOT)/,$(ESPTOOLPY))
  159.  
  160. LD_SCRIPT   := $(addprefix -T$(SDK_BASE)/$(SDK_LDDIR)/,$(LD_SCRIPT))
  161. LD_SCRIPT1  := $(addprefix -T$(SDK_BASE)/$(SDK_LDDIR)/,$(LD_SCRIPT1))
  162. LD_SCRIPT2  := $(addprefix -T$(SDK_BASE)/$(SDK_LDDIR)/,$(LD_SCRIPT2))
  163.  
  164. INCDIR      := $(addprefix -I,$(SRC_DIR))
  165. EXTRA_INCDIR    := $(addprefix -I,$(EXTRA_INCDIR))
  166. MODULE_INCDIR   := $(addsuffix /include,$(INCDIR))
  167.  
  168. FW_FILE_1   := $(addprefix $(FW_BASE)/,$(FW_FILE_1).bin)
  169. FW_FILE_2   := $(addprefix $(FW_BASE)/,$(FW_FILE_2).bin)
  170. OTA_FW_FILE_1   := $(addprefix $(FW_BASE)/,$(OTA_FW_FILE_1).$(ESP_BOOT_VER).bin)
  171. OTA_FW_FILE_2   := $(addprefix $(FW_BASE)/,$(OTA_FW_FILE_2).$(ESP_BOOT_VER).bin)
  172. WEB_FW_FILE := $(addprefix $(FW_BASE)/,$(WEB_FW_FILE).espfs)
  173.  
  174. OTA_FW_1_PT_1   := $(addprefix $(BUILD_BASE)/,$(OTA_FW_1_PT_1).bin)
  175. OTA_FW_1_PT_2   := $(addprefix $(BUILD_BASE)/,$(OTA_FW_1_PT_2).bin)
  176. OTA_FW_2_PT_1   := $(addprefix $(BUILD_BASE)/,$(OTA_FW_2_PT_1).bin)
  177. OTA_FW_2_PT_2   := $(addprefix $(BUILD_BASE)/,$(OTA_FW_2_PT_2).bin)
  178.  
  179. V ?= $(VERBOSE)
  180. ifeq ("$(V)","1")
  181. Q :=
  182. vecho := @true
  183. else
  184. Q := @
  185. vecho := @echo
  186. endif
  187.  
  188. vpath %.c $(SRC_DIR)
  189.  
  190. ifdef DEBUG
  191.   CFLAGS := $(CFLAGS) -DDEBUG_VERSION=$(DEBUG)
  192. endif
  193.  
  194. ifdef OTA
  195.     CFLAGS := $(CFLAGS) -DOTA
  196. endif
  197.  
  198. define compile-objects
  199. $1/%.o: %.c
  200.     $(vecho) "CC $$<"
  201.     $(vecho) "$(Q) $(CC) $(INCDIR) $(MODULE_INCDIR) $(EXTRA_INCDIR) $(SDK_INCDIR) $(CFLAGS) -c $$< -o $$@"
  202.     $(Q) $(CC) $(INCDIR) $(MODULE_INCDIR) $(EXTRA_INCDIR) $(SDK_INCDIR) $(CFLAGS)  -c $$< -o $$@
  203. endef
  204.  
  205. .PHONY: all checkdirs clean
  206.  
  207. all: checkdirs $(TARGET_OUT) $(FW_FILE_1) $(FW_FILE_2) website
  208.  
  209. ifeq ("$(ESP_BOOT_VER)","new")
  210. $(OTA_FW_FILE_1): NEW_OTA_USER1
  211. $(OTA_FW_FILE_2): NEW_OTA_USER2
  212. else
  213. $(OTA_FW_FILE_1): OLD_OTA_USER1
  214. $(OTA_FW_FILE_2): OLD_OTA_USER2
  215. endif
  216.  
  217. NEW_OTA_USER1: checkdirs $(TARGET_OUT)
  218.     @$(OBJCOPY) --only-section .text -O binary $(TARGET_OUT)1 eagle.app.v6.text.bin
  219.     @$(OBJCOPY) --only-section .data -O binary $(TARGET_OUT)1 eagle.app.v6.data.bin
  220.     @$(OBJCOPY) --only-section .rodata -O binary $(TARGET_OUT)1 eagle.app.v6.rodata.bin
  221.     @$(OBJCOPY) --only-section .irom0.text -O binary $(TARGET_OUT)1 eagle.app.v6.irom0text.bin
  222.     @python $(APPGEN_TOOL) $(TARGET_OUT)1 $(BOOT_MODE) $(ESP_FLASH_MODE) $(ESP_FLASH_FREQ_DIV) $(ESP_SPI_SIZE)
  223.     @rm -f eagle.app.v6.*
  224.    
  225. NEW_OTA_USER2: checkdirs $(TARGET_OUT)
  226.     @$(OBJCOPY) --only-section .text -O binary $(TARGET_OUT)2 eagle.app.v6.text.bin
  227.     @$(OBJCOPY) --only-section .data -O binary $(TARGET_OUT)2 eagle.app.v6.data.bin
  228.     @$(OBJCOPY) --only-section .rodata -O binary $(TARGET_OUT)2 eagle.app.v6.rodata.bin
  229.     @$(OBJCOPY) --only-section .irom0.text -O binary $(TARGET_OUT)2 eagle.app.v6.irom0text.bin
  230.     @python $(APPGEN_TOOL) $(TARGET_OUT)2 $(BOOT_MODE) $(ESP_FLASH_MODE) $(ESP_FLASH_FREQ_DIV) $(ESP_SPI_SIZE)
  231.     @rm -f eagle.app.v6.*
  232.  
  233. OLD_OTA_USER1: checkdirs $(TARGET_OUT)
  234.     @$(ESPTOOL) -eo $(TARGET_OUT)1 $(OTA_FW_1_PT_1_ARGS)
  235.     @$(ESPTOOL) -eo $(TARGET_OUT)1 $(OTA_FW_1_PT_2_ARGS)
  236.     @$(JOIN_TOOL) $(OTA_FW_1_PT_1) $(OTA_FW_1_PT_2)
  237.    
  238. OLD_OTA_USER2: checkdirs $(TARGET_OUT)
  239.     @$(ESPTOOL) -eo $(TARGET_OUT)2 $(OTA_FW_2_PT_1_ARGS)
  240.     @$(ESPTOOL) -eo $(TARGET_OUT)2 $(OTA_FW_2_PT_2_ARGS)
  241.     @$(JOIN_TOOL) $(OTA_FW_2_PT_1) $(OTA_FW_2_PT_2)
  242.    
  243. $(FW_FILE_1): $(TARGET_OUT)
  244.     $(vecho) "FW $@"
  245.     $(Q) $(ESPTOOL) -eo $(TARGET_OUT) $(FW_FILE_1_ARGS)
  246.  
  247. $(FW_FILE_2): $(TARGET_OUT)
  248.     $(vecho) "FW $@"
  249.     $(Q) $(ESPTOOL) -eo $(TARGET_OUT) $(FW_FILE_2_ARGS)
  250.    
  251. $(OTA_FW_FILE_1):
  252.     $(vecho) "FW $@"
  253.     @mv eagle.app.flash.bin $@
  254.  
  255. $(OTA_FW_FILE_2):
  256.     $(vecho) "FW $@"
  257.     @mv eagle.app.flash.bin $@
  258.  
  259. $(TARGET_OUT): $(APP_AR)
  260.     $(vecho) "LD $@"
  261.     $(Q) $(LD) -L$(SDK_LIBDIR) $(LD_SCRIPT) $(LDFLAGS) -Wl,--start-group $(LIBS) $(APP_AR) -Wl,--end-group -o $@
  262.     $(Q) $(LD) -L$(SDK_LIBDIR) $(LD_SCRIPT1) $(LDFLAGS) -Wl,--start-group $(LIBS) $(APP_AR) -Wl,--end-group -o $@1
  263.     $(Q) $(LD) -L$(SDK_LIBDIR) $(LD_SCRIPT2) $(LDFLAGS) -Wl,--start-group $(LIBS) $(APP_AR) -Wl,--end-group -o $@2
  264.  
  265.  
  266. $(APP_AR): $(OBJ)
  267.     $(vecho) "AR $@"
  268.     $(Q) $(AR) cru $@ $^
  269.  
  270. checkdirs: $(BUILD_DIR) $(FW_BASE)
  271.  
  272. $(BUILD_DIR):
  273.     $(Q) mkdir -p $@
  274.  
  275. firmware:
  276.     $(Q) mkdir -p $@
  277.  
  278. flash: $(FW_FILE_1) $(FW_FILE_2) website
  279.     echo "Running..."
  280.     $(ESPTOOLPY) --port $(ESPPORT) write_flash 0x00000 firmware/0x00000.bin 0x12000 $(WEB_FW_FILE) 0x40000 firmware/0x40000.bin
  281.  
  282. cloud: $(OTA_FW_FILE_1) $(OTA_FW_FILE_2) website
  283.  
  284. flashcloud: cloud
  285.     $(ESPTOOLPY) --port $(ESPPORT) write_flash 0x00000 $(BOOTLOADER) 0x01000 $(OTA_FW_FILE_1) 0x41000 $(WEB_FW_FILE)
  286.    
  287. website: html/ html/wifi/ mkespfsimage/mkespfsimage
  288.     $(vecho) "Building website..."
  289.     $(Q) cd html; find | ../mkespfsimage/mkespfsimage > ../webpages.espfs; cd ..
  290.     @if [ $$(stat -c '%s' webpages.espfs) -gt $$(( 0x2E000 )) ]; then echo "webpages.espfs too big!"; false; fi
  291.     @mv webpages.espfs $(WEB_FW_FILE)
  292.  
  293. mkespfsimage/mkespfsimage: mkespfsimage/
  294.     make -C mkespfsimage
  295.  
  296. clean:
  297.     $(Q) rm -f $(APP_AR)
  298.     $(Q) rm -f $(TARGET_OUT)
  299.     $(Q) find $(BUILD_BASE) -type f | xargs rm -f
  300.  
  301.  
  302.     $(Q) rm -f $(FW_FILE_1)
  303.     $(Q) rm -f $(FW_FILE_2)
  304.     $(Q) rm -rf $(FW_BASE)
  305.  
  306. $(foreach bdir,$(BUILD_DIR),$(eval $(call compile-objects,$(bdir))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement