Chat freely about anything...

User avatar
By htwtsang
#72095 Hello
I am trying to add the libesphttpd library into my FreeRTOS project but I keep getting an error. I tried using sudo to resolve this but it's gives me another error saying system cannot find the files specified, I've checked to make sure all the files are in the right place. I also tried adding VPATH to the folder but no luck. I haven't made much changes to the libesphttpd folder except for defining FREERTOS and was able to compile the nonos esphttpd demo so I assume there's something wrong with my makefile.

Any suggestions or information regarding this would be greatly appreciated.

Error message:-
Code: Select allmingw32-make all
make[1]: Entering directory `/c/Firmware/eclipse-workspace/project/libesphttpd'
AR libesphttpd.a
make[2]: Entering directory `/c/Firmware/eclipse-workspace/project/libesphttpd/espfs/mkespfsimage'
make -C mman-win32
make[3]: Entering directory `/c/Firmware/eclipse-workspace/project/libesphttpd/espfs/mkespfsimage/mman-win32'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/c/Firmware/eclipse-workspace/project/libesphttpd/espfs/mkespfsimage/mman-win32'
make[2]: Leaving directory `/c/Firmware/eclipse-workspace/project/libesphttpd/espfs/mkespfsimage'
140medley.min.js (74%, heatshrink)
DIN-Next-W01-Light.eot (100%, none)
login/login_webpage.css (54%, heatshrink)
login/login_webpage.html (53%, heatshrink)
login/login_webpage_de.html (54%, heatshrink)
logo.png (100%, none)
main/140medley.min.js (74%, heatshrink)
main/connecting.html (57%, heatshrink)
main/main_webpage.css (35%, heatshrink)
main/main_webpage.html (30%, heatshrink)
main/main_webpage.js (29%, heatshrink)
main/main_webpage_de.html (31%, heatshrink)
make[1]: Leaving directory `/c/Firmware/eclipse-workspace/project/libesphttpd'
CC driver/gpio.c
CC driver/uart.c
CC user/startup.c
CC user/user_main.c
CC user/user_cgi.c
C:/Firmware/eclipse-workspace/project/libesphttpd/
AR build/project_app.a
c:/Espressif/xtensa-lx106-elf/bin/xtensa-lx106-elf-ar: libesphttpd: Permission denied
common_rtos.mk:280: recipe for target 'build/project_app.a' failed
mingw32-make: *** [build/project_app.a] Error 1


Command where it failed (common_rtos.mk):-
Code: Select all$(APP_AR): libesphttpd $(OBJ)
   $(vecho) "AR $@"
   $(Q) $(AR) cru $@ $^


Please refer to the makefiles for more information.

Makefile:-
Code: Select all# Main settings includes
include   settings.mk

# Individual project settings (Optional)
#SDK_BASE   = c:/Espressif/ESP8266_RTOS_SDK
#BOOT      = new
#APP      = 1
#SPI_SPEED   = 40
#SPI_MODE   = QIO
#SPI_SIZE_MAP   = 2
#ESPPORT      = COM2
#ESPBAUD      = 256000
   
# Basic project settings
MODULES   = driver user libesphttpd
LIBS   = gcc hal phy pp net80211 wpa crypto main freertos lwip minic smartconfig json wps esphttpd

ifeq ("$(ESPFS_POS)","")
#No hardcoded espfs position: link it in with the binaries.
LIBS += webpages-espfs
else
#Hardcoded espfs location: Pass espfs position to rest of code
CFLAGS += -DESPFS_POS=$(ESPFS_POS) -DESPFS_SIZE=$(ESPFS_SIZE)
endif

# Root includes
include   common_rtos.mk


settings.mk:-
Code: Select all# build directory
BUILD_BASE   = build

# firmware directory
FW_BASE      = firmware

# name for the target project
TARGET      = project

# Base directory for the compiler
XTENSA_TOOLS_ROOT ?= c:/Espressif/xtensa-lx106-elf/bin/

# base directory of the ESP8266 SDK package, absolute
SDK_BASE   ?= c:/Espressif/ESP8266_RTOS_SDK
SDK_TOOLS   ?= c:/Espressif/utils/ESP8266
SDK_PATH   ?= $(SDK_BASE)

#Address uses user data address 0x0FC000 - 0x1FBFFF, has 1024kb size
ESPFS_POS  = 0x0FC000
ESPFS_SIZE = 0x0FFFFF

# Extra libs, include and ld file
EXTRA_BASE   ?= c:/Espressif/extra

# esptool path and port
ESPTOOL      ?= $(SDK_TOOLS)/esptool.exe
#ESPTOOL   ?= c:/Firmware/Wifi_Module/esptool-master/esptool.py
ESPPORT      ?= COM3

# Baud rate for programmer
ESPBAUD      ?= 230400

# BOOT = none
# BOOT = old - boot_v1.1
# BOOT = new - boot_v1.2+
BOOT ?= new
# APP = 0 - eagle.flash.bin + eagle.irom0text.bin
# APP = 1 - user1.bin
# APP = 2 - user2.bin
APP ?= 1
# SPI_SPEED = 40, 26, 20, 80
SPI_SPEED ?= 40
# SPI_MODE: QIO, QOUT, DIO, DOUT
SPI_MODE ?= QIO
# SPI_SIZE_MAP
# 0 : 512 KB (256 KB + 256 KB)
# 1 : 256 KB
# 2 : 1024 KB (512 KB + 512 KB)
# 3 : 2048 KB (512 KB + 512 KB)
# 4 : 4096 KB (512 KB + 512 KB)
# 5 : 2048 KB (1024 KB + 1024 KB)
# 6 : 4096 KB (1024 KB + 1024 KB)
SPI_SIZE_MAP ?= 3


common_rtos.mk:-
Code: Select all#############################################################
#
# Root Level Makefile
#
# Version 2.0
#
# (c) by CHERTS <sleuthhound@gmail.com>
#
#############################################################

ifeq ($(BOOT), new)
    boot = new
else
    ifeq ($(BOOT), old)
        boot = old
    else
        boot = none
    endif
endif

ifeq ($(APP), 1)
    app = 1
else
    ifeq ($(APP), 2)
        app = 2
    else
        app = 0
    endif
endif

ifeq ($(SPI_SPEED), 26.7)
    freqdiv = 1
    flashimageoptions = -ff 26m
else
    ifeq ($(SPI_SPEED), 20)
        freqdiv = 2
        flashimageoptions = -ff 20m
    else
        ifeq ($(SPI_SPEED), 80)
            freqdiv = 15
            flashimageoptions = -ff 80m
        else
            freqdiv = 0
            flashimageoptions = -ff 40m
        endif
    endif
endif

ifeq ($(SPI_MODE), QOUT)
    mode = 1
    flashimageoptions += -fm qout
else
    ifeq ($(SPI_MODE), DIO)
   mode = 2
   flashimageoptions += -fm dio
    else
        ifeq ($(SPI_MODE), DOUT)
            mode = 3
            flashimageoptions += -fm dout
        else
            mode = 0
            flashimageoptions += -fm qio
        endif
    endif
endif

addr = 0x01000

ifeq ($(SPI_SIZE_MAP), 1)
  size_map = 1
  flash = 256
  flashimageoptions += -fs 2m
else
  ifeq ($(SPI_SIZE_MAP), 2)
    size_map = 2
    flash = 1024
    flashimageoptions += -fs 8m
    ifeq ($(app), 2)
      addr = 0x81000
    endif
  else
    ifeq ($(SPI_SIZE_MAP), 3)
      size_map = 3
      flash = 2048
      flashimageoptions += -fs 16m
      ifeq ($(app), 2)
        addr = 0x81000
      endif
    else
      ifeq ($(SPI_SIZE_MAP), 4)
   size_map = 4
   flash = 4096
   flashimageoptions += -fs 32m
        ifeq ($(app), 2)
          addr = 0x81000
        endif
      else
        ifeq ($(SPI_SIZE_MAP), 5)
          size_map = 5
          flash = 2048
          flashimageoptions += -fs 16m
          ifeq ($(app), 2)
            addr = 0x101000
          endif
        else
          ifeq ($(SPI_SIZE_MAP), 6)
            size_map = 6
            flash = 4096
            flashimageoptions += -fs 32m
            ifeq ($(app), 2)
              addr = 0x101000
            endif
          else
            size_map = 0
            flash = 512
            flashimageoptions += -fs 4m
            ifeq ($(app), 2)
              addr = 0x41000
            endif
          endif
        endif
      endif
    endif
  endif
endif

EXTRA_INCDIR = include libesphttpd/include libesphttpd/espfs

# compiler flags using during compilation of source files
CFLAGS      = -Os -g -O2 -std=gnu90 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -mno-serialize-volatile -D__ets__ -DICACHE_FLASH
CXXFLAGS   = -Os -g -O2 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -mno-serialize-volatile -D__ets__ -DICACHE_FLASH -fno-rtti -fno-exceptions

# linker flags used to generate the main object file
LDFLAGS      = -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static

# linker script used for the above linkier step
LD_SCRIPT   = eagle.app.v6.ld

ifneq ($(boot), none)
ifneq ($(app),0)
    ifeq ($(size_map), 6)
      LD_SCRIPT = eagle.app.v6.$(boot).2048.ld
    else
      ifeq ($(size_map), 5)
        LD_SCRIPT = eagle.app.v6.$(boot).2048.ld
      else
        ifeq ($(size_map), 4)
          LD_SCRIPT = eagle.app.v6.$(boot).1024.app$(app).ld
        else
          ifeq ($(size_map), 3)
            LD_SCRIPT = eagle.app.v6.$(boot).1024.app$(app).ld
          else
            ifeq ($(size_map), 2)
              LD_SCRIPT = eagle.app.v6.$(boot).1024.app$(app).ld
            else
              ifeq ($(size_map), 0)
                LD_SCRIPT = eagle.app.v6.$(boot).512.app$(app).ld
              endif
            endif
         endif
       endif
     endif
   endif
   BIN_NAME = user$(app).$(flash).$(boot).$(size_map)
   CFLAGS += -DAT_UPGRADE_SUPPORT
endif
else
    app = 0
endif

EXTRA_LD_SCRIPTS = ldscript_memspecific.ld

# various paths from the SDK used in this project
SDK_LIBDIR   = lib
SDK_LDDIR   = ld
SDK_INCDIR   = extra_include include include/espressif include/json include/udhcp include/lwip include/lwip/lwip include/lwip/ipv4 include/lwip/ipv6

# select which tools to use as compiler, librarian and linker
CC      := $(XTENSA_TOOLS_ROOT)xtensa-lx106-elf-gcc
CXX      := $(XTENSA_TOOLS_ROOT)xtensa-lx106-elf-g++
AR      := $(XTENSA_TOOLS_ROOT)xtensa-lx106-elf-ar
LD      := $(XTENSA_TOOLS_ROOT)xtensa-lx106-elf-gcc
OBJCOPY      := $(XTENSA_TOOLS_ROOT)xtensa-lx106-elf-objcopy
OBJDUMP      := $(XTENSA_TOOLS_ROOT)xtensa-lx106-elf-objdump

SRC_DIR      := $(MODULES)
BUILD_DIR   := $(addprefix $(BUILD_BASE)/,$(MODULES))

SDK_LIBDIR   := $(addprefix $(SDK_BASE)/,$(SDK_LIBDIR))
SDK_INCDIR   := $(addprefix -I$(SDK_BASE)/,$(SDK_INCDIR))

SRC      := $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.c*))
C_OBJ      := $(patsubst %.c,%.o,$(SRC))
CXX_OBJ      := $(patsubst %.cpp,%.o,$(C_OBJ))
OBJ      := $(patsubst %.o,$(BUILD_BASE)/%.o,$(CXX_OBJ))
LIBS      := $(addprefix -l,$(LIBS))
APP_AR      := $(addprefix $(BUILD_BASE)/,$(TARGET)_app.a)
TARGET_OUT   := $(addprefix $(BUILD_BASE)/,$(TARGET).out)

LD_SCRIPT   := $(addprefix -T$(SDK_BASE)/$(SDK_LDDIR)/,$(LD_SCRIPT))

INCDIR      := $(addprefix -I,$(SRC_DIR))
EXTRA_INCDIR   := $(addprefix -I,$(EXTRA_INCDIR))
MODULE_INCDIR   := $(addsuffix /include,$(INCDIR))

V ?= $(VERBOSE)
ifeq ("$(V)","1")
Q :=
vecho := @true
else
Q := @
vecho := @echo
endif

vpath %.c $(SRC_DIR)
vpath %.cpp $(SRC_DIR)

define compile-objects
$1/%.o: %.c
   $(vecho) "CC $$<"
   $(Q) $(CC) $(INCDIR) $(MODULE_INCDIR) $(EXTRA_INCDIR) $(SDK_INCDIR) $(CFLAGS)  -c $$< -o $$@
$1/%.o: %.cpp
   $(vecho) "C+ $$<"
   $(Q) $(CXX) $(INCDIR) $(MODULE_INCDIR) $(EXTRA_INCDIR) $(SDK_INCDIR) $(CXXFLAGS)  -c $$< -o $$@
endef

VPATH += C:/Firmware/eclipse-workspace/project/libesphttpd/

.PHONY: all checkdirs clean flash flashboot flashbootnew flashinit rebuild eraseflash flashall htmlflash libesphttpd
   
libesphttpd: libesphttpd/Makefile
   $(Q) make -C libesphttpd

all: checkdirs $(TARGET_OUT)

$(TARGET_OUT): $(APP_AR)
   $(vecho) "LD $@"
   $(Q) $(LD) -Llibesphttpd -L$(SDK_LIBDIR) $(LD_SCRIPT) $(LDFLAGS) -Wl,--start-group $(LIBS) $(APP_AR) -Wl,--end-group -o $@
   $(vecho) "Run objcopy, please wait..."
   $(Q) $(OBJCOPY) --only-section .text -O binary $@ eagle.app.v6.text.bin
   $(Q) $(OBJCOPY) --only-section .data -O binary $@ eagle.app.v6.data.bin
   $(Q) $(OBJCOPY) --only-section .rodata -O binary $@ eagle.app.v6.rodata.bin
   $(Q) $(OBJCOPY) --only-section .irom0.text -O binary $@ eagle.app.v6.irom0text.bin
   $(vecho) "objcopy done"
   $(vecho) "Run gen_appbin.exe"
ifeq ($(app), 0)
   $(Q) $(SDK_TOOLS)/gen_appbin.exe $@ 0 $(mode) $(freqdiv) $(size_map) $(app)
   $(Q) mv eagle.app.flash.bin $(FW_BASE)/eagle.flash.bin
   $(Q) mv eagle.app.v6.irom0text.bin $(FW_BASE)/eagle.irom0text.bin
   $(Q) rm eagle.app.v6.*
   $(vecho) "No boot needed."
   $(vecho) "Generate eagle.flash.bin and eagle.irom0text.bin successully in folder $(FW_BASE)"
   $(vecho) "eagle.flash.bin-------->0x00000"
   $(vecho) "eagle.irom0text.bin---->0x10000"
else
    ifneq ($(boot), new)
   $(Q) $(SDK_TOOLS)/gen_appbin.exe $@ 1 $(mode) $(freqdiv) $(size_map) $(app)
   $(vecho) "Support boot_v1.1 and +"
    else
   $(Q) $(SDK_TOOLS)/gen_appbin.exe $@ 2 $(mode) $(freqdiv) $(size_map) $(app)
       ifeq ($(size_map), 6)
      $(vecho) "Support boot_v1.4 and +"
        else
            ifeq ($(size_map), 5)
      $(vecho) "Support boot_v1.4 and +"
            else
      $(vecho) "Support boot_v1.2 and +"
            endif
        endif
    endif
   $(Q) mv eagle.app.flash.bin $(FW_BASE)/upgrade/$(BIN_NAME).bin
   $(Q) rm eagle.app.v6.*
   $(vecho) "Generate $(BIN_NAME).bin successully in folder $(FW_BASE)/upgrade"
   $(vecho) "boot.bin------->0x00000"
   $(vecho) "$(BIN_NAME).bin--->$(addr)"
endif
   $(vecho) "Done"

$(APP_AR): libesphttpd $(OBJ)
   $(vecho) "AR $@"
   $(Q) $(AR) cru $@ $^

checkdirs: $(BUILD_DIR) $(FW_BASE)

$(BUILD_DIR):
   $(Q) mkdir -p $@

$(FW_BASE):
   $(Q) mkdir -p $@
   $(Q) mkdir -p $@/upgrade
   
eraseflash:
   $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) erase_flash
   
flashall: all
   $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) write_flash $(flashimageoptions) \
   0x00000 $(SDK_BASE)/bin/boot_v1.7.bin \
   $(addr) $(FW_BASE)/upgrade/$(BIN_NAME).bin \
   0x1fc000 $(SDK_BASE)/bin/esp_init_data_default.bin \
   0x1fe000 $(SDK_BASE)/bin/blank.bin


flashboot:
ifeq ($(app), 0)
   $(vecho) "No boot needed."
else
    ifneq ($(boot), new)
   $(vecho) "Flash boot_v1.1 and +"
   $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) write_flash $(flashimageoptions) 0x00000 $(SDK_BASE)/bin/boot_v1.1.bin
    else
       ifeq ($(size_map), 6)
      $(vecho) "Flash boot_v1.5 and +"
      $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) write_flash $(flashimageoptions) 0x00000 $(SDK_BASE)/bin/boot_v1.6.bin
        else
            ifeq ($(size_map), 5)
      $(vecho) "Flash boot_v1.5 and +"
      $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) write_flash $(flashimageoptions) 0x00000 $(SDK_BASE)/bin/boot_v1.6.bin
            else
      $(vecho) "Flash boot_v1.2 and +"
      $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) write_flash $(flashimageoptions) 0x00000 $(SDK_BASE)/bin/boot_v1.7.bin
            endif
        endif
    endif
endif

flash: all
ifeq ($(app), 0)
   $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) write_flash $(flashimageoptions) 0x00000 $(FW_BASE)/eagle.flash.bin 0x10000 $(FW_BASE)/eagle.irom0text.bin
else
ifeq ($(boot), none)
   $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) write_flash $(flashimageoptions) 0x00000 $(FW_BASE)/eagle.flash.bin 0x10000 $(FW_BASE)/eagle.irom0text.bin
else
   $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) write_flash $(flashimageoptions) $(addr) $(FW_BASE)/upgrade/$(BIN_NAME).bin
endif
endif

# ===============================================================
# From http://bbs.espressif.com/viewtopic.php?f=10&t=305
# master-device-key.bin is only need if using espressive services
# master_device_key.bin 0x3e000 is not used , write blank
# See 2A-ESP8266__IOT_SDK_User_Manual__EN_v1.1.0.pdf
# http://bbs.espressif.com/download/file.php?id=532
#
# System parameter area is the last 16KB of flash
# 512KB flash - system parameter area starts from 0x7C000
#    download blank.bin to 0x7E000 as initialization.
# 1024KB flash - system parameter area starts from 0xFC000
#    download blank.bin to 0xFE000 as initialization.
# 2048KB flash - system parameter area starts from 0x1FC000
#    download blank.bin to 0x1FE000 as initialization.
# 4096KB flash - system parameter area starts from 0x3FC000
#    download blank.bin to 0x3FE000 as initialization.
# ===============================================================

# FLASH SIZE
flashinit:
   $(vecho) "Flash init data default and blank data."
   $(ESPTOOL) -p $(ESPPORT) write_flash $(flashimageoptions) 0x1fc000 $(SDK_BASE)/bin/esp_init_data_default.bin 0x1fe000 $(SDK_BASE)/bin/blank.bin

rebuild: clean all

clean:
   $(Q) rm -f $(APP_AR)
   $(Q) rm -f $(TARGET_OUT)
   $(Q) rm -rf $(BUILD_DIR)
   $(Q) rm -rf $(BUILD_BASE)
   $(Q) rm -rf $(FW_BASE)
   $(Q) rm -f webpages.espfs libwebpages-espfs.a

htmlflash: libesphttpd/Makefile
   $(Q) make -C libesphttpd USE_OPENSDK=$(USE_OPENSDK)
   $(Q) if [ $$(stat -c '%s' libesphttpd/webpages.espfs) -gt $$(( $(ESPFS_SIZE) )) ]; then echo "webpages.espfs too big!"; false; fi
   $(Q) $(ESPTOOL) $(ESPTOOL_OPTS) write_flash  $(ESPTOOL_FLASHDEF) $(ESPFS_POS) libesphttpd/webpages.espfs

$(foreach bdir,$(BUILD_DIR),$(eval $(call compile-objects,$(bdir))))

#############################################################
# Recursion Magic - Don't touch this!!
#
# Each subtree potentially has an include directory
#   corresponding to the common APIs applicable to modules
#   rooted at that subtree. Accordingly, the INCLUDE PATH
#   of a module can only contain the include directories up
#   its parent path, and not its siblings
#
# Required for each makefile to inherit from the parent
#

INCLUDES := $(INCLUDES) -I $(PDIR)include -I $(PDIR)libesphttpd/include -I $(PDIR)libesphttpd/espfs
sinclude $(SDK_PATH)/Makefile
User avatar
By htwtsang
#72101
htwtsang wrote:Hello
I am trying to add the libesphttpd library into my FreeRTOS project but I keep getting an error. I tried using sudo to resolve this but it's gives me another error saying system cannot find the files specified, I've checked to make sure all the files are in the right place. I also tried adding VPATH to the folder but no luck. I haven't made much changes to the libesphttpd folder except for defining FREERTOS and was able to compile the nonos esphttpd demo so I assume there's something wrong with my makefile.

Any suggestions or information regarding this would be greatly appreciated.

Error message:-
Code: Select allmingw32-make all
make[1]: Entering directory `/c/Firmware/eclipse-workspace/project/libesphttpd'
AR libesphttpd.a
make[2]: Entering directory `/c/Firmware/eclipse-workspace/project/libesphttpd/espfs/mkespfsimage'
make -C mman-win32
make[3]: Entering directory `/c/Firmware/eclipse-workspace/project/libesphttpd/espfs/mkespfsimage/mman-win32'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/c/Firmware/eclipse-workspace/project/libesphttpd/espfs/mkespfsimage/mman-win32'
make[2]: Leaving directory `/c/Firmware/eclipse-workspace/project/libesphttpd/espfs/mkespfsimage'
140medley.min.js (74%, heatshrink)
DIN-Next-W01-Light.eot (100%, none)
login/login_webpage.css (54%, heatshrink)
login/login_webpage.html (53%, heatshrink)
login/login_webpage_de.html (54%, heatshrink)
logo.png (100%, none)
main/140medley.min.js (74%, heatshrink)
main/connecting.html (57%, heatshrink)
main/main_webpage.css (35%, heatshrink)
main/main_webpage.html (30%, heatshrink)
main/main_webpage.js (29%, heatshrink)
main/main_webpage_de.html (31%, heatshrink)
make[1]: Leaving directory `/c/Firmware/eclipse-workspace/project/libesphttpd'
CC driver/gpio.c
CC driver/uart.c
CC user/startup.c
CC user/user_main.c
CC user/user_cgi.c
C:/Firmware/eclipse-workspace/project/libesphttpd/
AR build/project_app.a
c:/Espressif/xtensa-lx106-elf/bin/xtensa-lx106-elf-ar: libesphttpd: Permission denied
common_rtos.mk:280: recipe for target 'build/project_app.a' failed
mingw32-make: *** [build/project_app.a] Error 1


