@@ -5,6 +5,8 @@ CORE_PATH := ../../cores/esp8266
5
5
FORCE32 ?= 1
6
6
OPTZ ?= -Os
7
7
8
+ MAKEFILE = $(word 1, $(MAKEFILE_LIST ) )
9
+
8
10
# I wasn't able to build with clang when -coverage flag is enabled, forcing GCC on OS X
9
11
ifeq ($(shell uname -s) ,Darwin)
10
12
CC ?= gcc
@@ -167,6 +169,7 @@ build-info: # show toolchain version
167
169
% .c.o : % .c
168
170
$(CC ) $(PREINCLUDES ) $(CFLAGS ) $(INC_PATHS ) -MD -MF $(BINDIR ) /.$(notdir $< ) .d -c -o $@ $<
169
171
172
+ .PRECIOUS : % .cpp.o
170
173
% .cpp.o : % .cpp
171
174
$(CXX ) $(PREINCLUDES ) $(CXXFLAGS ) $(INC_PATHS ) -MD -MF $(BINDIR ) /.$(notdir $< ) .d -c -o $@ $<
172
175
@@ -231,10 +234,6 @@ CPP_SOURCES_CORE_EMU = \
231
234
$(ARDUINO_LIBS ) \
232
235
233
236
234
- ULIBPATHS = $(shell echo $(ULIBDIRS ) | sed 's,:, ,g')
235
- USERLIBDIRS = $(shell test -z "$(ULIBPATHS ) " || for d in $(ULIBPATHS ) ; do for dd in $$d/* $$d/* /src; do test -d $$dd && echo -I$$dd || echo "WARNING: '$$dd' is not a directory" 1>&2; done; done)
236
- INC_PATHS += $(USERLIBDIRS )
237
-
238
237
LIBSSLFILE = ../../tools/sdk/ssl/bearssl/build$(N32 ) /libbearssl.a
239
238
ifeq (,$(wildcard $(LIBSSLFILE ) ) )
240
239
LIBSSL =
@@ -244,31 +243,60 @@ endif
244
243
ssl : # download source and build BearSSL
245
244
cd ../../tools/sdk/ssl && make native$(N32 )
246
245
247
- CPP_OBJECTS_CORE_EMU = $(CPP_SOURCES_CORE_EMU:.cpp=.cpp.o ) $(USERLIB:.cpp=.cpp.o )
246
+ ULIBPATHS = $(shell echo $(ULIBDIRS ) | sed 's,:, ,g')
247
+ USERLIBDIRS = $(shell test -z "$(ULIBPATHS ) " || for d in $(ULIBPATHS ) ; do for dd in $$d $$d/src; do test -d $$dd && { echo -I$$dd; echo "userlib: using directory '$$dd'" 1>&2; } done; done)
248
+ USERLIBSRCS = $(shell test -z "$(ULIBPATHS ) " || for d in $(ULIBPATHS ) ; do for ss in $$d/* .cpp $$d/src/* .cpp; do test -r $$ss && echo $$ss; done; done)
249
+ INC_PATHS += $(USERLIBDIRS )
250
+ CPP_OBJECTS_CORE_EMU = $(CPP_SOURCES_CORE_EMU:.cpp=.cpp.o ) $(USERLIBSRCS:.cpp=.cpp.o )
248
251
249
252
bin/fullcore.a : $(C_OBJECTS ) $(CPP_OBJECTS_CORE_EMU )
250
253
ar -rcu $@ $^
251
254
ranlib -c $@
252
255
253
- .PRECIOUS : % .cpp.o
254
256
% : % .ino.cpp.o bin/fullcore.a
255
257
$(CXX ) $(LDFLAGS ) $< bin/fullcore.a $(LIBSSL ) -o $@
256
- test -r $@ && ln -sf ../$@ $(BINDIR ) || ln -sf $@ $(BINDIR )
257
-
258
- # .PRECIOUS: %.ino.cpp
259
- % .ino.cpp : % .ino
260
- @s=$< ; \
261
- n=$$ {s## */}; \
262
- (cd $$ {s%/* }; \
263
- echo " #include \" $$ n\" " ; \
264
- for i in * .ino; do \
265
- test " $$ i" = " $$ n" || echo " #include \" $$ i\" " ; \
266
- done ; \
267
- ) > $@
258
+ @echo " ----> $@ <----"
259
+
260
+ # ################################################
261
+ # are we in primary make call ?
262
+ ifeq ($(INO ) ,)
263
+
264
+ % : % .ino
265
+ @# recursive 'make' with paths
266
+ $(MAKE ) -f $(MAKEFILE ) INODIR=$(dir $@ ) INO=$(notdir $@ ) $(BINDIR ) /$(notdir $@ ) /$(notdir $@ )
267
+ @# see below the new build rule with fixed output path outside from core location
268
+
269
+ # ####################
270
+ # recursive call on ino targer
271
+ else
272
+
273
+ $(BINDIR ) /$(INO ) /$(INO ) .ino.cpp :
274
+ @# arduino builder would come around here (.ino -> .ino.cpp)
275
+ @mkdir -p $(BINDIR ) /$(INO ) ; \
276
+ ( \
277
+ echo " #include \" $( INODIR) /$( INO) .ino\" " ; \
278
+ for i in $( INODIR) /* .ino; do \
279
+ test " $$ i" = $(INODIR ) /$(INO ) .ino || echo " #include \" $$ i\" " ; \
280
+ done ; \
281
+ ) > $(BINDIR ) /$(INO ) /$(INO ) .ino.cpp
282
+
283
+ endif # recursive
284
+ # ####################
285
+
286
+ # ################################################
287
+ # (debug)
288
+
289
+ # https://lists.gnu.org/archive/html/help-make/2002-11/msg00062.html
290
+ # Bad gmake, never *ever* try to get a file out of source control by yourself.
291
+ # %: %,v
292
+ # %: RCS/%,v
293
+ # %: RCS/%
294
+ # %: s.%
295
+ # %: SCCS/s.%
296
+
297
+ # Makefile: ;
268
298
269
299
# ################################################
270
- # Makefile.inc.ino generation
271
- -include $(BINDIR ) /Makefile.inc.ino
272
300
273
301
.PHONY : list
274
302
list : # show core example list
@@ -281,26 +309,9 @@ list: # show core example list
281
309
done ; \
282
310
done ; \
283
311
284
- $(BINDIR ) /Makefile.inc.ino :
285
- @all=" " ; \
286
- for dir in ../../libraries/* /examples; do \
287
- exampledir=$$ {dir%/* }; \
288
- exampledirname=$$ {exampledir## */}; \
289
- for subdir in $$ dir/* ; do \
290
- exname=$$ {subdir## */}; \
291
- all=" $$ all $$ subdir/$$ exname" ; \
292
- done ; \
293
- done ; \
294
- echo " examples: $$ all" > $@
295
-
296
- examples : $(BINDIR ) /Makefile.inc.ino # build all core examples
297
- $(MAKE ) $@
298
-
299
312
# ################################################
300
313
# help
301
314
302
- MAKEFILE = $(word 1, $(MAKEFILE_LIST ) )
303
-
304
315
.PHONY : help
305
316
help :
306
317
@cat README.txt
0 commit comments