# tnx to mamalala
# Changelog
# Changed the variables to include the header file directory
# Added global var for the XTENSA tool root
#
# This make file still needs some work.
#
#
# Output directors to store intermediate compiled files
# relative to the project directory
BUILD_BASE = build
FW_BASE = firmware
# Base directory for the compiler
XTENSA_TOOLS_ROOT ?= /opt/Espressif/crosstool-NG/builds/xtensa-lx106-elf/bin
# base directory of the ESP8266 SDK package, absolute
SDK_BASE ?= /opt/Espressif/ESP8266_SDK
#Esptool.py path and port
ESPTOOL ?= esptool.py
ESPPORT ?= /dev/ttyUSB0
# name for the target project
TARGET = httpd
# which modules (subdirectories) of the project to include in compiling
MODULES = driver user
EXTRA_INCDIR = include ../../esp_iot_sdk_novm_unpacked/usr/xtensa/XtDevTools/install/builds/RC-2010.1-win32/lx106/xtensa-elf/include/
# 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 -Wpointer-arith -Wundef -Werror -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
LD_SCRIPT = eagle.app.v6.ld
# 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
####
FW_TOOL ?= /usr/bin/esptool
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)
V ?= $( VERBOSE)
i f e q ( "$(V)" , "1" )
Q :=
vecho := @true
e l s e
Q := @
vecho := @echo
e n d i f
v p a t h % . c $( SRC_DIR )
d e f i n e c o m p i l e - o b j e c t s
$1/%.o : %.c
$( vecho) " CC $$ < "
$( Q) $( CC) $( INCDIR) $( MODULE_INCDIR) $( EXTRA_INCDIR) $( SDK_INCDIR) $( CFLAGS) -c $$ < -o $$ @
e n d e f
.PHONY : all checkdirs clean
all : checkdirs $( TARGET_OUT ) $( FW_FILE_ 1) $( FW_FILE_ 2)
$(FW_FILE_1) : $( TARGET_OUT )
$( vecho) " FW $@ "
$( Q) $( FW_TOOL) -eo $( TARGET_OUT) $( FW_FILE_1_ARGS)
$(FW_FILE_2) : $( TARGET_OUT )
$( vecho) " FW $@ "
$( Q) $( FW_TOOL) -eo $( TARGET_OUT) $( FW_FILE_2_ARGS)
$(TARGET_OUT) : $( APP_AR )
$( 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 ) $( FW_BASE )
$(BUILD_DIR) :
$( Q) mkdir -p $@
firmware :
$( Q) mkdir -p $@
flash : firmware /0x 00000.bin firmware /0x 40000.bin
-$( ESPTOOL) --port $( ESPPORT) write_flash 0x00000 firmware/0x00000.bin
sleep 3
-$( ESPTOOL) --port $( ESPPORT) write_flash 0x40000 firmware/0x40000.bin
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 $$ ( ( 0x30000 ) ) ] ; then echo "webpages.espfs too big!" ; false; fi
-$( ESPTOOL) --port $( ESPPORT) write_flash 0x10000 webpages.espfs
clean :
$( Q) rm -f $( APP_AR)
$( Q) rm -f $( TARGET_OUT)
$( Q) rm -rf $( BUILD_DIR)
$( Q) rm -rf $( BUILD_BASE)
$( 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 ) ) ) )