Command where it failed (common_rtos.mk):-
Code: Select all$(APP_AR): libesphttpd $(OBJ)
   $(vecho) "AR $@"
   $(Q) $(AR) cru $@ $^


Please refer to the makefiles for more information.

Makefile:-
Code: Select all# Main settings includes
include   settings.mk

# Individual project settings (Optional)
#SDK_BASE   = c:/Espressif/ESP8266_RTOS_SDK
#BOOT      = new
#APP      = 1
#SPI_SPEED   = 40
#SPI_MODE   = QIO
#SPI_SIZE_MAP   = 2
#ESPPORT      = COM2
#ESPBAUD      = 256000
   
# Basic project settings
MODULES   = driver user libesphttpd
LIBS   = gcc hal phy pp net80211 wpa crypto main freertos lwip minic smartconfig json wps esphttpd

ifeq ("$(ESPFS_POS)","")
#No hardcoded espfs position: link it in with the binaries.
LIBS += webpages-espfs
else
#Hardcoded espfs location: Pass espfs position to rest of code
CFLAGS += -DESPFS_POS=$(ESPFS_POS) -DESPFS_SIZE=$(ESPFS_SIZE)
endif

# Root includes
include   common_rtos.mk


settings.mk:-
Code: Select all# build directory
BUILD_BASE   = build

