The use of the ESP8266 in the world of IoT

User avatar
By bkrajendra
#3200 Dear friends,
I'm a webdesigner and I'm trying to put a rich HTML5 responsive GUI inside
I'm trying to use esphttpd example at
i'm getting this error:

Code: Select all
Rajendra@Rajlapy /cygdrive/d/ESP8266/Projects/esp8266/esp_iot_sdk_v0.9.2/app
$ make htmlflash
make -C mkespfsimage
make[1]: Entering directory '/cygdrive/d/ESP8266/Projects/esp8266/esp_iot_sdk_v0.9.2/app/mkespfsimage'
cc -I ../lib/heatshrink -std=gnu99 -c -o main.o main.c
make[1]: cc: Command not found
<builtin>: recipe for target 'main.o' failed
make[1]: *** [main.o] Error 127
make[1]: Leaving directory '/cygdrive/d/ESP8266/Projects/esp8266/esp_iot_sdk_v0.9.2/app/mkespfsimage'
Makefile:127: recipe for target 'mkespfsimage/mkespfsimage' failed
make: *** [mkespfsimage/mkespfsimage] Error 2

I'm stuck from last two days. :?
All other project works properly
Even I get firmware 00000.bin and 40000.bin if i run make
... but command for "make htmlflash" not working
I guess its required to flash html file into the ESP.

Please help!!!
User avatar
By bkrajendra
Squonk wrote:You need to install the toolchain and have the compiler in your path.s

But I'm already able to compile entire code and other codes properly.
even I tried compiling IoTDemo and AT code it also works fine.
I'm using cygwin on windows.

here is my make file :

Code: Select all
BUILD_BASE   = build
FW_BASE      = firmware

# Base directory for the compiler
XTENSA_TOOLS_ROOT ?= D:/ESP8266/Projects/esp8266/xtensa-lx106-elf/bin

# base directory of the ESP8266 SDK package, absolute
SDK_BASE ?= D:/ESP8266/Projects/esp8266/esp_iot_sdk_v0.9.2

#Extra Tensilica includes from the ESS VM
SDK_EXTRA_INCLUDES ?= D:/ESP8266/Projects/esp8266/xtensa-lx106-elf/include

# name for the target project
TARGET      = esphttpd

# which modules (subdirectories) of the project to include in compiling
MODULES      = driver user
EXTRA_INCDIR   = include \
      . \
      lib/heatshrink/ \

# libraries used in this project, mainly provided by the SDK
LIBS      = c gcc hal phy net80211 lwip wpa main

# compiler flags using during compilation of source files
CFLAGS      = -Os -ggdb -std=c99 -Werror -Wpointer-arith -Wundef -Wall -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals  -D__ets__ -DICACHE_FLASH

# 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

# various paths from the SDK used in this project
SDK_LIBDIR   = lib
SDK_LDDIR   = ld
SDK_INCDIR   = include include/json

# we create two different files for uploading into the flash
# these are the names and options to generate them
FW_FILE_1   = 0x00000
FW_FILE_1_ARGS   = -bo $@ -bs .text -bs .data -bs .rodata -bc -ec
FW_FILE_2   = 0x40000
FW_FILE_2_ARGS   = -es .irom0.text $@ -ec

# select which tools to use as compiler, librarian and linker
CC      := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-gcc
AR      := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-ar
LD      := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-gcc

#### no user configurable options below here
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))
OBJ      := $(patsubst %.c,$(BUILD_BASE)/%.o,$(SRC))
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))

FW_FILE_1   := $(addprefix $(FW_BASE)/,$(FW_FILE_1).bin)
FW_FILE_2   := $(addprefix $(FW_BASE)/,$(FW_FILE_2).bin)

ifeq ("$(V)","1")
Q :=
vecho := @true
Q := @
vecho := @echo

vpath %.c $(SRC_DIR)

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

.PHONY: all checkdirs clean

all: checkdirs $(TARGET_OUT) $(FW_FILE_1) $(FW_FILE_2)

$(FW_FILE_1): $(TARGET_OUT) firmware
   $(vecho) "FW $@"

$(FW_FILE_2): $(TARGET_OUT) firmware
   $(vecho) "FW $@"

   $(vecho) "LD $@"
   $(Q) $(LD) -L$(SDK_LIBDIR) $(LD_SCRIPT) $(LDFLAGS) -Wl,--start-group $(LIBS) $(APP_AR) -Wl,--end-group -o $@

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

checkdirs: $(BUILD_DIR)

   $(Q) mkdir -p $@

   $(Q) mkdir -p $@

webpages.espfs: html/ mkespfsimage/mkespfsimage
   cd html; find | ../mkespfsimage/mkespfsimage  > ../webpages.espfs; cd ..

mkespfsimage/mkespfsimage: mkespfsimage/
   make -C mkespfsimage

htmlflash: webpages.espfs
   if [ $$(stat -c '%s' webpages.espfs) -gt $$(( 0x2E000 )) ]; then echo "webpages.espfs too big!"; false; fi
   -$(ESPTOOL) --port $(ESPPORT) write_flash 0x12000 webpages.espfs

   $(Q) rm -f $(APP_AR)
   $(Q) rm -f $(TARGET_OUT)
   $(Q) find $(BUILD_BASE) -type f | xargs rm -f

   $(Q) rm -f $(FW_FILE_1)
   $(Q) rm -f $(FW_FILE_2)
   $(Q) rm -rf $(FW_BASE)

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

Only 'make htmlflash' does not work.
Am I wrong anywhere?

I've Windows 8.1 64 bit with cygwin in c drive. I've configured toolchain as mentioned here ... -tutorial/
User avatar
By lethe
#3218 The "htmlflash" target needs to compile a tool for your host system wich packs the html stuff. Looks like you either don't have a C compiler for your host system installed, or it's not in your PATH, so make can't find it. Try to install gcc or edit the makefile in "mkespfsimage" to point to your gcc installation.