2014-12-22 12:35:05 +01:00
|
|
|
#############################################################
|
|
|
|
# Required variables for each makefile
|
|
|
|
# Discard this section from all parent makefiles
|
|
|
|
# Expected variables (with automatic defaults):
|
|
|
|
# CSRCS (all "C" files in the dir)
|
|
|
|
# SUBDIRS (all subdirs with a Makefile)
|
|
|
|
# GEN_LIBS - list of libs to be generated ()
|
|
|
|
# GEN_IMAGES - list of object file images to be generated ()
|
|
|
|
# GEN_BINS - list of binaries to be generated ()
|
|
|
|
# COMPONENTS_xxx - a list of libs/objs in the form
|
|
|
|
# subdir/lib to be extracted and rolled up into
|
|
|
|
# a generated lib/image xxx.a ()
|
|
|
|
#
|
|
|
|
TARGET = eagle
|
|
|
|
#FLAVOR = release
|
|
|
|
FLAVOR = debug
|
|
|
|
|
|
|
|
#EXTRA_CCFLAGS += -u
|
|
|
|
|
|
|
|
ifndef PDIR # {
|
|
|
|
GEN_IMAGES= eagle.app.v6.out
|
|
|
|
GEN_BINS= eagle.app.v6.bin
|
|
|
|
SPECIAL_MKTARGETS=$(APP_MKTARGETS)
|
2015-06-18 11:36:27 +02:00
|
|
|
SUBDIRS= \
|
|
|
|
user \
|
|
|
|
driver \
|
|
|
|
json \
|
|
|
|
platform \
|
|
|
|
lua \
|
|
|
|
coap \
|
|
|
|
mqtt \
|
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
|
|
|
task \
|
2015-06-18 11:36:27 +02:00
|
|
|
u8glib \
|
2015-08-05 00:47:34 +02:00
|
|
|
ucglib \
|
2015-06-18 11:36:27 +02:00
|
|
|
smart \
|
|
|
|
modules \
|
|
|
|
spiffs \
|
|
|
|
cjson \
|
|
|
|
crypto \
|
2015-08-22 14:25:47 +02:00
|
|
|
dhtlib \
|
2015-12-29 12:25:37 +01:00
|
|
|
tsl2561 \
|
2016-04-03 20:10:52 +02:00
|
|
|
net \
|
2015-12-29 12:25:37 +01:00
|
|
|
http
|
2014-12-22 12:35:05 +01:00
|
|
|
|
|
|
|
endif # } PDIR
|
|
|
|
|
|
|
|
APPDIR = .
|
|
|
|
LDDIR = ../ld
|
|
|
|
|
2015-01-24 16:36:04 +01:00
|
|
|
CCFLAGS += -Os
|
2014-12-22 12:35:05 +01:00
|
|
|
|
2015-06-18 11:36:27 +02:00
|
|
|
TARGET_LDFLAGS = \
|
2015-06-17 10:30:12 +02:00
|
|
|
-nostdlib \
|
|
|
|
-Wl,-EL \
|
2015-06-18 11:36:27 +02:00
|
|
|
--longcalls \
|
2014-12-22 12:35:05 +01:00
|
|
|
--text-section-literals
|
|
|
|
|
|
|
|
ifeq ($(FLAVOR),debug)
|
2015-05-14 17:27:43 +02:00
|
|
|
TARGET_LDFLAGS += -g -Os
|
2014-12-22 12:35:05 +01:00
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(FLAVOR),release)
|
2015-05-14 17:27:43 +02:00
|
|
|
TARGET_LDFLAGS += -Os
|
2014-12-22 12:35:05 +01:00
|
|
|
endif
|
|
|
|
|
2015-10-07 03:02:49 +02:00
|
|
|
LD_FILE = $(LDDIR)/nodemcu.ld
|
2014-12-22 12:35:05 +01:00
|
|
|
|
2015-06-18 11:36:27 +02:00
|
|
|
COMPONENTS_eagle.app.v6 = \
|
2015-06-17 10:30:12 +02:00
|
|
|
user/libuser.a \
|
|
|
|
driver/libdriver.a \
|
|
|
|
json/libjson.a \
|
2015-06-18 11:36:27 +02:00
|
|
|
platform/libplatform.a \
|
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
|
|
|
task/libtask.a \
|
2015-06-17 10:30:12 +02:00
|
|
|
lua/liblua.a \
|
|
|
|
coap/coap.a \
|
|
|
|
mqtt/mqtt.a \
|
|
|
|
u8glib/u8glib.a \
|
2015-08-05 00:47:34 +02:00
|
|
|
ucglib/ucglib.a \
|
2015-06-17 10:30:12 +02:00
|
|
|
smart/smart.a \
|
|
|
|
spiffs/spiffs.a \
|
|
|
|
cjson/libcjson.a \
|
|
|
|
crypto/libcrypto.a \
|
|
|
|
dhtlib/libdhtlib.a \
|
2015-10-08 03:07:08 +02:00
|
|
|
tsl2561/tsl2561lib.a \
|
2015-12-29 12:25:37 +01:00
|
|
|
http/libhttp.a \
|
2016-04-03 20:10:52 +02:00
|
|
|
net/libnodemcu_net.a \
|
2015-12-17 02:37:01 +01:00
|
|
|
modules/libmodules.a \
|
2014-12-22 12:35:05 +01:00
|
|
|
|
2015-12-18 03:10:48 +01:00
|
|
|
# Inspect the modules library and work out which modules need to be linked.
|
|
|
|
# For each enabled module, a symbol name of the form XYZ_module_selected is
|
|
|
|
# returned. At link time those names are declared undefined, so those (and
|
|
|
|
# only those) modules are pulled in.
|
|
|
|
SELECTED_MODULE_SYMS=$(filter %_module_selected %module_selected1,$(shell $(NM) modules/.output/$(TARGET)/$(FLAVOR)/lib/libmodules.a))
|
2015-10-08 03:07:08 +02:00
|
|
|
|
Initial pass at switching to RTOS SDK.
This compiles, links, and starts the RTOS without crashing and burning.
Lua environment does not yet start due to the different task architecture.
Known pain points:
- task implementation needs to be rewritten for RTOS (next up on my TODO)
- secure espconn does not exist, all secure espconn stuff has been #if 0'd
- lwip now built from within the RTOS SDK, but does not appear to include
MDNS support. Investigation needed.
- there is no access to FRC1 NMI, not sure if we ever actually used that
however. Also #if 0'd out for now.
- new timing constraints introduced by the RTOS, all use of ets_delay_us()
and os_delay_us() needs to be reviewed (the tsl2561 driver in particular).
- even more confusion with ets_ vs os_ vs c_ vs non-prefixed versions.
In the long run everything should be switched to non-prefixed versions.
- system_set_os_print() not available, needs to be reimplemented
- all the RTOS rodata is loaded into RAM, as it apparently uses some
constants while the flash isn't mapped, so our exception handler can't
work its magic. This should be narrowed down to the minimum possible
at some point.
- with each task having its own stack in RTOS, we probably need change
flash-page buffers from the stack to the heap in a bunch of places.
A single, shared, page buffer *might* be possible if we limit ourselves
to running NodeMCU in a single task.
- there's a ton of junk in the sdk-overrides now; over time the core code
should be updated to not need those shims
2016-05-24 07:05:01 +02:00
|
|
|
USED_SDK_LIBS= \
|
|
|
|
cirom \
|
|
|
|
crypto \
|
|
|
|
espconn \
|
|
|
|
freertos \
|
|
|
|
gcc \
|
|
|
|
json \
|
|
|
|
lwip \
|
|
|
|
main \
|
|
|
|
mirom \
|
|
|
|
net80211 \
|
|
|
|
nopoll \
|
|
|
|
phy \
|
|
|
|
pp \
|
|
|
|
smartconfig \
|
|
|
|
ssl \
|
|
|
|
wpa \
|
|
|
|
wps \
|
|
|
|
|
2015-06-18 11:36:27 +02:00
|
|
|
LINKFLAGS_eagle.app.v6 = \
|
2015-06-17 10:30:12 +02:00
|
|
|
-Wl,--gc-sections \
|
2015-10-05 08:53:23 +02:00
|
|
|
-Wl,-Map=mapfile \
|
2015-06-18 11:36:27 +02:00
|
|
|
-nostdlib \
|
2015-10-08 03:07:08 +02:00
|
|
|
-T$(LD_FILE) \
|
Initial pass at switching to RTOS SDK.
This compiles, links, and starts the RTOS without crashing and burning.
Lua environment does not yet start due to the different task architecture.
Known pain points:
- task implementation needs to be rewritten for RTOS (next up on my TODO)
- secure espconn does not exist, all secure espconn stuff has been #if 0'd
- lwip now built from within the RTOS SDK, but does not appear to include
MDNS support. Investigation needed.
- there is no access to FRC1 NMI, not sure if we ever actually used that
however. Also #if 0'd out for now.
- new timing constraints introduced by the RTOS, all use of ets_delay_us()
and os_delay_us() needs to be reviewed (the tsl2561 driver in particular).
- even more confusion with ets_ vs os_ vs c_ vs non-prefixed versions.
In the long run everything should be switched to non-prefixed versions.
- system_set_os_print() not available, needs to be reimplemented
- all the RTOS rodata is loaded into RAM, as it apparently uses some
constants while the flash isn't mapped, so our exception handler can't
work its magic. This should be narrowed down to the minimum possible
at some point.
- with each task having its own stack in RTOS, we probably need change
flash-page buffers from the stack to the heap in a bunch of places.
A single, shared, page buffer *might* be possible if we limit ourselves
to running NodeMCU in a single task.
- there's a ton of junk in the sdk-overrides now; over time the core code
should be updated to not need those shims
2016-05-24 07:05:01 +02:00
|
|
|
-Wl,@$(LDDIR)/defsym.rom \
|
|
|
|
-T$(LDDIR)/extrasyms.rom \
|
2015-06-18 11:36:27 +02:00
|
|
|
-Wl,--no-check-sections \
|
2016-05-30 06:15:29 +02:00
|
|
|
-Wl,--wrap=printf \
|
2015-06-17 10:30:12 +02:00
|
|
|
-Wl,-static \
|
2015-12-18 03:10:48 +01:00
|
|
|
$(addprefix -u , $(SELECTED_MODULE_SYMS)) \
|
2016-05-26 07:19:20 +02:00
|
|
|
-u _UserExceptionVectorOverride \
|
2015-06-17 10:30:12 +02:00
|
|
|
-Wl,--start-group \
|
Initial pass at switching to RTOS SDK.
This compiles, links, and starts the RTOS without crashing and burning.
Lua environment does not yet start due to the different task architecture.
Known pain points:
- task implementation needs to be rewritten for RTOS (next up on my TODO)
- secure espconn does not exist, all secure espconn stuff has been #if 0'd
- lwip now built from within the RTOS SDK, but does not appear to include
MDNS support. Investigation needed.
- there is no access to FRC1 NMI, not sure if we ever actually used that
however. Also #if 0'd out for now.
- new timing constraints introduced by the RTOS, all use of ets_delay_us()
and os_delay_us() needs to be reviewed (the tsl2561 driver in particular).
- even more confusion with ets_ vs os_ vs c_ vs non-prefixed versions.
In the long run everything should be switched to non-prefixed versions.
- system_set_os_print() not available, needs to be reimplemented
- all the RTOS rodata is loaded into RAM, as it apparently uses some
constants while the flash isn't mapped, so our exception handler can't
work its magic. This should be narrowed down to the minimum possible
at some point.
- with each task having its own stack in RTOS, we probably need change
flash-page buffers from the stack to the heap in a bunch of places.
A single, shared, page buffer *might* be possible if we limit ourselves
to running NodeMCU in a single task.
- there's a ton of junk in the sdk-overrides now; over time the core code
should be updated to not need those shims
2016-05-24 07:05:01 +02:00
|
|
|
-lhal \
|
|
|
|
$(addprefix -l,$(USED_SDK_LIBS)) \
|
2015-06-18 11:36:27 +02:00
|
|
|
$(DEP_LIBS_eagle.app.v6) \
|
2015-06-17 10:30:12 +02:00
|
|
|
-Wl,--end-group \
|
2014-12-22 12:35:05 +01:00
|
|
|
|
2015-06-18 11:36:27 +02:00
|
|
|
DEPENDS_eagle.app.v6 = \
|
|
|
|
$(LD_FILE) \
|
2015-10-08 03:07:08 +02:00
|
|
|
Makefile
|
2014-12-22 12:35:05 +01:00
|
|
|
|
|
|
|
#############################################################
|
|
|
|
# Configuration i.e. compile options etc.
|
|
|
|
# Target specific stuff (defines etc.) goes in here!
|
|
|
|
# Generally values applying to a tree are captured in the
|
|
|
|
# makefile at its root level - these are then overridden
|
|
|
|
# for a subtree within the makefile rooted therein
|
|
|
|
#
|
|
|
|
|
2015-06-18 11:36:27 +02:00
|
|
|
#UNIVERSAL_TARGET_DEFINES = \
|
2014-12-22 12:35:05 +01:00
|
|
|
|
|
|
|
# Other potential configuration flags include:
|
|
|
|
# -DTXRX_TXBUF_DEBUG
|
|
|
|
# -DTXRX_RXBUF_DEBUG
|
|
|
|
# -DWLAN_CONFIG_CCX
|
2015-06-18 11:36:27 +02:00
|
|
|
CONFIGURATION_DEFINES = -D__ets__ \
|
2015-10-09 06:32:59 +02:00
|
|
|
-DICACHE_FLASH \
|
2015-12-12 04:27:31 +01:00
|
|
|
-DLUA_OPTIMIZE_MEMORY=2 \
|
|
|
|
-DMIN_OPT_LEVEL=2 \
|
2015-10-09 06:32:59 +02:00
|
|
|
-DLWIP_OPEN_SRC \
|
|
|
|
-DPBUF_RSV_FOR_WLAN \
|
2015-12-12 04:27:31 +01:00
|
|
|
-DEBUF_LWIP \
|
2014-12-22 12:35:05 +01:00
|
|
|
|
2015-06-18 11:36:27 +02:00
|
|
|
DEFINES += \
|
|
|
|
$(UNIVERSAL_TARGET_DEFINES) \
|
2014-12-22 12:35:05 +01:00
|
|
|
$(CONFIGURATION_DEFINES)
|
|
|
|
|
2015-06-18 11:36:27 +02:00
|
|
|
DDEFINES += \
|
|
|
|
$(UNIVERSAL_TARGET_DEFINES) \
|
2014-12-22 12:35:05 +01:00
|
|
|
$(CONFIGURATION_DEFINES)
|
|
|
|
|
|
|
|
|
|
|
|
#############################################################
|
|
|
|
# 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
|
|
|
|
INCLUDES += -I ./
|
|
|
|
PDIR := ../$(PDIR)
|
|
|
|
sinclude $(PDIR)Makefile
|
|
|
|
|
|
|
|
|
|
|
|
.PHONY: FORCE
|
|
|
|
FORCE:
|