-
-
Save jcmvbkbc/795b51494aea52bf2d1e to your computer and use it in GitHub Desktop.
| # 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. | |
| # | |
| # Updated for SDK 0.9.2 | |
| # | |
| # Output directors to store intermediate compiled files | |
| # relative to the project directory | |
| ROOT = $(HOME)/tmp/esp-shit/opt/Espressif | |
| BUILD_BASE = build | |
| FW_BASE = firmware | |
| # Base directory for the compiler | |
| XTENSA_TOOLS_ROOT ?= $(ROOT)/crosstool-NG/builds/xtensa-lx106-elf/bin | |
| # base directory of the ESP8266 SDK package, absolute | |
| SDK_BASE ?= $(ROOT)/ESP8266_SDK | |
| #Esptool.py path and port | |
| ESPTOOL ?= esptool.py | |
| ESPPORT ?= /dev/ttyUSB0 | |
| # name for the target project | |
| TARGET = app | |
| # which modules (subdirectories) of the project to include in compiling | |
| MODULES = driver user | |
| EXTRA_INCDIR = include $(ROOT)/include/ | |
| # libraries used in this project, mainly provided by the SDK | |
| LIBS = c gcc hal phy net80211 lwip wpa upgrade upgrade_ssl main pp | |
| # compiler flags using during compilation of source files | |
| CFLAGS = -Os -g -O2 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -D__ets__ -DICACHE_FLASH | |
| CXXFLAGS = $(CFLAGS) -fno-rtti -fno-exceptions | |
| # 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 | |
| CXX := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-g++ | |
| 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*)) | |
| C_OBJ := $(patsubst %.c,%.o,$(SRC)) | |
| CXX_OBJ := $(patsubst %.cpp,%.o,$(C_OBJ)) | |
| OBJ := $(patsubst %.o,$(BUILD_BASE)/%.o,$(CXX_OBJ)) | |
| 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) | |
| ifeq ("$(V)","1") | |
| Q := | |
| vecho := @true | |
| else | |
| Q := @ | |
| vecho := @echo | |
| endif | |
| vpath %.c $(SRC_DIR) | |
| vpath %.cpp $(SRC_DIR) | |
| define compile-objects | |
| $1/%.o: %.c | |
| $(vecho) "CC $$<" | |
| $(Q) $(CC) $(INCDIR) $(MODULE_INCDIR) $(EXTRA_INCDIR) $(SDK_INCDIR) $(CFLAGS) -c $$< -o $$@ | |
| $1/%.o: %.cpp | |
| $(vecho) "C+ $$<" | |
| $(Q) $(CXX) $(INCDIR) $(MODULE_INCDIR) $(EXTRA_INCDIR) $(SDK_INCDIR) $(CXXFLAGS) -c $$< -o $$@ | |
| endef | |
| .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/0x00000.bin firmware/0x40000.bin | |
| -$(ESPTOOL) --port $(ESPPORT) write_flash 0x00000 firmware/0x00000.bin | |
| sleep 3 | |
| -$(ESPTOOL) --port $(ESPPORT) write_flash 0x40000 firmware/0x40000.bin | |
| 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)))) |
I've tried compiling with this makefile and got an error saying that couldn't find -lupgrade_ssl
make
-nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static
LD build/app.out
/media/rinaldi/Excess/Dropbox/new-projects/esp-open-sdk/xtensa-lx106-elf/lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/bin/ld:
cannot find -lupgrade_ssl
collect2: error: ld returned 1 exit status
Makefile:125: recipe for target 'build/app.out' failed
make: *** [build/app.out] Error 1
after removing it from LIBS variable it throws an error in sdk/lib/limain.a
make
LD build/app.out
/media/rinaldi/Excess/Dropbox/new-projects/esp-open-sdk/sdk/lib/libmain.a(app_main.o): In function 'flash_data_check':
(.irom0.text+0x770): undefined reference to 'user_init'
/media/rinaldi/Excess/Dropbox/new-projects/esp-open-sdk/sdk/lib/libmain.a(app_main.o): In function 'flash_data_check':
(.irom0.text+0xb27): undefined reference to 'user_init'
collect2: error: ld returned 1 exit status
Makefile:125: recipe for target 'build/app.out' failed
make: *** [build/app.out] Error 1
Hi,
Do you have a example project to use this makefile? Or can I just use the standard espressif project layout and add my cpp files?