Code::Blocks

User forums => Embedded development => Topic started by: abuahmed on October 24, 2018, 05:10:57 pm

Title: cannot make a Configuration of Makefile for Esp8266 extensa-lx106 tools
Post by: abuahmed on October 24, 2018, 05:10:57 pm
Hello all,

I'm a user beginner for C::B Arduino IDE,  at early morning i installed C::B for Bionic Ubuntu. i have Arduino IDE v1.8.7 with xtensa-lx106 tools, i tried to make a esp8266 project wizard using this https://github.com/rlalik/codeblocks-esp8266-wizard (https://github.com/rlalik/codeblocks-esp8266-wizard), but after i try build it, i get the error see http://paste.ubuntu.com/p/vXcNKcr6nn/ (http://paste.ubuntu.com/p/vXcNKcr6nn/).

i also tried a makefile from this https://www.esp8266.com/viewtopic.php?f=9&t=9311 (https://www.esp8266.com/viewtopic.php?f=9&t=9311), but it using esp32 and xtensa-esp108-elf tools. i cannot modified it with esp8266 board with xtensa-lx106 tools like mine. to many complicated for me.

Thanks in advance, Hope anyone can helps me.
Title: Re: cannot make a Configuration of Makefile for Esp8266 extensa-lx106 tools
Post by: BlueHazzard on October 24, 2018, 10:55:18 pm
This is porbably not the rigth place to ask this question. The wizard you are using creates a makefile and uses codeblocks to run this makefile. This works all as expected. But your makefile is not complete or has bugs...
You can try to post the "Makefile" here, and we can try to help... It seems that you are missing libraries, or you are using different compilers then the libraries...
Title: Re: cannot make a Configuration of Makefile for Esp8266 extensa-lx106 tools
Post by: abuahmed on October 25, 2018, 10:57:34 am
Sorry sir @BlueHazzard i don't understand "code of conduct" this forums, this my Makefiles are using.

Code: [Select]
# Makefile for ESP8266 projects
#
# Thanks to:
# - zarya
# - Jeroen Domburg (Sprite_tm)
# - Christian Klippel (mamalala)
# - Tommie Gannert (tommie)
#
# Changelog:
# - 2014-10-06: Changed the variables to include the header file directory
# - 2014-10-06: Added global var for the Xtensa tool root
# - 2014-11-23: Updated for SDK 0.9.3
# - 2014-12-25: Replaced esptool by esptool.py

# 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 ?= /home/praz/.arduino15/packages/esp8266/hardware/esp8266/2.4.2/tools/xtensa-lx106-elf/bin

# base directory of the ESP8266 SDK package, absolute
SDK_BASE ?= /home/praz/.arduino15/packages/esp8266/hardware/esp8266/2.4.2/tools/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

# libraries used in this project, mainly provided by the SDK
LIBS =  c gcc hal main pp phy net80211 wpa wps

# 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

# 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.rom.addr.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_ADDR = 0x00000
FW_FILE_2_ADDR = 0x40000

# 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
####
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_ADDR).bin)
FW_FILE_2 := $(addprefix $(FW_BASE)/,$(FW_FILE_2_ADDR).bin)

V ?= $(VERBOSE)
ifeq ("$(V)","1")
Q :=
vecho := @true
else
Q := @
vecho := @echo
endif

vpath %.c $(SRC_DIR)

define compile-objects
$1/%.o: %.c
$(vecho) "CC $$<"
$(Q) $(CC) $(INCDIR) $(MODULE_INCDIR) $(EXTRA_INCDIR) $(SDK_INCDIR) $(CFLAGS) -c $$< -o $$@
endef

.PHONY: all checkdirs flash clean

all: checkdirs $(TARGET_OUT) $(FW_FILE_1) $(FW_FILE_2)

cleanall: clean


$(FW_BASE)/%.bin: $(TARGET_OUT) | $(FW_BASE)
$(vecho) "FW $(FW_BASE)/"
$(Q) $(ESPTOOL) elf2image -o $(FW_BASE)/ $(TARGET_OUT)

$(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 $@

$(FW_BASE):
$(Q) mkdir -p $@

flash: $(FW_FILE_1) $(FW_FILE_2)
$(ESPTOOL) --port $(ESPPORT) write_flash $(FW_FILE_1_ADDR) $(FW_FILE_1) $(FW_FILE_2_ADDR) $(FW_FILE_2)

clean:
$(Q) rm -rf $(FW_BASE) $(BUILD_BASE)

$(foreach bdir,$(BUILD_DIR),$(eval $(call compile-objects,$(bdir))))
Title: Re: cannot make a Configuration of Makefile for Esp8266 extensa-lx106 tools
Post by: BlueHazzard on October 25, 2018, 04:42:49 pm
Honestly this can get very nasty very fast. If you are not familiar with compilers and esp toolchain i would suggest you use the arduino framework, where all is set up and should work...

This forum is about
1) errors in codeblocks
2) Errors of the build system in codeblocks
3) or using the build system.

To split this up to your problem
1) Codeblocks in your problem works as expected. It does not crash or has bugs
2) The build system calls the make file as expected by your project and this part works
3) You are not using the codeblocks internal build system but a makefile

This makefile generates errors and so it is out of scope for codeblocks...

Have you tried to run
Code: [Select]
make -f Makefile allfrom the project directory? I suspect you are using the wrong compiler or you don't have set up the libraries. Googeling your problem should help:
https://github.com/pfalcon/esp-open-sdk/issues/142
https://www.google.com/search?hl=de&q=undefined%20reference%20to%20%22sys_check_timeouts%27%20esp


Title: Re: cannot make a Configuration of Makefile for Esp8266 extensa-lx106 tools
Post by: abuahmed on October 25, 2018, 05:15:36 pm
Have you tried to run
Code: [Select]
make -f Makefile all

i get http://paste.ubuntu.com/p/CtfcqYjhmZ/

I suspect you are using the wrong compiler or you don't have set up the libraries. Googeling your problem should help:
https://github.com/pfalcon/esp-open-sdk/issues/142

does it affect if I set the compiler from esp8266 compiler i have to C::B IDE with toolchain settings without using esp-open-sdk?
or can I set an internal build system with toolchain xtensa-lx106-elf tools from libraries Arduino IDE?

how do i can work around it sir?
Title: Re: cannot make a Configuration of Makefile for Esp8266 extensa-lx106 tools
Post by: BlueHazzard on October 25, 2018, 09:24:03 pm
Quote
does it affect if I set the compiler from esp8266 compiler i have to C::B IDE with toolchain settings without using esp-open-sdk?
No, all settings in codeblocks are ignored if you use external makefiles...

Quote
or can I set an internal build system with toolchain xtensa-lx106-elf tools from libraries Arduino IDE?
how do i can work around it sir?

If you want to stick with the makefile you can ignore codeblocks at the moment and try to make the commands
Quote
make -f Makefile clean
and
Quote
make -f Makefile all
running from the console. If they are running in the console without error they will also work in codeblocks. (if not this is the right place to ask for help).

Have you tried to build the examples from the esp-open-sdk?
If they are running we can try other things. But until they are not running it makes no sense to work future...


NOTE: I have now read a bit about the esp-open-sdk and as far as i can tell you do not need arduino for using it... It probably will mess things up if you mix esp-open-sdk and arduino files/toolchain.
So if you want more help please describe exactly what you want to do, what toolchains and what library you want to use....

If i find time this weekend i will try to setup a codeblocks project for esp-open-sdk without arduino...