ESP8266 Webserver Project

Moderator: Sprite_tm

User avatar
By Patriko
#15934 Is this an original makefile?

Code: Select all#  copyright (c) 2010 Espressif System
#
ifndef PDIR

endif

# Base directory for the compiler
XTENSA_TOOLS_ROOT ?= c:/Espressif/xtensa-lx106-elf/bin

#############################################################
# Select compile
#
ifeq ($(OS),Windows_NT)
# WIN32
# We are under windows.
   ifeq ($(XTENSA_CORE),lx106)
      # It is xcc
      AR = xt-ar
      CC = xt-xcc
      NM = xt-nm
      CPP = xt-cpp
      OBJCOPY = xt-objcopy
      #MAKE = xt-make
      CCFLAGS += -Os --rename-section .text=.irom0.text --rename-section .literal=.irom0.literal
   else
      # It is gcc, may be cygwin
      # Can we use -fdata-sections?
      CCFLAGS += -Os -ffunction-sections -fno-jump-tables
      AR = xtensa-lx106-elf-ar
      CC = xtensa-lx106-elf-gcc
      NM = xtensa-lx106-elf-nm
      CPP = xtensa-lx106-elf-cpp
      OBJCOPY = xtensa-lx106-elf-objcopy
   endif
   FIRMWAREDIR = ..\\bin\\
   ifndef COMPORT
      ESPPORT = com3
   else
      ESPPORT = $(COMPORT)
   endif
    ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
# ->AMD64
    endif
    ifeq ($(PROCESSOR_ARCHITECTURE),x86)
# ->IA32
    endif
else
# We are under other system, may be Linux. Assume using gcc.
   # Can we use -fdata-sections?
   ifndef COMPORT
      ESPPORT = /dev/ttyUSB0
   else
      ESPPORT = $(COMPORT)
   endif
   CCFLAGS += -Os -ffunction-sections -fno-jump-tables
   AR = xtensa-lx106-elf-ar
   CC = xtensa-lx106-elf-gcc
   NM = xtensa-lx106-elf-nm
   CPP = xtensa-lx106-elf-cpp
   OBJCOPY = xtensa-lx106-elf-objcopy
   FIRMWAREDIR = ../bin/
    UNAME_S := $(shell uname -s)
    ifeq ($(UNAME_S),Linux)
# LINUX
    endif
    ifeq ($(UNAME_S),Darwin)
# OSX
    endif
    UNAME_P := $(shell uname -p)
    ifeq ($(UNAME_P),x86_64)
# ->AMD64
    endif
    ifneq ($(filter %86,$(UNAME_P)),)
# ->IA32
    endif
    ifneq ($(filter arm%,$(UNAME_P)),)
# ->ARM
    endif
endif
#############################################################
ESPTOOL ?= ../tools/esptool.py
MKFSTOOL ?= tools/mkfs.py


CSRCS ?= $(wildcard *.c)
ASRCs ?= $(wildcard *.s)
ASRCS ?= $(wildcard *.S)
SUBDIRS ?= $(patsubst %/,%,$(dir $(wildcard */Makefile)))

ODIR := .output
OBJODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/obj

OBJS := $(CSRCS:%.c=$(OBJODIR)/%.o) \
        $(ASRCs:%.s=$(OBJODIR)/%.o) \
        $(ASRCS:%.S=$(OBJODIR)/%.o)

DEPS := $(CSRCS:%.c=$(OBJODIR)/%.d) \
        $(ASRCs:%.s=$(OBJODIR)/%.d) \
        $(ASRCS:%.S=$(OBJODIR)/%.d)

LIBODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/lib
OLIBS := $(GEN_LIBS:%=$(LIBODIR)/%)

IMAGEODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/image
OIMAGES := $(GEN_IMAGES:%=$(IMAGEODIR)/%)

BINODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/bin
OBINS := $(GEN_BINS:%=$(BINODIR)/%)

