Advertisement
Guest User

Untitled

a guest
Oct 28th, 2016
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Make 3.55 KB | None | 0 0
  1. # Makefile based on https://github.com/esp8266/source-code-examples/blob/master/example.Makefile
  2.  
  3. BUILD_BASE  = build
  4. FW_BASE     = firmware
  5.  
  6. # base directory for the compiler
  7. XTENSA_TOOLS_ROOT ?= /home/ed/esp-open-sdk/xtensa-lx106-elf/bin
  8.  
  9. # base directory of the ESP8266 SDK package, absolute
  10. SDK_BASE    ?= /home/ed/esp-open-sdk/sdk
  11.  
  12. # esptool.py path and port
  13. ESPTOOL     ?= esptool.py
  14. ESPPORT     ?= /dev/ttyUSB0
  15.  
  16. # name for the target project
  17. TARGET      = app
  18.  
  19. # which modules (subdirectories) of the project to include in compiling
  20. MODULES     = driver user
  21. EXTRA_INCDIR    = include
  22.  
  23. # libraries used in this project, mainly provided by the SDK
  24. LIBS        = c gcc hal pp phy net80211 lwip wpa wpa2 crypto main
  25.  
  26. # compiler flags using during compilation of source files
  27. CFLAGS      = -Os -g -O2 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals  -D__ets__ -DICACHE_FLASH
  28.  
  29. # linker flags used to generate the main object file
  30. LDFLAGS     = -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static
  31.  
  32. # linker script used for the above linkier step
  33. LD_SCRIPT   = eagle.app.v6.ld
  34.  
  35. # various paths from the SDK used in this project
  36. SDK_LIBDIR  = lib
  37. SDK_LDDIR   = ld
  38. SDK_INCDIR  = include include/json examples/driver_lib/include/driver
  39.  
  40. # we create two different files for uploading into the flash
  41. # these are the names and options to generate them
  42. FW_FILE_1_ADDR  := 0x00000
  43. FW_FILE_2_ADDR  := 0x10000
  44.  
  45. # select which tools to use as compiler, librarian and linker
  46. CC      := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-gcc
  47. AR      := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-ar
  48. LD      := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-gcc
  49.  
  50. ####
  51. #### no user configurable options below here
  52. ####
  53. SRC_DIR     := $(MODULES)
  54. BUILD_DIR   := $(addprefix $(BUILD_BASE)/,$(MODULES))
  55.  
  56. SDK_LIBDIR  := $(addprefix $(SDK_BASE)/,$(SDK_LIBDIR))
  57. SDK_INCDIR  := $(addprefix -I$(SDK_BASE)/,$(SDK_INCDIR))
  58.  
  59. SRC     := $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.c))
  60. OBJ     := $(patsubst %.c,$(BUILD_BASE)/%.o,$(SRC))
  61. LIBS        := $(addprefix -l,$(LIBS))
  62. APP_AR      := $(addprefix $(BUILD_BASE)/,$(TARGET)_app.a)
  63. TARGET_OUT  := $(addprefix $(BUILD_BASE)/,$(TARGET).out)
  64.  
  65. LD_SCRIPT   := $(addprefix -T$(SDK_BASE)/$(SDK_LDDIR)/,$(LD_SCRIPT))
  66.  
  67. INCDIR  := $(addprefix -I,$(SRC_DIR))
  68. EXTRA_INCDIR    := $(addprefix -I,$(EXTRA_INCDIR))
  69. MODULE_INCDIR   := $(addsuffix /include,$(INCDIR))
  70.  
  71. FW_FILE_1   := $(addprefix $(FW_BASE)/,$(FW_FILE_1_ADDR).bin)
  72. FW_FILE_2   := $(addprefix $(FW_BASE)/,$(FW_FILE_2_ADDR).bin)
  73.  
  74. V ?= $(VERBOSE)
  75. ifeq ("$(V)","1")
  76. Q :=
  77. vecho := @true
  78. else
  79. Q := @
  80. vecho := @echo
  81. endif
  82.  
  83. vpath %.c $(SRC_DIR)
  84.  
  85. define compile-objects
  86. $1/%.o: %.c
  87.     $(vecho) "CC $$<"
  88.     $(Q) $(CC) $(INCDIR) $(MODULE_INCDIR) $(EXTRA_INCDIR) $(SDK_INCDIR) $(CFLAGS) -c $$< -o $$@
  89. endef
  90.  
  91. .PHONY: all checkdirs flash clean
  92.  
  93. all: checkdirs $(TARGET_OUT) $(FW_FILE_1) $(FW_FILE_2)
  94.  
  95. $(FW_BASE)/%.bin: $(TARGET_OUT) | $(FW_BASE)
  96.     $(vecho) "FW $(FW_BASE)/"
  97.     $(Q) $(ESPTOOL) elf2image -o $(FW_BASE)/ $(TARGET_OUT)
  98.  
  99. $(TARGET_OUT): $(APP_AR)
  100.     $(vecho) "LD $@"
  101.     $(Q) $(LD) -L$(SDK_LIBDIR) $(LD_SCRIPT) $(LDFLAGS) -Wl,--start-group $(LIBS) $(APP_AR) -Wl,--end-group -o $@
  102.  
  103. $(APP_AR): $(OBJ)
  104.     $(vecho) "AR $@"
  105.     $(Q) $(AR) cru $@ $^
  106.  
  107. checkdirs: $(BUILD_DIR) $(FW_BASE)
  108.  
  109. $(BUILD_DIR):
  110.     $(Q) mkdir -p $@
  111.  
  112. $(FW_BASE):
  113.     $(Q) mkdir -p $@
  114.  
  115. flash: $(FW_FILE_1) $(FW_FILE_2)
  116.     $(ESPTOOL) --port $(ESPPORT) write_flash $(FW_FILE_1_ADDR) $(FW_FILE_1) $(FW_FILE_2_ADDR) $(FW_FILE_2)
  117.  
  118. clean:
  119.     $(Q) rm -rf $(FW_BASE) $(BUILD_BASE)
  120.  
  121. $(foreach bdir,$(BUILD_DIR),$(eval $(call compile-objects,$(bdir))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement