diff --git a/examples/device-dashboard/Makefile b/examples/device-dashboard/Makefile index d59281d3..0ae50778 100644 --- a/examples/device-dashboard/Makefile +++ b/examples/device-dashboard/Makefile @@ -21,12 +21,14 @@ endif all: $(PROG) $(RUN) ./$(PROG) $(ARGS) +ifneq ($(OS),Windows_NT) # Before embedding files, gzip them to save space packed_fs.c: $(shell find web_root -type f) Makefile rm -rf tmp/web_root && mkdir tmp && cp -r web_root tmp/ find tmp -type f | xargs -n1 gzip $(CC) ../../test/pack.c -o pack cd tmp && ../pack `find web_root -type f` > ../$@ +endif $(PROG): $(SOURCES) $(CC) $(SOURCES) $(CFLAGS) $(CFLAGS_MONGOOSE) $(CFLAGS_EXTRA) $(OUT) diff --git a/examples/device-dashboard/README.md b/examples/device-dashboard/README.md index 6286c2a2..934fe091 100644 --- a/examples/device-dashboard/README.md +++ b/examples/device-dashboard/README.md @@ -9,19 +9,21 @@ following features: - Web UI is fully embedded into the server/firmware binary, and does not need a filesystem to serve it. UI is resilient to FS problems - Administrators can change server settings -- All changes are propagates to all connected clients -- A device is connected to the external MQTT server -- Logged in clients can send/receive messages to a device which get - forwarded to MQTT +- All changes are propagated to all connected clients +- The device is connected to the external MQTT server +- Logged in clients can send/receive messages via MQTT -# Screenshots +## Screenshots This is a login screen that prompts for user/password ![](screenshots/login.webp) -# Main dashboard +## Main dashboard -A main dashboard page shows and interactive MQTT console +The main dashboard page shows the interactive MQTT console ![](screenshots/dashboard.webp) + + +See a detailed tutorial at https://mongoose.ws/tutorials/device-dashboard/ diff --git a/examples/embedded-filesystem/Makefile b/examples/embedded-filesystem/Makefile index 9f42f0c6..cce143ec 100644 --- a/examples/embedded-filesystem/Makefile +++ b/examples/embedded-filesystem/Makefile @@ -13,23 +13,25 @@ ifeq ($(OS),Windows_NT) CFLAGS += -lws2_32 # Link against Winsock library DELETE = cmd /C del /Q /F /S # Command prompt command to delete files OUT ?= -o $(PROG) # Build output + PACK = pack.exe else # Mac, Linux PROG ?= example DELETE = rm -rf OUT ?= -o $(PROG) + PACK = ./pack endif all: $(PROG) $(RUN) ./$(PROG) $(ARGS) $(PROG): $(SOURCES) $(FILES_TO_EMBED) - $(CC) ../../test/pack.c -o pack - ./pack $(FILES_TO_EMBED) > packed_fs.c + $(CC) ../../test/pack.c -o $(PACK) + $(PACK) $(FILES_TO_EMBED) > packed_fs.c $(CC) $(SOURCES) $(CFLAGS) $(CFLAGS_MONGOOSE) $(CFLAGS_EXTRA) $(OUT) clean: - $(DELETE) $(PROG) *.dSYM pack + $(DELETE) $(PROG) *.dSYM $(PACK) .PHONY: compress expand gzipped plain all diff --git a/examples/http-client/Makefile b/examples/http-client/Makefile index a0bb6cec..b7393606 100644 --- a/examples/http-client/Makefile +++ b/examples/http-client/Makefile @@ -1,41 +1,38 @@ -PROG ?= example -ROOT ?= $(realpath $(CURDIR)/../..) -CFLAGS ?= -DMG_ENABLE_LINES $(EXTRA_CFLAGS) -LIN = docker run -it --rm -v $(ROOT):$(ROOT) -w $(CURDIR) mdashnet/cc2 -SSL = ? +SOURCES = main.c mongoose.c # Source code files +CFLAGS = -W -Wall -Wextra -g -I. # Build options +# Mongoose build options. See https://mongoose.ws/documentation/#build-options +CFLAGS_MONGOOSE += -DMG_ENABLE_LINES=1 + +SSL = ? ifeq "$(SSL)" "MBEDTLS" -CFLAGS += -DMG_ENABLE_MBEDTLS=1 -lmbedtls -lmbedcrypto -lmbedx509 +CFLAGS += -lmbedtls -lmbedcrypto -lmbedx509 +CFLAGS_MONGOOSE += -DMG_ENABLE_MBEDTLS=1 +endif +ifeq "$(SSL)" "OPENSSL" +CFLAGS += -lssl -lcrypto +CFLAGS_MONGOOSE += -DMG_ENABLE_OPENSSL=1 endif -ifeq "$(SSL)" "OPENSSL" -CFLAGS += -DMG_ENABLE_OPENSSL=1 -lssl -lcrypto +ifeq ($(OS),Windows_NT) + # Windows settings. Assume MinGW compiler. To use VC: make CC=cl CFLAGS=/MD OUT=/Feprog.exe + PROG ?= example.exe # Use .exe suffix for the binary + CC = gcc # Use MinGW gcc compiler + CFLAGS += -lws2_32 # Link against Winsock library + DELETE = cmd /C del /Q /F /S # Command prompt command to delete files + OUT ?= -o $(PROG) # Build output +else + # Mac, Linux + PROG ?= example + DELETE = rm -rf + OUT ?= -o $(PROG) endif all: $(PROG) $(RUN) ./$(PROG) $(ARGS) -$(PROG): main.c - $(CC) ../../mongoose.c -I../.. -W -Wall $(CFLAGS) -o $(PROG) main.c - -linux: all -linux: CFLAGS += -O2 -g -fsanitize=address,undefined,shift,null,return,bounds,alignment,object-size,bool,enum -static-libasan -linux: CC = $(LIN) cc -linux: RUN = $(LIN) - - -ROOT ?= $(realpath $(CURDIR)/../..) -DOCKER = docker run -it --rm -e Tmp=. -e WINEDEBUG=-all -v $(ROOT):$(ROOT) -w $(CURDIR) -WDEFS = -DMG_ENABLE_MBEDTLS -DMG_ENABLE_LINES -Imbedtls/include -Imbedtls/library $(EXTRA) -WFLAGS = /nologo -O2 -I. -I../.. ws2_32.lib advapi32.lib /link /out:$(PROG).exe -WSRCS = ../../mongoose.c main.c mbedtls/library/*.c -$(PROG).exe: main.c mbedtls - $(DOCKER) mdashnet/vc2017 wine cl $(WSRCS) $(WDEFS) $(WFLAGS) -vc2017: ARGS = https://cesanta.com -vc2017: $(PROG).exe - $(DOCKER) mdashnet/vc2017 wine $(PROG).exe $(ARGS) -mbedtls: - git clone --depth 1 -b v3.1.0 https://github.com/ARMmbed/mbedtls +$(PROG): $(SOURCES) + $(CC) $(SOURCES) $(CFLAGS) $(CFLAGS_MONGOOSE) $(CFLAGS_EXTRA) $(OUT) clean: - rm -rf $(PROG) _CL* *.o *.dSYM *.gcov *.gcno *.gcda *.obj *.exe *.ilk *.pdb mbedtls + $(DELETE) $(PROG) *.o *.obj *.exe *.dSYM diff --git a/examples/http-client/mongoose.c b/examples/http-client/mongoose.c new file mode 120000 index 00000000..8ef6e62d --- /dev/null +++ b/examples/http-client/mongoose.c @@ -0,0 +1 @@ +../../mongoose.c \ No newline at end of file diff --git a/examples/http-client/mongoose.h b/examples/http-client/mongoose.h new file mode 120000 index 00000000..488ef358 --- /dev/null +++ b/examples/http-client/mongoose.h @@ -0,0 +1 @@ +../../mongoose.h \ No newline at end of file