# firmware directory
FW_BASE      = firmware

# name for the target project
TARGET      = project

# Base directory for the compiler
XTENSA_TOOLS_ROOT ?= c:/Espressif/xtensa-lx106-elf/bin/

# base directory of the ESP8266 SDK package, absolute
SDK_BASE   ?= c:/Espressif/ESP8266_RTOS_SDK
SDK_TOOLS   ?= c:/Espressif/utils/ESP8266
SDK_PATH   ?= $(SDK_BASE)

#Address uses user data address 0x0FC000 - 0x1FBFFF, has 1024kb size
ESPFS_POS  = 0x0FC000
ESPFS_SIZE = 0x0FFFFF

# Extra libs, include and ld file
EXTRA_BASE   ?= c:/Espressif/extra

# esptool path and port
ESPTOOL      ?= $(SDK_TOOLS)/esptool.exe
#ESPTOOL   ?= c:/Firmware/Wifi_Module/esptool-master/esptool.py
ESPPORT      ?= COM3

# Baud rate for programmer
ESPBAUD      ?= 230400

# BOOT = none
# BOOT = old - boot_v1.1
# BOOT = new - boot_v1.2+
BOOT ?= new
# APP = 0 - eagle.flash.bin + eagle.irom0text.bin
# APP = 1 - user1.bin
# APP = 2 - user2.bin
APP ?= 1
# SPI_SPEED = 40, 26, 20, 80
SPI_SPEED ?= 40
# SPI_MODE: QIO, QOUT, DIO, DOUT
SPI_MODE ?= QIO
# SPI_SIZE_MAP
# 0 : 512 KB (256 KB + 256 KB)
# 1 : 256 KB
# 2 : 1024 KB (512 KB + 512 KB)
# 3 : 2048 KB (512 KB + 512 KB)
# 4 : 4096 KB (512 KB + 512 KB)
# 5 : 2048 KB (1024 KB + 1024 KB)
# 6 : 4096 KB (1024 KB + 1024 KB)
SPI_SIZE_MAP ?= 3


