2016-11-03 18:50:59 -04:00
# Select the board to build for: if not given on the command line,
# then default to PYBV10.
BOARD ?= feather_huzzah
i f e q ( $( wildcard boards /$ ( BOARD ) /.) , )
$( error Invalid BOARD specified )
e n d i f
# If the build directory is not given, make it reflect the board name.
2016-11-30 18:08:34 -05:00
BUILD ?= build
i n c l u d e . . / p y / m k e n v . m k
2016-11-03 18:50:59 -04:00
2014-11-27 15:30:33 -05:00
# qstr definitions (must come before including py.mk)
QSTR_DEFS = qstrdefsport.h #$(BUILD)/pins_qstr.h
2016-04-27 17:46:51 -04:00
MICROPY_PY_USSL = 1
2016-07-12 18:59:41 -04:00
MICROPY_SSL_AXTLS = 1
2016-10-24 17:37:33 -04:00
MICROPY_FATFS = 1
2016-07-30 19:39:59 -04:00
MICROPY_PY_BTREE = 1
2016-04-27 17:46:51 -04:00
2016-10-20 18:08:43 -04:00
FROZEN_DIR = scripts
FROZEN_MPY_DIR = modules
2014-11-27 15:30:33 -05:00
# include py core make definitions
i n c l u d e . . / p y / p y . m k
2017-01-02 11:29:41 -05:00
FWBIN = $( BUILD) /firmware-combined.bin
2015-12-22 05:44:08 -05:00
PORT ?= /dev/ttyACM0
2015-12-30 13:37:58 -05:00
BAUD ?= 115200
2016-09-26 16:22:39 -04:00
FLASH_MODE ?= qio
2016-10-17 17:06:59 -04:00
FLASH_SIZE ?= detect
2014-11-27 15:30:33 -05:00
CROSS_COMPILE = xtensa-lx106-elf-
2014-11-28 13:05:25 -05:00
ESP_SDK = $( shell $( CC) -print-sysroot) /usr
2014-11-27 15:30:33 -05:00
2015-10-19 11:22:16 -04:00
INC += -I.
2014-12-28 20:02:19 -05:00
INC += -I..
2014-11-27 15:30:33 -05:00
INC += -I../stmhal
2015-01-11 21:21:58 -05:00
INC += -I../lib/mp-readline
2015-05-02 15:24:25 -04:00
INC += -I../lib/netutils
2015-05-11 15:11:37 -04:00
INC += -I../lib/timeutils
2014-11-27 15:30:33 -05:00
INC += -I$( BUILD)
INC += -I$( ESP_SDK) /include
2016-03-29 14:10:10 -04:00
# UART for "os" messages. 0 is normal UART as used by MicroPython REPL,
2016-05-26 17:44:05 -04:00
# 1 is debug UART (tx only), -1 to disable.
2016-03-29 14:10:10 -04:00
UART_OS = 0
2015-05-13 09:39:25 -04:00
2014-11-27 15:30:33 -05:00
CFLAGS_XTENSA = -fsingle-precision-constant -Wdouble-promotion \
-D__ets__ -DICACHE_FLASH \
-fno-inline-functions \
2016-04-26 17:35:13 -04:00
-Wl,-EL -mlongcalls -mtext-section-literals -mforce-l32 \
2016-03-07 22:29:05 -05:00
-DLWIP_OPEN_SRC
2014-11-27 15:30:33 -05:00
2015-05-13 09:39:25 -04:00
CFLAGS = $( INC) -Wall -Wpointer-arith -Werror -ansi -std= gnu99 -nostdlib -DUART_OS= $( UART_OS) \
2016-04-27 17:44:52 -04:00
$( CFLAGS_XTENSA) $( CFLAGS_MOD) $( COPT) $( CFLAGS_EXTRA)
2014-11-27 15:30:33 -05:00
2016-10-24 17:37:33 -04:00
LDSCRIPT = esp8266.ld
LDFLAGS = -nostdlib -T $( LDSCRIPT) -Map= $( @:.elf= .map) --cref
2016-04-27 17:44:52 -04:00
LIBS = -L$( ESP_SDK) /lib -lmain -ljson -llwip_open -lpp -lnet80211 -lwpa -lphy -lnet80211 $( LDFLAGS_MOD)
2014-11-27 15:30:33 -05:00
LIBGCC_FILE_NAME = $( shell $( CC) $( CFLAGS) -print-libgcc-file-name)
2014-11-28 09:58:25 -05:00
LIBS += -L$( dir $( LIBGCC_FILE_NAME) ) -lgcc
2014-11-27 15:30:33 -05:00
# Debugging/Optimization
i f e q ( $( DEBUG ) , 1 )
CFLAGS += -g
COPT = -O0
e l s e
CFLAGS += -fdata-sections -ffunction-sections
2016-04-26 17:35:13 -04:00
COPT += -Os -DNDEBUG
2014-11-27 15:30:33 -05:00
LDFLAGS += --gc-sections
e n d i f
SRC_C = \
2014-11-28 09:58:25 -05:00
strtoll.c \
2014-11-27 15:30:33 -05:00
main.c \
2016-04-28 17:17:11 -04:00
help.c \
2014-11-27 15:30:33 -05:00
esp_mphal.c \
2016-10-18 08:18:07 -04:00
esp_init_data.c \
2014-11-27 15:30:33 -05:00
gccollect.c \
2016-03-17 11:06:47 -04:00
lexerstr32.c \
2014-11-27 15:30:33 -05:00
uart.c \
2016-03-02 08:37:27 -05:00
esppwm.c \
2016-04-14 07:33:54 -04:00
esponewire.c \
2016-02-11 08:19:11 -05:00
espneopixel.c \
2016-03-27 19:58:14 -04:00
espapa102.c \
2016-04-14 06:15:43 -04:00
intr.c \
2014-11-27 15:30:33 -05:00
modpyb.c \
2016-11-05 18:30:19 -04:00
modmachine.c \
machine_pin.c \
machine_pwm.c \
machine_rtc.c \
machine_adc.c \
machine_uart.c \
machine_wdt.c \
machine_hspi.c \
2015-01-22 17:34:16 -05:00
modesp.c \
2015-06-12 10:16:52 -04:00
modnetwork.c \
2015-05-11 15:11:37 -04:00
modutime.c \
2015-05-18 12:35:25 -04:00
moduos.c \
2015-12-28 19:20:34 -05:00
modonewire.c \
2016-03-10 21:43:39 -05:00
ets_alt_task.c \
2016-04-16 07:47:17 -04:00
fatfs_port.c \
2016-04-27 06:45:44 -04:00
axtls_helpers.c \
2016-06-07 15:40:56 -04:00
hspi.c \
2016-11-03 18:50:59 -04:00
boards/$( BOARD) /pins.c \
2016-07-30 19:39:59 -04:00
$( SRC_MOD)
2014-11-27 15:30:33 -05:00
2016-11-03 18:50:59 -04:00
SRC_COMMON_HAL = \
microcontroller/__init__.c \
microcontroller/Pin.c \
nativeio/__init__.c \
nativeio/AnalogIn.c \
nativeio/AnalogOut.c \
nativeio/DigitalInOut.c \
nativeio/I2C.c \
2017-03-10 13:17:54 -05:00
nativeio/PulseOut.c \
2016-11-03 18:50:59 -04:00
nativeio/PWMOut.c \
nativeio/SPI.c \
2016-12-06 21:39:18 -05:00
nativeio/TouchIn.c \
2016-12-19 20:32:40 -05:00
nativeio/UART.c \
2016-11-03 18:50:59 -04:00
neopixel_write/__init__.c \
time/__init__.c \
board/__init__.c
SRC_COMMON_HAL_EXPANDED = $( addprefix shared-bindings/, $( SRC_COMMON_HAL) ) \
$( addprefix common-hal/, $( SRC_COMMON_HAL) )
SRC_SHARED_MODULE = \
bitbangio/__init__.c \
bitbangio/I2C.c \
bitbangio/SPI.c \
SRC_SHARED_MODULE_EXPANDED = $( addprefix shared-bindings/, $( SRC_SHARED_MODULE) ) \
$( addprefix shared-module/, $( SRC_SHARED_MODULE) )
2014-11-27 15:30:33 -05:00
STM_SRC_C = $( addprefix stmhal/,\
2015-02-13 10:04:53 -05:00
pybstdio.c \
2016-04-14 17:08:39 -04:00
input.c \
2015-01-11 21:21:58 -05:00
)
2016-01-01 11:12:39 -05:00
EXTMOD_SRC_C = $( addprefix extmod/,\
2016-04-16 07:47:17 -04:00
modlwip.c \
2016-01-01 11:12:39 -05:00
)
2015-01-11 21:21:58 -05:00
LIB_SRC_C = $( addprefix lib/,\
2015-04-05 14:44:20 -04:00
libc/string0.c \
2015-12-18 16:07:58 -05:00
libm/math.c \
libm/fmodf.c \
libm/roundf.c \
libm/ef_sqrt.c \
2015-12-18 16:43:01 -05:00
libm/kf_rem_pio2.c \
libm/kf_sin.c \
libm/kf_cos.c \
libm/kf_tan.c \
libm/ef_rem_pio2.c \
libm/sf_sin.c \
libm/sf_cos.c \
libm/sf_tan.c \
libm/sf_frexp.c \
libm/sf_modf.c \
libm/sf_ldexp.c \
libm/asinfacosf.c \
libm/atanf.c \
libm/atan2f.c \
2015-01-11 21:21:58 -05:00
mp-readline/readline.c \
2015-05-02 15:24:25 -04:00
netutils/netutils.c \
2015-05-11 15:11:37 -04:00
timeutils/timeutils.c \
2017-02-19 10:11:33 -05:00
utils/context_manager_helpers.c \
2015-10-31 12:35:10 -04:00
utils/pyexec.c \
2016-04-28 17:17:11 -04:00
utils/pyhelp.c \
2016-09-29 13:13:17 -04:00
utils/interrupt_char.c \
2014-11-27 15:30:33 -05:00
)
2016-10-24 17:37:33 -04:00
i f e q ( $( MICROPY_FATFS ) , 1 )
LIB_SRC_C += \
lib/fatfs/ff.c \
lib/fatfs/option/ccsbcs.c
e n d i f
2016-05-26 12:11:43 -04:00
DRIVERS_SRC_C = $( addprefix drivers/,\
dht/dht.c \
)
2014-11-27 15:30:33 -05:00
SRC_S = \
gchelper.s \
OBJ =
OBJ += $( PY_O)
OBJ += $( addprefix $( BUILD) /, $( SRC_C:.c= .o) )
OBJ += $( addprefix $( BUILD) /, $( SRC_S:.s= .o) )
2016-11-03 18:50:59 -04:00
OBJ += $( addprefix $( BUILD) /, $( SRC_COMMON_HAL_EXPANDED:.c= .o) )
OBJ += $( addprefix $( BUILD) /, $( SRC_SHARED_MODULE_EXPANDED:.c= .o) )
2014-11-27 15:30:33 -05:00
OBJ += $( addprefix $( BUILD) /, $( STM_SRC_C:.c= .o) )
2016-01-01 11:12:39 -05:00
OBJ += $( addprefix $( BUILD) /, $( EXTMOD_SRC_C:.c= .o) )
2015-01-11 21:21:58 -05:00
OBJ += $( addprefix $( BUILD) /, $( LIB_SRC_C:.c= .o) )
2016-05-26 12:11:43 -04:00
OBJ += $( addprefix $( BUILD) /, $( DRIVERS_SRC_C:.c= .o) )
2014-11-27 15:30:33 -05:00
#OBJ += $(BUILD)/pins_$(BOARD).o
2016-04-16 07:47:17 -04:00
# List of sources for qstr extraction
2016-11-03 18:50:59 -04:00
SRC_QSTR += $( SRC_C) $( SRC_COMMON_HAL_EXPANDED) $( SRC_SHARED_MODULE_EXPANDED) $( STM_SRC_C) $( EXTMOD_SRC_C) $( DRIVERS_SRC_C)
2016-04-16 07:47:17 -04:00
# Append any auto-generated sources that are needed by sources listed in SRC_QSTR
SRC_QSTR_AUTO_DEPS +=
2017-01-02 11:29:41 -05:00
all : $( BUILD ) /libaxtls .a $( FWBIN )
2014-11-27 15:30:33 -05:00
2015-05-13 09:39:25 -04:00
CONFVARS_FILE = $( BUILD) /confvars
2015-05-05 18:19:26 -04:00
2015-05-13 09:39:25 -04:00
i f e q ( $( wildcard $ ( CONFVARS_FILE ) ) , )
2015-05-05 18:19:26 -04:00
$( shell $ ( MKDIR ) -p $ ( BUILD ) )
2016-09-17 13:24:28 -04:00
$( shell echo $ ( FROZEN_DIR ) $ ( UART_OS ) > $ ( CONFVARS_FILE ) )
e l s e i f n e q ( $( shell cat $ ( CONFVARS_FILE ) ) , $( FROZEN_DIR ) $( UART_OS ) )
$( shell echo $ ( FROZEN_DIR ) $ ( UART_OS ) > $ ( CONFVARS_FILE ) )
2015-05-05 18:19:26 -04:00
e n d i f
2015-05-13 09:39:25 -04:00
$(BUILD)/uart.o : $( CONFVARS_FILE )
2016-09-17 13:57:43 -04:00
FROZEN_EXTRA_DEPS = $( CONFVARS_FILE)
2015-05-05 18:19:26 -04:00
2014-11-27 15:30:33 -05:00
.PHONY : deploy
deploy : $( BUILD ) /firmware -combined .bin
$( ECHO) " Writing $< to the board "
2016-09-26 16:22:39 -04:00
$( Q) esptool.py --port $( PORT) --baud $( BAUD) write_flash --verify --flash_size= $( FLASH_SIZE) --flash_mode= $( FLASH_MODE) 0 $<
2014-11-27 15:30:33 -05:00
2016-12-14 08:34:40 -05:00
erase :
$( ECHO) "Erase flash"
$( Q) esptool.py --port $( PORT) --baud $( BAUD) erase_flash
2015-01-30 17:51:12 -05:00
reset :
2016-04-28 07:23:55 -04:00
echo -e "\r\nimport machine; machine.reset()\r\n" >$( PORT)
2015-01-30 17:51:12 -05:00
2017-01-02 11:29:41 -05:00
$(FWBIN) : $( BUILD ) /firmware .elf
2014-11-27 15:30:33 -05:00
$( ECHO) " Create $@ "
2016-11-28 22:47:59 -05:00
$( Q) python2 $( shell which esptool.py) elf2image $^
2016-12-14 09:44:05 -05:00
$( Q) $( PYTHON) makeimg.py $( BUILD) /firmware.elf-0x00000.bin $( BUILD) /firmware.elf-0x[ 0-5] [ 1-f] 000.bin $@
2014-11-27 15:30:33 -05:00
$(BUILD)/firmware.elf : $( OBJ )
2017-02-24 09:59:59 -05:00
$( STEPECHO) " LINK $@ "
2015-10-23 19:26:10 -04:00
$( Q) $( LD) $( LDFLAGS) -o $@ $^ $( LIBS)
2014-11-27 15:30:33 -05:00
$( Q) $( SIZE) $@
2016-10-24 17:37:33 -04:00
512k :
$( MAKE) LDSCRIPT = esp8266_512k.ld CFLAGS_EXTRA = '-DMP_CONFIGFILE="<mpconfigport_512k.h>"' MICROPY_FATFS = 0 MICROPY_PY_BTREE = 0
2016-12-14 09:44:05 -05:00
ota :
2016-12-20 15:23:45 -05:00
rm -f $( BUILD) /firmware.elf $( BUILD) /firmware.elf*.bin
2017-01-04 02:36:28 -05:00
$( MAKE) LDSCRIPT = esp8266_ota.ld FWBIN = $( BUILD) /firmware-ota.bin
2016-12-14 09:44:05 -05:00
2014-11-27 15:30:33 -05:00
#MAKE_PINS = boards/make-pins.py
#BOARD_PINS = boards/$(BOARD)/pins.csv
#AF_FILE = boards/stm32f4xx_af.csv
#PREFIX_FILE = boards/stm32f4xx_prefix.c
#GEN_PINS_SRC = $(BUILD)/pins_$(BOARD).c
#GEN_PINS_HDR = $(HEADER_BUILD)/pins.h
#GEN_PINS_QSTR = $(BUILD)/pins_qstr.h
#GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h
#GEN_PINS_AF_PY = $(BUILD)/pins_af.py
# Making OBJ use an order-only depenedency on the generated pins.h file
# has the side effect of making the pins.h file before we actually compile
# any of the objects. The normal dependency generation will deal with the
# case when pins.h is modified. But when it doesn't exist, we don't know
# which source files might need it.
#$(OBJ): | $(HEADER_BUILD)/pins.h
# Use a pattern rule here so that make will only call make-pins.py once to make
# both pins_$(BOARD).c and pins.h
#$(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h $(BUILD)/%_qstr.h: boards/$(BOARD)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD)
# $(ECHO) "Create $@"
# $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --qstr $(GEN_PINS_QSTR) --af-const $(GEN_PINS_AF_CONST) --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC)
#
#$(BUILD)/pins_$(BOARD).o: $(BUILD)/pins_$(BOARD).c
# $(call compile_c)
i n c l u d e . . / p y / m k r u l e s . m k
2016-04-26 17:35:13 -04:00
2016-07-15 21:53:33 -04:00
axtls : $( BUILD ) /libaxtls .a
$(BUILD)/libaxtls.a :
2016-04-26 17:35:13 -04:00
cd ../lib/axtls; cp config/upyconfig config/.config
cd ../lib/axtls; make oldconfig -B
cd ../lib/axtls; make clean
2017-02-24 09:59:59 -05:00
cd ../lib/axtls; make all CC = " $( Q) $( CC) " LD = " $( Q) $( LD) " AR = " $( Q) $( AR) " CFLAGS_EXTRA = " $( CFLAGS_XTENSA) -Dabort=abort_ -DRT_MAX_PLAIN_LENGTH=1024 -DRT_EXTRA=3072 "
2016-07-15 21:53:33 -04:00
cp ../lib/axtls/_stage/libaxtls.a $@