CCFLAGS +=          \
   -g         \
   -O2         \
   -Wpointer-arith      \
   -Wundef         \
   -Werror         \
   -Wl,-EL         \
   -fno-inline-functions   \
   -nostdlib       \
   -mlongcalls   \
   -mtext-section-literals
#   -Wall         

CFLAGS = $(CCFLAGS) $(DEFINES) $(EXTRA_CCFLAGS) $(INCLUDES)
DFLAGS = $(CCFLAGS) $(DDEFINES) $(EXTRA_CCFLAGS) $(INCLUDES)


#############################################################
# Functions
#

define ShortcutRule
$(1): .subdirs $(2)/$(1)
endef

define MakeLibrary
DEP_LIBS_$(1) = $$(foreach lib,$$(filter %.a,$$(COMPONENTS_$(1))),$$(dir $$(lib))$$(LIBODIR)/$$(notdir $$(lib)))
DEP_OBJS_$(1) = $$(foreach obj,$$(filter %.o,$$(COMPONENTS_$(1))),$$(dir $$(obj))$$(OBJODIR)/$$(notdir $$(obj)))
$$(LIBODIR)/$(1).a: $$(OBJS) $$(DEP_OBJS_$(1)) $$(DEP_LIBS_$(1)) $$(DEPENDS_$(1))
   @mkdir -p $$(LIBODIR)
   $$(if $$(filter %.a,$$?),mkdir -p $$(EXTRACT_DIR)_$(1))
   $$(if $$(filter %.a,$$?),cd $$(EXTRACT_DIR)_$(1); $$(foreach lib,$$(filter %.a,$$?),$$(AR) xo $$(UP_EXTRACT_DIR)/$$(lib);))
   $$(AR) ru $$@ $$(filter %.o,$$?) $$(if $$(filter %.a,$$?),$$(EXTRACT_DIR)_$(1)/*.o)
   $$(if $$(filter %.a,$$?),$$(RM) -r $$(EXTRACT_DIR)_$(1))
endef

define MakeImage
DEP_LIBS_$(1) = $$(foreach lib,$$(filter %.a,$$(COMPONENTS_$(1))),$$(dir $$(lib))$$(LIBODIR)/$$(notdir $$(lib)))
DEP_OBJS_$(1) = $$(foreach obj,$$(filter %.o,$$(COMPONENTS_$(1))),$$(dir $$(obj))$$(OBJODIR)/$$(notdir $$(obj)))
$$(IMAGEODIR)/$(1).out: $$(OBJS) $$(DEP_OBJS_$(1)) $$(DEP_LIBS_$(1)) $$(DEPENDS_$(1))
   @mkdir -p $$(IMAGEODIR)
   $$(CC) $$(LDFLAGS) $$(if $$(LINKFLAGS_$(1)),$$(LINKFLAGS_$(1)),$$(LINKFLAGS_DEFAULT) $$(OBJS) $$(DEP_OBJS_$(1)) $$(DEP_LIBS_$(1))) -o $$@
endef

$(BINODIR)/%.bin: $(IMAGEODIR)/%.out
   @mkdir -p $(BINODIR)
   $(ESPTOOL) elf2image $< -o $(FIRMWAREDIR)

#############################################################
# Rules base
# Should be done in top-level makefile only
#

all: .subdirs $(OBJS) $(OLIBS) $(OIMAGES) $(OBINS) $(SPECIAL_MKTARGETS)

clean:
   $(foreach d, $(SUBDIRS), $(MAKE) -C $(d) clean;)
   $(RM) -r $(ODIR)/$(TARGET)/$(FLAVOR)

clobber: $(SPECIAL_CLOBBER)
   $(foreach d, $(SUBDIRS), $(MAKE) -C $(d) clobber;)
   $(RM) -r $(ODIR)

flash:
ifndef PDIR
   $(MAKE) -C ./app flash
else
   $(ESPTOOL) --port $(ESPPORT) write_flash 0x00000 $(FIRMWAREDIR)0x00000.bin 0x10000 $(FIRMWAREDIR)0x10000.bin
endif

html:
   $(MKFSTOOL) -s app/http/html/ -d app/http/rofs_data.c

.subdirs:
   @set -e; $(foreach d, $(SUBDIRS), $(MAKE) -C $(d);)

#.subdirs:
#   $(foreach d, $(SUBDIRS), $(MAKE) -C $(d))

ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),clobber)
ifdef DEPS
sinclude $(DEPS)
endif
endif
endif

$(OBJODIR)/%.o: %.c
   @mkdir -p $(OBJODIR);
   $(CC) $(if $(findstring $<,$(DSRCS)),$(DFLAGS),$(CFLAGS)) $(COPTS_$(*F)) -o $@ -c $<

$(OBJODIR)/%.d: %.c
   @mkdir -p $(OBJODIR);
   @echo DEPEND: $(CC) -M $(CFLAGS) $<
   @set -e; rm -f $@; \
   $(CC) -M $(CFLAGS) $< > $@.$$$$; \
   sed 's,\($*\.o\)[ :]*,$(OBJODIR)/\1 $@ : ,g' < $@.$$$$ > $@; \
   rm -f $@.$$$$

$(OBJODIR)/%.o: %.s
   @mkdir -p $(OBJODIR);
   $(CC) $(CFLAGS) -o $@ -c $<

$(OBJODIR)/%.d: %.s
   @mkdir -p $(OBJODIR); \
   set -e; rm -f $@; \
   $(CC) -M $(CFLAGS) $< > $@.$$$$; \
   sed 's,\($*\.o\)[ :]*,$(OBJODIR)/\1 $@ : ,g' < $@.$$$$ > $@; \
   rm -f $@.$$$$

$(OBJODIR)/%.o: %.S
   @mkdir -p $(OBJODIR);
   $(CC) $(CFLAGS) -D__ASSEMBLER__ -o $@ -c $<

$(OBJODIR)/%.d: %.S
   @mkdir -p $(OBJODIR); \
   set -e; rm -f $@; \
   $(CC) -M $(CFLAGS) $< > $@.$$$$; \
   sed 's,\($*\.o\)[ :]*,$(OBJODIR)/\1 $@ : ,g' < $@.$$$$ > $@; \
   rm -f $@.$$$$

$(foreach lib,$(GEN_LIBS),$(eval $(call ShortcutRule,$(lib),$(LIBODIR))))

$(foreach image,$(GEN_IMAGES),$(eval $(call ShortcutRule,$(image),$(IMAGEODIR))))

$(foreach bin,$(GEN_BINS),$(eval $(call ShortcutRule,$(bin),$(BINODIR))))

$(foreach lib,$(GEN_LIBS),$(eval $(call MakeLibrary,$(basename $(lib)))))

$(foreach image,$(GEN_IMAGES),$(eval $(call MakeImage,$(basename $(image)))))

#############################################################
# Recursion Magic - Don't touch this!!
#
# Each subtree potentially has an include directory
#   corresponding to the common APIs applicable to modules
#   rooted at that subtree. Accordingly, the INCLUDE PATH
#   of a module can only contain the include directories up
#   its parent path, and not its siblings
#
# Required for each makefile to inherit from the parent
#

INCLUDES := $(INCLUDES) -I $(PDIR)include -I $(PDIR)include/$(TARGET)
PDIR := ../$(PDIR)
sinclude $(PDIR)Makefile

User avatar
By alonewolfx2
#15974
Patriko wrote:I'd be thankful :) I tried to use other Makefiles from DevKit examples but it deosn't work :(

i attached adapted project folder link for devkit. just put in workspace and import to the eclipse. also you can use prebuilded binaries in "bin" folder.
https://www.dropbox.com/s/75uprk1uz0uy1 ... x.zip?dl=0