common_rtos.mk:-
Code: Select all#############################################################
#
# Root Level Makefile
#
# Version 2.0
#
# (c) by CHERTS <sleuthhound@gmail.com>
#
#############################################################

ifeq ($(BOOT), new)
    boot = new
else
    ifeq ($(BOOT), old)
        boot = old
    else
        boot = none
    endif
endif

ifeq ($(APP), 1)
    app = 1
else
    ifeq ($(APP), 2)
        app = 2
    else
        app = 0
    endif
endif

ifeq ($(SPI_SPEED), 26.7)
    freqdiv = 1
    flashimageoptions = -ff 26m
else
    ifeq ($(SPI_SPEED), 20)
        freqdiv = 2
        flashimageoptions = -ff 20m
    else
        ifeq ($(SPI_SPEED), 80)
            freqdiv = 15
            flashimageoptions = -ff 80m
        else
            freqdiv = 0
            flashimageoptions = -ff 40m
        endif
    endif
endif

ifeq ($(SPI_MODE), QOUT)
    mode = 1
    flashimageoptions += -fm qout
else
    ifeq ($(SPI_MODE), DIO)
   mode = 2
   flashimageoptions += -fm dio
    else
        ifeq ($(SPI_MODE), DOUT)
            mode = 3
            flashimageoptions += -fm dout
        else
            mode = 0
            flashimageoptions += -fm qio
        endif
    endif
