Browse Source

Cleaned up sjson module build.

- Move jsonsl build to regular library build rather than #include the .c file
- Provide wrappers for malloc/calloc/free to fix undefined symbol warnings.
Johny Mattsson 6 years ago
parent
commit
ea4d33715f
6 changed files with 74 additions and 9 deletions
  1. 1 1
      Makefile
  2. 6 4
      app/Makefile
  3. 2 4
      app/modules/sjson.c
  4. 47 0
      app/sjson/Makefile
  5. 7 0
      app/sjson/json_config.h
  6. 11 0
      app/sjson/memcompat.h

+ 1 - 1
Makefile

@@ -188,7 +188,7 @@ endef
 
 $(BINODIR)/%.bin: $(IMAGEODIR)/%.out
 	@mkdir -p $(BINODIR)
-	@$(NM) $< | grep -w U && { echo "Firmware has unresolved (but unused) symbols - should be fixed nevertheless!"; exit 1; } || true
+	@$(NM) $< | grep -w U && { echo "Firmware has undefined (but unused) symbols!"; exit 1; } || true
 	$(ESPTOOL) elf2image --flash_mode dio --flash_freq 40m $< -o $(FIRMWAREDIR)
 
 #############################################################

+ 6 - 4
app/Makefile

@@ -48,7 +48,8 @@ SUBDIRS= 					\
 	websocket				\
 	swTimer					\
 	misc					\
-	pm						\
+	pm					\
+	sjson					\
 	
 
 endif # } PDIR
@@ -94,14 +95,15 @@ COMPONENTS_eagle.app.v6 = 			\
 	dhtlib/libdhtlib.a 			\
 	tsl2561/tsl2561lib.a			\
 	http/libhttp.a				\
-	pm/libpm.a					\
+	pm/libpm.a				\
 	websocket/libwebsocket.a		\
 	esp-gdbstub/libgdbstub.a		\
 	net/libnodemcu_net.a			\
-	mbedtls/libmbedtls.a      \
+	mbedtls/libmbedtls.a      		\
 	modules/libmodules.a			\
 	swTimer/libswtimer.a			\
-	misc/libmisc.a					\
+	misc/libmisc.a				\
+	sjson/libsjson.a			\
 	
 
 # Inspect the modules library and work out which modules need to be linked.

+ 2 - 4
app/modules/sjson.c

@@ -11,10 +11,8 @@
 #include "c_limits.h"
 #endif
 
-#define JSONSL_STATE_USER_FIELDS        int lua_object_ref; int used_count;
-#define JSONSL_NO_JPR
-
-#include "jsonsl.c"
+#include "json_config.h"
+#include "jsonsl.h"
 
 #define LUA_SJSONLIBNAME "sjson"
 

+ 47 - 0
app/sjson/Makefile

@@ -0,0 +1,47 @@
+#############################################################
+# 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 images 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 ()
+#
+ifndef PDIR
+GEN_LIBS = libsjson.a
+endif
+
+STD_CFLAGS=-std=gnu11 -Wimplicit
+
+#############################################################
+# 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
+#
+DEFINES += -include memcompat.h -include json_config.h
+
+#############################################################
+# 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 ./
+INCLUDES += -I ./include
+INCLUDES += -I ../include
+INCLUDES += -I ../../include
+PDIR := ../$(PDIR)
+sinclude $(PDIR)Makefile
+

+ 7 - 0
app/sjson/json_config.h

@@ -0,0 +1,7 @@
+#ifndef __JSON_CONFIG_H__
+#define __JSON_CONFIG_H__
+
+#define JSONSL_STATE_USER_FIELDS        int lua_object_ref; int used_count;
+#define JSONSL_NO_JPR
+
+#endif

+ 11 - 0
app/sjson/memcompat.h

@@ -0,0 +1,11 @@
+#ifndef __MEMCOMPAT_H__
+#define __MEMCOMPAT_H__
+
+#include "c_types.h"
+#include "mem.h"
+
+static inline void *malloc(size_t sz) { return os_malloc(sz); }
+static inline void free(void *p) { return os_free(p); }
+static inline void *calloc(size_t n, size_t sz) { return os_zalloc(n*sz); }
+
+#endif