Skip to content
Snippets Groups Projects
Select Git revision
  • fbea8100432abbdfde3d866d5bea1d8b4f87d217
  • wip-bootstrap default
  • dualcore
  • ch3/leds
  • ch3/time
  • master
6 results

Makefile

Blame
  • user avatar
    Damien George authored
    Some rodata items can go in iram/irom segment, but not others.  With
    this patch ESP now has 24256 bytes of heap ram.  It passes 228 out of
    248 tests from tests/basics directory.
    fbea8100
    History
    Makefile 3.35 KiB
    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
    
    PORT = /dev/ttyACM0
    CROSS_COMPILE = xtensa-lx106-elf-
    ESP_SDK = $(shell $(CC) -print-sysroot)/..
    
    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 = \
    	strtoll.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 $(PORT) write_flash 0 $<
    	$(Q)esptool.py --port $(PORT) write_flash 0 $(BUILD)/firmware.elf-0x00000.bin 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