endif

addr = 0x01000

ifeq ($(SPI_SIZE_MAP), 1)
  size_map = 1
  flash = 256
  flashimageoptions += -fs 2m
else
  ifeq ($(SPI_SIZE_MAP), 2)
    size_map = 2
    flash = 1024
    flashimageoptions += -fs 8m
    ifeq ($(app), 2)
      addr = 0x81000
    endif
  else
    ifeq ($(SPI_SIZE_MAP), 3)
      size_map = 3
      flash = 2048
      flashimageoptions += -fs 16m
      ifeq ($(app), 2)
        addr = 0x81000
      endif
    else
      ifeq ($(SPI_SIZE_MAP), 4)
   size_map = 4
   flash = 4096
   flashimageoptions += -fs 32m
        ifeq ($(app), 2)
          addr = 0x81000
        endif
      else
        ifeq ($(SPI_SIZE_MAP), 5)
          size_map = 5
          flash = 2048
          flashimageoptions += -fs 16m
          ifeq ($(app), 2)
            addr = 0x101000
          endif
        else
          ifeq ($(SPI_SIZE_MAP), 6)
            size_map = 6
            flash = 4096
            flashimageoptions += -fs 32m
            ifeq ($(app), 2)
              addr = 0x101000
            endif
          else
            size_map = 0
            flash = 512
            flashimageoptions += -fs 4m
            ifeq ($(app), 2)
              addr = 0x41000
            endif
          endif
        endif
      endif
    endif
  endif
