diff --git a/Makefile b/Makefile index 27f97ce..c269c3f 100644 --- a/Makefile +++ b/Makefile @@ -1,60 +1,62 @@ +DESTDIR ?= + +prefix ?= /usr +exec_prefix ?= $(prefix) +LIB ?= lib +libdir ?= $(exec_prefix)/$(LIB) +includedir ?= $(exec_prefix)/include/uSockets + +VERSION ?= 0.0 +LIBTARGET = libusockets.so.$(VERSION) + +LIBS = +REQUIRES = + # WITH_OPENSSL=1 enables OpenSSL 1.1+ support or BoringSSL # For now we need to link with C++ for OpenSSL support, but should be removed with time ifeq ($(WITH_OPENSSL),1) - override CFLAGS += -DLIBUS_USE_OPENSSL - # With problems on macOS, make sure to pass needed LDFLAGS required to find these - override LDFLAGS += -lssl -lcrypto -lstdc++ -else - # WITH_WOLFSSL=1 enables WolfSSL 4.2.0 support (mutually exclusive with OpenSSL) - ifeq ($(WITH_WOLFSSL),1) - # todo: change these - override CFLAGS += -DLIBUS_USE_WOLFSSL -I/usr/local/include - override LDFLAGS += -L/usr/local/lib -lwolfssl - else - override CFLAGS += -DLIBUS_NO_SSL - endif +CFLAGS += -DLIBUS_USE_OPENSSL +LIBS += -lssl -lcrypto -lstdc++ +REQUIRES += libssl libcrypto endif # WITH_LIBUV=1 builds with libuv as event-loop ifeq ($(WITH_LIBUV),1) - override CFLAGS += -DLIBUS_USE_LIBUV - override LDFLAGS += -luv -endif - -# WITH_GCD=1 builds with libdispatch as event-loop -ifeq ($(WITH_GCD),1) - override CFLAGS += -DLIBUS_USE_GCD - override LDFLAGS += -framework CoreFoundation +CFLAGS += -DLIBUS_USE_LIBUV +LIBS += -luv +REQUIRES += libuv endif -# WITH_ASAN builds with sanitizers -ifeq ($(WITH_ASAN),1) - override CFLAGS += -fsanitize=address -g - override LDFLAGS += -lasan -endif - -override CFLAGS += -std=c11 -Isrc -override LDFLAGS += uSockets.a +CFLAGS += -std=c11 -Isrc -# By default we build the uSockets.a static library default: - rm -f *.o - $(CC) $(CFLAGS) -flto -O3 -c src/*.c src/eventing/*.c src/crypto/*.c -# For now we do rely on C++17 for OpenSSL support but we will be porting this work to C11 + $(CC) $(CFLAGS) -fPIC -c src/*.c src/eventing/*.c src/crypto/*.c ifeq ($(WITH_OPENSSL),1) - $(CXX) $(CXXFLAGS) -std=c++17 -flto -O3 -c src/crypto/*.cpp + $(CXX) $(CXXFLAGS) -fPIC -std=c++17 -c src/crypto/*.cpp endif - $(AR) rvs uSockets.a *.o - -# Builds all examples -.PHONY: examples -examples: default - for f in examples/*.c; do $(CC) -flto -O3 $(CFLAGS) -o $$(basename "$$f" ".c") "$$f" $(LDFLAGS); done - -swift_examples: - swiftc -O -I . examples/swift_http_server/main.swift uSockets.a -o swift_http_server + $(AR) rvs libusockets.a *.o + $(CC) -shared -fPIC -Wl,-soname,$(LIBTARGET) $(CFLAGS) -o $(LIBTARGET) *.o $(LIBS) $(LDFLAGS) + sed -e "s:@PREFIX@:$(prefix):" -e "s:@REQUIRES@:$(REQUIRES):" \ + -e "s:@LIB@:$(LIB):" -e "s:@VERSION@:$(VERSION):" libusockets.pc.in > libusockets.pc + +install: + install -d "$(DESTDIR)$(libdir)/pkgconfig" \ + "$(DESTDIR)$(includedir)/internal/eventing" \ + "$(DESTDIR)$(includedir)/internal/networking" + install -m 644 src/*.h "$(DESTDIR)$(includedir)/" + install -m 644 src/internal/*.h "$(DESTDIR)$(includedir)/internal/" + install -m 644 src/internal/eventing/*.h "$(DESTDIR)$(includedir)/internal/eventing/" + install -m 644 src/internal/networking/*.h "$(DESTDIR)$(includedir)/internal/networking/" + install -m 755 $(LIBTARGET) "$(DESTDIR)$(libdir)" + ln -sf $(LIBTARGET) "$(DESTDIR)$(libdir)/libusockets.so" + install -m 755 libusockets.a "$(DESTDIR)$(libdir)/" + install -m 644 libusockets.pc "$(DESTDIR)$(libdir)/pkgconfig/" clean: rm -f *.o rm -f *.a + rm -f *.so rm -rf .certs + rm -f libusockets.pc + +.PHONY: diff --git a/libusockets.pc.in b/libusockets.pc.in new file mode 100644 index 0000000..b63637b --- /dev/null +++ b/libusockets.pc.in @@ -0,0 +1,13 @@ +prefix=@PREFIX@ +exec_prefix=${prefix} +libdir=${exec_prefix}/@LIB@ +includedir=${prefix}/include + +Name: uSockets +Version: @VERSION@ +Description: eventing, networking and crypto for async applications. +URL: https://github.com/uNetworking/uSockets + +Cflags: -I${includedir} +Libs: -L${libdir} -lusockets +Requires.private: @REQUIRES@