mirror of
https://github.com/cesanta/mongoose.git
synced 2025-07-28 16:43:28 +08:00
Add riscv target, enhance arm target
This commit is contained in:
parent
53ee984eb7
commit
2d585474c1
50
Makefile
50
Makefile
@ -6,19 +6,15 @@ OPTS ?= -O3 -g3
|
|||||||
INCS ?= -Isrc -I.
|
INCS ?= -Isrc -I.
|
||||||
CFLAGS ?= $(OPTS) $(WARN) $(INCS) $(DEFS) $(TFLAGS) $(EXTRA)
|
CFLAGS ?= $(OPTS) $(WARN) $(INCS) $(DEFS) $(TFLAGS) $(EXTRA)
|
||||||
SSL ?= MBEDTLS
|
SSL ?= MBEDTLS
|
||||||
CDIR ?= $(realpath $(CURDIR))
|
CWD ?= $(realpath $(CURDIR))
|
||||||
VC98 = docker run --rm -e WINEDEBUG=-all -v $(CDIR):$(CDIR) -w $(CDIR) docker.io/mdashnet/vc98
|
DOCKER ?= docker run -it --rm -e Tmp=. -e WINEDEBUG=-all -v $(CWD):$(CWD) -w $(CWD)
|
||||||
VC2017 = docker run --rm -e WINEDEBUG=-all -v $(CDIR):$(CDIR) -w $(CDIR) docker.io/mdashnet/vc2017
|
|
||||||
MINGW = docker run --rm -v $(CDIR):$(CDIR) -w $(CDIR) docker.io/mdashnet/mingw
|
|
||||||
GCC = docker run --rm -v $(CDIR):$(CDIR) -w $(CDIR) mdashnet/cc2
|
|
||||||
ARM = docker run -v $(CDIR):$(CDIR) -w $(CDIR) mdashnet/armgcc
|
|
||||||
VCFLAGS = /nologo /W3 /O2 /I. $(DEFS) $(TFLAGS)
|
VCFLAGS = /nologo /W3 /O2 /I. $(DEFS) $(TFLAGS)
|
||||||
IPV6 ?= 1
|
IPV6 ?= 1
|
||||||
ASAN_OPTIONS ?=
|
ASAN_OPTIONS ?=
|
||||||
EXAMPLES := $(wildcard examples/*)
|
EXAMPLES := $(wildcard examples/*)
|
||||||
EXAMPLE_TARGET ?= example
|
EXAMPLE_TARGET ?= example
|
||||||
PREFIX ?= /usr/local
|
PREFIX ?= /usr/local
|
||||||
SOVERSION = 7.2
|
SOVERSION = 7.4
|
||||||
.PHONY: ex test
|
.PHONY: ex test
|
||||||
|
|
||||||
ifeq "$(SSL)" "MBEDTLS"
|
ifeq "$(SSL)" "MBEDTLS"
|
||||||
@ -32,7 +28,7 @@ CFLAGS += -DMG_ENABLE_OPENSSL=1 -I$(OPENSSL)/include
|
|||||||
LDFLAGS ?= -L$(OPENSSL)/lib -lssl -lcrypto
|
LDFLAGS ?= -L$(OPENSSL)/lib -lssl -lcrypto
|
||||||
endif
|
endif
|
||||||
|
|
||||||
all: mg_prefix test test++ ex vc98 vc2017 mingw mingw++ linux linux++ infer fuzz
|
all: mg_prefix test test++ arm ex vc98 vc2017 mingw mingw++ linux linux++ fuzz
|
||||||
|
|
||||||
ex:
|
ex:
|
||||||
@for X in $(EXAMPLES); do $(MAKE) -C $$X $(EXAMPLE_TARGET) || break; done
|
@for X in $(EXAMPLES); do $(MAKE) -C $$X $(EXAMPLE_TARGET) || break; done
|
||||||
@ -53,15 +49,18 @@ test++: test
|
|||||||
# Make sure we can build from an unamalgamated sources
|
# Make sure we can build from an unamalgamated sources
|
||||||
unamalgamated: $(HDRS) Makefile
|
unamalgamated: $(HDRS) Makefile
|
||||||
$(CC) src/*.c test/unit_test.c $(CFLAGS) $(LDFLAGS) -g -o unit_test
|
$(CC) src/*.c test/unit_test.c $(CFLAGS) $(LDFLAGS) -g -o unit_test
|
||||||
fuzz: mongoose.c mongoose.h Makefile test/fuzz.c
|
|
||||||
$(CC) mongoose.c test/fuzz.c $(CFLAGS) -DMG_ENABLE_LINES -DMG_ENABLE_LOG=0 -fsanitize=fuzzer,signed-integer-overflow,address $(LDFLAGS) -g -o fuzzer
|
fuzzer: mongoose.c mongoose.h Makefile test/fuzz.c
|
||||||
$(DEBUGGER) ./fuzzer
|
clang mongoose.c test/fuzz.c $(CFLAGS) -DMG_ENABLE_LINES -DMG_ENABLE_LOG=0 -fsanitize=fuzzer,signed-integer-overflow,address $(LDFLAGS) -g -o $@
|
||||||
|
|
||||||
|
fuzz: fuzzer
|
||||||
|
$(RUN) ./fuzzer
|
||||||
|
|
||||||
# make CC=/usr/local/opt/llvm\@8/bin/clang ASAN_OPTIONS=detect_leaks=1
|
# make CC=/usr/local/opt/llvm\@8/bin/clang ASAN_OPTIONS=detect_leaks=1
|
||||||
test: CFLAGS += -DMG_ENABLE_IPV6=$(IPV6) -fsanitize=address#,undefined
|
test: CFLAGS += -DMG_ENABLE_IPV6=$(IPV6) -fsanitize=address#,undefined
|
||||||
test: mongoose.h Makefile $(SRCS)
|
test: mongoose.h Makefile $(SRCS)
|
||||||
$(CC) $(SRCS) $(CFLAGS) -coverage $(LDFLAGS) -g -o unit_test
|
$(CC) $(SRCS) $(CFLAGS) -coverage $(LDFLAGS) -g -o unit_test
|
||||||
ASAN_OPTIONS=$(ASAN_OPTIONS) $(DEBUGGER) ./unit_test
|
ASAN_OPTIONS=$(ASAN_OPTIONS) $(RUN) ./unit_test
|
||||||
|
|
||||||
coverage: test
|
coverage: test
|
||||||
gcov -l -n *.gcno | sed '/^$$/d' | sed 'N;s/\n/ /'
|
gcov -l -n *.gcno | sed '/^$$/d' | sed 'N;s/\n/ /'
|
||||||
@ -73,29 +72,35 @@ upload-coverage: coverage
|
|||||||
infer:
|
infer:
|
||||||
infer run -- cc test/unit_test.c -c -W -Wall -Werror -Isrc -I. -O2 -DMG_ENABLE_MBEDTLS=1 -DMG_ENABLE_LINES -I/usr/local/Cellar/mbedtls/2.23.0/include -DMG_ENABLE_IPV6=1 -g -o /dev/null
|
infer run -- cc test/unit_test.c -c -W -Wall -Werror -Isrc -I. -O2 -DMG_ENABLE_MBEDTLS=1 -DMG_ENABLE_LINES -I/usr/local/Cellar/mbedtls/2.23.0/include -DMG_ENABLE_IPV6=1 -g -o /dev/null
|
||||||
|
|
||||||
|
arm: mongoose.h $(SRCS)
|
||||||
|
$(DOCKER) mdashnet/armgcc arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb $(SRCS) test/mongoose_custom.c -Itest -DMG_ARCH=MG_ARCH_CUSTOM $(OPTS) $(WARN) $(INCS) -DMG_MAX_HTTP_HEADERS=5 -DMG_ENABLE_LINES -DMG_ENABLE_DIRECTORY_LISTING=0 -DMG_ENABLE_SSI=1 -o unit_test -nostartfiles --specs nosys.specs -e 0
|
||||||
|
|
||||||
|
riscv: mongoose.h $(SRCS)
|
||||||
|
$(DOCKER) mdashnet/riscv riscv-none-elf-gcc -march=rv32imc -mabi=ilp32 $(SRCS) test/mongoose_custom.c -Itest -DMG_ARCH=MG_ARCH_CUSTOM $(OPTS) $(WARN) $(INCS) -DMG_MAX_HTTP_HEADERS=5 -DMG_ENABLE_LINES -DMG_ENABLE_DIRECTORY_LISTING=0 -DMG_ENABLE_SSI=1 -o unit_test
|
||||||
|
|
||||||
#vc98: VCFLAGS += -DMG_ENABLE_IPV6=1
|
#vc98: VCFLAGS += -DMG_ENABLE_IPV6=1
|
||||||
vc98: Makefile mongoose.c mongoose.h test/unit_test.c
|
vc98: Makefile mongoose.c mongoose.h test/unit_test.c
|
||||||
$(VC98) wine cl mongoose.c test/unit_test.c $(VCFLAGS) ws2_32.lib /Fe$@.exe
|
$(DOCKER) mdashnet/vc98 wine cl mongoose.c test/unit_test.c $(VCFLAGS) ws2_32.lib /Fe$@.exe
|
||||||
$(VC98) wine $@.exe
|
$(DOCKER) mdashnet/vc98 wine $@.exe
|
||||||
|
|
||||||
#vc2017: VCFLAGS += -DMG_ENABLE_IPV6=1
|
#vc2017: VCFLAGS += -DMG_ENABLE_IPV6=1
|
||||||
vc2017: Makefile mongoose.c mongoose.h test/unit_test.c
|
vc2017: Makefile mongoose.c mongoose.h test/unit_test.c
|
||||||
$(VC2017) wine64 cl mongoose.c test/unit_test.c $(VCFLAGS) ws2_32.lib /Fe$@.exe
|
$(DOCKER) mdashnet/vc2017 wine64 cl mongoose.c test/unit_test.c $(VCFLAGS) ws2_32.lib /Fe$@.exe
|
||||||
$(VC2017) wine64 $@.exe
|
$(DOCKER) mdashnet/vc2017 wine64 $@.exe
|
||||||
|
|
||||||
mingw: Makefile mongoose.c mongoose.h test/unit_test.c
|
mingw: Makefile mongoose.c mongoose.h test/unit_test.c
|
||||||
$(MINGW) i686-w64-mingw32-gcc mongoose.c test/unit_test.c -W -Wall -Werror -I. $(DEFS) -lwsock32 -o test.exe
|
$(DOCKER) mdashnet/mingw i686-w64-mingw32-gcc mongoose.c test/unit_test.c -W -Wall -Werror -I. $(DEFS) -lwsock32 -o test.exe
|
||||||
$(VC98) wine test.exe
|
$(DOCKER) mdashnet/vc98 wine test.exe
|
||||||
|
|
||||||
mingw++: Makefile mongoose.c mongoose.h test/unit_test.c
|
mingw++: Makefile mongoose.c mongoose.h test/unit_test.c
|
||||||
$(MINGW) i686-w64-mingw32-g++ mongoose.c test/unit_test.c -W -Wall -Werror -I. $(DEFS) -lwsock32 -o test.exe
|
$(DOCKER) mdashnet/mingw i686-w64-mingw32-g++ mongoose.c test/unit_test.c -W -Wall -Werror -I. $(DEFS) -lwsock32 -o test.exe
|
||||||
# Note: for some reason, a binary built with mingw g++, fails to run
|
# Note: for some reason, a binary built with mingw g++, fails to run
|
||||||
|
|
||||||
#linux: CFLAGS += -DMG_ENABLE_IPV6=$(IPV6)
|
#linux: CFLAGS += -DMG_ENABLE_IPV6=$(IPV6)
|
||||||
linux: CFLAGS += -fsanitize=address,undefined
|
linux: CFLAGS += -fsanitize=address,undefined
|
||||||
linux: Makefile mongoose.c mongoose.h test/unit_test.c
|
linux: Makefile mongoose.c mongoose.h test/unit_test.c
|
||||||
$(GCC) $(CC) mongoose.c test/unit_test.c $(CFLAGS) $(LDFLAGS) -o unit_test_gcc
|
$(DOCKER) mdashnet/cc2 gcc mongoose.c test/unit_test.c $(CFLAGS) $(LDFLAGS) -o unit_test_gcc
|
||||||
$(GCC) ./unit_test_gcc
|
$(DOCKER) mdashnet/cc2 ./unit_test_gcc
|
||||||
|
|
||||||
linux++: CC = g++
|
linux++: CC = g++
|
||||||
linux++: WARN += -Wno-missing-field-initializers
|
linux++: WARN += -Wno-missing-field-initializers
|
||||||
@ -114,9 +119,6 @@ install: linux-libs
|
|||||||
uninstall:
|
uninstall:
|
||||||
rm -rf $(DESTDIR)$(PREFIX)/lib/libmongoose.a $(DESTDIR)$(PREFIX)/lib/libmongoose.so.$(SOVERSION) $(DESTDIR)$(PREFIX)/include/mongoose.h $(DESTDIR)$(PREFIX)/lib/libmongoose.so
|
rm -rf $(DESTDIR)$(PREFIX)/lib/libmongoose.a $(DESTDIR)$(PREFIX)/lib/libmongoose.so.$(SOVERSION) $(DESTDIR)$(PREFIX)/include/mongoose.h $(DESTDIR)$(PREFIX)/lib/libmongoose.so
|
||||||
|
|
||||||
arm: Makefile mongoose.c mongoose.h test/unit_test.c
|
|
||||||
$(ARM) arm-none-eabi-gcc mongoose.c -c -Itest -DMG_ARCH=MG_ARCH_CUSTOM $(OPTS) $(WARN) $(INCS) -DMG_MAX_HTTP_HEADERS=5 -DMG_ENABLE_LINES -DMG_ENABLE_DIRECTORY_LISTING=0 -DMG_ENABLE_SSI=1
|
|
||||||
|
|
||||||
mongoose.c: Makefile $(wildcard src/*)
|
mongoose.c: Makefile $(wildcard src/*)
|
||||||
(cat src/license.h; echo; echo '#include "mongoose.h"' ; (for F in src/private.h src/*.c ; do echo; echo '#ifdef MG_ENABLE_LINES'; echo "#line 1 \"$$F\""; echo '#endif'; cat $$F | sed -e 's,#include ".*,,'; done))> $@
|
(cat src/license.h; echo; echo '#include "mongoose.h"' ; (for F in src/private.h src/*.c ; do echo; echo '#ifdef MG_ENABLE_LINES'; echo "#line 1 \"$$F\""; echo '#endif'; cat $$F | sed -e 's,#include ".*,,'; done))> $@
|
||||||
|
|
||||||
|
@ -423,7 +423,7 @@ const char *mg_unpack(const char *path, size_t *size) {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__linux__) && defined(GCC)
|
#if defined(MG_FOPENCOOKIE)
|
||||||
ssize_t packed_read(void *cookie, char *buf, size_t size) {
|
ssize_t packed_read(void *cookie, char *buf, size_t size) {
|
||||||
struct packed_file *fp = (struct packed_file *) cookie;
|
struct packed_file *fp = (struct packed_file *) cookie;
|
||||||
if (size > fp->size - fp->pos) size = fp->size - fp->pos;
|
if (size > fp->size - fp->pos) size = fp->size - fp->pos;
|
||||||
|
@ -608,6 +608,13 @@ void mg_usleep(unsigned long usecs);
|
|||||||
|
|
||||||
FILE *mg_fopen_packed(const char *path, const char *mode);
|
FILE *mg_fopen_packed(const char *path, const char *mode);
|
||||||
|
|
||||||
|
#if defined(__linux__) && defined(GCC)
|
||||||
|
#define MG_ENABLE_PACKED_FS 1
|
||||||
|
#define MG_FOPENCOOKIE
|
||||||
|
#else
|
||||||
|
#define MG_ENABLE_PACKED_FS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
unsigned short mg_url_port(const char *url);
|
unsigned short mg_url_port(const char *url);
|
||||||
|
2
src/fs.c
2
src/fs.c
@ -12,7 +12,7 @@ const char *mg_unpack(const char *path, size_t *size) {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__linux__) && defined(GCC)
|
#if defined(MG_FOPENCOOKIE)
|
||||||
ssize_t packed_read(void *cookie, char *buf, size_t size) {
|
ssize_t packed_read(void *cookie, char *buf, size_t size) {
|
||||||
struct packed_file *fp = (struct packed_file *) cookie;
|
struct packed_file *fp = (struct packed_file *) cookie;
|
||||||
if (size > fp->size - fp->pos) size = fp->size - fp->pos;
|
if (size > fp->size - fp->pos) size = fp->size - fp->pos;
|
||||||
|
7
src/fs.h
7
src/fs.h
@ -3,3 +3,10 @@
|
|||||||
#include "arch.h"
|
#include "arch.h"
|
||||||
|
|
||||||
FILE *mg_fopen_packed(const char *path, const char *mode);
|
FILE *mg_fopen_packed(const char *path, const char *mode);
|
||||||
|
|
||||||
|
#if defined(__linux__) && defined(GCC)
|
||||||
|
#define MG_ENABLE_PACKED_FS 1
|
||||||
|
#define MG_FOPENCOOKIE
|
||||||
|
#else
|
||||||
|
#define MG_ENABLE_PACKED_FS 0
|
||||||
|
#endif
|
||||||
|
@ -30,9 +30,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
|||||||
mg_sntp_parse(NULL, 0, &tv);
|
mg_sntp_parse(NULL, 0, &tv);
|
||||||
|
|
||||||
char buf[size * 4 / 3 + 5]; // At least 4 chars and nul termination
|
char buf[size * 4 / 3 + 5]; // At least 4 chars and nul termination
|
||||||
mg_base64_decode((char *) data, size, buf);
|
mg_base64_decode((char *) data, (int) size, buf);
|
||||||
mg_base64_decode(NULL, 0, buf);
|
mg_base64_decode(NULL, 0, buf);
|
||||||
mg_base64_encode(data, size, buf);
|
mg_base64_encode(data, (int) size, buf);
|
||||||
mg_base64_encode(NULL, 0, buf);
|
mg_base64_encode(NULL, 0, buf);
|
||||||
|
|
||||||
char *hexdump = mg_hexdump(data, size);
|
char *hexdump = mg_hexdump(data, size);
|
||||||
|
40
test/mongoose_custom.c
Normal file
40
test/mongoose_custom.c
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#include "mongoose.h"
|
||||||
|
|
||||||
|
int usleep(useconds_t us) {
|
||||||
|
for (useconds_t i = 0; i < us * 99; i++) asm("nop");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int clock_gettime(clockid_t clock_id, struct timespec *tp) {
|
||||||
|
(void) clock_id;
|
||||||
|
memset(tp, 0, sizeof(*tp));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct mg_connection *mg_connect(struct mg_mgr *mgr, const char *url,
|
||||||
|
mg_event_handler_t fn, void *fn_data) {
|
||||||
|
(void) mgr, (void) url, (void) fn, (void) fn_data;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mg_connect_resolved(struct mg_connection *c) {
|
||||||
|
(void) c;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct mg_connection *mg_listen(struct mg_mgr *mgr, const char *url,
|
||||||
|
mg_event_handler_t fn, void *fn_data) {
|
||||||
|
(void) mgr, (void) url, (void) fn, (void) fn_data;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mg_mgr_poll(struct mg_mgr *mgr, int ms) {
|
||||||
|
(void) mgr, (void) ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mg_send(struct mg_connection *c, const void *buf, size_t len) {
|
||||||
|
(void) c, (void) buf, (void) len;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void _fini(void) {
|
||||||
|
}
|
@ -13,11 +13,13 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
int clock_gettime(clockid_t clock_id, struct timespec *tp);
|
|
||||||
|
|
||||||
#define MG_DIRSEP '/'
|
#define MG_DIRSEP '/'
|
||||||
#define MG_INT64_FMT "%lld"
|
#define MG_INT64_FMT "%lld"
|
||||||
#undef MG_PATH_MAX
|
#undef MG_PATH_MAX
|
||||||
#define MG_PATH_MAX 100
|
#define MG_PATH_MAX 100
|
||||||
#undef MG_ENABLE_SOCKET
|
#undef MG_ENABLE_SOCKET
|
||||||
#define MG_ENABLE_SOCKET 0
|
#define MG_ENABLE_SOCKET 0
|
||||||
|
|
||||||
|
#define realpath(a, b) (a)
|
||||||
|
|
||||||
|
int clock_gettime(clockid_t clock_id, struct timespec *tp);
|
||||||
|
Loading…
Reference in New Issue
Block a user