endif

EXTRA_INCDIR = include libesphttpd/include libesphttpd/espfs

# compiler flags using during compilation of source files
CFLAGS      = -Os -g -O2 -std=gnu90 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -mno-serialize-volatile -D__ets__ -DICACHE_FLASH
CXXFLAGS   = -Os -g -O2 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -mno-serialize-volatile -D__ets__ -DICACHE_FLASH -fno-rtti -fno-exceptions

# linker flags used to generate the main object file
LDFLAGS      = -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static

# linker script used for the above linkier step
LD_SCRIPT   = eagle.app.v6.ld

ifneq ($(boot), none)
ifneq ($(app),0)
    ifeq ($(size_map), 6)
      LD_SCRIPT = eagle.app.v6.$(boot).2048.ld
    else
      ifeq ($(size_map), 5)
        LD_SCRIPT = eagle.app.v6.$(boot).2048.ld
      else
        ifeq ($(size_map), 4)
          LD_SCRIPT = eagle.app.v6.$(boot).1024.app$(app).ld
        else
          ifeq ($(size_map), 3)
            LD_SCRIPT = eagle.app.v6.$(boot).1024.app$(app).ld
          else
            ifeq ($(size_map), 2)
              LD_SCRIPT = eagle.app.v6.$(boot).1024.app$(app).ld
            else
              ifeq ($(size_map), 0)
                LD_SCRIPT = eagle.app.v6.$(boot).512.app$(app).ld
              endif
            endif
         endif
       endif
     endif
   endif
   BIN_NAME = user$(app).$(flash).$(boot).$(size_map)
   CFLAGS += -DAT_UPGRADE_SUPPORT
endif
else
    app = 0
endif

EXTRA_LD_SCRIPTS = ldscript_memspecific.ld

# various paths from the SDK used in this project
SDK_LIBDIR   = lib
SDK_LDDIR   = ld
SDK_INCDIR   = extra_include include include/espressif include/json include/udhcp include/lwip include/lwip/lwip include/lwip/ipv4 include/lwip/ipv6

# select which tools to use as compiler, librarian and linker
CC      := $(XTENSA_TOOLS_ROOT)xtensa-lx106-elf-gcc
CXX      := $(XTENSA_TOOLS_ROOT)xtensa-lx106-elf-g++
AR      := $(XTENSA_TOOLS_ROOT)xtensa-lx106-elf-ar
LD      := $(XTENSA_TOOLS_ROOT)xtensa-lx106-elf-gcc
OBJCOPY      := $(XTENSA_TOOLS_ROOT)xtensa-lx106-elf-objcopy
OBJDUMP      := $(XTENSA_TOOLS_ROOT)xtensa-lx106-elf-objdump

SRC_DIR      := $(MODULES)
BUILD_DIR   := $(addprefix $(BUILD_BASE)/,$(MODULES))

SDK_LIBDIR   := $(addprefix $(SDK_BASE)/,$(SDK_LIBDIR))
SDK_INCDIR   := $(addprefix -I$(SDK_BASE)/,$(SDK_INCDIR))

SRC      := $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.c*))
C_OBJ      := $(patsubst %.c,%.o,$(SRC))
CXX_OBJ      := $(patsubst %.cpp,%.o,$(C_OBJ))
OBJ      := $(patsubst %.o,$(BUILD_BASE)/%.o,$(CXX_OBJ))
LIBS      := $(addprefix -l,$(LIBS))
APP_AR      := $(addprefix $(BUILD_BASE)/,$(TARGET)_app.a)
TARGET_OUT   := $(addprefix $(BUILD_BASE)/,$(TARGET).out)

LD_SCRIPT   := $(addprefix -T$(SDK_BASE)/$(SDK_LDDIR)/,$(LD_SCRIPT))

INCDIR      := $(addprefix -I,$(SRC_DIR))
EXTRA_INCDIR   := $(addprefix -I,$(EXTRA_INCDIR))
MODULE_INCDIR   := $(addsuffix /include,$(INCDIR))

V ?= $(VERBOSE)
ifeq ("$(V)","1")
Q :=
vecho := @true
else
Q := @
vecho := @echo
endif

vpath %.c $(SRC_DIR)
vpath %.cpp $(SRC_DIR)

define compile-objects
$1/%.o: %.c
   $(vecho) "CC $$<"
   $(Q) $(CC) $(INCDIR) $(MODULE_INCDIR) $(EXTRA_INCDIR) $(SDK_INCDIR) $(CFLAGS)  -c $$< -o $$@
$1/%.o: %.cpp
   $(vecho) "C+ $$<"
   $(Q) $(CXX) $(INCDIR) $(MODULE_INCDIR) $(EXTRA_INCDIR) $(SDK_INCDIR) $(CXXFLAGS)  -c $$< -o $$@
endef

VPATH += C:/Firmware/eclipse-workspace/project/libesphttpd/

.PHONY: all checkdirs clean flash flashboot flashbootnew flashinit rebuild eraseflash flashall htmlflash libesphttpd
   
