mirror of
https://github.com/DaveGamble/cJSON.git
synced 2023-08-10 21:13:26 +03:00
29b6643bab
This switch warns about missing prototypes. It does not warn if functions are declared static. So this switch encourages the usage of static whenever possible. This enables the compiler to perform inlining.
146 lines
3.9 KiB
Makefile
146 lines
3.9 KiB
Makefile
CJSON_OBJ = cJSON.o
|
|
UTILS_OBJ = cJSON_Utils.o
|
|
CJSON_LIBNAME = libcjson
|
|
UTILS_LIBNAME = libcjson_utils
|
|
CJSON_TEST = cJSON_test
|
|
UTILS_TEST = cJSON_test_utils
|
|
|
|
LDLIBS = -lm
|
|
|
|
LIBVERSION = 1.0.2
|
|
CJSON_SOVERSION = 1
|
|
UTILS_SOVERSION = 1
|
|
|
|
PREFIX ?= /usr/local
|
|
INCLUDE_PATH ?= include/cjson
|
|
LIBRARY_PATH ?= lib
|
|
|
|
INSTALL_INCLUDE_PATH = $(DESTDIR)$(PREFIX)/$(INCLUDE_PATH)
|
|
INSTALL_LIBRARY_PATH = $(DESTDIR)$(PREFIX)/$(LIBRARY_PATH)
|
|
|
|
INSTALL ?= cp -a
|
|
|
|
R_CFLAGS = -fPIC -std=c89 -pedantic -Wall -Werror -Wstrict-prototypes -Wwrite-strings -Wshadow -Winit-self -Wcast-align -Wformat=2 -Wmissing-prototypes $(CFLAGS)
|
|
|
|
uname := $(shell sh -c 'uname -s 2>/dev/null || echo false')
|
|
|
|
#library file extensions
|
|
SHARED = so
|
|
STATIC = a
|
|
|
|
## create dynamic (shared) library on Darwin (base OS for MacOSX and IOS)
|
|
ifeq (Darwin, $(uname))
|
|
SHARED = dylib
|
|
endif
|
|
|
|
#cJSON library names
|
|
CJSON_SHARED = $(CJSON_LIBNAME).$(SHARED)
|
|
CJSON_SHARED_VERSION = $(CJSON_LIBNAME).$(SHARED).$(LIBVERSION)
|
|
CJSON_SHARED_SO = $(CJSON_LIBNAME).$(SHARED).$(CJSON_SOVERSION)
|
|
CJSON_STATIC = $(CJSON_LIBNAME).$(STATIC)
|
|
|
|
#cJSON_Utils library names
|
|
UTILS_SHARED = $(UTILS_LIBNAME).$(SHARED)
|
|
UTILS_SHARED_VERSION = $(UTILS_LIBNAME).$(SHARED).$(LIBVERSION)
|
|
UTILS_SHARED_SO = $(UTILS_LIBNAME).$(SHARED).$(UTILS_SOVERSION)
|
|
UTILS_STATIC = $(UTILS_LIBNAME).$(STATIC)
|
|
|
|
SHARED_CMD = $(CC) -shared -o
|
|
|
|
.PHONY: all shared static tests clean install
|
|
|
|
all: shared static tests
|
|
|
|
shared: $(CJSON_SHARED) $(UTILS_SHARED)
|
|
|
|
static: $(CJSON_STATIC) $(UTILS_STATIC)
|
|
|
|
tests: $(CJSON_TEST) $(UTILS_TEST)
|
|
|
|
test: tests
|
|
./$(CJSON_TEST)
|
|
./$(UTILS_TEST)
|
|
|
|
.c.o:
|
|
$(CC) -c $(R_CFLAGS) $<
|
|
|
|
#tests
|
|
#cJSON
|
|
$(CJSON_TEST): cJSON.c cJSON.h test.c
|
|
$(CC) $(R_CFLAGS) $^ -o $@ $(LDLIBS) -I.
|
|
#cJSON_Utils
|
|
$(UTILS_TEST): cJSON.c cJSON.h test.c
|
|
$(CC) $(R_CFLAGS) $^ -o $@ $(LDLIBS) -I.
|
|
|
|
#static libraries
|
|
#cJSON
|
|
$(CJSON_STATIC): $(CJSON_OBJ)
|
|
$(AR) rcs $@ $<
|
|
#cJSON_Utils
|
|
$(UTILS_STATIC): $(UTILS_OBJ)
|
|
$(AR) rcs $@ $<
|
|
|
|
#shared libraries .so.1.0.0
|
|
#cJSON
|
|
$(CJSON_SHARED_VERSION): $(CJSON_OBJ)
|
|
$(CC) -shared -o $@ $< $(LDFLAGS)
|
|
#cJSON_Utils
|
|
$(UTILS_SHARED_VERSION): $(UTILS_OBJ)
|
|
$(CC) -shared -o $@ $< $(LDFLAGS)
|
|
|
|
#objects
|
|
#cJSON
|
|
$(CJSON_OBJ): cJSON.c cJSON.h
|
|
#cJSON_Utils
|
|
$(UTILS_OBJ): cJSON_Utils.c cJSON_Utils.h
|
|
|
|
|
|
#links .so -> .so.1 -> .so.1.0.0
|
|
#cJSON
|
|
$(CJSON_SHARED_SO): $(CJSON_SHARED_VERSION)
|
|
ln -s $(CJSON_SHARED_VERSION) $(CJSON_SHARED_SO)
|
|
$(CJSON_SHARED): $(CJSON_SHARED_SO)
|
|
ln -s $(CJSON_SHARED_SO) $(CJSON_SHARED)
|
|
#cJSON_Utils
|
|
$(UTILS_SHARED_SO): $(UTILS_SHARED_VERSION)
|
|
ln -s $(UTILS_SHARED_VERSION) $(UTILS_SHARED_SO)
|
|
$(UTILS_SHARED): $(UTILS_SHARED_SO)
|
|
ln -s $(UTILS_SHARED_SO) $(UTILS_SHARED)
|
|
|
|
#install
|
|
#cJSON
|
|
install-cjson:
|
|
mkdir -p $(INSTALL_LIBRARY_PATH) $(INSTALL_INCLUDE_PATH)
|
|
$(INSTALL) cJSON.h $(INSTALL_INCLUDE_PATH)
|
|
$(INSTALL) $(CJSON_SHARED) $(CJSON_SHARED_SO) $(CJSON_SHARED_VERSION) $(INSTALL_LIBRARY_PATH)
|
|
#cJSON_Utils
|
|
install-utils: install-cjson
|
|
$(INSTALL) cJSON_Utils.h $(INSTALL_INCLUDE_PATH)
|
|
$(INSTALL) $(UTILS_SHARED) $(UTILS_SHARED_SO) $(UTILS_SHARED_VERSION) $(INSTALL_LIBRARY_PATH)
|
|
|
|
install: install-cjson install-utils
|
|
|
|
#uninstall
|
|
#cJSON
|
|
uninstall-cjson: uninstall-utils
|
|
$(RM) $(INSTALL_LIBRARY_PATH)/$(CJSON_SHARED)
|
|
$(RM) $(INSTALL_LIBRARY_PATH)/$(CJSON_SHARED_VERSION)
|
|
$(RM) $(INSTALL_LIBRARY_PATH)/$(CJSON_SHARED_SO)
|
|
rmdir $(INSTALL_LIBRARY_PATH)
|
|
$(RM) $(INSTALL_INCLUDE_PATH)/cJSON.h
|
|
rmdir $(INSTALL_INCLUDE_PATH)
|
|
#cJSON_Utils
|
|
uninstall-utils:
|
|
$(RM) $(INSTALL_LIBRARY_PATH)/$(UTILS_SHARED)
|
|
$(RM) $(INSTALL_LIBRARY_PATH)/$(UTILS_SHARED_VERSION)
|
|
$(RM) $(INSTALL_LIBRARY_PATH)/$(UTILS_SHARED_SO)
|
|
$(RM) $(INSTALL_INCLUDE_PATH)/cJSON_Utils.h
|
|
|
|
uninstall: uninstall-utils uninstall-cjson
|
|
|
|
clean:
|
|
$(RM) $(CJSON_OBJ) $(UTILS_OBJ) #delete object files
|
|
$(RM) $(CJSON_SHARED) $(CJSON_SHARED_VERSION) $(CJSON_SHARED_SO) $(CJSON_STATIC) #delete cJSON
|
|
$(RM) $(UTILS_SHARED) $(UTILS_SHARED_VERSION) $(UTILS_SHARED_SO) $(UTILS_STATIC) #delete cJSON_Utils
|
|
$(RM) $(CJSON_TEST) $(UTILS_TEST) #delete tests
|