include ../py/mkenv.mk # qstr definitions (must come before including py.mk) QSTR_DEFS = qstrdefsport.h #$(BUILD)/pins_qstr.h # include py core make definitions include ../py/py.mk ifeq ($(ESP_SDK),) $(error ESP_SDK must be set) endif CROSS_COMPILE = xtensa-lx106-elf- INC = -I. INC += -I$(PY_SRC) INC += -I../stmhal INC += -I$(BUILD) INC += -I$(ESP_SDK)/include CFLAGS_XTENSA = -fsingle-precision-constant -Wdouble-promotion \ -D__ets__ -DICACHE_FLASH \ -fno-inline-functions \ -Wl,-EL -mlongcalls -mtext-section-literals \ CFLAGS = $(INC) -Wall -Wpointer-arith -Werror -ansi -std=gnu99 -nostdlib $(CFLAGS_XTENSA) $(COPT) LDFLAGS = -nostdlib -T esp8266.ld -Map=$(@:.elf=.map) --cref LIBS = -L$(ESP_SDK)/lib -lmain -ljson -llwip -lpp -lnet80211 -lwpa -lphy -lnet80211 LIBGCC_FILE_NAME = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name) LIBS += -L $(dir $(LIBGCC_FILE_NAME)) -lgcc # Debugging/Optimization ifeq ($(DEBUG), 1) CFLAGS += -g COPT = -O0 else CFLAGS += -fdata-sections -ffunction-sections COPT += -Os -DNDEBUG LDFLAGS += --gc-sections endif SRC_C = \ main.c \ esp_mphal.c \ gccollect.c \ pybstdio.c \ uart.c \ modpyb.c \ STM_SRC_C = $(addprefix stmhal/,\ printf.c \ string0.c \ pyexec.c \ readline.c \ ) SRC_S = \ gchelper.s \ OBJ = OBJ += $(PY_O) OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o)) OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o)) OBJ += $(addprefix $(BUILD)/, $(STM_SRC_C:.c=.o)) #OBJ += $(BUILD)/pins_$(BOARD).o all: $(BUILD)/firmware-combined.bin .PHONY: deploy deploy: $(BUILD)/firmware-combined.bin $(ECHO) "Writing $< to the board" $(Q)esptool.py --port /dev/ttyACM0 write_flash 0 $< #$(Q)esptool.py --port /dev/ttyACM0 write_flash 0 $(BUILD)/firmware.elf-0x00000.bin #$(Q)esptool.py --port /dev/ttyACM0 write_flash 0x10000 $(BUILD)/firmware.elf-0x10000.bin $(BUILD)/firmware-combined.bin: $(BUILD)/firmware.elf $(ECHO) "Create $@" $(Q)esptool.py elf2image $^ $(Q)$(PYTHON) makeimg.py $(BUILD)/firmware.elf-0x00000.bin $(BUILD)/firmware.elf-0x10000.bin $@ $(BUILD)/firmware.elf: $(OBJ) $(ECHO) "LINK $@" $(Q)$(LD) $(LDFLAGS) -o $@ $(OBJ) $(LIBS) $(Q)$(SIZE) $@ #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) include ../py/mkrules.mk