libesphttpd: libesphttpd/Makefile
   $(Q) make -C libesphttpd

all: checkdirs $(TARGET_OUT)

$(TARGET_OUT): $(APP_AR)
   $(vecho) "LD $@"
   $(Q) $(LD) -Llibesphttpd -L$(SDK_LIBDIR) $(LD_SCRIPT) $(LDFLAGS) -Wl,--start-group $(LIBS) $(APP_AR) -Wl,--end-group -o $@
   $(vecho) "Run objcopy, please wait..."
   $(Q) $(OBJCOPY) --only-section .text -O binary $@ eagle.app.v6.text.bin
   $(Q) $(OBJCOPY) --only-section .data -O binary $@ eagle.app.v6.data.bin
   $(Q) $(OBJCOPY) --only-section .rodata -O binary $@ eagle.app.v6.rodata.bin
   $(Q) $(OBJCOPY) --only-section .irom0.text -O binary $@ eagle.app.v6.irom0text.bin
   $(vecho) "objcopy done"
   $(vecho) "Run gen_appbin.exe"
ifeq ($(app), 0)
   $(Q) $(SDK_TOOLS)/gen_appbin.exe $@ 0 $(mode) $(freqdiv) $(size_map) $(app)
   $(Q) mv eagle.app.flash.bin $(FW_BASE)/eagle.flash.bin
   $(Q) mv eagle.app.v6.irom0text.bin $(FW_BASE)/eagle.irom0text.bin
   $(Q) rm eagle.app.v6.*
   $(vecho) "No boot needed."
   $(vecho) "Generate eagle.flash.bin and eagle.irom0text.bin successully in folder $(FW_BASE)"
   $(vecho) "eagle.flash.bin-------->0x00000"
   $(vecho) "eagle.irom0text.bin---->0x10000"
else
    ifneq ($(boot), new)
   $(Q) $(SDK_TOOLS)/gen_appbin.exe $@ 1 $(mode) $(freqdiv) $(size_map) $(app)
   $(vecho) "Support boot_v1.1 and +"
    else
   $(Q) $(SDK_TOOLS)/gen_appbin.exe $@ 2 $(mode) $(freqdiv) $(size_map) $(app)
       ifeq ($(size_map), 6)
      $(vecho) "Support boot_v1.4 and +"
        else
            ifeq ($(size_map), 5)
      $(vecho) "Support boot_v1.4 and +"
            else
      $(vecho) "Support boot_v1.2 and +"
            endif
        endif
    endif
   $(Q) mv eagle.app.flash.bin $(FW_BASE)/upgrade/$(BIN_NAME).bin
   $(Q) rm eagle.app.v6.*
   $(vecho) "Generate $(BIN_NAME).bin successully in folder $(FW_BASE)/upgrade"
   $(vecho) "boot.bin------->0x00000"
   $(vecho) "$(BIN_NAME).bin--->$(addr)"
endif
   $(vecho) "Done"

$(APP_AR): libesphttpd $(OBJ)
   $(vecho) "AR $@"
   $(Q) $(AR) cru $@ $^

checkdirs: $(BUILD_DIR) $(FW_BASE)

$(BUILD_DIR):
   $(Q) mkdir -p $@

$(FW_BASE):
   $(Q) mkdir -p $@
   $(Q) mkdir -p $@/upgrade
   
eraseflash:
   $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) erase_flash
   
flashall: all
   $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) write_flash $(flashimageoptions) \
   0x00000 $(SDK_BASE)/bin/boot_v1.7.bin \
   $(addr) $(FW_BASE)/upgrade/$(BIN_NAME).bin \
   0x1fc000 $(SDK_BASE)/bin/esp_init_data_default.bin \
   0x1fe000 $(SDK_BASE)/bin/blank.bin


flashboot:
ifeq ($(app), 0)
   $(vecho) "No boot needed."
else
    ifneq ($(boot), new)
   $(vecho) "Flash boot_v1.1 and +"
   $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) write_flash $(flashimageoptions) 0x00000 $(SDK_BASE)/bin/boot_v1.1.bin
    else
       ifeq ($(size_map), 6)
      $(vecho) "Flash boot_v1.5 and +"
      $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) write_flash $(flashimageoptions) 0x00000 $(SDK_BASE)/bin/boot_v1.6.bin
        else
            ifeq ($(size_map), 5)
      $(vecho) "Flash boot_v1.5 and +"
      $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) write_flash $(flashimageoptions) 0x00000 $(SDK_BASE)/bin/boot_v1.6.bin
            else
      $(vecho) "Flash boot_v1.2 and +"
      $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) write_flash $(flashimageoptions) 0x00000 $(SDK_BASE)/bin/boot_v1.7.bin
            endif
        endif
    endif
endif

flash: all
ifeq ($(app), 0)
   $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) write_flash $(flashimageoptions) 0x00000 $(FW_BASE)/eagle.flash.bin 0x10000 $(FW_BASE)/eagle.irom0text.bin
else
ifeq ($(boot), none)
   $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) write_flash $(flashimageoptions) 0x00000 $(FW_BASE)/eagle.flash.bin 0x10000 $(FW_BASE)/eagle.irom0text.bin
else
   $(ESPTOOL) -p $(ESPPORT) -b $(ESPBAUD) write_flash $(flashimageoptions) $(addr) $(FW_BASE)/upgrade/$(BIN_NAME).bin
endif
endif

# ===============================================================
# From http://bbs.espressif.com/viewtopic.php?f=10&t=305
# master-device-key.bin is only need if using espressive services
# master_device_key.bin 0x3e000 is not used , write blank
# See 2A-ESP8266__IOT_SDK_User_Manual__EN_v1.1.0.pdf
# http://bbs.espressif.com/download/file.php?id=532
#
# System parameter area is the last 16KB of flash
# 512KB flash - system parameter area starts from 0x7C000
#    download blank.bin to 0x7E000 as initialization.
# 1024KB flash - system parameter area starts from 0xFC000
#    download blank.bin to 0xFE000 as initialization.
# 2048KB flash - system parameter area starts from 0x1FC000
#    download blank.bin to 0x1FE000 as initialization.
# 4096KB flash - system parameter area starts from 0x3FC000
#    download blank.bin to 0x3FE000 as initialization.
# ===============================================================

# FLASH SIZE
flashinit:
   $(vecho) "Flash init data default and blank data."
   $(ESPTOOL) -p $(ESPPORT) write_flash $(flashimageoptions) 0x1fc000 $(SDK_BASE)/bin/esp_init_data_default.bin 0x1fe000 $(SDK_BASE)/bin/blank.bin

rebuild: clean all

clean:
   $(Q) rm -f $(APP_AR)
   $(Q) rm -f $(TARGET_OUT)
   $(Q) rm -rf $(BUILD_DIR)
   $(Q) rm -rf $(BUILD_BASE)
   $(Q) rm -rf $(FW_BASE)
   $(Q) rm -f webpages.espfs libwebpages-espfs.a

htmlflash: libesphttpd/Makefile
   $(Q) make -C libesphttpd USE_OPENSDK=$(USE_OPENSDK)
   $(Q) if [ $$(stat -c '%s' libesphttpd/webpages.espfs) -gt $$(( $(ESPFS_SIZE) )) ]; then echo "webpages.espfs too big!"; false; fi
   $(Q) $(ESPTOOL) $(ESPTOOL_OPTS) write_flash  $(ESPTOOL_FLASHDEF) $(ESPFS_POS) libesphttpd/webpages.espfs

$(foreach bdir,$(BUILD_DIR),$(eval $(call compile-objects,$(bdir))))

#############################################################
# Recursion Magic - Don't touch this!!
#
# Each subtree potentially has an include directory
#   corresponding to the common APIs applicable to modules
#   rooted at that subtree. Accordingly, the INCLUDE PATH
#   of a module can only contain the include directories up
#   its parent path, and not its siblings
#
# Required for each makefile to inherit from the parent
#

INCLUDES := $(INCLUDES) -I $(PDIR)include -I $(PDIR)libesphttpd/include -I $(PDIR)libesphttpd/espfs
sinclude $(SDK_PATH)/Makefile


UPDATE:
It seems that if I change the command to this I get a step further but still get an error. It runs AR libesphttpd.a twice and I assume the second time is done by the main makefile so it doesnt have the right setting for the makefile to be found so it doesnt work the second time.

command:-
Code: Select all$(APP_AR): libesphttpd $(OBJ)
   $(vecho) "AR $@"
   $(Q) $(AR) cru $@ $^


Error:-
Code: Select allmingw32-make all
c:/Espressif/ESP8266_RTOS_SDK/Makefile:310: warning: overriding recipe for target 'clean'
common_rtos.mk:362: warning: ignoring old recipe for target 'clean'
make[1]: Entering directory `/c/Firmware/eclipse-workspace/project/libesphttpd'
CC espfs/espfs.c
CC espfs/heatshrink_decoder.c
CC core/auth.c
CC core/base64.c
CC core/httpd-freertos.c
CC core/httpd-nonos.c
CC core/httpd.c
CC core/httpdespfs.c
CC core/sha1.c
CC util/captdns.c
CC util/cgiflash.c
CC util/cgiwebsocket.c
CC util/cgiwifi.c
AR libesphttpd.a
make[2]: Entering directory `/c/Firmware/eclipse-workspace/project/libesphttpd/espfs/mkespfsimage'
make -C mman-win32
make[3]: Entering directory `/c/Firmware/eclipse-workspace/project/libesphttpd/espfs/mkespfsimage/mman-win32'
gcc -o mman.o -c mman.c -Wall -O3 -fomit-frame-pointer
ar cru libmman.a mman.o
ranlib libmman.a
make[3]: Leaving directory `/c/Firmware/eclipse-workspace/project/libesphttpd/espfs/mkespfsimage/mman-win32'
gcc -c -I../../lib/heatshrink -I.. -Imman-win32 -std=gnu99 -DESPFS_HEATSHRINK -o main.o main.c
gcc -c -I../../lib/heatshrink -I.. -Imman-win32 -std=gnu99 -DESPFS_HEATSHRINK -o heatshrink_encoder.o heatshrink_encoder.c
gcc -o mkespfsimage.exe main.o heatshrink_encoder.o -Lmman-win32 -lmman
make[2]: Leaving directory `/c/Firmware/eclipse-workspace/project/libesphttpd/espfs/mkespfsimage'
140medley.min.js (74%, heatshrink)
DIN-Next-W01-Light.eot (100%, none)
login/login_webpage.css (54%, heatshrink)
login/login_webpage.html (53%, heatshrink)
login/login_webpage_de.html (54%, heatshrink)
logo.png (100%, none)
main/140medley.min.js (74%, heatshrink)
main/connecting.html (57%, heatshrink)
main/main_webpage.css (35%, heatshrink)
main/main_webpage.html (30%, heatshrink)
main/main_webpage.js (29%, heatshrink)
main/main_webpage_de.html (31%, heatshrink)
make[1]: Leaving directory `/c/Firmware/eclipse-workspace/project/libesphttpd'
AR build/project_app.a
mingw32-make[1]: Entering directory 'C:/Firmware/eclipse-workspace/project/libesphttpd'
AR libesphttpd.a
mingw32-make[1]: Leaving directory 'C:/Firmware/eclipse-workspace/project/libesphttpd'
mingw32-make[1]: *** No rule to make target 'espfs/mkespfsimage/', needed by 'espfs/mkespfsimage/mkespfsimage'。 停止。
c:/Espressif/ESP8266_RTOS_SDK/Makefile:318: recipe for target '.subdirs' failed
mingw32-make: *** [.subdirs] Error 2